diff --git a/include/Caps b/include/Caps
index 120ae35..cd077b9 100644
--- a/include/Caps
+++ b/include/Caps
@@ -1,5 +1,6 @@
 ##############################################################################
-# Copyright (c) 1998-2011,2015 Free Software Foundation, Inc.                #
+# Copyright 2019-2023,2024 Thomas E. Dickey                                  #
+# Copyright 1998-2015,2016 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 "Software"), #
@@ -29,12 +30,12 @@
 # Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995
 #    and: Eric S. Raymond <esr@snark.thyrsus.com>
 #
-# $Id: Caps,v 1.39 2015/04/26 15:25:55 tom Exp $
+# $Id: Caps,v 1.56 2024/04/20 21:05:02 tom Exp $
 #
 # This is the master termcap/terminfo capability table.
 #
 # This table is used to generate initializers for tables that drive tic,
-# infocmp, and the library compilation code used to support the termcap 
+# infocmp, and the library compilation code used to support the termcap
 # compatibility hack.  It is also used to generate the tabular portion of the
 # terminfo(5) man page; lines beginning with `#%' are passed through to become
 # the terminfo table.
@@ -47,7 +48,7 @@
 #
 # Column 1: terminfo variable name
 # Column 2: terminfo capability name
-# Column 3: capability type (boolean, numeric, or string)
+# Column 3: capability type (Boolean, numeric, or string)
 # Column 4: termcap capability name
 # Column 5: KEY_xxx name, if any, `-' otherwise
 # Column 6: value for KEY_xxx name, if any, `-' otherwise
@@ -57,7 +58,7 @@
 #
 # The codes following [Y-] in column 7 describe the versions of termcap which
 # use the given capability.  This information is not used by the curses library
-# proper; rather, it's there to help the terminfo maintainer avoid emitting
+# proper; rather, it is there to help the terminfo maintainer avoid emitting
 # termcap entry translations that are more than 1023 bytes long (and tank a
 # lot of old termcap-using programs).  The codes read as follows:
 #	B = mentioned in the BSD man page for 4.4BSD curses
@@ -97,8 +98,8 @@
 # 3. List it in the standard table.  You almost certainly do *not* want
 # to do this -- the capabilities in that one, and their order, have been
 # carefully chosen to be SVr4-binary-compatible when they're written out
-# as a terminfo object, and breaking this would be bad.  It's up to the ncurses
-# library what to do with the terminfo data after it's read in.
+# as a terminfo object, and breaking this would be bad.  It is up to the ncurses
+# library what to do with the terminfo data after it is read in.
 #
 # 4. List it in the aliases table with an IGNORE target field.  If you
 # do this, the capability will be ignored on input (though the user will
@@ -107,7 +108,7 @@
 # 5. List it in the extensions table. If you do this, the compiler will
 # silently accept the capability, but the curses library proper will never
 # see it (because it won't be written out as part of the terminfo object
-# format).  It's up to you what you have the compiler do with it.
+# format).  It is up to you what you have the compiler do with it.
 #
 # There are two opposite reasons to choose option 5.  One is when you want
 # to eat the capability silently and discard it when doing translations
@@ -119,14 +120,14 @@
 # You'll need to write custom code, probably in postprocess_termcap() or
 # postprocess_terminfo(), to handle the translation.
 #
-# CONTROLLING ENTRY LENGTH 
+# CONTROLLING ENTRY LENGTH
 #
 # Notes on specific elisions made to fit translations within 1023 bytes:
 #
 # Machines with IBM PC-like keyboards want to be able to define the following
 # keys: key_npage, key_ppage, key_home, key_ll (which is used for in termcap-
 # only environments for End or Home-Down), key_dc, and key_ic.  This is also
-# the set of keys the `joe' editor will be upset if it can't see.  So don't 
+# the set of keys the `joe' editor will be upset if it can't see.  So don't
 # trim those out of the set to be translated to termcap, or various users of
 # the termcap file will become irate.
 #
@@ -147,68 +148,108 @@
 #
 # It would be nice to keep f11 and f12 for Emacs use, but a couple of termcap
 # translations go back over critical if we do this.  As 4.4BSD curses fades
-# into history and GNU termcap's application base shrinks towards being GNU 
+# into history and GNU termcap's application base shrinks towards being GNU
 # Emacs only, we'll probably elide out some BSD-only capabilities in order
 # to buy space for non-essentials Emacs is still using.  Capabilities high
 # on that hit list: rc, sc, uc.
 #
+# FORMATTING THE TABLES
+#
+# We manually specify a (minimum) column width for the capability name
+# and terminfo code columns in the tables to achieve a consistent
+# arrangement; as used here, tbl(1) cannot know the width required by
+# one table's data while formatting another's.
+#
+# The longest capability names (C variables) are
+# "enter_near_letter_quality" and "bit_image_carriage_return" (tied at
+# 25n), and the longest terminfo code is "setcolor" (8n).
+#
+# The tables are a tight fit on traditional man(7) implementations that
+# use a line length of 65n, and the "Description" column has little room
+# within which the formatter can make breaking or adjustment decisions.
+# Words like "micro_..._address" and "parm_..._micro" don't break.
+# Reducing the inter-column gaps to 2 ens gives them enough room.  --GBR
+#
 #############################################################################
 #
 # STANDARD CAPABILITIES
 #
-#%The following is a complete table of the capabilities included in a
-#%terminfo description block and available to terminfo-using code.  In each
-#%line of the table,
-#%
-#%The \fBvariable\fR is the name by which the programmer (at the terminfo level)
-#%accesses the capability.
-#%
-#%The \fBcapname\fR is the short name used in the text of the database,
-#%and is used by a person updating the database.
-#%Whenever possible, capnames are chosen to be the same as or similar to
-#%the ANSI X3.64-1979 standard (now superseded by ECMA-48, which uses 
-#%identical or very similar names).  Semantics are also intended to match
-#%those of the specification.
-#%
-#%The termcap code is the old
-#%.B termcap
-#%capability name (some capabilities are new, and have names which termcap
-#%did not originate).
-#%.P
-#%Capability names have no hard length limit, but an informal limit of 5
-#%characters has been adopted to keep them short and to allow the tabs in
-#%the source file
-#%.B Caps
+#%Tables of capabilities
+#%.I \%ncurses
+#%recognizes in a
+#%.I \%term\%info
+#%terminal type description and available to
+#%.IR \%term\%info -using
+#%code follow.
+#%.bP
+#%The capability name identifies the symbol by which the programmer
+#%using the
+#%.I \%term\%info
+#%API accesses the capability.
+#%.bP
+#%The TI
+#%.RI ( \%term\%info )
+#%code is the short name used by a person composing or updating a
+#%terminal type entry.
+#%.IP
+#%Whenever possible,
+#%these codes are the same as or similar to those of the ANSI X3.64-1979
+#%standard
+#%(now superseded by ECMA-48,
+#%which uses identical or very similar names).
+#%Semantics are also intended to match those of the specification.
+#%.IP
+#%.I \%term\%info
+#%codes have no hard length limit,
+#%but
+#%.I \%ncurses
+#%maintains an informal one of 5 characters to keep them short and to
+#%allow the tabs in the source file
+#%.I Caps
 #%to line up nicely.
-#%
-#%Finally, the description field attempts to convey the semantics of the
-#%capability.  You may find some codes in the description field:
-#%.TP
-#%(P)
-#%indicates that padding may be specified
-#%.TP
-#%#[1-9]
-#%in the description field indicates that the string is passed through tparm with
-#%parms as given (#\fIi\fP).
-#%.TP
-#%(P*)
-#%indicates that padding may vary in proportion to the number of
-#%lines affected
-#%.TP
-#%(#\d\fIi\fP\u)
-#%indicates the \fIi\fP\uth\d parameter.
-#%
+#%(Some standard codes exceed this limit regardless.)
+#%.bP
+#%The TC
+#%.RI ( termcap )
+#%code is that used by the corresponding API of
+#%.IR \%ncurses .
+#%(Some capabilities are new,
+#%and have names that BSD
+#%.I termcap
+#%did not originate.)
+#%.bP
+#%The description field attempts to convey the capability's semantics.
 #%.PP
-#% These are the boolean capabilities:
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBBooleans	name	Code\fR
+#%The description field employs a handful of notations.
+#%.TP
+#%.B (P)
+#%indicates that padding may be specified.
+#%.TP
+#%.B (P*)
+#%indicates that padding may vary in proportion to the number of output
+#%lines affected.
+#%.TP
+#%.BI # i
+#%indicates the
+#%.IR i th
+#%parameter of a string capability;
+#%the programmer should pass the string to \fB\%tparm\fP(3X) with the
+#%parameters listed.
+#%.IP
+#%If the description lists no parameters,
+#%passing the string to \fB\%tparm\fP(3X) may produce unexpected
+#%behavior,
+#%for instance if the string contains percent signs.
+#%.
+#%.PP
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%Boolean Capability Name	TI	TC	Description
+#%_
 auto_left_margin		bw	bool	bw	-	-	YB-G-	cub1 wraps from column 0 to last column
 auto_right_margin		am	bool	am	-	-	YBCGE	terminal has automatic margins
 no_esc_ctlc			xsb	bool	xb	-	-	YBCG-	beehive (f1=escape, f2=ctrl C)
@@ -247,18 +288,16 @@
 cpi_changes_res			cpix	bool	YF	-	-	-----	changing character pitch changes resolution
 lpi_changes_res			lpix	bool	YG	-	-	-----	changing line pitch changes resolution
 #%.TE
-#%.ad
-#%
-#%These are the numeric capabilities:
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBNumeric	name	Code\fR
+#%.PP
+#%.
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%Numeric Capability Name	TI	TC	Description
+#%_
 columns				cols	num	co	-	-	YBCGE	number of columns in a line
 init_tabs			it	num	it	-	-	YB-G-	tabs initially every # spaces
 lines				lines	num	li	-	-	YBCGE	number of lines on screen or page
@@ -277,20 +316,21 @@
 max_pairs			pairs	num	pa	-	-	-----	maximum number of color-pairs on the screen
 no_color_video			ncv	num	NC	-	-	-----	video attributes that cannot be used with colors
 #%.TE
-#%.ad
-#%
+#%.PP
+#%.
 #%The following numeric capabilities are present in the SVr4.0 term structure,
-#%but are not yet documented in the man page.  They came in with SVr4's
-#%printer support.
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBNumeric	name	Code\fR
+#%but are not yet documented in the man page.
+#%They came in with SVr4's printer support.
+#%.
+#%.PP
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%Numeric Capability Name	TI	TC	Description
+#%_
 buffer_capacity			bufsz	num	Ya	-	-	-----	numbers of bytes buffered before printing
 dot_vert_spacing		spinv	num	Yb	-	-	-----	spacing of pins vertically in pins per inch
 dot_horz_spacing		spinh	num	Yc	-	-	-----	spacing of dots horizontally in dots per inch
@@ -309,18 +349,16 @@
 bit_image_entwining		bitwin	num	Yo	-	-	-----	number of passes for each bit-image row
 bit_image_type			bitype	num	Yp	-	-	-----	type of bit-image device
 #%.TE
-#%.ad
-#%
-#%These are the string capabilities:
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBString	name	Code\fR
+#%.PP
+#%.
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%String Capability Name	TI	TC	Description
+#%_
 back_tab			cbt	str	bt	-		-	YBCGE	back tab (P)
 bell				bel	str	bl	-		-	YB-GE	audible signal (bell) (P)
 carriage_return			cr	str	cr	-		-	YBCGE	carriage return (P*) (P*)
@@ -383,6 +421,10 @@
 key_dc				kdch1	str	kD	KEY_DC		0512	YB-G-	delete-character key
 key_dl				kdl1	str	kL	KEY_DL		0510	-B-G-*	delete-line key
 key_down			kcud1	str	kd	KEY_DOWN	0402	YBCGE	down-arrow key
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 key_eic				krmir	str	kM	KEY_EIC		0514	-B-G-*	sent by rmir or smir in insert mode
 key_eol				kel	str	kE	KEY_EOL		0517	-B-G-*	clear-to-end-of-line key
 key_eos				ked	str	kS	KEY_EOS		0516	-B-G-*	clear-to-end-of-screen key
@@ -409,8 +451,8 @@
 key_sr				kri	str	kR	KEY_SR		0521	-B-G-*	scroll-backward key
 key_stab			khts	str	kT	KEY_STAB	0524	-B-G-*	set-tab key
 key_up				kcuu1	str	ku	KEY_UP		0403	YBCGE	up-arrow key
-keypad_local			rmkx	str	ke	-		-	YBCGE	leave 'keyboard_transmit' mode
-keypad_xmit			smkx	str	ks	-		-	YBCGE	enter 'keyboard_transmit' mode
+keypad_local			rmkx	str	ke	-		-	YBCGE	leave keyboard transmit mode
+keypad_xmit			smkx	str	ks	-		-	YBCGE	enter keyboard transmit mode
 lab_f0				lf0	str	l0	-		-	-B-G-*	label on function key f0 if not f0
 lab_f1				lf1	str	l1	-		-	-B-G-*	label on function key f1 if not f1
 lab_f10				lf10	str	la	-		-	-----	label on function key f10 if not f10
@@ -445,6 +487,10 @@
 repeat_char			rep	str	rp	-		-	YB-GE	repeat char #1 #2 times (P*)
 reset_1string			rs1	str	r1	-		-	-B---	reset string
 reset_2string			rs2	str	r2	-		-	-B---	reset string
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 reset_3string			rs3	str	r3	-		-	-B---	reset string
 reset_file			rf	str	rf	-		-	-B---	name of reset file
 restore_cursor			rc	str	rc	-		-	YBCG-	restore cursor to position of last save_cursor
@@ -511,6 +557,10 @@
 key_save			ksav	str	&6	KEY_SAVE	0571	-----	save key
 key_suspend			kspd	str	&7	KEY_SUSPEND	0627	-----	suspend key
 key_undo			kund	str	&8	KEY_UNDO	0630	-----	undo key
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 key_sbeg			kBEG	str	&9	KEY_SBEG	0572	-----	shifted begin key
 key_scancel			kCAN	str	&0	KEY_SCANCEL	0573	-----	shifted cancel key
 key_scommand			kCMD	str	*1	KEY_SCOMMAND	0574	-----	shifted command key
@@ -573,6 +623,10 @@
 key_f40				kf40	str	FU	KEY_F(40)	-	----E	F40 function key
 key_f41				kf41	str	FV	KEY_F(41)	-	----E	F41 function key
 key_f42				kf42	str	FW	KEY_F(42)	-	----E	F42 function key
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 key_f43				kf43	str	FX	KEY_F(43)	-	----E	F43 function key
 key_f44				kf44	str	FY	KEY_F(44)	-	----E	F44 function key
 key_f45				kf45	str	FZ	KEY_F(45)	-	----E	F45 function key
@@ -596,7 +650,7 @@
 key_f63				kf63	str	Fr	KEY_F(63)	-	----E	F63 function key
 clr_bol				el1	str	cb	-		-	-----	Clear to beginning of line
 clear_margins			mgc	str	MC	-		-	-----	clear right and left soft margins
-set_left_margin			smgl	str	ML	-		-	-----	set left soft margin at current column.	 See smgl. (ML is not in BSD termcap).
+set_left_margin			smgl	str	ML	-		-	-----	set left soft margin at current column (not in BSD \fItermcap\fP)
 set_right_margin		smgr	str	MR	-		-	-----	set right soft margin at current column
 label_format			fln	str	Lf	-		-	-----	label format
 set_clock			sclk	str	SC	-		-	-----	set clock, #1 hrs #2 mins #3 secs
@@ -641,6 +695,10 @@
 change_res_vert			cvr	str	ZD	-		-	-----	Change vertical resolution to #1
 define_char			defc	str	ZE	-		-	-----	Define a character #1, #2 dots wide, descender #3
 enter_doublewide_mode		swidm	str	ZF	-		-	-----	Enter double-wide mode
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 enter_draft_quality		sdrfq	str	ZG	-		-	-----	Enter draft-quality mode
 enter_italics_mode		sitm	str	ZH	-		-	-----	Enter italic mode
 enter_leftward_mode		slm	str	ZI	-		-	-----	Start leftward carriage motion
@@ -686,19 +744,20 @@
 these_cause_cr			docr	str	Zw	-		-	-----	Printing any of these characters causes CR
 zero_motion			zerom	str	Zx	-		-	-----	No motion for subsequent character
 #%.TE
-#%.ad
-#%
+#%.PP
+#%.
 #%The following string capabilities are present in the SVr4.0 term structure,
 #%but were originally not documented in the man page.
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw18.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBString	name	Code\fR
+#%.
+#%.PP
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%String Capability Name	TI	TC	Description
+#%_
 char_set_names			csnm	str	Zy	-		-	-----	Produce #1'th item from list of character set names
 key_mouse			kmous	str	Km	KEY_MOUSE	0631	-----	Mouse event has occurred
 mouse_info			minfo	str	Mi	-		-	-----	Mouse status information
@@ -707,7 +766,7 @@
 set_a_foreground		setaf	str	AF	-		-	-----	Set foreground color to #1, using ANSI escape
 set_a_background		setab	str	AB	-		-	-----	Set background color to #1, using ANSI escape
 pkey_plab			pfxl	str	xl	-		-	-----	Program function key #1 to type string #2 and show string #3
-device_type			devt	str	dv	-		-	-----	Indicate language/codeset support
+device_type			devt	str	dv	-		-	-----	Indicate language, codeset support
 code_set_init			csin	str	ci	-		-	-----	Init sequence for multiple codesets
 set0_des_seq			s0ds	str	s0	-		-	-----	Shift to codeset 0 (EUC set 0, ASCII)
 set1_des_seq			s1ds	str	s1	-		-	-----	Shift to codeset 1
@@ -735,9 +794,8 @@
 scancode_escape			scesc	str	S7	-		-	-----	Escape for scancode emulation
 alt_scancode_esc		scesa	str	S8	-		-	-----	Alternate escape for scancode emulation
 #%.TE
-#%.ad
-#%
-#%.in .8i
+#%.PP
+#%.
 #%The XSI Curses standard added these hardcopy capabilities.
 #%They were used in some post-4.1 versions of System V curses,
 #%e.g., Solaris 2.5 and IRIX 6.x.
@@ -746,15 +804,16 @@
 #%If your compiled terminfo entries use these,
 #%they may not be binary-compatible with System V terminfo
 #%entries after SVr4.1; beware!
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBString	name	Code\fR
+#%.
+#%.PP
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%String Capability Name	TI	TC	Description
+#%_
 enter_horizontal_hl_mode	ehhlm	str	Xh	-		-	-----	Enter horizontal highlight mode
 enter_left_hl_mode		elhlm	str	Xl	-		-	-----	Enter left highlight mode
 enter_low_hl_mode		elohlm	str	Xo	-		-	-----	Enter low highlight mode
@@ -764,7 +823,6 @@
 set_a_attributes		sgr1	str	sA	-		-	-----	Define second set of video attributes #1-#6
 set_pglen_inch			slength	str	YI	-		-	-----	Set page length to #1 hundredth of an inch (some implementations use sL for termcap).
 #%.TE
-#%.ad
 #
 # The magic token below tells the tic compiler-generator code that all the caps
 # past it should be ignored (not written out) when dumping terminfo objects. It
@@ -826,7 +884,7 @@
 # GNU termcap *does* include the following extended capability,  Only the
 # now-obsolete Ann Arbor terminals used it.
 #
-# gnu_change_scroll_region	OTcS	str	cS	-		-	---GE	alternate set scrolling region 
+# gnu_change_scroll_region	OTcS	str	cS	-		-	---GE	alternate set scrolling region
 #
 # The following comments describe capnames so ancient that I believe no
 # software uses them any longer.  Some of these have to go because they
@@ -843,9 +901,9 @@
 # comma-separated list of capabilities for which there are corresponding keys.
 # The `kn' code is accepted but ignored.
 #
-# The `ma' capability seems to have been designed to map between the rogue(2)
-# motion keys (including jkhl) and characters emitted by arrow keys on some
-# primitive pre-ANSI terminals.  It's so obsolete it's fossilized...
+# The `ma' capability was a 4.0BSD feature used by vi version 2.
+# It consists of pairs of characters corresponding to kl, kr, ku, kd, and kh.
+# Besides being obsolete, that interpretation conflicts with max_attributes.
 #
 # Here is a description of memory_lock_above and memory_unlock:
 # "You can 'freeze' data on the screen by turning on Memory Lock in a line of
@@ -871,14 +929,14 @@
 # vertical_tab_delay		OTdV	num	dV	-		-	-B---	padding required for ^V
 number_of_function_keys		OTkn	num	kn	-		-	-B-G-	count of function keys
 other_non_function_keys		OTko	str	ko	-		-	-B-G-	list of self-mapped keycaps
-arrow_key_map			OTma	str	ma	-		-	YBC--	map arrow keys rogue(1) motion keys
+arrow_key_map			OTma	str	ma	-		-	YBC--	map motion-keys for vi version 2
 # memory_lock_above		OTml	str	ml	-		-	-B---	lock visible screen memory above the current line
 # memory_unlock			OTmu	str	mu	-		-	-B---	unlock visible screen memory above the current line
 has_hardware_tabs		OTpt	bool	pt	-		-	YB---	has 8-char tabs invoked with ^I
 return_does_clr_eol		OTxr	bool	xr	-		-	YB---	return clears the line
 # tek_4025_insert_line		OTxx	bool	xx	-		-	-BC--	Tektronix 4025 insert-line glitch
 #
-# mytinfo described this as a termcap capability, but it's not listed in the
+# mytinfo described this as a termcap capability, but it is not listed in the
 # 4.4BSD man pages, and not found in the 4.4BSD termcap file.  The ncurses
 # package, like System V, behaves as though it is always true.
 #
@@ -887,7 +945,7 @@
 # University of Waterloo termcap extensions (as described in mytinfo).
 # The `xl' termcap file clashes with a terminfo name; this ambiguity cannot
 # be resolved by a type check.  The descriptions are guesses from what was
-# in the mytinfo tables. 
+# in the mytinfo tables.
 #
 # key_interrupt_char		OTki	str	ki	-		-	-----	string set by interrupt key (?)
 # key_kill_char			OTkk	str	kk	-		-	-----	string set by kill key (?)
@@ -936,7 +994,7 @@
 # Gv	186 \272 M-:	double vertical line
 #
 # The compiler will translate the single-line caps and discard the others
-# (via IGNORE aliases further down).  We don't want to do normal pad 
+# (via IGNORE aliases further down).  We don't want to do normal pad
 # translation on these, they're often single-character printable ASCII
 # strings that happen to be numerics.  There's awk code in parametrized.sh
 # that detects the acs_ prefix and uses it to suppress pad translation.
@@ -958,303 +1016,9 @@
 #
 # TERMINFO EXTENSION CAPABILITIES
 #
-# This section is almost all comments.  What it's mainly for is to describe
-# what capabilities need to be squeezed out to get down to the XSI Curses
-# standard set.  They are flagged with K.
-#
-# HP extensions
-#
-# These extensions follow ptr_non (replacing everything after it) in HP
-# terminfo files.  Except for memory_lock and memory_unlock, they are
-# functionally identical to SVr4 extensions, but they make the binary format
-# different.  Grrr....
+# (see Caps-ncurses for the complete set of comments)
 #
 memory_lock			meml	str	ml	-		-	----K	lock memory above cursor
 memory_unlock			memu	str	mu	-		-	----K	unlock memory
-#plab_norm			pln	str	pn	-		-	-----	program label #1 to show string #2
-#label_on			smln	str	LO	-		-	-----	turn on soft labels
-#label_off			rmln	str	LF	-		-	-----	turn off soft labels
-#key_f11			kf11	str	F1	-		-	-----	F11 function key
-#key_f12			kf12	str	F2	-		-	-----	F12 function key
-#key_f13			kf13	str	F3	-		-	-----	F13 function key
-#key_f14			kf14	str	F4	-		-	-----	F14 function key
-#key_f15			kf15	str	F5	-		-	-----	F15 function key
-#key_f16			kf16	str	F6	-		-	-----	F16 function key
-#key_f17			kf17	str	F7	-		-	-----	F17 function key
-#key_f18			kf18	str	F8	-		-	-----	F18 function key
-#key_f19			kf19	str	F9	-		-	-----	F19 function key
-#key_f20			kf20	str	FA	-		-	-----	F20 function key
-#key_f21			kf21	str	FB	-		-	-----	F21 function key
-#key_f22			kf22	str	FC	-		-	-----	F22 function key
-#key_f23			kf23	str	FD	-		-	-----	F23 function key
-#key_f24			kf24	str	FE	-		-	-----	F24 function key
-#key_f25			kf25	str	FF	-		-	-----	F25 function key
-#key_f26			kf26	str	FG	-		-	-----	F26 function key
-#key_f27			kf27	str	FH	-		-	-----	F27 function key
-#key_f28			kf28	str	FI	-		-	-----	F28 function key
-#key_f29			kf29	str	FJ	-		-	-----	F29 function key
-#key_f30			kf30	str	FK	-		-	-----	F30 function key
-#key_f31			kf31	str	FL	-		-	-----	F31 function key
-#key_f32			kf32	str	FM	-		-	-----	F32 function key
-#key_f33			kf33	str	FN	-		-	-----	F33 function key
-#key_f34			kf34	str	FO	-		-	-----	F34 function key
-#key_f35			kf35	str	FP	-		-	-----	F35 function key
-#key_f36			kf36	str	FQ	-		-	-----	F36 function key
-#key_f37			kf37	str	FR	-		-	-----	F37 function key
-#key_f38			kf38	str	FS	-		-	-----	F38 function key
-#key_f39			kf39	str	FT	-		-	-----	F39 function key
-#key_f40			kf40	str	FU	-		-	-----	F40 function key
-#key_f41			kf41	str	FV	-		-	-----	F41 function key
-#key_f42			kf42	str	FW	-		-	-----	F42 function key
-#key_f43			kf43	str	FX	-		-	-----	F43 function key
-#key_f44			kf44	str	FY	-		-	-----	F44 function key
-#key_f45			kf45	str	FZ	-		-	-----	F45 function key
-#key_f46			kf46	str	Fa	-		-	-----	F46 function key
-#key_f47			kf47	str	Fb	-		-	-----	F47 function key
-#key_f48			kf48	str	Fc	-		-	-----	F48 function key
-#key_f49			kf49	str	Fd	-		-	-----	F49 function key
-#key_f50			kf50	str	Fe	-		-	-----	F50 function key
-#key_f51			kf51	str	Ff	-		-	-----	F51 function key
-#key_f52			kf52	str	Fg	-		-	-----	F52 function key
-#key_f53			kf53	str	Fh	-		-	-----	F53 function key
-#key_f54			kf54	str	Fi	-		-	-----	F54 function key
-#key_f55			kf55	str	Fj	-		-	-----	F55 function key
-#key_f56			kf56	str	Fk	-		-	-----	F56 function key
-#key_f57			kf57	str	Fl	-		-	-----	F57 function key
-#key_f58			kf58	str	Fm	-		-	-----	F58 function key
-#key_f59			kf59	str	Fn	-		-	-----	F59 function key
-#key_f60			kf60	str	Fo	-		-	-----	F60 function key
-#key_f61			kf61	str	Fp	-		-	-----	F61 function key
-#key_f62			kf62	str	Fq	-		-	-----	F62 function key
-#key_f63			kf63	str	Fr	-		-	-----	F63 function key
-#
-# IBM extensions
-#
-# These extensions follow ptr_non (replacing everything after it) in IBM
-# terminfo files.
-#
-# The places in the box[12] capabilities correspond to acsc characters, here is
-# the mapping:
-#
-#	box1[0]  = ACS_ULCORNER
-#	box1[1]  = ACS_HLINE	
-#	box1[2]  = ACS_URCORNER
-#	box1[3]  = ACS_VLINE
-#	box1[4]  = ACS_LRCORNER
-#	box1[5]  = ACS_LLCORNER
-#	box1[6]  = ACS_TTEE
-#	box1[7]  = ACS_RTEE
-#	box1[8]  = ACS_BTEE
-#	box1[9]  = ACS_LTEE
-#	box1[10] = ACS_PLUS
-#
-# The box2 characters are the double-line versions of these forms graphics.
-#
 box_chars_1			box1	str	bx	-		-	----K	box characters primary set
-#box_chars_2			box2	str	by	-		-	----K	box characters secondary set
-#box_attr_1			batt1	str	Bx	-		-	----K	attributes for box1
-#box_attr_2			batt2	str	By	-		-	----K	attributes for box2
-#color_bg_0			colb0	str	d0	-		-	----K	background color 0
-#color_bg_1			colb1	str	d1	-		-	----K	background color 1
-#color_bg_2			colb2	str	d2	-		-	----K	background color 2
-#color_bg_3			colb3	str	d3	-		-	----K	background color 3
-#color_bg_4			colb4	str	d4	-		-	----K	background color 4
-#color_bg_5			colb5	str	d5	-		-	----K	background color 5
-#color_bg_6			colb6	str	d6	-		-	----K	background color 6
-#color_bg_7			colb7	str	d7	-		-	----K	background color 7
-#color_fg_0			colf0	str	c0	-		-	----K	foreground color 0
-#color_fg_1			colf1	str	c1	-		-	----K	foreground color 1
-#color_fg_2			colf2	str	c2	-		-	----K	foreground color 2
-#color_fg_3			colf3	str	c3	-		-	----K	foreground color 3
-#color_fg_4			colf4	str	c4	-		-	----K	foreground color 4
-#color_fg_5			colf5	str	c5	-		-	----K	foreground color 5
-#color_fg_6			colf6	str	c6	-		-	----K	foreground color 6
-#color_fg_7			colf7	str	c7	-		-	----K	foreground color 7
-#font_0				font0	str	f0	-		-	-----	select font 0
-#font_1				font1	str	f1	-		-	-----	select font 1
-#font_2				font2	str	f2	-		-	-----	select font 2
-#font_3				font3	str	f3	-		-	-----	select font 3
-#font_4				font4	str	f4	-		-	----K	select font 4
-#font_5				font5	str	f5	-		-	----K	select font 5
-#font_6				font6	str	f6	-		-	----K	select font 6
-#font_7				font7	str	f7	-		-	----K	select font 7
-#key_back_tab			kbtab	str	k0	-		-	-----	backtab key
-#key_do				kdo	str	ki	-		-	----K	do request key
-#key_command			kcmd	str	kd	-		-	----K	command-request key
-#key_command_pane		kcpn	str	kW	-		-	----K	command-pane key
-#key_end			kend	str	kw	-		-	-----	end key
-#key_help			khlp	str	kq	-		-	-----	help key
-#key_newline			knl	str	nl	-		-	----K	newline key
-#key_next_pane			knpn	str	kv	-		-	----K	next-pane key
-#key_prev_cmd			kppn	str	kp	-		-	----K	previous-command key
-#key_prev_pane			kppn	str	kV	-		-	----K	previous-pane key
-#key_quit			kquit	str	kQ	-		-	----K	quit key
-#key_select			ksel	str	kU	-		-	-----	select key
-#key_scroll_left		kscl	str	kz	-		-	----K	scroll left
-#key_scroll_right		kscr	str	kZ	-		-	----K	scroll right
-#key_tab			ktab	str	ko	-		-	----K	tab key
-#key_smap_in1			kmpf1	str	Kv	-		-	----K	special mapped key 1 input
-#key_smap_out1			kmpt1	str	KV	-		-	----K	special mapped key 1 output
-#key_smap_in2			kmpf2	str	Kw	-		-	----K	special mapped key 2 input
-#key_smap_out2			kmpt2	str	KW	-		-	----K	special mapped key 2 output
-#key_smap_in3			kmpf3	str	Kx	-		-	----K	special mapped key 3 input
-#key_smap_out3			kmpt3	str	KX	-		-	----K	special mapped key 3 output
-#key_smap_in4			kmpf4	str	Ky	-		-	----K	special mapped key 4 input
-#key_smap_out4			kmpt4	str	KY	-		-	----K	special mapped key 4 output
-#key_smap_in5			kmpf5	str	Kz	-		-	----K	special mapped key 5 input
-#key_smap_out5			kmpt5	str	KZ	-		-	----K	special mapped key 5 output
-#appl_defined_str		apstr	str	za	-		-	----K	application-defined string
-# The key_smap_in[6789] and key_smap_out[6789] capabilities aren't described in
-# the IBM manual pages, so the cap name strings are guesses.  The terminfo
-# names are almost certainly right, the termcap ones almost certainly wrong.
-#key_smap_in6			kmpf6	str	k!	-		-	----K	special mapped key 6 input
-#key_smap_out6			kmpt6	str	K@	-		-	----K	special mapped key 6 output
-#key_smap_in7			kmpf7	str	k#	-		-	----K	special mapped key 7 input
-#key_smap_out7			kmpt7	str	K$	-		-	----K	special mapped key 7 output
-#key_smap_in8			kmpf8	str	k%	-		-	----K	special mapped key 8 input
-#key_smap_out8			kmpt8	str	K^	-		-	----K	special mapped key 8 output
-#key_smap_in9			kmpf9	str	k&	-		-	----K	special mapped key 9 input
-#key_smap_out9			kmpt9	str	K*	-		-	----K	special mapped key 9 output
-# Undocumented capabilities end here
-#key_sf1			ksf1	str	S1	-		-	----K	special function key 1
-#key_sf2			ksf2	str	S2	-		-	----K	special function key 2
-#key_sf3			ksf3	str	S3	-		-	----K	special function key 3
-#key_sf4			ksf4	str	S4	-		-	----K	special function key 4
-#key_sf5			ksf5	str	S5	-		-	----K	special function key 5
-#key_sf6			ksf6	str	S6	-		-	----K	special function key 6
-#key_sf7			ksf7	str	S7	-		-	----K	special function key 7
-#key_sf8			ksf8	str	S8	-		-	----K	special function key 8
-#key_sf9			ksf9	str	S9	-		-	----K	special function key 9
-#key_sf10			ksf10	str	SA	-		-	----K	special function key 10
-# AIX version 3 documents different codes for F11, F12 and does not mention
-# F13-F64.  AIX version 4 uses the same naming for F0-F63 as above.
-#key_f11			kf11	str	k<	-		-	-----	function key 11
-#key_f12			kf12	str	k>	-		-	-----	function key 12
-# Undocumented capabilities end here.
-#key_action			kact	str	kJ	-		-	----K	sent by action key
-# The IBM docs say these capabilities are for table-drawing, and are
-# valid only for aixterm descriptions.
-#enter_topline_mode		topl	str	tp	-		-	----K	start top-line mode
-#enter_bottom_mode		btml	str	bm	-		-	----K	start bottom-line mode
-#enter_rvert_mode		rvert	str	rv	-		-	----K	start right-vertical mode
-#enter_lvert_mode		lvert	str	lv	-		-	----K	start left-vertical mode
-#
-#############################################################################
-#
-# ALIAS DECLARATIONS
-#
-# Here we set up aliases for translating extensions into standard terminfo.
-#
-#---------------------------------- Termcap aliases -------------------------
-#
-# BSD aliases:
-#
-# This is a common error in many termcap files.  We'll get notified during
-# translation when this (or any other alias) fires.
-#
-capalias	sb	sr	BSD	scroll text down
-#
-# AT&T extensions:
-#
-# The old AT&T 5410, 5420, 5425, pc6300plus, 610, and s4 entries used a set of
-# nonstandard capabilities.  Its signature is the KM capability, used to name
-# some sort of keymap file.  EE, BO, CI, CV, XS, DS, FL and FE are in this
-# set.  Comments in the original, and a little cross-checking with other AT&T
-# documentation, seem to establish the following mappings:
-#
-capalias	BO	mr	AT&T	enter_reverse_mode
-capalias	CI	vi	AT&T	cursor_invisible
-capalias	CV	ve	AT&T	cursor_normal
-capalias	DS	mh	AT&T	enter_dim_mode
-#capalias	EE	me	AT&T	exit_attribute_mode	
-capalias	FE	LF	AT&T	label_on
-capalias	FL	LO	AT&T	label_off
-capalias	XS	mk	AT&T	enter_secure_mode
-#
-# We comment out EE because the conflicting XENIX EE is more common in 
-# old entries.
-#
-# XENIX extensions:
-#
-# These are the ones we know how to translate directly:
-#
-capalias	EE	mh	XENIX	exit_attribute_mode	
-capalias	GE	ae	XENIX	exit_alt_charset_mode
-capalias	GS	as	XENIX	enter_alt_charset_mode
-capalias	CF	vi	XENIX	cursor_invis
-capalias	CO	ve	XENIX	cursor_normal
-capalias	EN	@7	XENIX	key_end
-capalias	HM	kh	XENIX	key_home
-capalias	LD	kL	XENIX	key_dl
-capalias	PD	kN	XENIX	key_npage
-capalias	PN	po	XENIX	prtr_off
-capalias	PS	pf	XENIX	prtr_on
-capalias	PU	kP	XENIX	key_ppage
-capalias	RT	@8	XENIX	kent
-capalias	UP	ku	XENIX	kcuu1
-capalias	G6	IGNORE	XENIX	double-ACS_ULCORNER
-capalias	G7	IGNORE	XENIX	double-ACS_LLCORNER
-capalias	G5	IGNORE	XENIX	double-ACS_URCORNER
-capalias	G8	IGNORE	XENIX	double-ACS_LRCORNER
-capalias	Gr	IGNORE	XENIX	double-ACS_LTEE
-capalias	Gr	IGNORE	XENIX	double-ACS_RTEE
-capalias	Gu	IGNORE	XENIX	double-ACS_BTEE
-capalias	Gd	IGNORE	XENIX	double ACS_TTEE
-capalias	Gh	IGNORE	XENIX	double-ACS_HLINE
-capalias	Gv	IGNORE	XENIX	double-ACS_VLINE
-capalias	Gc	IGNORE	XENIX	double-ACS_PLUS
-capalias	GG	IGNORE	XENIX	acs-glitch
-#
-# IBM extensions:
-#
-capalias	kq	%1	IBM	key_help
-#
-# Iris extensions:
-#
-capalias	HS	mh	IRIS	enter_dim_mode
-#
-# Tektronix extensions:
-#
-capalias	KA	k;	Tek	key_f10
-capalias	KB	F1	Tek	key_f11
-capalias	KC	F2	Tek	key_f12
-capalias	KD	F3	Tek	key_f13
-capalias	KE	F4	Tek	key_f14
-capalias	KF	F5	Tek	key_f15
-capalias	BC	Sb	Tek	set_background
-capalias	FC	Sf	Tek	set_foreground
-#
-# There are also the following:
-#
-#	XENIX	XENIX variable name	name clash with terminfo?
-#	-----	-------------------	-------------------------
-#	CL	key_char_left
-#	CR	key_char_right
-#	CW	key_change_window
-#	HP	??
-#	LF	key_linefeed 		label_off
-#	NU	key_next_unlocked_cell
-#	PL	??
-#	PR	??
-#	RC	key_recalc		remove_clock
-#	RF	key_toggle_ref		req_for_input
-#	WL	key_word_left
-#	WR	key_word_right
-#
-# If you know what any of the question-marked ones mean, please tell us.
-#
-#--------------------------------- Terminfo aliases ------------------------
-#
-# IBM extensions:
-#
-infoalias	font0	s0ds	IBM	set0_des_seq
-infoalias	font1	s1ds	IBM	set1_des_seq
-infoalias	font2	s2ds	IBM	set2_des_seq
-infoalias	font3	s3ds	IBM	set3_des_seq
-infoalias	kbtab	kcbt	IBM	key_backtab
-infoalias	ksel	kslt	IBM	key_select
-#
-# Some others are identical to SVr4/XPG4 capabilities, in particular:
-# kcmd, kend, khlp, and kf11...kf63.
-#
 #############################################################################
diff --git a/include/Caps-ncurses b/include/Caps-ncurses
new file mode 100644
index 0000000..f9a5da0
--- /dev/null
+++ b/include/Caps-ncurses
@@ -0,0 +1,478 @@
+##############################################################################
+# Copyright 2019-2022,2023 Thomas E. Dickey                                  #
+#                                                                            #
+# Permission is hereby granted, free of charge, to any person obtaining a    #
+# copy of this software and associated documentation files (the "Software"), #
+# to deal in the Software without restriction, including without limitation  #
+# the rights to use, copy, modify, merge, publish, distribute, distribute    #
+# with modifications, sublicense, and/or sell copies of the Software, and to #
+# permit persons to whom the Software is furnished to do so, subject to the  #
+# following conditions:                                                      #
+#                                                                            #
+# The above copyright notice and this permission notice shall be included in #
+# all copies or substantial portions of the Software.                        #
+#                                                                            #
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   #
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL    #
+# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER      #
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING    #
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER        #
+# DEALINGS IN THE SOFTWARE.                                                  #
+#                                                                            #
+# Except as contained in this notice, the name(s) of the above copyright     #
+# holders shall not be used in advertising or otherwise to promote the sale, #
+# use or other dealings in this Software without prior written               #
+# authorization.                                                             #
+##############################################################################
+#
+# Author: Thomas E. Dickey
+#
+# $Id: Caps-ncurses,v 1.15 2023/10/28 21:55:47 tom Exp $
+#
+#############################################################################
+#
+# TERMINFO EXTENSION CAPABILITIES
+#
+# This section is all comments (selected lines are copied/uncommented into
+# specific "Caps" files).  The section describes what capabilities need to be
+# squeezed out to get down to the XSI Curses standard set.  They are flagged
+# with K.
+#
+# HP extensions
+#
+# These extensions follow ptr_non (replacing everything after it) in HP
+# terminfo files.  Except for memory_lock and memory_unlock, they are
+# functionally identical to SVr4 extensions, but they make the binary format
+# different.  Grrr....
+#
+#memory_lock			meml	str	ml	-		-	----K	lock memory above cursor
+#memory_unlock			memu	str	mu	-		-	----K	unlock memory
+#plab_norm			pln	str	pn	-		-	-----	program label #1 to show string #2
+#label_on			smln	str	LO	-		-	-----	turn on soft labels
+#label_off			rmln	str	LF	-		-	-----	turn off soft labels
+#key_f11			kf11	str	F1	-		-	-----	F11 function key
+#key_f12			kf12	str	F2	-		-	-----	F12 function key
+#key_f13			kf13	str	F3	-		-	-----	F13 function key
+#key_f14			kf14	str	F4	-		-	-----	F14 function key
+#key_f15			kf15	str	F5	-		-	-----	F15 function key
+#key_f16			kf16	str	F6	-		-	-----	F16 function key
+#key_f17			kf17	str	F7	-		-	-----	F17 function key
+#key_f18			kf18	str	F8	-		-	-----	F18 function key
+#key_f19			kf19	str	F9	-		-	-----	F19 function key
+#key_f20			kf20	str	FA	-		-	-----	F20 function key
+#key_f21			kf21	str	FB	-		-	-----	F21 function key
+#key_f22			kf22	str	FC	-		-	-----	F22 function key
+#key_f23			kf23	str	FD	-		-	-----	F23 function key
+#key_f24			kf24	str	FE	-		-	-----	F24 function key
+#key_f25			kf25	str	FF	-		-	-----	F25 function key
+#key_f26			kf26	str	FG	-		-	-----	F26 function key
+#key_f27			kf27	str	FH	-		-	-----	F27 function key
+#key_f28			kf28	str	FI	-		-	-----	F28 function key
+#key_f29			kf29	str	FJ	-		-	-----	F29 function key
+#key_f30			kf30	str	FK	-		-	-----	F30 function key
+#key_f31			kf31	str	FL	-		-	-----	F31 function key
+#key_f32			kf32	str	FM	-		-	-----	F32 function key
+#key_f33			kf33	str	FN	-		-	-----	F33 function key
+#key_f34			kf34	str	FO	-		-	-----	F34 function key
+#key_f35			kf35	str	FP	-		-	-----	F35 function key
+#key_f36			kf36	str	FQ	-		-	-----	F36 function key
+#key_f37			kf37	str	FR	-		-	-----	F37 function key
+#key_f38			kf38	str	FS	-		-	-----	F38 function key
+#key_f39			kf39	str	FT	-		-	-----	F39 function key
+#key_f40			kf40	str	FU	-		-	-----	F40 function key
+#key_f41			kf41	str	FV	-		-	-----	F41 function key
+#key_f42			kf42	str	FW	-		-	-----	F42 function key
+#key_f43			kf43	str	FX	-		-	-----	F43 function key
+#key_f44			kf44	str	FY	-		-	-----	F44 function key
+#key_f45			kf45	str	FZ	-		-	-----	F45 function key
+#key_f46			kf46	str	Fa	-		-	-----	F46 function key
+#key_f47			kf47	str	Fb	-		-	-----	F47 function key
+#key_f48			kf48	str	Fc	-		-	-----	F48 function key
+#key_f49			kf49	str	Fd	-		-	-----	F49 function key
+#key_f50			kf50	str	Fe	-		-	-----	F50 function key
+#key_f51			kf51	str	Ff	-		-	-----	F51 function key
+#key_f52			kf52	str	Fg	-		-	-----	F52 function key
+#key_f53			kf53	str	Fh	-		-	-----	F53 function key
+#key_f54			kf54	str	Fi	-		-	-----	F54 function key
+#key_f55			kf55	str	Fj	-		-	-----	F55 function key
+#key_f56			kf56	str	Fk	-		-	-----	F56 function key
+#key_f57			kf57	str	Fl	-		-	-----	F57 function key
+#key_f58			kf58	str	Fm	-		-	-----	F58 function key
+#key_f59			kf59	str	Fn	-		-	-----	F59 function key
+#key_f60			kf60	str	Fo	-		-	-----	F60 function key
+#key_f61			kf61	str	Fp	-		-	-----	F61 function key
+#key_f62			kf62	str	Fq	-		-	-----	F62 function key
+#key_f63			kf63	str	Fr	-		-	-----	F63 function key
+#
+# IBM extensions
+#
+# These extensions follow ptr_non (replacing everything after it) in IBM
+# terminfo files.
+#
+# The places in the box[12] capabilities correspond to acsc characters, here is
+# the mapping:
+#
+#	box1[0]  = ACS_ULCORNER
+#	box1[1]  = ACS_HLINE
+#	box1[2]  = ACS_URCORNER
+#	box1[3]  = ACS_VLINE
+#	box1[4]  = ACS_LRCORNER
+#	box1[5]  = ACS_LLCORNER
+#	box1[6]  = ACS_TTEE
+#	box1[7]  = ACS_RTEE
+#	box1[8]  = ACS_BTEE
+#	box1[9]  = ACS_LTEE
+#	box1[10] = ACS_PLUS
+#
+# The box2 characters are the double-line versions of these forms graphics.
+#
+#box_chars_1			box1	str	bx	-		-	----K	box characters primary set
+#box_chars_2			box2	str	by	-		-	----K	box characters secondary set
+#box_attr_1			batt1	str	Bx	-		-	----K	attributes for box1
+#box_attr_2			batt2	str	By	-		-	----K	attributes for box2
+#color_bg_0			colb0	str	d0	-		-	----K	background color 0
+#color_bg_1			colb1	str	d1	-		-	----K	background color 1
+#color_bg_2			colb2	str	d2	-		-	----K	background color 2
+#color_bg_3			colb3	str	d3	-		-	----K	background color 3
+#color_bg_4			colb4	str	d4	-		-	----K	background color 4
+#color_bg_5			colb5	str	d5	-		-	----K	background color 5
+#color_bg_6			colb6	str	d6	-		-	----K	background color 6
+#color_bg_7			colb7	str	d7	-		-	----K	background color 7
+#color_fg_0			colf0	str	c0	-		-	----K	foreground color 0
+#color_fg_1			colf1	str	c1	-		-	----K	foreground color 1
+#color_fg_2			colf2	str	c2	-		-	----K	foreground color 2
+#color_fg_3			colf3	str	c3	-		-	----K	foreground color 3
+#color_fg_4			colf4	str	c4	-		-	----K	foreground color 4
+#color_fg_5			colf5	str	c5	-		-	----K	foreground color 5
+#color_fg_6			colf6	str	c6	-		-	----K	foreground color 6
+#color_fg_7			colf7	str	c7	-		-	----K	foreground color 7
+#font_0				font0	str	f0	-		-	-----	select font 0
+#font_1				font1	str	f1	-		-	-----	select font 1
+#font_2				font2	str	f2	-		-	-----	select font 2
+#font_3				font3	str	f3	-		-	-----	select font 3
+#font_4				font4	str	f4	-		-	----K	select font 4
+#font_5				font5	str	f5	-		-	----K	select font 5
+#font_6				font6	str	f6	-		-	----K	select font 6
+#font_7				font7	str	f7	-		-	----K	select font 7
+#key_back_tab			kbtab	str	k0	-		-	-----	backtab key
+#key_do				kdo	str	ki	-		-	----K	do request key
+#key_command			kcmd	str	kd	-		-	----K	command-request key
+#key_command_pane		kcpn	str	kW	-		-	----K	command-pane key
+#key_end			kend	str	kw	-		-	-----	end key
+#key_help			khlp	str	kq	-		-	-----	help key
+#key_newline			knl	str	nl	-		-	----K	newline key
+#key_next_pane			knpn	str	kv	-		-	----K	next-pane key
+#key_prev_cmd			kppn	str	kp	-		-	----K	previous-command key
+#key_prev_pane			kppn	str	kV	-		-	----K	previous-pane key
+#key_quit			kquit	str	kQ	-		-	----K	quit key
+#key_select			ksel	str	kU	-		-	-----	select key
+#key_scroll_left		kscl	str	kz	-		-	----K	scroll left
+#key_scroll_right		kscr	str	kZ	-		-	----K	scroll right
+#key_tab			ktab	str	ko	-		-	----K	tab key
+#key_smap_in1			kmpf1	str	Kv	-		-	----K	special mapped key 1 input
+#key_smap_out1			kmpt1	str	KV	-		-	----K	special mapped key 1 output
+#key_smap_in2			kmpf2	str	Kw	-		-	----K	special mapped key 2 input
+#key_smap_out2			kmpt2	str	KW	-		-	----K	special mapped key 2 output
+#key_smap_in3			kmpf3	str	Kx	-		-	----K	special mapped key 3 input
+#key_smap_out3			kmpt3	str	KX	-		-	----K	special mapped key 3 output
+#key_smap_in4			kmpf4	str	Ky	-		-	----K	special mapped key 4 input
+#key_smap_out4			kmpt4	str	KY	-		-	----K	special mapped key 4 output
+#key_smap_in5			kmpf5	str	Kz	-		-	----K	special mapped key 5 input
+#key_smap_out5			kmpt5	str	KZ	-		-	----K	special mapped key 5 output
+#appl_defined_str		apstr	str	za	-		-	----K	application-defined string
+# The key_smap_in[6789] and key_smap_out[6789] capabilities aren't described in
+# the IBM manual pages, so the cap name strings are guesses.  The terminfo
+# names are almost certainly right, the termcap ones almost certainly wrong.
+#key_smap_in6			kmpf6	str	k!	-		-	----K	special mapped key 6 input
+#key_smap_out6			kmpt6	str	K@	-		-	----K	special mapped key 6 output
+#key_smap_in7			kmpf7	str	k#	-		-	----K	special mapped key 7 input
+#key_smap_out7			kmpt7	str	K$	-		-	----K	special mapped key 7 output
+#key_smap_in8			kmpf8	str	k%	-		-	----K	special mapped key 8 input
+#key_smap_out8			kmpt8	str	K^	-		-	----K	special mapped key 8 output
+#key_smap_in9			kmpf9	str	k&	-		-	----K	special mapped key 9 input
+#key_smap_out9			kmpt9	str	K*	-		-	----K	special mapped key 9 output
+# Undocumented capabilities end here
+#key_sf1			ksf1	str	S1	-		-	----K	special function key 1
+#key_sf2			ksf2	str	S2	-		-	----K	special function key 2
+#key_sf3			ksf3	str	S3	-		-	----K	special function key 3
+#key_sf4			ksf4	str	S4	-		-	----K	special function key 4
+#key_sf5			ksf5	str	S5	-		-	----K	special function key 5
+#key_sf6			ksf6	str	S6	-		-	----K	special function key 6
+#key_sf7			ksf7	str	S7	-		-	----K	special function key 7
+#key_sf8			ksf8	str	S8	-		-	----K	special function key 8
+#key_sf9			ksf9	str	S9	-		-	----K	special function key 9
+#key_sf10			ksf10	str	SA	-		-	----K	special function key 10
+# AIX version 3 documents different codes for F11, F12 and does not mention
+# F13-F64.  AIX version 4 uses the same naming for F0-F63 as above.
+#key_f11			kf11	str	k<	-		-	-----	function key 11
+#key_f12			kf12	str	k>	-		-	-----	function key 12
+# Undocumented capabilities end here.
+#key_action			kact	str	kJ	-		-	----K	sent by action key
+# The IBM docs say these capabilities are for table-drawing, and are
+# valid only for aixterm descriptions.
+#enter_topline_mode		topl	str	tp	-		-	----K	start top-line mode
+#enter_bottom_mode		btml	str	bm	-		-	----K	start bottom-line mode
+#enter_rvert_mode		rvert	str	rv	-		-	----K	start right-vertical mode
+#enter_lvert_mode		lvert	str	lv	-		-	----K	start left-vertical mode
+#
+#############################################################################
+#
+# ALIAS DECLARATIONS
+#
+# Here we set up aliases for translating extensions into standard terminfo.
+#
+#---------------------------------- Termcap aliases -------------------------
+#
+# BSD aliases:
+#
+# This is a common error in many termcap files.  We'll get notified during
+# translation when this (or any other alias) fires.
+#
+capalias	sb	sr	BSD	scroll text down
+#
+# AT&T extensions:
+#
+# The old AT&T 5410, 5420, 5425, pc6300plus, 610, and s4 entries used a set of
+# nonstandard capabilities.  Its signature is the KM capability, used to name
+# some sort of keymap file.  EE, BO, CI, CV, XS, DS, FL and FE are in this
+# set.  Comments in the original, and a little cross-checking with other AT&T
+# documentation, seem to establish the following mappings:
+#
+capalias	BO	mr	AT&T	enter_reverse_mode
+capalias	CI	vi	AT&T	cursor_invisible
+capalias	CV	ve	AT&T	cursor_normal
+capalias	DS	mh	AT&T	enter_dim_mode
+#capalias	EE	me	AT&T	exit_attribute_mode
+capalias	FE	LF	AT&T	label_on
+capalias	FL	LO	AT&T	label_off
+capalias	XS	mk	AT&T	enter_secure_mode
+#
+# We comment out EE because the conflicting XENIX EE is more common in
+# old entries.
+#
+# XENIX extensions:
+#
+# These are the ones we know how to translate directly:
+#
+capalias	EE	mh	XENIX	exit_attribute_mode
+capalias	GE	ae	XENIX	exit_alt_charset_mode
+capalias	GS	as	XENIX	enter_alt_charset_mode
+capalias	CF	vi	XENIX	cursor_invis
+capalias	CO	ve	XENIX	cursor_normal
+capalias	EN	@7	XENIX	key_end
+capalias	HM	kh	XENIX	key_home
+capalias	LD	kL	XENIX	key_dl
+capalias	PD	kN	XENIX	key_npage
+capalias	PN	po	XENIX	prtr_off
+capalias	PS	pf	XENIX	prtr_on
+capalias	PU	kP	XENIX	key_ppage
+capalias	RT	@8	XENIX	kent
+capalias	UP	ku	XENIX	kcuu1
+capalias	G6	IGNORE	XENIX	double-ACS_ULCORNER
+capalias	G7	IGNORE	XENIX	double-ACS_LLCORNER
+capalias	G5	IGNORE	XENIX	double-ACS_URCORNER
+capalias	G8	IGNORE	XENIX	double-ACS_LRCORNER
+capalias	Gr	IGNORE	XENIX	double-ACS_LTEE
+capalias	Gr	IGNORE	XENIX	double-ACS_RTEE
+capalias	Gu	IGNORE	XENIX	double-ACS_BTEE
+capalias	Gd	IGNORE	XENIX	double ACS_TTEE
+capalias	Gh	IGNORE	XENIX	double-ACS_HLINE
+capalias	Gv	IGNORE	XENIX	double-ACS_VLINE
+capalias	Gc	IGNORE	XENIX	double-ACS_PLUS
+capalias	GG	IGNORE	XENIX	acs-glitch
+#
+# IBM extensions:
+#
+capalias	kq	%1	IBM	key_help
+#
+# Iris extensions:
+#
+capalias	HS	mh	IRIS	enter_dim_mode
+#
+# Tektronix extensions:
+#
+capalias	KA	k;	Tek	key_f10
+capalias	KB	F1	Tek	key_f11
+capalias	KC	F2	Tek	key_f12
+capalias	KD	F3	Tek	key_f13
+capalias	KE	F4	Tek	key_f14
+capalias	KF	F5	Tek	key_f15
+capalias	BC	Sb	Tek	set_background
+capalias	FC	Sf	Tek	set_foreground
+#
+# There are also the following:
+#
+#	XENIX	XENIX variable name	name clash with terminfo?
+#	-----	-------------------	-------------------------
+#	CL	key_char_left
+#	CR	key_char_right
+#	CW	key_change_window
+#	HP	??
+#	LF	key_linefeed 		label_off
+#	NU	key_next_unlocked_cell
+#	PL	??
+#	PR	??
+#	RC	key_recalc		remove_clock
+#	RF	key_toggle_ref		req_for_input
+#	WL	key_word_left
+#	WR	key_word_right
+#
+# If you know what any of the question-marked ones mean, please tell us.
+#
+#--------------------------------- Terminfo aliases ------------------------
+#
+# IBM extensions:
+#
+infoalias	font0	s0ds	IBM	set0_des_seq
+infoalias	font1	s1ds	IBM	set1_des_seq
+infoalias	font2	s2ds	IBM	set2_des_seq
+infoalias	font3	s3ds	IBM	set3_des_seq
+infoalias	kbtab	kcbt	IBM	key_backtab
+infoalias	ksel	kslt	IBM	key_select
+#
+# Some others are identical to SVr4/XPG4 capabilities, in particular:
+# kcmd, kend, khlp, and kf11...kf63.
+#
+#############################################################################
+# This is a table of ncurses user-definable capabilities which applications
+# developers may have used.  ncurses may use the table to check consistency of
+# types/parameters.  Applications may have defined others (such as screen's
+# LP and NF), but where a standard capability is available, those alternatives
+# are not listed here.
+#
+used_by ncurses
+userdef	CO 	num	n	number of indexed colors overlaying RGB space
+userdef	E3	str	-	clears the terminal's scrollback buffer.
+userdef	NQ	bool	-	terminal does not support query/response
+userdef	RGB	bool	-	use direct colors with 1/3 of color-pair bits per color.
+userdef	RGB	num	n	use direct colors with given number of bits per color.
+userdef	RGB	str	-	use direct colors with given bit-layout.
+userdef	TS	str	-	like "tsl", but uses no parameter.
+userdef	U8	num	n	terminal does/does not support VT100 SI/SO when processing UTF-8 encoding.
+userdef	XM	str	n	initialize alternate xterm mouse mode
+userdef	grbom	str	-	disable real bold (not intensity bright) mode.
+userdef	gsbom	str	-	enable real bold (not intensity bright) mode.
+userdef	xm	str	-	mouse response, no parameters
+userdef	xm	str	n	mouse response, p1 = y-ordinate
+userdef	xm	str	nn	mouse response, p2 = x-ordinate
+userdef	xm	str	nnn	mouse response, p3 = button
+userdef	xm	str	nnns	mouse response, p4 = state, e.g., pressed or released
+userdef	xm	str	nnnsn	mouse response, p5 = y-ordinate starting region
+userdef	xm	str	nnnsnn	mouse response, p6 = x-ordinate starting region
+userdef	xm	str	nnnsnnn	mouse response, p7 = y-ordinate ending region
+userdef	xm	str	nnnsnnnn mouse response, p8 = x-ordinate ending region
+#
+used_by mintty
+userdef Rmol	str	-	remove overline-mode
+userdef Smol	str	-	set overline-mode
+userdef blink2	str	-	turn on rapid blinking
+userdef norm	str	-	turn off bold and half-bright mode
+userdef opaq	str	-	turn off blank mode
+userdef	setal	str	n	set underline-color
+userdef smul2	str	-	begin double underline mode
+#
+used_by screen
+userdef	AN	bool	-	turn on autonuke.
+userdef	AX	bool	-	understands ANSI set default fg/bg color (\E[39m / \E[49m).
+userdef	C0	str	-	use the string as a conversion table for font '0', like acsc.
+userdef	C8	bool	-	terminal shows bold as high-intensity colors.
+userdef	CE	str	-	switch cursor-keys back to normal mode.
+userdef	CS	str	-	switch cursor-keys to application mode.
+userdef	E0	str	-	switch charset 'G0' back to standard charset. Default is '\E(B'.
+userdef	G0	bool	-	terminal can deal with ISO 2022 font selection sequences.
+userdef	KJ	str	s	set the encoding of the terminal.
+userdef	OL	num	n	set the screen program's output buffer limit.
+userdef	S0	str	s	switch charset 'G0' to the specified charset. Default is '\E(%.'.
+userdef	TF	bool	-	add missing capabilities to screen's termcap/info entry. (Set by default).
+userdef	WS	str	nn	resize display. This capability has the desired width and height as arguments. SunView(tm) example: '\E[8;%d;%dt'.
+userdef	XC	str	s	describe a translation of characters to strings depending on the current font.
+userdef	XT	bool	-	terminal understands special xterm sequences (OSC, mouse tracking).
+userdef	Z0	str	-	change width to 132 columns.
+userdef	Z1	str	-	change width to 80 columns.
+#
+used_by tmux
+userdef	Cr	str	-	restore the default cursor color.
+userdef	Cs	str	s	set the cursor color.
+userdef	Csr	str	n	change the cursor style, overriding Ss.
+userdef	Ms	str	ss	store the current buffer in the host terminal's selection (clipboard).
+userdef	Se	str	-	reset the cursor style to the terminal initial state.
+userdef	Smulx	str	n	modify the appearance of underlines in VTE.
+userdef	Ss	str	n	change the cursor style.
+userdef	rmxx	str	-	reset ECMA-48 strikeout/crossed-out attributes.
+userdef	smxx	str	-	set ECMA-48 strikeout/crossed-out attributes.
+#
+used_by vim
+userdef	BD	str	-	disables bracketed paste
+userdef	BE	str	-	enables bracketed paste
+userdef	PE	str	-	is sent after pasted text
+userdef	PS	str	-	is sent before pasted text
+userdef	RV	str	-	report terminal secondary device attributes
+userdef	XR	str	-	report terminal version as a free-format string.
+userdef	XF	bool	-	terminal supports xterm focus in/out
+userdef	fd	str	-	disable xterm focus-events
+userdef	fe	str	-	enable xterm focus-events
+userdef	rv	str	-	response to RV, regular expression
+userdef	xr	str	-	response to XR, regular expression
+#
+used_by xterm
+userdef	csl	str	-	clear status line
+userdef	kDC3	str	-	alt delete-character
+userdef	kDC4	str	-	shift+alt delete-character
+userdef	kDC5	str	-	control delete-character
+userdef	kDC6	str	-	shift+control delete-character
+userdef	kDC7	str	-	alt+control delete-character
+userdef	kDN	str	-	shift down-cursor
+userdef	kDN3	str	-	alt down-cursor
+userdef	kDN4	str	-	shift+alt down-cursor
+userdef	kDN5	str	-	control down-cursor
+userdef	kDN6	str	-	shift+control down-cursor
+userdef	kDN7	str	-	alt+control down-cursor
+userdef	kEND3	str	-	alt end
+userdef	kEND4	str	-	shift+alt end
+userdef	kEND5	str	-	control end
+userdef	kEND6	str	-	shift+control end
+userdef	kEND7	str	-	alt+control end
+userdef	kHOM3	str	-	alt home
+userdef	kHOM4	str	-	shift+alt home
+userdef	kHOM5	str	-	control home
+userdef	kHOM6	str	-	shift+control home
+userdef	kHOM7	str	-	alt+control home
+userdef	kIC3	str	-	alt insert-character
+userdef	kIC4	str	-	shift+alt insert-character
+userdef	kIC5	str	-	control insert-character
+userdef	kIC6	str	-	shift+control insert-character
+userdef	kIC7	str	-	alt+control insert-character
+userdef	kLFT3	str	-	alt left-cursor
+userdef	kLFT4	str	-	shift+alt left-cursor
+userdef	kLFT5	str	-	control left-cursor
+userdef	kLFT6	str	-	shift+control left-cursor
+userdef	kLFT7	str	-	alt+control left-cursor
+userdef	kNXT3	str	-	alt next
+userdef	kNXT4	str	-	shift+alt next
+userdef	kNXT5	str	-	control next
+userdef	kNXT6	str	-	shift+control next
+userdef	kNXT7	str	-	alt+control next
+userdef	kPRV3	str	-	alt previous
+userdef	kPRV4	str	-	shift+alt previous
+userdef	kPRV5	str	-	control previous
+userdef	kPRV6	str	-	shift+control previous
+userdef	kPRV7	str	-	alt+control previous
+userdef	kRIT3	str	-	alt right-cursor
+userdef	kRIT4	str	-	shift+alt right-cursor
+userdef	kRIT5	str	-	control right-cursor
+userdef	kRIT6	str	-	shift+control right-cursor
+userdef	kRIT7	str	-	alt+control right-cursor
+userdef	kUP	str	-	shift up-cursor
+userdef	kUP3	str	-	alt up-cursor
+userdef	kUP4	str	-	shift+alt up-cursor
+userdef	kUP5	str	-	control up-cursor
+userdef	kUP6	str	-	shift+control up-cursor
+userdef	kUP7	str	-	alt+control up-cursor
+userdef	ka2	str	-	vt220-keypad extensions
+userdef	kb1	str	-	vt220-keypad extensions
+userdef	kb3	str	-	vt220-keypad extensions
+userdef	kc2	str	-	vt220-keypad extensions
+userdef	kxIN	str	-	mouse response on focus-in
+userdef	kxOUT	str	-	mouse response on focus-out
+#############################################################################
diff --git a/include/Caps.aix4 b/include/Caps.aix4
index 8fb53c2..1adb848 100644
--- a/include/Caps.aix4
+++ b/include/Caps.aix4
@@ -1,5 +1,6 @@
 ##############################################################################
-# Copyright (c) 2001-2011,2015 Free Software Foundation, Inc.                #
+# Copyright 2019-2023,2024 Thomas E. Dickey                                  #
+# Copyright 2001-2015,2016 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 "Software"), #
@@ -28,13 +29,13 @@
 #
 # Author: Thomas Dickey
 #
-# $Id: Caps.aix4,v 1.10 2015/04/26 15:25:55 tom Exp $
+# $Id: Caps.aix4,v 1.28 2024/04/20 21:05:02 tom Exp $
 #
 # This is an adaptation of ncurses' termcap/terminfo capability table, which
 # is designed to align with AIX 4.x's terminfo.
 #
 # This table is used to generate initializers for tables that drive tic,
-# infocmp, and the library compilation code used to support the termcap 
+# infocmp, and the library compilation code used to support the termcap
 # compatibility hack.  It is also used to generate the tabular portion of the
 # terminfo(5) man page; lines beginning with `#%' are passed through to become
 # the terminfo table.
@@ -47,7 +48,7 @@
 #
 # Column 1: terminfo variable name
 # Column 2: terminfo capability name
-# Column 3: capability type (boolean, numeric, or string)
+# Column 3: capability type (Boolean, numeric, or string)
 # Column 4: termcap capability name
 # Column 5: KEY_xxx name, if any, `-' otherwise
 # Column 6: value for KEY_xxx name, if any, `-' otherwise
@@ -57,7 +58,7 @@
 #
 # The codes following [Y-] in column 7 describe the versions of termcap which
 # use the given capability.  This information is not used by the curses library
-# proper; rather, it's there to help the terminfo maintainer avoid emitting
+# proper; rather, it is there to help the terminfo maintainer avoid emitting
 # termcap entry translations that are more than 1023 bytes long (and tank a
 # lot of old termcap-using programs).  The codes read as follows:
 #	B = mentioned in the BSD man page for 4.4BSD curses
@@ -97,8 +98,8 @@
 # 3. List it in the standard table.  You almost certainly do *not* want
 # to do this -- the capabilities in that one, and their order, have been
 # carefully chosen to be SVr4-binary-compatible when they're written out
-# as a terminfo object, and breaking this would be bad.  It's up to the ncurses
-# library what to do with the terminfo data after it's read in.
+# as a terminfo object, and breaking this would be bad.  It is up to the ncurses
+# library what to do with the terminfo data after it is read in.
 #
 # 4. List it in the aliases table with an IGNORE target field.  If you
 # do this, the capability will be ignored on input (though the user will
@@ -107,7 +108,7 @@
 # 5. List it in the extensions table. If you do this, the compiler will
 # silently accept the capability, but the curses library proper will never
 # see it (because it won't be written out as part of the terminfo object
-# format).  It's up to you what you have the compiler do with it.
+# format).  It is up to you what you have the compiler do with it.
 #
 # There are two opposite reasons to choose option 5.  One is when you want
 # to eat the capability silently and discard it when doing translations
@@ -119,14 +120,14 @@
 # You'll need to write custom code, probably in postprocess_termcap() or
 # postprocess_terminfo(), to handle the translation.
 #
-# CONTROLLING ENTRY LENGTH 
+# CONTROLLING ENTRY LENGTH
 #
 # Notes on specific elisions made to fit translations within 1023 bytes:
 #
 # Machines with IBM PC-like keyboards want to be able to define the following
 # keys: key_npage, key_ppage, key_home, key_ll (which is used for in termcap-
 # only environments for End or Home-Down), key_dc, and key_ic.  This is also
-# the set of keys the `joe' editor will be upset if it can't see.  So don't 
+# the set of keys the `joe' editor will be upset if it can't see.  So don't
 # trim those out of the set to be translated to termcap, or various users of
 # the termcap file will become irate.
 #
@@ -147,68 +148,108 @@
 #
 # It would be nice to keep f11 and f12 for Emacs use, but a couple of termcap
 # translations go back over critical if we do this.  As 4.4BSD curses fades
-# into history and GNU termcap's application base shrinks towards being GNU 
+# into history and GNU termcap's application base shrinks towards being GNU
 # Emacs only, we'll probably elide out some BSD-only capabilities in order
 # to buy space for non-essentials Emacs is still using.  Capabilities high
 # on that hit list: rc, sc, uc.
 #
+# FORMATTING THE TABLES
+#
+# We manually specify a (minimum) column width for the capability name
+# and terminfo code columns in the tables to achieve a consistent
+# arrangement; as used here, tbl(1) cannot know the width required by
+# one table's data while formatting another's.
+#
+# The longest capability names (C variables) are
+# "enter_near_letter_quality" and "bit_image_carriage_return" (tied at
+# 25n), and the longest terminfo code is "setcolor" (8n).
+#
+# The tables are a tight fit on traditional man(7) implementations that
+# use a line length of 65n, and the "Description" column has little room
+# within which the formatter can make breaking or adjustment decisions.
+# Words like "micro_..._address" and "parm_..._micro" don't break.
+# Reducing the inter-column gaps to 2 ens gives them enough room.  --GBR
+#
 #############################################################################
 #
 # STANDARD CAPABILITIES
 #
-#%The following is a complete table of the capabilities included in a
-#%terminfo description block and available to terminfo-using code.  In each
-#%line of the table,
-#%
-#%The \fBvariable\fR is the name by which the programmer (at the terminfo level)
-#%accesses the capability.
-#%
-#%The \fBcapname\fR is the short name used in the text of the database,
-#%and is used by a person updating the database.
-#%Whenever possible, capnames are chosen to be the same as or similar to
-#%the ANSI X3.64-1979 standard (now superseded by ECMA-48, which uses 
-#%identical or very similar names).  Semantics are also intended to match
-#%those of the specification.
-#%
-#%The termcap code is the old
-#%.B termcap
-#%capability name (some capabilities are new, and have names which termcap
-#%did not originate).
-#%.P
-#%Capability names have no hard length limit, but an informal limit of 5
-#%characters has been adopted to keep them short and to allow the tabs in
-#%the source file
-#%.B Caps
+#%Tables of capabilities
+#%.I \%ncurses
+#%recognizes in a
+#%.I \%term\%info
+#%terminal type description and available to
+#%.IR \%term\%info -using
+#%code follow.
+#%.bP
+#%The capability name identifies the symbol by which the programmer
+#%using the
+#%.I \%term\%info
+#%API accesses the capability.
+#%.bP
+#%The TI
+#%.RI ( \%term\%info )
+#%code is the short name used by a person composing or updating a
+#%terminal type entry.
+#%.IP
+#%Whenever possible,
+#%these codes are the same as or similar to those of the ANSI X3.64-1979
+#%standard
+#%(now superseded by ECMA-48,
+#%which uses identical or very similar names).
+#%Semantics are also intended to match those of the specification.
+#%.IP
+#%.I \%term\%info
+#%codes have no hard length limit,
+#%but
+#%.I \%ncurses
+#%maintains an informal one of 5 characters to keep them short and to
+#%allow the tabs in the source file
+#%.I Caps
 #%to line up nicely.
-#%
-#%Finally, the description field attempts to convey the semantics of the
-#%capability.  You may find some codes in the description field:
-#%.TP
-#%(P)
-#%indicates that padding may be specified
-#%.TP
-#%#[1-9]
-#%in the description field indicates that the string is passed through tparm with
-#%parms as given (#\fIi\fP).
-#%.TP
-#%(P*)
-#%indicates that padding may vary in proportion to the number of
-#%lines affected
-#%.TP
-#%(#\d\fIi\fP\u)
-#%indicates the \fIi\fP\uth\d parameter.
-#%
+#%(Some standard codes exceed this limit regardless.)
+#%.bP
+#%The TC
+#%.RI ( termcap )
+#%code is that used by the corresponding API of
+#%.IR \%ncurses .
+#%(Some capabilities are new,
+#%and have names that BSD
+#%.I termcap
+#%did not originate.)
+#%.bP
+#%The description field attempts to convey the capability's semantics.
 #%.PP
-#% These are the boolean capabilities:
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBBooleans	name	Code\fR
+#%The description field employs a handful of notations.
+#%.TP
+#%.B (P)
+#%indicates that padding may be specified.
+#%.TP
+#%.B (P*)
+#%indicates that padding may vary in proportion to the number of output
+#%lines affected.
+#%.TP
+#%.BI # i
+#%indicates the
+#%.IR i th
+#%parameter of a string capability;
+#%the programmer should pass the string to \fB\%tparm\fP(3X) with the
+#%parameters listed.
+#%.IP
+#%If the description lists no parameters,
+#%passing the string to \fB\%tparm\fP(3X) may produce unexpected
+#%behavior,
+#%for instance if the string contains percent signs.
+#%.
+#%.PP
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%Boolean Capability Name	TI	TC	Description
+#%_
 auto_left_margin		bw	bool	bw	-	-	YB-G-	cub1 wraps from column 0 to last column
 auto_right_margin		am	bool	am	-	-	YBCGE	terminal has automatic margins
 no_esc_ctlc			xsb	bool	xb	-	-	YBCG-	beehive (f1=escape, f2=ctrl C)
@@ -247,18 +288,16 @@
 cpi_changes_res			cpix	bool	YF	-	-	-----	changing character pitch changes resolution
 lpi_changes_res			lpix	bool	YG	-	-	-----	changing line pitch changes resolution
 #%.TE
-#%.ad
-#%
-#%These are the numeric capabilities:
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBNumeric	name	Code\fR
+#%.PP
+#%.
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%Numeric Capability Name	TI	TC	Description
+#%_
 columns				cols	num	co	-	-	YBCGE	number of columns in a line
 init_tabs			it	num	it	-	-	YB-G-	tabs initially every # spaces
 lines				lines	num	li	-	-	YBCGE	number of lines on screen or page
@@ -277,20 +316,21 @@
 max_pairs			pairs	num	pa	-	-	-----	maximum number of color-pairs on the screen
 no_color_video			ncv	num	NC	-	-	-----	video attributes that cannot be used with colors
 #%.TE
-#%.ad
-#%
+#%.PP
+#%.
 #%The following numeric capabilities are present in the SVr4.0 term structure,
-#%but are not yet documented in the man page.  They came in with SVr4's
-#%printer support.
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBNumeric	name	Code\fR
+#%but are not yet documented in the man page.
+#%They came in with SVr4's printer support.
+#%.
+#%.PP
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%Numeric Capability Name	TI	TC	Description
+#%_
 buffer_capacity			bufsz	num	Ya	-	-	-----	numbers of bytes buffered before printing
 dot_vert_spacing		spinv	num	Yb	-	-	-----	spacing of pins vertically in pins per inch
 dot_horz_spacing		spinh	num	Yc	-	-	-----	spacing of dots horizontally in dots per inch
@@ -309,18 +349,16 @@
 bit_image_entwining		bitwin	num	Yo	-	-	-----	number of passes for each bit-image row
 bit_image_type			bitype	num	Yp	-	-	-----	type of bit-image device
 #%.TE
-#%.ad
-#%
-#%These are the string capabilities:
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBString	name	Code\fR
+#%.PP
+#%.
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%String Capability Name	TI	TC	Description
+#%_
 back_tab			cbt	str	bt	-		-	YBCGE	back tab (P)
 bell				bel	str	bl	-		-	YB-GE	audible signal (bell) (P)
 carriage_return			cr	str	cr	-		-	YBCGE	carriage return (P*) (P*)
@@ -383,6 +421,10 @@
 key_dc				kdch1	str	kD	KEY_DC		0512	YB-G-	delete-character key
 key_dl				kdl1	str	kL	KEY_DL		0510	-B-G-*	delete-line key
 key_down			kcud1	str	kd	KEY_DOWN	0402	YBCGE	down-arrow key
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 key_eic				krmir	str	kM	KEY_EIC		0514	-B-G-*	sent by rmir or smir in insert mode
 key_eol				kel	str	kE	KEY_EOL		0517	-B-G-*	clear-to-end-of-line key
 key_eos				ked	str	kS	KEY_EOS		0516	-B-G-*	clear-to-end-of-screen key
@@ -445,6 +487,10 @@
 repeat_char			rep	str	rp	-		-	YB-GE	repeat char #1 #2 times (P*)
 reset_1string			rs1	str	r1	-		-	-B---	reset string
 reset_2string			rs2	str	r2	-		-	-B---	reset string
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 reset_3string			rs3	str	r3	-		-	-B---	reset string
 reset_file			rf	str	rf	-		-	-B---	name of reset file
 restore_cursor			rc	str	rc	-		-	YBCG-	restore cursor to position of last save_cursor
@@ -476,7 +522,7 @@
 # the mapping:
 #
 #	box1[0]  = ACS_ULCORNER
-#	box1[1]  = ACS_HLINE	
+#	box1[1]  = ACS_HLINE
 #	box1[2]  = ACS_URCORNER
 #	box1[3]  = ACS_VLINE
 #	box1[4]  = ACS_LRCORNER
@@ -517,15 +563,15 @@
 font_5				font5	str	f5	-		-	----K	select font 5
 font_6				font6	str	f6	-		-	----K	select font 6
 font_7				font7	str	f7	-		-	----K	select font 7
-key_back_tab			kbtab	str	k0	-		-	----K	backtab key
+key_back_tab			kbtab	str	kO	-		-	----K	backtab key
 key_do				kdo	str	ki	-		-	----K	do request key
-key_command			kcmd	str	kd	-		-	----K	command-request key
+key_command			kcmd	str	@4	-		-	----K	command-request key
 key_command_pane		kcpn	str	kW	-		-	----K	command-pane key
-key_end				kend	str	kw	KEY_END		0550	-----	end key
-key_help			khlp	str	kq	-		-	-----	help key
-key_newline			knl	str	nl	-		-	----K	newline key
+key_end				kend	str	@7	KEY_END		0550	-----	end key
+key_help			khlp	str	%1	-		-	-----	help key
+key_newline			knl	str	kn	-		-	----K	newline key
 key_next_pane			knpn	str	kv	-		-	----K	next-pane key
-key_prev_cmd			kppn	str	kp	-		-	----K	previous-command key
+key_prev_cmd			kpcmd	str	kp	-		-	----K	previous-command key
 key_prev_pane			kppn	str	kV	-		-	----K	previous-pane key
 key_quit			kquit	str	kQ	-		-	----K	quit key
 key_select_aix			ksel	str	kU	-		-	-----	select key
@@ -543,13 +589,13 @@
 key_smap_in5			kmpf5	str	Kz	-		-	----K	special mapped key 5 input
 key_smap_out5			kmpt5	str	KZ	-		-	----K	special mapped key 5 output
 appl_defined_str		apstr	str	za	-		-	----K	application-defined string
-key_smap_in6			kmpf6	str	kr	-		-	----K	special mapped key 6 input
+key_smap_in6			kmpf6	str	Kr	-		-	----K	special mapped key 6 input
 key_smap_out6			kmpt6	str	KR	-		-	----K	special mapped key 6 output
-key_smap_in7			kmpf7	str	ks	-		-	----K	special mapped key 7 input
+key_smap_in7			kmpf7	str	Ks	-		-	----K	special mapped key 7 input
 key_smap_out7			kmpt7	str	KS	-		-	----K	special mapped key 7 output
-key_smap_in8			kmpf8	str	kt	-		-	----K	special mapped key 8 input
+key_smap_in8			kmpf8	str	Kt	-		-	----K	special mapped key 8 input
 key_smap_out8			kmpt8	str	KT	-		-	----K	special mapped key 8 output
-key_smap_in9			kmpf9	str	ku	-		-	----K	special mapped key 9 input
+key_smap_in9			kmpf9	str	Ku	-		-	----K	special mapped key 9 input
 key_smap_out9			kmpt9	str	KU	-		-	----K	special mapped key 9 output
 key_sf1				ksf1	str	S1	-		-	----K	special function key 1
 key_sf2				ksf2	str	S2	-		-	----K	special function key 2
@@ -593,6 +639,10 @@
 key_f40				kf40	str	FU	KEY_F(40)	-	----E	F40 function key
 key_f41				kf41	str	FV	KEY_F(41)	-	----E	F41 function key
 key_f42				kf42	str	FW	KEY_F(42)	-	----E	F42 function key
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 key_f43				kf43	str	FX	KEY_F(43)	-	----E	F43 function key
 key_f44				kf44	str	FY	KEY_F(44)	-	----E	F44 function key
 key_f45				kf45	str	FZ	KEY_F(45)	-	----E	F45 function key
@@ -666,6 +716,10 @@
 key_save			ksav	str	&6	KEY_SAVE	0571	-----	save key
 key_suspend			kspd	str	&7	KEY_SUSPEND	0627	-----	suspend key
 key_undo			kund	str	&8	KEY_UNDO	0630	-----	undo key
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 key_sbeg			kBEG	str	&9	KEY_SBEG	0572	-----	shifted begin key
 key_scancel			kCAN	str	&0	KEY_SCANCEL	0573	-----	shifted cancel key
 key_scommand			kCMD	str	*1	KEY_SCOMMAND	0574	-----	shifted command key
@@ -698,7 +752,7 @@
 req_for_input			rfi	str	RF	-		-	-----	send next input char (for ptys)
 clr_bol				el1	str	cb	-		-	-----	Clear to beginning of line
 clear_margins			mgc	str	MC	-		-	-----	clear right and left soft margins
-set_left_margin			smgl	str	ML	-		-	-----	set left soft margin at current column.	 See smgl. (ML is not in BSD termcap).
+set_left_margin			smgl	str	ML	-		-	-----	set left soft margin at current column (not in BSD \fItermcap\fP)
 set_right_margin		smgr	str	MR	-		-	-----	set right soft margin at current column
 label_format			fln	str	Lf	-		-	-----	label format
 set_clock			sclk	str	SC	-		-	-----	set clock, #1 hrs #2 mins #3 secs
@@ -743,6 +797,10 @@
 change_res_vert			cvr	str	ZD	-		-	-----	Change vertical resolution to #1
 define_char			defc	str	ZE	-		-	-----	Define a character #1, #2 dots wide, descender #3
 enter_doublewide_mode		swidm	str	ZF	-		-	-----	Enter double-wide mode
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 enter_draft_quality		sdrfq	str	ZG	-		-	-----	Enter draft-quality mode
 enter_italics_mode		sitm	str	ZH	-		-	-----	Enter italic mode
 enter_leftward_mode		slm	str	ZI	-		-	-----	Start leftward carriage motion
@@ -788,19 +846,20 @@
 these_cause_cr			docr	str	Zw	-		-	-----	Printing any of these characters causes CR
 zero_motion			zerom	str	Zx	-		-	-----	No motion for subsequent character
 #%.TE
-#%.ad
-#%
+#%.PP
+#%.
 #%The following string capabilities are present in the SVr4.0 term structure,
 #%but were originally not documented in the man page.
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw18.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBString	name	Code\fR
+#%.
+#%.PP
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%String Capability Name	TI	TC	Description
+#%_
 char_set_names			csnm	str	Zy	-		-	-----	Produce #1'th item from list of character set names
 key_mouse			kmous	str	Km	KEY_MOUSE	0631	-----	Mouse event has occurred
 mouse_info			minfo	str	Mi	-		-	-----	Mouse status information
@@ -837,9 +896,8 @@
 scancode_escape			scesc	str	S7	-		-	-----	Escape for scancode emulation
 alt_scancode_esc		scesa	str	S8	-		-	-----	Alternate escape for scancode emulation
 #%.TE
-#%.ad
-#%
-#%.in .8i
+#%.PP
+#%.
 #%The XSI Curses standard added these hardcopy capabilities.
 #%They were used in some post-4.1 versions of System V curses,
 #%e.g., Solaris 2.5 and IRIX 6.x.
@@ -848,25 +906,25 @@
 #%If your compiled terminfo entries use these,
 #%they may not be binary-compatible with System V terminfo
 #%entries after SVr4.1; beware!
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBString	name	Code\fR
-enter_horizontal_hl_mode	ehhlm	str	Xh	-		-	-----	Enter horizontal highlight mode
-enter_left_hl_mode		elhlm	str	Xl	-		-	-----	Enter left highlight mode
-enter_low_hl_mode		elohlm	str	Xo	-		-	-----	Enter low highlight mode
-enter_right_hl_mode		erhlm	str	Xr	-		-	-----	Enter right highlight mode
-enter_top_hl_mode		ethlm	str	Xt	-		-	-----	Enter top highlight mode
-enter_vertical_hl_mode		evhlm	str	Xv	-		-	-----	Enter vertical highlight mode
-set_a_attributes		sgr1	str	sA	-		-	-----	Define second set of video attributes #1-#6
+#%.
+#%.PP
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%String Capability Name	TI	TC	Description
+#%_
+#enter_horizontal_hl_mode	ehhlm	str	Xh	-		-	-----	Enter horizontal highlight mode
+#enter_left_hl_mode		elhlm	str	Xl	-		-	-----	Enter left highlight mode
+#enter_low_hl_mode		elohlm	str	Xo	-		-	-----	Enter low highlight mode
+#enter_right_hl_mode		erhlm	str	Xr	-		-	-----	Enter right highlight mode
+#enter_top_hl_mode		ethlm	str	Xt	-		-	-----	Enter top highlight mode
+#enter_vertical_hl_mode		evhlm	str	Xv	-		-	-----	Enter vertical highlight mode
+#set_a_attributes		sgr1	str	sA	-		-	-----	Define second set of video attributes #1-#6
 set_pglen_inch			slength	str	YI	-		-	-----	Set page length to #1 hundredth of an inch (some implementations use sL for termcap).
 #%.TE
-#%.ad
 #
 # The magic token below tells the tic compiler-generator code that all the caps
 # past it should be ignored (not written out) when dumping terminfo objects. It
@@ -928,7 +986,7 @@
 # GNU termcap *does* include the following extended capability,  Only the
 # now-obsolete Ann Arbor terminals used it.
 #
-# gnu_change_scroll_region	OTcS	str	cS	-		-	---GE	alternate set scrolling region 
+# gnu_change_scroll_region	OTcS	str	cS	-		-	---GE	alternate set scrolling region
 #
 # The following comments describe capnames so ancient that I believe no
 # software uses them any longer.  Some of these have to go because they
@@ -945,9 +1003,9 @@
 # comma-separated list of capabilities for which there are corresponding keys.
 # The `kn' code is accepted but ignored.
 #
-# The `ma' capability seems to have been designed to map between the rogue(2)
-# motion keys (including jkhl) and characters emitted by arrow keys on some
-# primitive pre-ANSI terminals.  It's so obsolete it's fossilized...
+# The `ma' capability was a 4.0BSD feature used by vi version 2.
+# It consists of pairs of characters corresponding to kl, kr, ku, kd, and kh.
+# Besides being obsolete, that interpretation conflicts with max_attributes.
 #
 # Here is a description of memory_lock_above and memory_unlock:
 # "You can 'freeze' data on the screen by turning on Memory Lock in a line of
@@ -973,14 +1031,14 @@
 # vertical_tab_delay		OTdV	num	dV	-		-	-B---	padding required for ^V
 number_of_function_keys		OTkn	num	kn	-		-	-B-G-	count of function keys
 other_non_function_keys		OTko	str	ko	-		-	-B-G-	list of self-mapped keycaps
-arrow_key_map			OTma	str	ma	-		-	YBC--	map arrow keys rogue(1) motion keys
+arrow_key_map			OTma	str	ma	-		-	YBC--	map motion-keys for vi version 2
 # memory_lock_above		OTml	str	ml	-		-	-B---	lock visible screen memory above the current line
 # memory_unlock			OTmu	str	mu	-		-	-B---	unlock visible screen memory above the current line
 has_hardware_tabs		OTpt	bool	pt	-		-	YB---	has 8-char tabs invoked with ^I
 return_does_clr_eol		OTxr	bool	xr	-		-	YB---	return clears the line
 # tek_4025_insert_line		OTxx	bool	xx	-		-	-BC--	Tektronix 4025 insert-line glitch
 #
-# mytinfo described this as a termcap capability, but it's not listed in the
+# mytinfo described this as a termcap capability, but it is not listed in the
 # 4.4BSD man pages, and not found in the 4.4BSD termcap file.  The ncurses
 # package, like System V, behaves as though it is always true.
 #
@@ -989,7 +1047,7 @@
 # University of Waterloo termcap extensions (as described in mytinfo).
 # The `xl' termcap file clashes with a terminfo name; this ambiguity cannot
 # be resolved by a type check.  The descriptions are guesses from what was
-# in the mytinfo tables. 
+# in the mytinfo tables.
 #
 # key_interrupt_char		OTki	str	ki	-		-	-----	string set by interrupt key (?)
 # key_kill_char			OTkk	str	kk	-		-	-----	string set by kill key (?)
@@ -1038,7 +1096,7 @@
 # Gv	186 \272 M-:	double vertical line
 #
 # The compiler will translate the single-line caps and discard the others
-# (via IGNORE aliases further down).  We don't want to do normal pad 
+# (via IGNORE aliases further down).  We don't want to do normal pad
 # translation on these, they're often single-character printable ASCII
 # strings that happen to be numerics.  There's awk code in parametrized.sh
 # that detects the acs_ prefix and uses it to suppress pad translation.
@@ -1060,192 +1118,9 @@
 #
 # TERMINFO EXTENSION CAPABILITIES
 #
-# This section is almost all comments.  What it's mainly for is to describe
-# what capabilities need to be squeezed out to get down to the XSI Curses
-# standard set.  They are flagged with K.
-#
-# HP extensions
-#
-# These extensions follow ptr_non (replacing everything after it) in HP
-# terminfo files.  Except for memory_lock and memory_unlock, they are
-# functionally identical to SVr4 extensions, but they make the binary format
-# different.  Grrr....
+# (see Caps-ncurses for the complete set of comments)
 #
 memory_lock			meml	str	ml	-		-	----K	lock memory above cursor
 memory_unlock			memu	str	mu	-		-	----K	unlock memory
-#plab_norm			pln	str	pn	-		-	-----	program label #1 to show string #2
-#label_on			smln	str	LO	-		-	-----	turn on soft labels
-#label_off			rmln	str	LF	-		-	-----	turn off soft labels
-#key_f11			kf11	str	F1	-		-	-----	F11 function key
-#key_f12			kf12	str	F2	-		-	-----	F12 function key
-#key_f13			kf13	str	F3	-		-	-----	F13 function key
-#key_f14			kf14	str	F4	-		-	-----	F14 function key
-#key_f15			kf15	str	F5	-		-	-----	F15 function key
-#key_f16			kf16	str	F6	-		-	-----	F16 function key
-#key_f17			kf17	str	F7	-		-	-----	F17 function key
-#key_f18			kf18	str	F8	-		-	-----	F18 function key
-#key_f19			kf19	str	F9	-		-	-----	F19 function key
-#key_f20			kf20	str	FA	-		-	-----	F20 function key
-#key_f21			kf21	str	FB	-		-	-----	F21 function key
-#key_f22			kf22	str	FC	-		-	-----	F22 function key
-#key_f23			kf23	str	FD	-		-	-----	F23 function key
-#key_f24			kf24	str	FE	-		-	-----	F24 function key
-#key_f25			kf25	str	FF	-		-	-----	F25 function key
-#key_f26			kf26	str	FG	-		-	-----	F26 function key
-#key_f27			kf27	str	FH	-		-	-----	F27 function key
-#key_f28			kf28	str	FI	-		-	-----	F28 function key
-#key_f29			kf29	str	FJ	-		-	-----	F29 function key
-#key_f30			kf30	str	FK	-		-	-----	F30 function key
-#key_f31			kf31	str	FL	-		-	-----	F31 function key
-#key_f32			kf32	str	FM	-		-	-----	F32 function key
-#key_f33			kf33	str	FN	-		-	-----	F33 function key
-#key_f34			kf34	str	FO	-		-	-----	F34 function key
-#key_f35			kf35	str	FP	-		-	-----	F35 function key
-#key_f36			kf36	str	FQ	-		-	-----	F36 function key
-#key_f37			kf37	str	FR	-		-	-----	F37 function key
-#key_f38			kf38	str	FS	-		-	-----	F38 function key
-#key_f39			kf39	str	FT	-		-	-----	F39 function key
-#key_f40			kf40	str	FU	-		-	-----	F40 function key
-#key_f41			kf41	str	FV	-		-	-----	F41 function key
-#key_f42			kf42	str	FW	-		-	-----	F42 function key
-#key_f43			kf43	str	FX	-		-	-----	F43 function key
-#key_f44			kf44	str	FY	-		-	-----	F44 function key
-#key_f45			kf45	str	FZ	-		-	-----	F45 function key
-#key_f46			kf46	str	Fa	-		-	-----	F46 function key
-#key_f47			kf47	str	Fb	-		-	-----	F47 function key
-#key_f48			kf48	str	Fc	-		-	-----	F48 function key
-#key_f49			kf49	str	Fd	-		-	-----	F49 function key
-#key_f50			kf50	str	Fe	-		-	-----	F50 function key
-#key_f51			kf51	str	Ff	-		-	-----	F51 function key
-#key_f52			kf52	str	Fg	-		-	-----	F52 function key
-#key_f53			kf53	str	Fh	-		-	-----	F53 function key
-#key_f54			kf54	str	Fi	-		-	-----	F54 function key
-#key_f55			kf55	str	Fj	-		-	-----	F55 function key
-#key_f56			kf56	str	Fk	-		-	-----	F56 function key
-#key_f57			kf57	str	Fl	-		-	-----	F57 function key
-#key_f58			kf58	str	Fm	-		-	-----	F58 function key
-#key_f59			kf59	str	Fn	-		-	-----	F59 function key
-#key_f60			kf60	str	Fo	-		-	-----	F60 function key
-#key_f61			kf61	str	Fp	-		-	-----	F61 function key
-#key_f62			kf62	str	Fq	-		-	-----	F62 function key
-#key_f63			kf63	str	Fr	-		-	-----	F63 function key
-#
-#############################################################################
-#
-# ALIAS DECLARATIONS
-#
-# Here we set up aliases for translating extensions into standard terminfo.
-#
-#---------------------------------- Termcap aliases -------------------------
-#
-# BSD aliases:
-#
-# This is a common error in many termcap files.  We'll get notified during
-# translation when this (or any other alias) fires.
-#
-capalias	sb	sr	BSD	scroll text down
-#
-# AT&T extensions:
-#
-# The old AT&T 5410, 5420, 5425, pc6300plus, 610, and s4 entries used a set of
-# nonstandard capabilities.  Its signature is the KM capability, used to name
-# some sort of keymap file.  EE, BO, CI, CV, XS, DS, FL and FE are in this
-# set.  Comments in the original, and a little cross-checking with other AT&T
-# documentation, seem to establish the following mappings:
-#
-capalias	BO	mr	AT&T	enter_reverse_mode
-capalias	CI	vi	AT&T	cursor_invisible
-capalias	CV	ve	AT&T	cursor_normal
-capalias	DS	mh	AT&T	enter_dim_mode
-#capalias	EE	me	AT&T	exit_attribute_mode	
-capalias	FE	LF	AT&T	label_on
-capalias	FL	LO	AT&T	label_off
-capalias	XS	mk	AT&T	enter_secure_mode
-#
-# We comment out EE because the conflicting XENIX EE is more common in 
-# old entries.
-#
-# XENIX extensions:
-#
-# These are the ones we know how to translate directly:
-#
-capalias	EE	mh	XENIX	exit_attribute_mode	
-capalias	GE	ae	XENIX	exit_alt_charset_mode
-capalias	GS	as	XENIX	enter_alt_charset_mode
-capalias	CF	vi	XENIX	cursor_invis
-capalias	CO	ve	XENIX	cursor_normal
-capalias	EN	@7	XENIX	key_end
-capalias	HM	kh	XENIX	key_home
-capalias	LD	kL	XENIX	key_dl
-capalias	PD	kN	XENIX	key_npage
-capalias	PN	po	XENIX	prtr_off
-capalias	PS	pf	XENIX	prtr_on
-capalias	PU	kP	XENIX	key_ppage
-capalias	RT	@8	XENIX	kent
-capalias	UP	ku	XENIX	kcuu1
-capalias	G6	IGNORE	XENIX	double-ACS_ULCORNER
-capalias	G7	IGNORE	XENIX	double-ACS_LLCORNER
-capalias	G5	IGNORE	XENIX	double-ACS_URCORNER
-capalias	G8	IGNORE	XENIX	double-ACS_LRCORNER
-capalias	Gr	IGNORE	XENIX	double-ACS_LTEE
-capalias	Gr	IGNORE	XENIX	double-ACS_RTEE
-capalias	Gu	IGNORE	XENIX	double-ACS_BTEE
-capalias	Gd	IGNORE	XENIX	double ACS_TTEE
-capalias	Gh	IGNORE	XENIX	double-ACS_HLINE
-capalias	Gv	IGNORE	XENIX	double-ACS_VLINE
-capalias	Gc	IGNORE	XENIX	double-ACS_PLUS
-capalias	GG	IGNORE	XENIX	acs-glitch
-#
-# IBM extensions:
-#
-capalias	kq	%1	IBM	key_help
-#
-# Iris extensions:
-#
-capalias	HS	mh	IRIS	enter_dim_mode
-#
-# Tektronix extensions:
-#
-capalias	KA	k;	Tek	key_f10
-capalias	KB	F1	Tek	key_f11
-capalias	KC	F2	Tek	key_f12
-capalias	KD	F3	Tek	key_f13
-capalias	KE	F4	Tek	key_f14
-capalias	KF	F5	Tek	key_f15
-capalias	BC	Sb	Tek	set_background
-capalias	FC	Sf	Tek	set_foreground
-#
-# There are also the following:
-#
-#	XENIX	XENIX variable name	name clash with terminfo?
-#	-----	-------------------	-------------------------
-#	CL	key_char_left
-#	CR	key_char_right
-#	CW	key_change_window
-#	HP	??
-#	LF	key_linefeed 		label_off
-#	NU	key_next_unlocked_cell
-#	PL	??
-#	PR	??
-#	RC	key_recalc		remove_clock
-#	RF	key_toggle_ref		req_for_input
-#	WL	key_word_left
-#	WR	key_word_right
-#
-# If you know what any of the question-marked ones mean, please tell us.
-#
-#--------------------------------- Terminfo aliases ------------------------
-#
-# IBM extensions:
-#
-infoalias	font0	s0ds	IBM	set0_des_seq
-infoalias	font1	s1ds	IBM	set1_des_seq
-infoalias	font2	s2ds	IBM	set2_des_seq
-infoalias	font3	s3ds	IBM	set3_des_seq
-infoalias	kbtab	kcbt	IBM	key_backtab
-infoalias	ksel	kslt	IBM	key_select
-#
-# Some others are identical to SVr4/XPG4 capabilities, in particular:
-# kcmd, kend, khlp, and kf11...kf63.
 #
 #############################################################################
diff --git a/include/Caps.hpux11 b/include/Caps.hpux11
index 512aa82..723556f 100644
--- a/include/Caps.hpux11
+++ b/include/Caps.hpux11
@@ -1,5 +1,6 @@
 ##############################################################################
-# Copyright (c) 2002-2011,2015 Free Software Foundation, Inc.                #
+# Copyright 2019-2023,2024 Thomas E. Dickey                                  #
+# Copyright 2002-2015,2016 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 "Software"), #
@@ -28,13 +29,13 @@
 #
 # Author: Thomas Dickey
 #
-# $Id: Caps.hpux11,v 1.7 2015/04/26 15:25:55 tom Exp $
+# $Id: Caps.hpux11,v 1.26 2024/04/20 21:05:02 tom Exp $
 #
 # This is an adaptation of ncurses' termcap/terminfo capability table, which
 # is designed to align with HPUX 11.x's terminfo.
 #
 # This table is used to generate initializers for tables that drive tic,
-# infocmp, and the library compilation code used to support the termcap 
+# infocmp, and the library compilation code used to support the termcap
 # compatibility hack.  It is also used to generate the tabular portion of the
 # terminfo(5) man page; lines beginning with `#%' are passed through to become
 # the terminfo table.
@@ -47,7 +48,7 @@
 #
 # Column 1: terminfo variable name
 # Column 2: terminfo capability name
-# Column 3: capability type (boolean, numeric, or string)
+# Column 3: capability type (Boolean, numeric, or string)
 # Column 4: termcap capability name
 # Column 5: KEY_xxx name, if any, `-' otherwise
 # Column 6: value for KEY_xxx name, if any, `-' otherwise
@@ -57,7 +58,7 @@
 #
 # The codes following [Y-] in column 7 describe the versions of termcap which
 # use the given capability.  This information is not used by the curses library
-# proper; rather, it's there to help the terminfo maintainer avoid emitting
+# proper; rather, it is there to help the terminfo maintainer avoid emitting
 # termcap entry translations that are more than 1023 bytes long (and tank a
 # lot of old termcap-using programs).  The codes read as follows:
 #	B = mentioned in the BSD man page for 4.4BSD curses
@@ -97,8 +98,8 @@
 # 3. List it in the standard table.  You almost certainly do *not* want
 # to do this -- the capabilities in that one, and their order, have been
 # carefully chosen to be SVr4-binary-compatible when they're written out
-# as a terminfo object, and breaking this would be bad.  It's up to the ncurses
-# library what to do with the terminfo data after it's read in.
+# as a terminfo object, and breaking this would be bad.  It is up to the ncurses
+# library what to do with the terminfo data after it is read in.
 #
 # 4. List it in the aliases table with an IGNORE target field.  If you
 # do this, the capability will be ignored on input (though the user will
@@ -107,7 +108,7 @@
 # 5. List it in the extensions table. If you do this, the compiler will
 # silently accept the capability, but the curses library proper will never
 # see it (because it won't be written out as part of the terminfo object
-# format).  It's up to you what you have the compiler do with it.
+# format).  It is up to you what you have the compiler do with it.
 #
 # There are two opposite reasons to choose option 5.  One is when you want
 # to eat the capability silently and discard it when doing translations
@@ -119,14 +120,14 @@
 # You'll need to write custom code, probably in postprocess_termcap() or
 # postprocess_terminfo(), to handle the translation.
 #
-# CONTROLLING ENTRY LENGTH 
+# CONTROLLING ENTRY LENGTH
 #
 # Notes on specific elisions made to fit translations within 1023 bytes:
 #
 # Machines with IBM PC-like keyboards want to be able to define the following
 # keys: key_npage, key_ppage, key_home, key_ll (which is used for in termcap-
 # only environments for End or Home-Down), key_dc, and key_ic.  This is also
-# the set of keys the `joe' editor will be upset if it can't see.  So don't 
+# the set of keys the `joe' editor will be upset if it can't see.  So don't
 # trim those out of the set to be translated to termcap, or various users of
 # the termcap file will become irate.
 #
@@ -147,68 +148,108 @@
 #
 # It would be nice to keep f11 and f12 for Emacs use, but a couple of termcap
 # translations go back over critical if we do this.  As 4.4BSD curses fades
-# into history and GNU termcap's application base shrinks towards being GNU 
+# into history and GNU termcap's application base shrinks towards being GNU
 # Emacs only, we'll probably elide out some BSD-only capabilities in order
 # to buy space for non-essentials Emacs is still using.  Capabilities high
 # on that hit list: rc, sc, uc.
 #
+# FORMATTING THE TABLES
+#
+# We manually specify a (minimum) column width for the capability name
+# and terminfo code columns in the tables to achieve a consistent
+# arrangement; as used here, tbl(1) cannot know the width required by
+# one table's data while formatting another's.
+#
+# The longest capability names (C variables) are
+# "enter_near_letter_quality" and "bit_image_carriage_return" (tied at
+# 25n), and the longest terminfo code is "setcolor" (8n).
+#
+# The tables are a tight fit on traditional man(7) implementations that
+# use a line length of 65n, and the "Description" column has little room
+# within which the formatter can make breaking or adjustment decisions.
+# Words like "micro_..._address" and "parm_..._micro" don't break.
+# Reducing the inter-column gaps to 2 ens gives them enough room.  --GBR
+#
 #############################################################################
 #
 # STANDARD CAPABILITIES
 #
-#%The following is a complete table of the capabilities included in a
-#%terminfo description block and available to terminfo-using code.  In each
-#%line of the table,
-#%
-#%The \fBvariable\fR is the name by which the programmer (at the terminfo level)
-#%accesses the capability.
-#%
-#%The \fBcapname\fR is the short name used in the text of the database,
-#%and is used by a person updating the database.
-#%Whenever possible, capnames are chosen to be the same as or similar to
-#%the ANSI X3.64-1979 standard (now superseded by ECMA-48, which uses 
-#%identical or very similar names).  Semantics are also intended to match
-#%those of the specification.
-#%
-#%The termcap code is the old
-#%.B termcap
-#%capability name (some capabilities are new, and have names which termcap
-#%did not originate).
-#%.P
-#%Capability names have no hard length limit, but an informal limit of 5
-#%characters has been adopted to keep them short and to allow the tabs in
-#%the source file
-#%.B Caps
+#%Tables of capabilities
+#%.I \%ncurses
+#%recognizes in a
+#%.I \%term\%info
+#%terminal type description and available to
+#%.IR \%term\%info -using
+#%code follow.
+#%.bP
+#%The capability name identifies the symbol by which the programmer
+#%using the
+#%.I \%term\%info
+#%API accesses the capability.
+#%.bP
+#%The TI
+#%.RI ( \%term\%info )
+#%code is the short name used by a person composing or updating a
+#%terminal type entry.
+#%.IP
+#%Whenever possible,
+#%these codes are the same as or similar to those of the ANSI X3.64-1979
+#%standard
+#%(now superseded by ECMA-48,
+#%which uses identical or very similar names).
+#%Semantics are also intended to match those of the specification.
+#%.IP
+#%.I \%term\%info
+#%codes have no hard length limit,
+#%but
+#%.I \%ncurses
+#%maintains an informal one of 5 characters to keep them short and to
+#%allow the tabs in the source file
+#%.I Caps
 #%to line up nicely.
-#%
-#%Finally, the description field attempts to convey the semantics of the
-#%capability.  You may find some codes in the description field:
-#%.TP
-#%(P)
-#%indicates that padding may be specified
-#%.TP
-#%#[1-9]
-#%in the description field indicates that the string is passed through tparm with
-#%parms as given (#\fIi\fP).
-#%.TP
-#%(P*)
-#%indicates that padding may vary in proportion to the number of
-#%lines affected
-#%.TP
-#%(#\d\fIi\fP\u)
-#%indicates the \fIi\fP\uth\d parameter.
-#%
+#%(Some standard codes exceed this limit regardless.)
+#%.bP
+#%The TC
+#%.RI ( termcap )
+#%code is that used by the corresponding API of
+#%.IR \%ncurses .
+#%(Some capabilities are new,
+#%and have names that BSD
+#%.I termcap
+#%did not originate.)
+#%.bP
+#%The description field attempts to convey the capability's semantics.
 #%.PP
-#% These are the boolean capabilities:
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBBooleans	name	Code\fR
+#%The description field employs a handful of notations.
+#%.TP
+#%.B (P)
+#%indicates that padding may be specified.
+#%.TP
+#%.B (P*)
+#%indicates that padding may vary in proportion to the number of output
+#%lines affected.
+#%.TP
+#%.BI # i
+#%indicates the
+#%.IR i th
+#%parameter of a string capability;
+#%the programmer should pass the string to \fB\%tparm\fP(3X) with the
+#%parameters listed.
+#%.IP
+#%If the description lists no parameters,
+#%passing the string to \fB\%tparm\fP(3X) may produce unexpected
+#%behavior,
+#%for instance if the string contains percent signs.
+#%.
+#%.PP
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%Boolean Capability Name	TI	TC	Description
+#%_
 auto_left_margin		bw	bool	bw	-	-	YB-G-	cub1 wraps from column 0 to last column
 auto_right_margin		am	bool	am	-	-	YBCGE	terminal has automatic margins
 no_esc_ctlc			xsb	bool	xb	-	-	YBCG-	beehive (f1=escape, f2=ctrl C)
@@ -230,7 +271,7 @@
 tilde_glitch			hz	bool	hz	-	-	YB-GE	cannot print ~'s (Hazeltine)
 transparent_underline		ul	bool	ul	-	-	YBCGE	underline character overstrikes
 xon_xoff			xon	bool	xo	-	-	YB---	terminal uses xon/xoff handshaking
-# end booleans for HPUX 9, 10 (non-color curses)
+# end Booleans for HPUX 9, 10 (non-color curses)
 needs_xon_xoff			nxon	bool	nx	-	-	-----	padding will not work, xon/xoff required
 prtr_silent			mc5i	bool	5i	-	-	-----	printer will not echo on screen
 hard_cursor			chts	bool	HC	-	-	-----	cursor is hard to see
@@ -248,18 +289,16 @@
 cpi_changes_res			cpix	bool	YF	-	-	-----	changing character pitch changes resolution
 lpi_changes_res			lpix	bool	YG	-	-	-----	changing line pitch changes resolution
 #%.TE
-#%.ad
-#%
-#%These are the numeric capabilities:
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBNumeric	name	Code\fR
+#%.PP
+#%.
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%Numeric Capability Name	TI	TC	Description
+#%_
 columns				cols	num	co	-	-	YBCGE	number of columns in a line
 init_tabs			it	num	it	-	-	YB-G-	tabs initially every # spaces
 lines				lines	num	li	-	-	YBCGE	number of lines on screen or page
@@ -279,26 +318,27 @@
 max_pairs			pairs	num	pa	-	-	-----	maximum number of color-pairs on the screen
 no_color_video			ncv	num	NC	-	-	-----	video attributes that cannot be used with colors
 #%.TE
-#%.ad
-#%
+#%.PP
+#%.
 #%The following numeric capabilities are present in the SVr4.0 term structure,
-#%but are not yet documented in the man page.  They came in with SVr4's
-#%printer support.
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBNumeric	name	Code\fR
+#%but are not yet documented in the man page.
+#%They came in with SVr4's printer support.
+#%.
+#%.PP
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%Numeric Capability Name	TI	TC	Description
+#%_
 buffer_capacity			bufsz	num	Ya	-	-	-----	numbers of bytes buffered before printing
 dot_vert_spacing		spinv	num	Yb	-	-	-----	spacing of pins vertically in pins per inch
 dot_horz_spacing		spinh	num	Yc	-	-	-----	spacing of dots horizontally in dots per inch
 max_micro_address		maddr	num	Yd	-	-	-----	maximum value in micro_..._address
 max_micro_jump			mjump	num	Ye	-	-	-----	maximum value in parm_..._micro
-micro_col_size			mcs	num	Yf	-	-	-----	character step size when in micro mode
+micro_char_size			mcs	num	Yf	-	-	-----	character step size when in micro mode
 micro_line_size			mls	num	Yg	-	-	-----	line step size when in micro mode
 number_of_pins			npins	num	Yh	-	-	-----	numbers of pins in print-head
 output_res_char			orc	num	Yi	-	-	-----	horizontal resolution in units per line
@@ -311,18 +351,16 @@
 bit_image_entwining		bitwin	num	Yo	-	-	-----	number of passes for each bit-image row
 bit_image_type			bitype	num	Yp	-	-	-----	type of bit-image device
 #%.TE
-#%.ad
-#%
-#%These are the string capabilities:
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBString	name	Code\fR
+#%.PP
+#%.
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%String Capability Name	TI	TC	Description
+#%_
 back_tab			cbt	str	bt	-		-	YBCGE	back tab (P)
 bell				bel	str	bl	-		-	YB-GE	audible signal (bell) (P)
 carriage_return			cr	str	cr	-		-	YBCGE	carriage return (P*) (P*)
@@ -385,6 +423,10 @@
 key_dc				kdch1	str	kD	KEY_DC		0512	YB-G-	delete-character key
 key_dl				kdl1	str	kL	KEY_DL		0510	-B-G-*	delete-line key
 key_down			kcud1	str	kd	KEY_DOWN	0402	YBCGE	down-arrow key
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 key_eic				krmir	str	kM	KEY_EIC		0514	-B-G-*	sent by rmir or smir in insert mode
 key_eol				kel	str	kE	KEY_EOL		0517	-B-G-*	clear-to-end-of-line key
 key_eos				ked	str	kS	KEY_EOS		0516	-B-G-*	clear-to-end-of-screen key
@@ -447,6 +489,10 @@
 repeat_char			rep	str	rp	-		-	YB-GE	repeat char #1 #2 times (P*)
 reset_1string			rs1	str	r1	-		-	-B---	reset string
 reset_2string			rs2	str	r2	-		-	-B---	reset string
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 reset_3string			rs3	str	r3	-		-	-B---	reset string
 reset_file			rf	str	rf	-		-	-B---	name of reset file
 restore_cursor			rc	str	rc	-		-	YBCG-	restore cursor to position of last save_cursor
@@ -512,6 +558,10 @@
 key_f40				kf40	str	FU	KEY_F(40)	-	----E	F40 function key
 key_f41				kf41	str	FV	KEY_F(41)	-	----E	F41 function key
 key_f42				kf42	str	FW	KEY_F(42)	-	----E	F42 function key
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 key_f43				kf43	str	FX	KEY_F(43)	-	----E	F43 function key
 key_f44				kf44	str	FY	KEY_F(44)	-	----E	F44 function key
 key_f45				kf45	str	FZ	KEY_F(45)	-	----E	F45 function key
@@ -572,6 +622,10 @@
 key_save			ksav	str	&6	KEY_SAVE	0571	-----	save key
 key_suspend			kspd	str	&7	KEY_SUSPEND	0627	-----	suspend key
 key_undo			kund	str	&8	KEY_UNDO	0630	-----	undo key
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 key_sbeg			kBEG	str	&9	KEY_SBEG	0572	-----	shifted begin key
 key_scancel			kCAN	str	&0	KEY_SCANCEL	0573	-----	shifted cancel key
 key_scommand			kCMD	str	*1	KEY_SCOMMAND	0574	-----	shifted command key
@@ -604,7 +658,7 @@
 req_for_input			rfi	str	RF	-		-	-----	send next input char (for ptys)
 clr_bol				el1	str	cb	-		-	-----	Clear to beginning of line
 clear_margins			mgc	str	MC	-		-	-----	clear right and left soft margins
-set_left_margin			smgl	str	ML	-		-	-----	set left soft margin at current column.	 See smgl. (ML is not in BSD termcap).
+set_left_margin			smgl	str	ML	-		-	-----	set left soft margin at current column (not in BSD \fItermcap\fP)
 set_right_margin		smgr	str	MR	-		-	-----	set right soft margin at current column
 label_format			fln	str	Lf	-		-	-----	label format
 set_clock			sclk	str	SC	-		-	-----	set clock, #1 hrs #2 mins #3 secs
@@ -649,6 +703,10 @@
 change_res_vert			cvr	str	ZD	-		-	-----	Change vertical resolution to #1
 define_char			defc	str	ZE	-		-	-----	Define a character #1, #2 dots wide, descender #3
 enter_doublewide_mode		swidm	str	ZF	-		-	-----	Enter double-wide mode
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 enter_draft_quality		sdrfq	str	ZG	-		-	-----	Enter draft-quality mode
 enter_italics_mode		sitm	str	ZH	-		-	-----	Enter italic mode
 enter_leftward_mode		slm	str	ZI	-		-	-----	Start leftward carriage motion
@@ -694,19 +752,20 @@
 these_cause_cr			docr	str	Zw	-		-	-----	Printing any of these characters causes CR
 zero_motion			zerom	str	Zx	-		-	-----	No motion for subsequent character
 #%.TE
-#%.ad
-#%
+#%.PP
+#%.
 #%The following string capabilities are present in the SVr4.0 term structure,
 #%but were originally not documented in the man page.
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw18.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBString	name	Code\fR
+#%.
+#%.PP
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%String Capability Name	TI	TC	Description
+#%_
 char_set_names			csnm	str	Zy	-		-	-----	Produce #1'th item from list of character set names
 key_mouse			kmous	str	Km	KEY_MOUSE	0631	-----	Mouse event has occurred
 mouse_info			minfo	str	Mi	-		-	-----	Mouse status information
@@ -743,9 +802,8 @@
 scancode_escape			scesc	str	S7	-		-	-----	Escape for scancode emulation
 alt_scancode_esc		scesa	str	S8	-		-	-----	Alternate escape for scancode emulation
 #%.TE
-#%.ad
-#%
-#%.in .8i
+#%.PP
+#%.
 #%The XSI Curses standard added these hardcopy capabilities.
 #%They were used in some post-4.1 versions of System V curses,
 #%e.g., Solaris 2.5 and IRIX 6.x.
@@ -754,31 +812,33 @@
 #%If your compiled terminfo entries use these,
 #%they may not be binary-compatible with System V terminfo
 #%entries after SVr4.1; beware!
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBString	name	Code\fR
+#%.
+#%AIX and Solaris do not provide termcap names for these; HPUX does.
+#%.
+#%.PP
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%String Capability Name	TI	TC	Description
+#%_
 set_pglen_inch			slength	str	YI	-		-	-----	Set page length to #1 hundredth of an inch (some implementations use sL for termcap).
-enter_horizontal_hl_mode	ehhlm	str	Xh	-		-	-----	Enter horizontal highlight mode
-enter_left_hl_mode		elhlm	str	Xl	-		-	-----	Enter left highlight mode
-enter_low_hl_mode		elohlm	str	Xo	-		-	-----	Enter low highlight mode
-enter_right_hl_mode		erhlm	str	Xr	-		-	-----	Enter right highlight mode
-enter_top_hl_mode		ethlm	str	Xt	-		-	-----	Enter top highlight mode
-enter_vertical_hl_mode		evhlm	str	Xv	-		-	-----	Enter vertical highlight mode
-set_a_attributes		sgr1	str	sA	-		-	-----	Define second set of video attributes #1-#6
-exit_horizontal_hl_mode 	rhhlm	str	XH	-		-	----K	Exit horizontal highlight mode
-exit_left_hl_mode 		rlhlm	str	XL	-		-	----K	Exit left highlight mode
-exit_low_hl_mode 		rlohlm	str	XO	-		-	----K	Exit low highlight mode
-exit_right_hl_mode 		rrhlm	str	XR	-		-	----K	Exit right highlight mode
-exit_top_hl_mode 		rthlm	str	XT	-		-	----K	Exit top highlight mode
-exit_vertical_hl_mode 		rvhlm	str	XV	-		-	----K	Exit vertical highlight mode
+enter_horizontal_hl_mode	ehhlm	str	Q1	-		-	-----	Enter horizontal highlight mode
+enter_left_hl_mode		elhlm	str	Q2	-		-	-----	Enter left highlight mode
+enter_low_hl_mode		elohlm	str	Q3	-		-	-----	Enter low highlight mode
+enter_right_hl_mode		erhlm	str	Q4	-		-	-----	Enter right highlight mode
+enter_top_hl_mode		ethlm	str	Q5	-		-	-----	Enter top highlight mode
+enter_vertical_hl_mode		evhlm	str	Q6	-		-	-----	Enter vertical highlight mode
+set_a_attributes		sgr1	str	Q7	-		-	-----	Define second set of video attributes #1-#6
+exit_horizontal_hl_mode 	rmhhlm	str	Q8	-		-	----K	Exit horizontal highlight mode
+exit_left_hl_mode 		rmlhlm	str	Q9	-		-	----K	Exit left highlight mode
+exit_low_hl_mode 		rmlohlm	str	Qa	-		-	----K	Exit low highlight mode
+exit_right_hl_mode 		rmrhlm	str	Qb	-		-	----K	Exit right highlight mode
+exit_top_hl_mode 		rmthlm	str	Qc	-		-	----K	Exit top highlight mode
+exit_vertical_hl_mode 		rmvhlm	str	Qd	-		-	----K	Exit vertical highlight mode
 #%.TE
-#%.ad
 #
 # The magic token below tells the tic compiler-generator code that all the caps
 # past it should be ignored (not written out) when dumping terminfo objects. It
@@ -840,7 +900,7 @@
 # GNU termcap *does* include the following extended capability,  Only the
 # now-obsolete Ann Arbor terminals used it.
 #
-# gnu_change_scroll_region	OTcS	str	cS	-		-	---GE	alternate set scrolling region 
+# gnu_change_scroll_region	OTcS	str	cS	-		-	---GE	alternate set scrolling region
 #
 # The following comments describe capnames so ancient that I believe no
 # software uses them any longer.  Some of these have to go because they
@@ -857,9 +917,9 @@
 # comma-separated list of capabilities for which there are corresponding keys.
 # The `kn' code is accepted but ignored.
 #
-# The `ma' capability seems to have been designed to map between the rogue(2)
-# motion keys (including jkhl) and characters emitted by arrow keys on some
-# primitive pre-ANSI terminals.  It's so obsolete it's fossilized...
+# The `ma' capability was a 4.0BSD feature used by vi version 2.
+# It consists of pairs of characters corresponding to kl, kr, ku, kd, and kh.
+# Besides being obsolete, that interpretation conflicts with max_attributes.
 #
 # Here is a description of memory_lock_above and memory_unlock:
 # "You can 'freeze' data on the screen by turning on Memory Lock in a line of
@@ -885,14 +945,14 @@
 # vertical_tab_delay		OTdV	num	dV	-		-	-B---	padding required for ^V
 number_of_function_keys		OTkn	num	kn	-		-	-B-G-	count of function keys
 other_non_function_keys		OTko	str	ko	-		-	-B-G-	list of self-mapped keycaps
-arrow_key_map			OTma	str	ma	-		-	YBC--	map arrow keys rogue(1) motion keys
+arrow_key_map			OTma	str	ma	-		-	YBC--	map motion-keys for vi version 2
 # memory_lock_above		OTml	str	ml	-		-	-B---	lock visible screen memory above the current line
 # memory_unlock			OTmu	str	mu	-		-	-B---	unlock visible screen memory above the current line
 has_hardware_tabs		OTpt	bool	pt	-		-	YB---	has 8-char tabs invoked with ^I
 return_does_clr_eol		OTxr	bool	xr	-		-	YB---	return clears the line
 # tek_4025_insert_line		OTxx	bool	xx	-		-	-BC--	Tektronix 4025 insert-line glitch
 #
-# mytinfo described this as a termcap capability, but it's not listed in the
+# mytinfo described this as a termcap capability, but it is not listed in the
 # 4.4BSD man pages, and not found in the 4.4BSD termcap file.  The ncurses
 # package, like System V, behaves as though it is always true.
 #
@@ -901,7 +961,7 @@
 # University of Waterloo termcap extensions (as described in mytinfo).
 # The `xl' termcap file clashes with a terminfo name; this ambiguity cannot
 # be resolved by a type check.  The descriptions are guesses from what was
-# in the mytinfo tables. 
+# in the mytinfo tables.
 #
 # key_interrupt_char		OTki	str	ki	-		-	-----	string set by interrupt key (?)
 # key_kill_char			OTkk	str	kk	-		-	-----	string set by kill key (?)
@@ -950,7 +1010,7 @@
 # Gv	186 \272 M-:	double vertical line
 #
 # The compiler will translate the single-line caps and discard the others
-# (via IGNORE aliases further down).  We don't want to do normal pad 
+# (via IGNORE aliases further down).  We don't want to do normal pad
 # translation on these, they're often single-character printable ASCII
 # strings that happen to be numerics.  There's awk code in parametrized.sh
 # that detects the acs_ prefix and uses it to suppress pad translation.
@@ -972,303 +1032,8 @@
 #
 # TERMINFO EXTENSION CAPABILITIES
 #
-# This section is almost all comments.  What it's mainly for is to describe
-# what capabilities need to be squeezed out to get down to the XSI Curses
-# standard set.  They are flagged with K.
-#
-# HP extensions
-#
-# These extensions follow ptr_non (replacing everything after it) in HP
-# terminfo files.  Except for memory_lock and memory_unlock, they are
-# functionally identical to SVr4 extensions, but they make the binary format
-# different.  Grrr....
-#
-#memory_lock			meml	str	ml	-		-	----K	memory lock above
-#memory_unlock			memu	str	mu	-		-	----K	memory unlock
-#plab_norm			pln	str	pn	-		-	-----	program label #1 to show string #2
-#label_on			smln	str	LO	-		-	-----	turn on soft labels
-#label_off			rmln	str	LF	-		-	-----	turn off soft labels
-#key_f11			kf11	str	F1	-		-	-----	F11 function key
-#key_f12			kf12	str	F2	-		-	-----	F12 function key
-#key_f13			kf13	str	F3	-		-	-----	F13 function key
-#key_f14			kf14	str	F4	-		-	-----	F14 function key
-#key_f15			kf15	str	F5	-		-	-----	F15 function key
-#key_f16			kf16	str	F6	-		-	-----	F16 function key
-#key_f17			kf17	str	F7	-		-	-----	F17 function key
-#key_f18			kf18	str	F8	-		-	-----	F18 function key
-#key_f19			kf19	str	F9	-		-	-----	F19 function key
-#key_f20			kf20	str	FA	-		-	-----	F20 function key
-#key_f21			kf21	str	FB	-		-	-----	F21 function key
-#key_f22			kf22	str	FC	-		-	-----	F22 function key
-#key_f23			kf23	str	FD	-		-	-----	F23 function key
-#key_f24			kf24	str	FE	-		-	-----	F24 function key
-#key_f25			kf25	str	FF	-		-	-----	F25 function key
-#key_f26			kf26	str	FG	-		-	-----	F26 function key
-#key_f27			kf27	str	FH	-		-	-----	F27 function key
-#key_f28			kf28	str	FI	-		-	-----	F28 function key
-#key_f29			kf29	str	FJ	-		-	-----	F29 function key
-#key_f30			kf30	str	FK	-		-	-----	F30 function key
-#key_f31			kf31	str	FL	-		-	-----	F31 function key
-#key_f32			kf32	str	FM	-		-	-----	F32 function key
-#key_f33			kf33	str	FN	-		-	-----	F33 function key
-#key_f34			kf34	str	FO	-		-	-----	F34 function key
-#key_f35			kf35	str	FP	-		-	-----	F35 function key
-#key_f36			kf36	str	FQ	-		-	-----	F36 function key
-#key_f37			kf37	str	FR	-		-	-----	F37 function key
-#key_f38			kf38	str	FS	-		-	-----	F38 function key
-#key_f39			kf39	str	FT	-		-	-----	F39 function key
-#key_f40			kf40	str	FU	-		-	-----	F40 function key
-#key_f41			kf41	str	FV	-		-	-----	F41 function key
-#key_f42			kf42	str	FW	-		-	-----	F42 function key
-#key_f43			kf43	str	FX	-		-	-----	F43 function key
-#key_f44			kf44	str	FY	-		-	-----	F44 function key
-#key_f45			kf45	str	FZ	-		-	-----	F45 function key
-#key_f46			kf46	str	Fa	-		-	-----	F46 function key
-#key_f47			kf47	str	Fb	-		-	-----	F47 function key
-#key_f48			kf48	str	Fc	-		-	-----	F48 function key
-#key_f49			kf49	str	Fd	-		-	-----	F49 function key
-#key_f50			kf50	str	Fe	-		-	-----	F50 function key
-#key_f51			kf51	str	Ff	-		-	-----	F51 function key
-#key_f52			kf52	str	Fg	-		-	-----	F52 function key
-#key_f53			kf53	str	Fh	-		-	-----	F53 function key
-#key_f54			kf54	str	Fi	-		-	-----	F54 function key
-#key_f55			kf55	str	Fj	-		-	-----	F55 function key
-#key_f56			kf56	str	Fk	-		-	-----	F56 function key
-#key_f57			kf57	str	Fl	-		-	-----	F57 function key
-#key_f58			kf58	str	Fm	-		-	-----	F58 function key
-#key_f59			kf59	str	Fn	-		-	-----	F59 function key
-#key_f60			kf60	str	Fo	-		-	-----	F60 function key
-#key_f61			kf61	str	Fp	-		-	-----	F61 function key
-#key_f62			kf62	str	Fq	-		-	-----	F62 function key
-#key_f63			kf63	str	Fr	-		-	-----	F63 function key
-#
-# IBM extensions
-#
-# These extensions follow ptr_non (replacing everything after it) in IBM
-# terminfo files.
-#
-# The places in the box[12] capabilities correspond to acsc characters, here is
-# the mapping:
-#
-#	box1[0]  = ACS_ULCORNER
-#	box1[1]  = ACS_HLINE	
-#	box1[2]  = ACS_URCORNER
-#	box1[3]  = ACS_VLINE
-#	box1[4]  = ACS_LRCORNER
-#	box1[5]  = ACS_LLCORNER
-#	box1[6]  = ACS_TTEE
-#	box1[7]  = ACS_RTEE
-#	box1[8]  = ACS_BTEE
-#	box1[9]  = ACS_LTEE
-#	box1[10] = ACS_PLUS
-#
-# The box2 characters are the double-line versions of these forms graphics.
+# (see Caps-ncurses for the complete set of comments)
 #
 box_chars_1			box1	str	bx	-		-	----K	box characters primary set
-#box_chars_2			box2	str	by	-		-	----K	box characters secondary set
-#box_attr_1			batt1	str	Bx	-		-	----K	attributes for box1
-#box_attr_2			batt2	str	By	-		-	----K	attributes for box2
-#color_bg_0			colb0	str	d0	-		-	----K	background color 0
-#color_bg_1			colb1	str	d1	-		-	----K	background color 1
-#color_bg_2			colb2	str	d2	-		-	----K	background color 2
-#color_bg_3			colb3	str	d3	-		-	----K	background color 3
-#color_bg_4			colb4	str	d4	-		-	----K	background color 4
-#color_bg_5			colb5	str	d5	-		-	----K	background color 5
-#color_bg_6			colb6	str	d6	-		-	----K	background color 6
-#color_bg_7			colb7	str	d7	-		-	----K	background color 7
-#color_fg_0			colf0	str	c0	-		-	----K	foreground color 0
-#color_fg_1			colf1	str	c1	-		-	----K	foreground color 1
-#color_fg_2			colf2	str	c2	-		-	----K	foreground color 2
-#color_fg_3			colf3	str	c3	-		-	----K	foreground color 3
-#color_fg_4			colf4	str	c4	-		-	----K	foreground color 4
-#color_fg_5			colf5	str	c5	-		-	----K	foreground color 5
-#color_fg_6			colf6	str	c6	-		-	----K	foreground color 6
-#color_fg_7			colf7	str	c7	-		-	----K	foreground color 7
-#font_0				font0	str	f0	-		-	-----	select font 0
-#font_1				font1	str	f1	-		-	-----	select font 1
-#font_2				font2	str	f2	-		-	-----	select font 2
-#font_3				font3	str	f3	-		-	-----	select font 3
-#font_4				font4	str	f4	-		-	----K	select font 4
-#font_5				font5	str	f5	-		-	----K	select font 5
-#font_6				font6	str	f6	-		-	----K	select font 6
-#font_7				font7	str	f7	-		-	----K	select font 7
-#key_back_tab			kbtab	str	k0	-		-	-----	backtab key
-#key_do				kdo	str	ki	-		-	----K	do request key
-#key_command			kcmd	str	kd	-		-	----K	command-request key
-#key_command_pane		kcpn	str	kW	-		-	----K	command-pane key
-#key_end			kend	str	kw	-		-	-----	end key
-#key_help			khlp	str	kq	-		-	-----	help key
-#key_newline			knl	str	nl	-		-	----K	newline key
-#key_next_pane			knpn	str	kv	-		-	----K	next-pane key
-#key_prev_cmd			kppn	str	kp	-		-	----K	previous-command key
-#key_prev_pane			kppn	str	kV	-		-	----K	previous-pane key
-#key_quit			kquit	str	kQ	-		-	----K	quit key
-#key_select			ksel	str	kU	-		-	-----	select key
-#key_scroll_left		kscl	str	kz	-		-	----K	scroll left
-#key_scroll_right		kscr	str	kZ	-		-	----K	scroll right
-#key_tab			ktab	str	ko	-		-	----K	tab key
-#key_smap_in1			kmpf1	str	Kv	-		-	----K	special mapped key 1 input
-#key_smap_out1			kmpt1	str	KV	-		-	----K	special mapped key 1 output
-#key_smap_in2			kmpf2	str	Kw	-		-	----K	special mapped key 2 input
-#key_smap_out2			kmpt2	str	KW	-		-	----K	special mapped key 2 output
-#key_smap_in3			kmpf3	str	Kx	-		-	----K	special mapped key 3 input
-#key_smap_out3			kmpt3	str	KX	-		-	----K	special mapped key 3 output
-#key_smap_in4			kmpf4	str	Ky	-		-	----K	special mapped key 4 input
-#key_smap_out4			kmpt4	str	KY	-		-	----K	special mapped key 4 output
-#key_smap_in5			kmpf5	str	Kz	-		-	----K	special mapped key 5 input
-#key_smap_out5			kmpt5	str	KZ	-		-	----K	special mapped key 5 output
-#appl_defined_str		apstr	str	za	-		-	----K	application-defined string
-# The key_smap_in[6789] and key_smap_out[6789] capabilities aren't described in
-# the IBM manual pages, so the cap name strings are guesses.  The terminfo
-# names are almost certainly right, the termcap ones almost certainly wrong.
-#key_smap_in6			kmpf6	str	k!	-		-	----K	special mapped key 6 input
-#key_smap_out6			kmpt6	str	K@	-		-	----K	special mapped key 6 output
-#key_smap_in7			kmpf7	str	k#	-		-	----K	special mapped key 7 input
-#key_smap_out7			kmpt7	str	K$	-		-	----K	special mapped key 7 output
-#key_smap_in8			kmpf8	str	k%	-		-	----K	special mapped key 8 input
-#key_smap_out8			kmpt8	str	K^	-		-	----K	special mapped key 8 output
-#key_smap_in9			kmpf9	str	k&	-		-	----K	special mapped key 9 input
-#key_smap_out9			kmpt9	str	K*	-		-	----K	special mapped key 9 output
-# Undocumented capabilities end here
-#key_sf1			ksf1	str	S1	-		-	----K	special function key 1
-#key_sf2			ksf2	str	S2	-		-	----K	special function key 2
-#key_sf3			ksf3	str	S3	-		-	----K	special function key 3
-#key_sf4			ksf4	str	S4	-		-	----K	special function key 4
-#key_sf5			ksf5	str	S5	-		-	----K	special function key 5
-#key_sf6			ksf6	str	S6	-		-	----K	special function key 6
-#key_sf7			ksf7	str	S7	-		-	----K	special function key 7
-#key_sf8			ksf8	str	S8	-		-	----K	special function key 8
-#key_sf9			ksf9	str	S9	-		-	----K	special function key 9
-#key_sf10			ksf10	str	SA	-		-	----K	special function key 10
-# AIX version 3 documents different codes for F11, F12 and does not mention
-# F13-F64.  AIX version 4 uses the same naming for F0-F63 as above.
-#key_f11			kf11	str	k<	-		-	-----	function key 11
-#key_f12			kf12	str	k>	-		-	-----	function key 12
-# Undocumented capabilities end here.
-#key_action			kact	str	kJ	-		-	----K	sent by action key
-# The IBM docs say these capabilities are for table-drawing, and are
-# valid only for aixterm descriptions.
-#enter_topline_mode		topl	str	tp	-		-	----K	start top-line mode
-#enter_bottom_mode		btml	str	bm	-		-	----K	start bottom-line mode
-#enter_rvert_mode		rvert	str	rv	-		-	----K	start right-vertical mode
-#enter_lvert_mode		lvert	str	lv	-		-	----K	start left-vertical mode
-#
-#############################################################################
-#
-# ALIAS DECLARATIONS
-#
-# Here we set up aliases for translating extensions into standard terminfo.
-#
-#---------------------------------- Termcap aliases -------------------------
-#
-# BSD aliases:
-#
-# This is a common error in many termcap files.  We'll get notified during
-# translation when this (or any other alias) fires.
-#
-capalias	sb	sr	BSD	scroll text down
-#
-# AT&T extensions:
-#
-# The old AT&T 5410, 5420, 5425, pc6300plus, 610, and s4 entries used a set of
-# nonstandard capabilities.  Its signature is the KM capability, used to name
-# some sort of keymap file.  EE, BO, CI, CV, XS, DS, FL and FE are in this
-# set.  Comments in the original, and a little cross-checking with other AT&T
-# documentation, seem to establish the following mappings:
-#
-capalias	BO	mr	AT&T	enter_reverse_mode
-capalias	CI	vi	AT&T	cursor_invisible
-capalias	CV	ve	AT&T	cursor_normal
-capalias	DS	mh	AT&T	enter_dim_mode
-#capalias	EE	me	AT&T	exit_attribute_mode	
-capalias	FE	LF	AT&T	label_on
-capalias	FL	LO	AT&T	label_off
-capalias	XS	mk	AT&T	enter_secure_mode
-#
-# We comment out EE because the conflicting XENIX EE is more common in 
-# old entries.
-#
-# XENIX extensions:
-#
-# These are the ones we know how to translate directly:
-#
-capalias	EE	mh	XENIX	exit_attribute_mode	
-capalias	GE	ae	XENIX	exit_alt_charset_mode
-capalias	GS	as	XENIX	enter_alt_charset_mode
-capalias	CF	vi	XENIX	cursor_invis
-capalias	CO	ve	XENIX	cursor_normal
-capalias	EN	@7	XENIX	key_end
-capalias	HM	kh	XENIX	key_home
-capalias	LD	kL	XENIX	key_dl
-capalias	PD	kN	XENIX	key_npage
-capalias	PN	po	XENIX	prtr_off
-capalias	PS	pf	XENIX	prtr_on
-capalias	PU	kP	XENIX	key_ppage
-capalias	RT	@8	XENIX	kent
-capalias	UP	ku	XENIX	kcuu1
-capalias	G6	IGNORE	XENIX	double-ACS_ULCORNER
-capalias	G7	IGNORE	XENIX	double-ACS_LLCORNER
-capalias	G5	IGNORE	XENIX	double-ACS_URCORNER
-capalias	G8	IGNORE	XENIX	double-ACS_LRCORNER
-capalias	Gr	IGNORE	XENIX	double-ACS_LTEE
-capalias	Gr	IGNORE	XENIX	double-ACS_RTEE
-capalias	Gu	IGNORE	XENIX	double-ACS_BTEE
-capalias	Gd	IGNORE	XENIX	double ACS_TTEE
-capalias	Gh	IGNORE	XENIX	double-ACS_HLINE
-capalias	Gv	IGNORE	XENIX	double-ACS_VLINE
-capalias	Gc	IGNORE	XENIX	double-ACS_PLUS
-capalias	GG	IGNORE	XENIX	acs-glitch
-#
-# IBM extensions:
-#
-capalias	kq	%1	IBM	key_help
-#
-# Iris extensions:
-#
-capalias	HS	mh	IRIS	enter_dim_mode
-#
-# Tektronix extensions:
-#
-capalias	KA	k;	Tek	key_f10
-capalias	KB	F1	Tek	key_f11
-capalias	KC	F2	Tek	key_f12
-capalias	KD	F3	Tek	key_f13
-capalias	KE	F4	Tek	key_f14
-capalias	KF	F5	Tek	key_f15
-capalias	BC	Sb	Tek	set_background
-capalias	FC	Sf	Tek	set_foreground
-#
-# There are also the following:
-#
-#	XENIX	XENIX variable name	name clash with terminfo?
-#	-----	-------------------	-------------------------
-#	CL	key_char_left
-#	CR	key_char_right
-#	CW	key_change_window
-#	HP	??
-#	LF	key_linefeed 		label_off
-#	NU	key_next_unlocked_cell
-#	PL	??
-#	PR	??
-#	RC	key_recalc		remove_clock
-#	RF	key_toggle_ref		req_for_input
-#	WL	key_word_left
-#	WR	key_word_right
-#
-# If you know what any of the question-marked ones mean, please tell us.
-#
-#--------------------------------- Terminfo aliases ------------------------
-#
-# IBM extensions:
-#
-infoalias	font0	s0ds	IBM	set0_des_seq
-infoalias	font1	s1ds	IBM	set1_des_seq
-infoalias	font2	s2ds	IBM	set2_des_seq
-infoalias	font3	s3ds	IBM	set3_des_seq
-infoalias	kbtab	kcbt	IBM	key_backtab
-infoalias	ksel	kslt	IBM	key_select
-#
-# Some others are identical to SVr4/XPG4 capabilities, in particular:
-# kcmd, kend, khlp, and kf11...kf63.
 #
 #############################################################################
diff --git a/include/Caps.keys b/include/Caps.keys
index ebf392b..6f8a84e 100644
--- a/include/Caps.keys
+++ b/include/Caps.keys
@@ -1,5 +1,6 @@
 ##############################################################################
-# Copyright (c) 2001-2013,2015 Free Software Foundation, Inc.                #
+# Copyright 2019-2023,2024 Thomas E. Dickey                                  #
+# Copyright 2001-2015,2016 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 "Software"), #
@@ -29,14 +30,14 @@
 # Author: Thomas Dickey
 #    and: Ilya Zakharevich
 #
-# $Id: Caps.keys,v 1.8 2015/04/26 15:25:55 tom Exp $
+# $Id: Caps.keys,v 1.25 2024/04/20 21:05:02 tom Exp $
 #
 # This is an adaptation of ncurses' termcap/terminfo capability table, which
 # is illustrates an experimental extension to describe alt-, shift- and
 # control-modifiers applied to function and normal keys, as done on IBM pc's.
 #
 # This table is used to generate initializers for tables that drive tic,
-# infocmp, and the library compilation code used to support the termcap 
+# infocmp, and the library compilation code used to support the termcap
 # compatibility hack.  It is also used to generate the tabular portion of the
 # terminfo(5) man page; lines beginning with `#%' are passed through to become
 # the terminfo table.
@@ -49,7 +50,7 @@
 #
 # Column 1: terminfo variable name
 # Column 2: terminfo capability name
-# Column 3: capability type (boolean, numeric, or string)
+# Column 3: capability type (Boolean, numeric, or string)
 # Column 4: termcap capability name
 # Column 5: KEY_xxx name, if any, `-' otherwise
 # Column 6: value for KEY_xxx name, if any, `-' otherwise
@@ -59,7 +60,7 @@
 #
 # The codes following [Y-] in column 7 describe the versions of termcap which
 # use the given capability.  This information is not used by the curses library
-# proper; rather, it's there to help the terminfo maintainer avoid emitting
+# proper; rather, it is there to help the terminfo maintainer avoid emitting
 # termcap entry translations that are more than 1023 bytes long (and tank a
 # lot of old termcap-using programs).  The codes read as follows:
 #	B = mentioned in the BSD man page for 4.4BSD curses
@@ -99,8 +100,8 @@
 # 3. List it in the standard table.  You almost certainly do *not* want
 # to do this -- the capabilities in that one, and their order, have been
 # carefully chosen to be SVr4-binary-compatible when they're written out
-# as a terminfo object, and breaking this would be bad.  It's up to the ncurses
-# library what to do with the terminfo data after it's read in.
+# as a terminfo object, and breaking this would be bad.  It is up to the ncurses
+# library what to do with the terminfo data after it is read in.
 #
 # 4. List it in the aliases table with an IGNORE target field.  If you
 # do this, the capability will be ignored on input (though the user will
@@ -109,7 +110,7 @@
 # 5. List it in the extensions table. If you do this, the compiler will
 # silently accept the capability, but the curses library proper will never
 # see it (because it won't be written out as part of the terminfo object
-# format).  It's up to you what you have the compiler do with it.
+# format).  It is up to you what you have the compiler do with it.
 #
 # There are two opposite reasons to choose option 5.  One is when you want
 # to eat the capability silently and discard it when doing translations
@@ -121,14 +122,14 @@
 # You'll need to write custom code, probably in postprocess_termcap() or
 # postprocess_terminfo(), to handle the translation.
 #
-# CONTROLLING ENTRY LENGTH 
+# CONTROLLING ENTRY LENGTH
 #
 # Notes on specific elisions made to fit translations within 1023 bytes:
 #
 # Machines with IBM PC-like keyboards want to be able to define the following
 # keys: key_npage, key_ppage, key_home, key_ll (which is used for in termcap-
 # only environments for End or Home-Down), key_dc, and key_ic.  This is also
-# the set of keys the `joe' editor will be upset if it can't see.  So don't 
+# the set of keys the `joe' editor will be upset if it can't see.  So don't
 # trim those out of the set to be translated to termcap, or various users of
 # the termcap file will become irate.
 #
@@ -149,68 +150,109 @@
 #
 # It would be nice to keep f11 and f12 for Emacs use, but a couple of termcap
 # translations go back over critical if we do this.  As 4.4BSD curses fades
-# into history and GNU termcap's application base shrinks towards being GNU 
+# into history and GNU termcap's application base shrinks towards being GNU
 # Emacs only, we'll probably elide out some BSD-only capabilities in order
 # to buy space for non-essentials Emacs is still using.  Capabilities high
 # on that hit list: rc, sc, uc.
 #
+# FORMATTING THE TABLES
+#
+# We manually specify a (minimum) column width for the capability name
+# and terminfo code columns in the tables to achieve a consistent
+# arrangement; as used here, tbl(1) cannot know the width required by
+# one table's data while formatting another's.
+#
+# The longest capability names (C variables) are
+# "enter_near_letter_quality" and "bit_image_carriage_return" (tied at
+# 25n), and the longest terminfo codes are "setcolor", "kcdelete",
+# "kcinsert", "kadelete", and "kcinsert" (8n).
+#
+# The tables are a tight fit on traditional man(7) implementations that
+# use a line length of 65n, and the "Description" column has little room
+# within which the formatter can make breaking or adjustment decisions.
+# Words like "micro_..._address" and "parm_..._micro" don't break.
+# Reducing the inter-column gaps to 2 ens gives them enough room.  --GBR
+#
 #############################################################################
 #
 # STANDARD CAPABILITIES
 #
-#%The following is a complete table of the capabilities included in a
-#%terminfo description block and available to terminfo-using code.  In each
-#%line of the table,
-#%
-#%The \fBvariable\fR is the name by which the programmer (at the terminfo level)
-#%accesses the capability.
-#%
-#%The \fBcapname\fR is the short name used in the text of the database,
-#%and is used by a person updating the database.
-#%Whenever possible, capnames are chosen to be the same as or similar to
-#%the ANSI X3.64-1979 standard (now superseded by ECMA-48, which uses 
-#%identical or very similar names).  Semantics are also intended to match
-#%those of the specification.
-#%
-#%The termcap code is the old
-#%.B termcap
-#%capability name (some capabilities are new, and have names which termcap
-#%did not originate).
-#%.P
-#%Capability names have no hard length limit, but an informal limit of 5
-#%characters has been adopted to keep them short and to allow the tabs in
-#%the source file
-#%.B Caps
+#%Tables of capabilities
+#%.I \%ncurses
+#%recognizes in a
+#%.I \%term\%info
+#%terminal type description and available to
+#%.IR \%term\%info -using
+#%code follow.
+#%.bP
+#%The capability name identifies the symbol by which the programmer
+#%using the
+#%.I \%term\%info
+#%API accesses the capability.
+#%.bP
+#%The TI
+#%.RI ( \%term\%info )
+#%code is the short name used by a person composing or updating a
+#%terminal type entry.
+#%.IP
+#%Whenever possible,
+#%these codes are the same as or similar to those of the ANSI X3.64-1979
+#%standard
+#%(now superseded by ECMA-48,
+#%which uses identical or very similar names).
+#%Semantics are also intended to match those of the specification.
+#%.IP
+#%.I \%term\%info
+#%codes have no hard length limit,
+#%but
+#%.I \%ncurses
+#%maintains an informal one of 5 characters to keep them short and to
+#%allow the tabs in the source file
+#%.I Caps
 #%to line up nicely.
-#%
-#%Finally, the description field attempts to convey the semantics of the
-#%capability.  You may find some codes in the description field:
-#%.TP
-#%(P)
-#%indicates that padding may be specified
-#%.TP
-#%#[1-9]
-#%in the description field indicates that the string is passed through tparm with
-#%parms as given (#\fIi\fP).
-#%.TP
-#%(P*)
-#%indicates that padding may vary in proportion to the number of
-#%lines affected
-#%.TP
-#%(#\d\fIi\fP\u)
-#%indicates the \fIi\fP\uth\d parameter.
-#%
+#%(Some standard codes exceed this limit regardless.)
+#%.bP
+#%The TC
+#%.RI ( termcap )
+#%code is that used by the corresponding API of
+#%.IR \%ncurses .
+#%(Some capabilities are new,
+#%and have names that BSD
+#%.I termcap
+#%did not originate.)
+#%.bP
+#%The description field attempts to convey the capability's semantics.
 #%.PP
-#% These are the boolean capabilities:
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBBooleans	name	Code\fR
+#%The description field employs a handful of notations.
+#%.TP
+#%.B (P)
+#%indicates that padding may be specified.
+#%.TP
+#%.B (P*)
+#%indicates that padding may vary in proportion to the number of output
+#%lines affected.
+#%.TP
+#%.BI # i
+#%indicates the
+#%.IR i th
+#%parameter of a string capability;
+#%the programmer should pass the string to \fB\%tparm\fP(3X) with the
+#%parameters listed.
+#%.IP
+#%If the description lists no parameters,
+#%passing the string to \fB\%tparm\fP(3X) may produce unexpected
+#%behavior,
+#%for instance if the string contains percent signs.
+#%.
+#%.PP
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%Boolean Capability Name	TI	TC	Description
+#%_
 auto_left_margin		bw	bool	bw	-	-	YB-G-	cub1 wraps from column 0 to last column
 auto_right_margin		am	bool	am	-	-	YBCGE	terminal has automatic margins
 no_esc_ctlc			xsb	bool	xb	-	-	YBCG-	beehive (f1=escape, f2=ctrl C)
@@ -249,18 +291,16 @@
 cpi_changes_res			cpix	bool	YF	-	-	-----	changing character pitch changes resolution
 lpi_changes_res			lpix	bool	YG	-	-	-----	changing line pitch changes resolution
 #%.TE
-#%.ad
-#%
-#%These are the numeric capabilities:
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBNumeric	name	Code\fR
+#%.PP
+#%.
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%Numeric Capability Name	TI	TC	Description
+#%_
 columns				cols	num	co	-	-	YBCGE	number of columns in a line
 init_tabs			it	num	it	-	-	YB-G-	tabs initially every # spaces
 lines				lines	num	li	-	-	YBCGE	number of lines on screen or page
@@ -279,20 +319,21 @@
 max_pairs			pairs	num	pa	-	-	-----	maximum number of color-pairs on the screen
 no_color_video			ncv	num	NC	-	-	-----	video attributes that cannot be used with colors
 #%.TE
-#%.ad
-#%
+#%.PP
+#%.
 #%The following numeric capabilities are present in the SVr4.0 term structure,
-#%but are not yet documented in the man page.  They came in with SVr4's
-#%printer support.
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBNumeric	name	Code\fR
+#%but are not yet documented in the man page.
+#%They came in with SVr4's printer support.
+#%.
+#%.PP
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%Numeric Capability Name	TI	TC	Description
+#%_
 buffer_capacity			bufsz	num	Ya	-	-	-----	numbers of bytes buffered before printing
 dot_vert_spacing		spinv	num	Yb	-	-	-----	spacing of pins vertically in pins per inch
 dot_horz_spacing		spinh	num	Yc	-	-	-----	spacing of dots horizontally in dots per inch
@@ -311,18 +352,16 @@
 bit_image_entwining		bitwin	num	Yo	-	-	-----	number of passes for each bit-image row
 bit_image_type			bitype	num	Yp	-	-	-----	type of bit-image device
 #%.TE
-#%.ad
-#%
-#%These are the string capabilities:
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBString	name	Code\fR
+#%.PP
+#%.
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%String Capability Name	TI	TC	Description
+#%_
 back_tab			cbt	str	bt	-		-	YBCGE	back tab (P)
 bell				bel	str	bl	-		-	YB-GE	audible signal (bell) (P)
 carriage_return			cr	str	cr	-		-	YBCGE	carriage return (P*) (P*)
@@ -385,6 +424,10 @@
 key_dc				kdch1	str	kD	KEY_DC		0512	YB-G-	delete-character key
 key_dl				kdl1	str	kL	KEY_DL		0510	-B-G-*	delete-line key
 key_down			kcud1	str	kd	KEY_DOWN	0402	YBCGE	down-arrow key
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 key_eic				krmir	str	kM	KEY_EIC		0514	-B-G-*	sent by rmir or smir in insert mode
 key_eol				kel	str	kE	KEY_EOL		0517	-B-G-*	clear-to-end-of-line key
 key_eos				ked	str	kS	KEY_EOS		0516	-B-G-*	clear-to-end-of-screen key
@@ -447,6 +490,10 @@
 repeat_char			rep	str	rp	-		-	YB-GE	repeat char #1 #2 times (P*)
 reset_1string			rs1	str	r1	-		-	-B---	reset string
 reset_2string			rs2	str	r2	-		-	-B---	reset string
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 reset_3string			rs3	str	r3	-		-	-B---	reset string
 reset_file			rf	str	rf	-		-	-B---	name of reset file
 restore_cursor			rc	str	rc	-		-	YBCG-	restore cursor to position of last save_cursor
@@ -513,6 +560,10 @@
 key_save			ksav	str	&6	KEY_SAVE	0571	-----	save key
 key_suspend			kspd	str	&7	KEY_SUSPEND	0627	-----	suspend key
 key_undo			kund	str	&8	KEY_UNDO	0630	-----	undo key
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 key_sbeg			kBEG	str	&9	KEY_SBEG	0572	-----	shifted begin key
 key_scancel			kCAN	str	&0	KEY_SCANCEL	0573	-----	shifted cancel key
 key_scommand			kCMD	str	*1	KEY_SCOMMAND	0574	-----	shifted command key
@@ -575,6 +626,10 @@
 key_f40				kf40	str	FU	KEY_F(40)	-	----E	F40 function key
 key_f41				kf41	str	FV	KEY_F(41)	-	----E	F41 function key
 key_f42				kf42	str	FW	KEY_F(42)	-	----E	F42 function key
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 key_f43				kf43	str	FX	KEY_F(43)	-	----E	F43 function key
 key_f44				kf44	str	FY	KEY_F(44)	-	----E	F44 function key
 key_f45				kf45	str	FZ	KEY_F(45)	-	----E	F45 function key
@@ -598,7 +653,7 @@
 key_f63				kf63	str	Fr	KEY_F(63)	-	----E	F63 function key
 clr_bol				el1	str	cb	-		-	-----	Clear to beginning of line
 clear_margins			mgc	str	MC	-		-	-----	clear right and left soft margins
-set_left_margin			smgl	str	ML	-		-	-----	set left soft margin at current column.	 See smgl. (ML is not in BSD termcap).
+set_left_margin			smgl	str	ML	-		-	-----	set left soft margin at current column (not in BSD \fItermcap\fP)
 set_right_margin		smgr	str	MR	-		-	-----	set right soft margin at current column
 label_format			fln	str	Lf	-		-	-----	label format
 set_clock			sclk	str	SC	-		-	-----	set clock, #1 hrs #2 mins #3 secs
@@ -731,6 +786,10 @@
 change_res_vert			cvr	str	ZD	-		-	-----	Change vertical resolution to #1
 define_char			defc	str	ZE	-		-	-----	Define a character #1, #2 dots wide, descender #3
 enter_doublewide_mode		swidm	str	ZF	-		-	-----	Enter double-wide mode
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 enter_draft_quality		sdrfq	str	ZG	-		-	-----	Enter draft-quality mode
 enter_italics_mode		sitm	str	ZH	-		-	-----	Enter italic mode
 enter_leftward_mode		slm	str	ZI	-		-	-----	Start leftward carriage motion
@@ -776,19 +835,20 @@
 these_cause_cr			docr	str	Zw	-		-	-----	Printing any of these characters causes CR
 zero_motion			zerom	str	Zx	-		-	-----	No motion for subsequent character
 #%.TE
-#%.ad
-#%
+#%.PP
+#%.
 #%The following string capabilities are present in the SVr4.0 term structure,
 #%but were originally not documented in the man page.
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw18.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBString	name	Code\fR
+#%.
+#%.PP
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%String Capability Name	TI	TC	Description
+#%_
 char_set_names			csnm	str	Zy	-		-	-----	Produce #1'th item from list of character set names
 key_mouse			kmous	str	Km	KEY_MOUSE	0631	-----	Mouse event has occurred
 mouse_info			minfo	str	Mi	-		-	-----	Mouse status information
@@ -825,9 +885,8 @@
 scancode_escape			scesc	str	S7	-		-	-----	Escape for scancode emulation
 alt_scancode_esc		scesa	str	S8	-		-	-----	Alternate escape for scancode emulation
 #%.TE
-#%.ad
-#%
-#%.in .8i
+#%.PP
+#%.
 #%The XSI Curses standard added these hardcopy capabilities.
 #%They were used in some post-4.1 versions of System V curses,
 #%e.g., Solaris 2.5 and IRIX 6.x.
@@ -836,15 +895,16 @@
 #%If your compiled terminfo entries use these,
 #%they may not be binary-compatible with System V terminfo
 #%entries after SVr4.1; beware!
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBString	name	Code\fR
+#%.
+#%.PP
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%String Capability Name	TI	TC	Description
+#%_
 enter_horizontal_hl_mode	ehhlm	str	Xh	-		-	-----	Enter horizontal highlight mode
 enter_left_hl_mode		elhlm	str	Xl	-		-	-----	Enter left highlight mode
 enter_low_hl_mode		elohlm	str	Xo	-		-	-----	Enter low highlight mode
@@ -854,7 +914,6 @@
 set_a_attributes		sgr1	str	sA	-		-	-----	Define second set of video attributes #1-#6
 set_pglen_inch			slength	str	YI	-		-	-----	Set page length to #1 hundredth of an inch (some implementations use sL for termcap).
 #%.TE
-#%.ad
 #
 # The magic token below tells the tic compiler-generator code that all the caps
 # past it should be ignored (not written out) when dumping terminfo objects. It
@@ -916,7 +975,7 @@
 # GNU termcap *does* include the following extended capability,  Only the
 # now-obsolete Ann Arbor terminals used it.
 #
-# gnu_change_scroll_region	OTcS	str	cS	-		-	---GE	alternate set scrolling region 
+# gnu_change_scroll_region	OTcS	str	cS	-		-	---GE	alternate set scrolling region
 #
 # The following comments describe capnames so ancient that I believe no
 # software uses them any longer.  Some of these have to go because they
@@ -933,9 +992,9 @@
 # comma-separated list of capabilities for which there are corresponding keys.
 # The `kn' code is accepted but ignored.
 #
-# The `ma' capability seems to have been designed to map between the rogue(2)
-# motion keys (including jkhl) and characters emitted by arrow keys on some
-# primitive pre-ANSI terminals.  It's so obsolete it's fossilized...
+# The `ma' capability was a 4.0BSD feature used by vi version 2.
+# It consists of pairs of characters corresponding to kl, kr, ku, kd, and kh.
+# Besides being obsolete, that interpretation conflicts with max_attributes.
 #
 # Here is a description of memory_lock_above and memory_unlock:
 # "You can 'freeze' data on the screen by turning on Memory Lock in a line of
@@ -961,14 +1020,14 @@
 # vertical_tab_delay		OTdV	num	dV	-		-	-B---	padding required for ^V
 number_of_function_keys		OTkn	num	kn	-		-	-B-G-	count of function keys
 other_non_function_keys		OTko	str	ko	-		-	-B-G-	list of self-mapped keycaps
-arrow_key_map			OTma	str	ma	-		-	YBC--	map arrow keys rogue(1) motion keys
+arrow_key_map			OTma	str	ma	-		-	YBC--	map motion-keys for vi version 2
 # memory_lock_above		OTml	str	ml	-		-	-B---	lock visible screen memory above the current line
 # memory_unlock			OTmu	str	mu	-		-	-B---	unlock visible screen memory above the current line
 has_hardware_tabs		OTpt	bool	pt	-		-	YB---	has 8-char tabs invoked with ^I
 return_does_clr_eol		OTxr	bool	xr	-		-	YB---	return clears the line
 # tek_4025_insert_line		OTxx	bool	xx	-		-	-BC--	Tektronix 4025 insert-line glitch
 #
-# mytinfo described this as a termcap capability, but it's not listed in the
+# mytinfo described this as a termcap capability, but it is not listed in the
 # 4.4BSD man pages, and not found in the 4.4BSD termcap file.  The ncurses
 # package, like System V, behaves as though it is always true.
 #
@@ -977,7 +1036,7 @@
 # University of Waterloo termcap extensions (as described in mytinfo).
 # The `xl' termcap file clashes with a terminfo name; this ambiguity cannot
 # be resolved by a type check.  The descriptions are guesses from what was
-# in the mytinfo tables. 
+# in the mytinfo tables.
 #
 # key_interrupt_char		OTki	str	ki	-		-	-----	string set by interrupt key (?)
 # key_kill_char			OTkk	str	kk	-		-	-----	string set by kill key (?)
@@ -1026,7 +1085,7 @@
 # Gv	186 \272 M-:	double vertical line
 #
 # The compiler will translate the single-line caps and discard the others
-# (via IGNORE aliases further down).  We don't want to do normal pad 
+# (via IGNORE aliases further down).  We don't want to do normal pad
 # translation on these, they're often single-character printable ASCII
 # strings that happen to be numerics.  There's awk code in parametrized.sh
 # that detects the acs_ prefix and uses it to suppress pad translation.
@@ -1048,303 +1107,10 @@
 #
 # TERMINFO EXTENSION CAPABILITIES
 #
-# This section is almost all comments.  What it's mainly for is to describe
-# what capabilities need to be squeezed out to get down to the XSI Curses
-# standard set.  They are flagged with K.
-#
-# HP extensions
-#
-# These extensions follow ptr_non (replacing everything after it) in HP
-# terminfo files.  Except for memory_lock and memory_unlock, they are
-# functionally identical to SVr4 extensions, but they make the binary format
-# different.  Grrr....
+# (see Caps-ncurses for the complete set of comments)
 #
 memory_lock			meml	str	ml	-		-	----K	lock memory above cursor
 memory_unlock			memu	str	mu	-		-	----K	unlock memory
-#plab_norm			pln	str	pn	-		-	-----	program label #1 to show string #2
-#label_on			smln	str	LO	-		-	-----	turn on soft labels
-#label_off			rmln	str	LF	-		-	-----	turn off soft labels
-#key_f11			kf11	str	F1	-		-	-----	F11 function key
-#key_f12			kf12	str	F2	-		-	-----	F12 function key
-#key_f13			kf13	str	F3	-		-	-----	F13 function key
-#key_f14			kf14	str	F4	-		-	-----	F14 function key
-#key_f15			kf15	str	F5	-		-	-----	F15 function key
-#key_f16			kf16	str	F6	-		-	-----	F16 function key
-#key_f17			kf17	str	F7	-		-	-----	F17 function key
-#key_f18			kf18	str	F8	-		-	-----	F18 function key
-#key_f19			kf19	str	F9	-		-	-----	F19 function key
-#key_f20			kf20	str	FA	-		-	-----	F20 function key
-#key_f21			kf21	str	FB	-		-	-----	F21 function key
-#key_f22			kf22	str	FC	-		-	-----	F22 function key
-#key_f23			kf23	str	FD	-		-	-----	F23 function key
-#key_f24			kf24	str	FE	-		-	-----	F24 function key
-#key_f25			kf25	str	FF	-		-	-----	F25 function key
-#key_f26			kf26	str	FG	-		-	-----	F26 function key
-#key_f27			kf27	str	FH	-		-	-----	F27 function key
-#key_f28			kf28	str	FI	-		-	-----	F28 function key
-#key_f29			kf29	str	FJ	-		-	-----	F29 function key
-#key_f30			kf30	str	FK	-		-	-----	F30 function key
-#key_f31			kf31	str	FL	-		-	-----	F31 function key
-#key_f32			kf32	str	FM	-		-	-----	F32 function key
-#key_f33			kf33	str	FN	-		-	-----	F33 function key
-#key_f34			kf34	str	FO	-		-	-----	F34 function key
-#key_f35			kf35	str	FP	-		-	-----	F35 function key
-#key_f36			kf36	str	FQ	-		-	-----	F36 function key
-#key_f37			kf37	str	FR	-		-	-----	F37 function key
-#key_f38			kf38	str	FS	-		-	-----	F38 function key
-#key_f39			kf39	str	FT	-		-	-----	F39 function key
-#key_f40			kf40	str	FU	-		-	-----	F40 function key
-#key_f41			kf41	str	FV	-		-	-----	F41 function key
-#key_f42			kf42	str	FW	-		-	-----	F42 function key
-#key_f43			kf43	str	FX	-		-	-----	F43 function key
-#key_f44			kf44	str	FY	-		-	-----	F44 function key
-#key_f45			kf45	str	FZ	-		-	-----	F45 function key
-#key_f46			kf46	str	Fa	-		-	-----	F46 function key
-#key_f47			kf47	str	Fb	-		-	-----	F47 function key
-#key_f48			kf48	str	Fc	-		-	-----	F48 function key
-#key_f49			kf49	str	Fd	-		-	-----	F49 function key
-#key_f50			kf50	str	Fe	-		-	-----	F50 function key
-#key_f51			kf51	str	Ff	-		-	-----	F51 function key
-#key_f52			kf52	str	Fg	-		-	-----	F52 function key
-#key_f53			kf53	str	Fh	-		-	-----	F53 function key
-#key_f54			kf54	str	Fi	-		-	-----	F54 function key
-#key_f55			kf55	str	Fj	-		-	-----	F55 function key
-#key_f56			kf56	str	Fk	-		-	-----	F56 function key
-#key_f57			kf57	str	Fl	-		-	-----	F57 function key
-#key_f58			kf58	str	Fm	-		-	-----	F58 function key
-#key_f59			kf59	str	Fn	-		-	-----	F59 function key
-#key_f60			kf60	str	Fo	-		-	-----	F60 function key
-#key_f61			kf61	str	Fp	-		-	-----	F61 function key
-#key_f62			kf62	str	Fq	-		-	-----	F62 function key
-#key_f63			kf63	str	Fr	-		-	-----	F63 function key
-#
-# IBM extensions
-#
-# These extensions follow ptr_non (replacing everything after it) in IBM
-# terminfo files.
-#
-# The places in the box[12] capabilities correspond to acsc characters, here is
-# the mapping:
-#
-#	box1[0]  = ACS_ULCORNER
-#	box1[1]  = ACS_HLINE	
-#	box1[2]  = ACS_URCORNER
-#	box1[3]  = ACS_VLINE
-#	box1[4]  = ACS_LRCORNER
-#	box1[5]  = ACS_LLCORNER
-#	box1[6]  = ACS_TTEE
-#	box1[7]  = ACS_RTEE
-#	box1[8]  = ACS_BTEE
-#	box1[9]  = ACS_LTEE
-#	box1[10] = ACS_PLUS
-#
-# The box2 characters are the double-line versions of these forms graphics.
-#
 box_chars_1			box1	str	bx	-		-	----K	box characters primary set
-#box_chars_2			box2	str	by	-		-	----K	box characters secondary set
-#box_attr_1			batt1	str	Bx	-		-	----K	attributes for box1
-#box_attr_2			batt2	str	By	-		-	----K	attributes for box2
-#color_bg_0			colb0	str	d0	-		-	----K	background color 0
-#color_bg_1			colb1	str	d1	-		-	----K	background color 1
-#color_bg_2			colb2	str	d2	-		-	----K	background color 2
-#color_bg_3			colb3	str	d3	-		-	----K	background color 3
-#color_bg_4			colb4	str	d4	-		-	----K	background color 4
-#color_bg_5			colb5	str	d5	-		-	----K	background color 5
-#color_bg_6			colb6	str	d6	-		-	----K	background color 6
-#color_bg_7			colb7	str	d7	-		-	----K	background color 7
-#color_fg_0			colf0	str	c0	-		-	----K	foreground color 0
-#color_fg_1			colf1	str	c1	-		-	----K	foreground color 1
-#color_fg_2			colf2	str	c2	-		-	----K	foreground color 2
-#color_fg_3			colf3	str	c3	-		-	----K	foreground color 3
-#color_fg_4			colf4	str	c4	-		-	----K	foreground color 4
-#color_fg_5			colf5	str	c5	-		-	----K	foreground color 5
-#color_fg_6			colf6	str	c6	-		-	----K	foreground color 6
-#color_fg_7			colf7	str	c7	-		-	----K	foreground color 7
-#font_0				font0	str	f0	-		-	-----	select font 0
-#font_1				font1	str	f1	-		-	-----	select font 1
-#font_2				font2	str	f2	-		-	-----	select font 2
-#font_3				font3	str	f3	-		-	-----	select font 3
-#font_4				font4	str	f4	-		-	----K	select font 4
-#font_5				font5	str	f5	-		-	----K	select font 5
-#font_6				font6	str	f6	-		-	----K	select font 6
-#font_7				font7	str	f7	-		-	----K	select font 7
-#key_back_tab			kbtab	str	k0	-		-	-----	backtab key
-#key_do				kdo	str	ki	-		-	----K	do request key
-#key_command			kcmd	str	kd	-		-	----K	command-request key
-#key_command_pane		kcpn	str	kW	-		-	----K	command-pane key
-#key_end			kend	str	kw	-		-	-----	end key
-#key_help			khlp	str	kq	-		-	-----	help key
-#key_newline			knl	str	nl	-		-	----K	newline key
-#key_next_pane			knpn	str	kv	-		-	----K	next-pane key
-#key_prev_cmd			kppn	str	kp	-		-	----K	previous-command key
-#key_prev_pane			kppn	str	kV	-		-	----K	previous-pane key
-#key_quit			kquit	str	kQ	-		-	----K	quit key
-#key_select			ksel	str	kU	-		-	-----	select key
-#key_scroll_left		kscl	str	kz	-		-	----K	scroll left
-#key_scroll_right		kscr	str	kZ	-		-	----K	scroll right
-#key_tab			ktab	str	ko	-		-	----K	tab key
-#key_smap_in1			kmpf1	str	Kv	-		-	----K	special mapped key 1 input
-#key_smap_out1			kmpt1	str	KV	-		-	----K	special mapped key 1 output
-#key_smap_in2			kmpf2	str	Kw	-		-	----K	special mapped key 2 input
-#key_smap_out2			kmpt2	str	KW	-		-	----K	special mapped key 2 output
-#key_smap_in3			kmpf3	str	Kx	-		-	----K	special mapped key 3 input
-#key_smap_out3			kmpt3	str	KX	-		-	----K	special mapped key 3 output
-#key_smap_in4			kmpf4	str	Ky	-		-	----K	special mapped key 4 input
-#key_smap_out4			kmpt4	str	KY	-		-	----K	special mapped key 4 output
-#key_smap_in5			kmpf5	str	Kz	-		-	----K	special mapped key 5 input
-#key_smap_out5			kmpt5	str	KZ	-		-	----K	special mapped key 5 output
-#appl_defined_str		apstr	str	za	-		-	----K	application-defined string
-# The key_smap_in[6789] and key_smap_out[6789] capabilities aren't described in
-# the IBM manual pages, so the cap name strings are guesses.  The terminfo
-# names are almost certainly right, the termcap ones almost certainly wrong.
-#key_smap_in6			kmpf6	str	k!	-		-	----K	special mapped key 6 input
-#key_smap_out6			kmpt6	str	K@	-		-	----K	special mapped key 6 output
-#key_smap_in7			kmpf7	str	k#	-		-	----K	special mapped key 7 input
-#key_smap_out7			kmpt7	str	K$	-		-	----K	special mapped key 7 output
-#key_smap_in8			kmpf8	str	k%	-		-	----K	special mapped key 8 input
-#key_smap_out8			kmpt8	str	K^	-		-	----K	special mapped key 8 output
-#key_smap_in9			kmpf9	str	k&	-		-	----K	special mapped key 9 input
-#key_smap_out9			kmpt9	str	K*	-		-	----K	special mapped key 9 output
-# Undocumented capabilities end here
-#key_sf1			ksf1	str	S1	-		-	----K	special function key 1
-#key_sf2			ksf2	str	S2	-		-	----K	special function key 2
-#key_sf3			ksf3	str	S3	-		-	----K	special function key 3
-#key_sf4			ksf4	str	S4	-		-	----K	special function key 4
-#key_sf5			ksf5	str	S5	-		-	----K	special function key 5
-#key_sf6			ksf6	str	S6	-		-	----K	special function key 6
-#key_sf7			ksf7	str	S7	-		-	----K	special function key 7
-#key_sf8			ksf8	str	S8	-		-	----K	special function key 8
-#key_sf9			ksf9	str	S9	-		-	----K	special function key 9
-#key_sf10			ksf10	str	SA	-		-	----K	special function key 10
-# AIX version 3 documents different codes for F11, F12 and does not mention
-# F13-F64.  AIX version 4 uses the same naming for F0-F63 as above.
-#key_f11			kf11	str	k<	-		-	-----	function key 11
-#key_f12			kf12	str	k>	-		-	-----	function key 12
-# Undocumented capabilities end here.
-#key_action			kact	str	kJ	-		-	----K	sent by action key
-# The IBM docs say these capabilities are for table-drawing, and are
-# valid only for aixterm descriptions.
-#enter_topline_mode		topl	str	tp	-		-	----K	start top-line mode
-#enter_bottom_mode		btml	str	bm	-		-	----K	start bottom-line mode
-#enter_rvert_mode		rvert	str	rv	-		-	----K	start right-vertical mode
-#enter_lvert_mode		lvert	str	lv	-		-	----K	start left-vertical mode
-#
-#############################################################################
-#
-# ALIAS DECLARATIONS
-#
-# Here we set up aliases for translating extensions into standard terminfo.
-#
-#---------------------------------- Termcap aliases -------------------------
-#
-# BSD aliases:
-#
-# This is a common error in many termcap files.  We'll get notified during
-# translation when this (or any other alias) fires.
-#
-capalias	sb	sr	BSD	scroll text down
-#
-# AT&T extensions:
-#
-# The old AT&T 5410, 5420, 5425, pc6300plus, 610, and s4 entries used a set of
-# nonstandard capabilities.  Its signature is the KM capability, used to name
-# some sort of keymap file.  EE, BO, CI, CV, XS, DS, FL and FE are in this
-# set.  Comments in the original, and a little cross-checking with other AT&T
-# documentation, seem to establish the following mappings:
-#
-capalias	BO	mr	AT&T	enter_reverse_mode
-capalias	CI	vi	AT&T	cursor_invisible
-capalias	CV	ve	AT&T	cursor_normal
-capalias	DS	mh	AT&T	enter_dim_mode
-#capalias	EE	me	AT&T	exit_attribute_mode	
-capalias	FE	LF	AT&T	label_on
-capalias	FL	LO	AT&T	label_off
-capalias	XS	mk	AT&T	enter_secure_mode
-#
-# We comment out EE because the conflicting XENIX EE is more common in 
-# old entries.
-#
-# XENIX extensions:
-#
-# These are the ones we know how to translate directly:
-#
-capalias	EE	mh	XENIX	exit_attribute_mode	
-capalias	GE	ae	XENIX	exit_alt_charset_mode
-capalias	GS	as	XENIX	enter_alt_charset_mode
-capalias	CF	vi	XENIX	cursor_invis
-capalias	CO	ve	XENIX	cursor_normal
-capalias	EN	@7	XENIX	key_end
-capalias	HM	kh	XENIX	key_home
-capalias	LD	kL	XENIX	key_dl
-capalias	PD	kN	XENIX	key_npage
-capalias	PN	po	XENIX	prtr_off
-capalias	PS	pf	XENIX	prtr_on
-capalias	PU	kP	XENIX	key_ppage
-capalias	RT	@8	XENIX	kent
-capalias	UP	ku	XENIX	kcuu1
-capalias	G6	IGNORE	XENIX	double-ACS_ULCORNER
-capalias	G7	IGNORE	XENIX	double-ACS_LLCORNER
-capalias	G5	IGNORE	XENIX	double-ACS_URCORNER
-capalias	G8	IGNORE	XENIX	double-ACS_LRCORNER
-capalias	Gr	IGNORE	XENIX	double-ACS_LTEE
-capalias	Gr	IGNORE	XENIX	double-ACS_RTEE
-capalias	Gu	IGNORE	XENIX	double-ACS_BTEE
-capalias	Gd	IGNORE	XENIX	double ACS_TTEE
-capalias	Gh	IGNORE	XENIX	double-ACS_HLINE
-capalias	Gv	IGNORE	XENIX	double-ACS_VLINE
-capalias	Gc	IGNORE	XENIX	double-ACS_PLUS
-capalias	GG	IGNORE	XENIX	acs-glitch
-#
-# IBM extensions:
-#
-capalias	kq	%1	IBM	key_help
-#
-# Iris extensions:
-#
-capalias	HS	mh	IRIS	enter_dim_mode
-#
-# Tektronix extensions:
-#
-capalias	KA	k;	Tek	key_f10
-capalias	KB	F1	Tek	key_f11
-capalias	KC	F2	Tek	key_f12
-capalias	KD	F3	Tek	key_f13
-capalias	KE	F4	Tek	key_f14
-capalias	KF	F5	Tek	key_f15
-capalias	BC	Sb	Tek	set_background
-capalias	FC	Sf	Tek	set_foreground
-#
-# There are also the following:
-#
-#	XENIX	XENIX variable name	name clash with terminfo?
-#	-----	-------------------	-------------------------
-#	CL	key_char_left
-#	CR	key_char_right
-#	CW	key_change_window
-#	HP	??
-#	LF	key_linefeed 		label_off
-#	NU	key_next_unlocked_cell
-#	PL	??
-#	PR	??
-#	RC	key_recalc		remove_clock
-#	RF	key_toggle_ref		req_for_input
-#	WL	key_word_left
-#	WR	key_word_right
-#
-# If you know what any of the question-marked ones mean, please tell us.
-#
-#--------------------------------- Terminfo aliases ------------------------
-#
-# IBM extensions:
-#
-infoalias	font0	s0ds	IBM	set0_des_seq
-infoalias	font1	s1ds	IBM	set1_des_seq
-infoalias	font2	s2ds	IBM	set2_des_seq
-infoalias	font3	s3ds	IBM	set3_des_seq
-infoalias	kbtab	kcbt	IBM	key_backtab
-infoalias	ksel	kslt	IBM	key_select
-#
-# Some others are identical to SVr4/XPG4 capabilities, in particular:
-# kcmd, kend, khlp, and kf11...kf63.
 #
 #############################################################################
diff --git a/include/Caps.osf1r5 b/include/Caps.osf1r5
index e1bfe0b..ece14ae 100644
--- a/include/Caps.osf1r5
+++ b/include/Caps.osf1r5
@@ -1,5 +1,6 @@
 ##############################################################################
-# Copyright (c) 2002-2011,2015 Free Software Foundation, Inc.                #
+# Copyright 2019-2023,2024 Thomas E. Dickey                                  #
+# Copyright 2002-2015,2016 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 "Software"), #
@@ -28,13 +29,13 @@
 #
 # Author: Thomas Dickey
 #
-# $Id: Caps.osf1r5,v 1.7 2015/04/26 15:25:55 tom Exp $
+# $Id: Caps.osf1r5,v 1.24 2024/04/20 21:05:02 tom Exp $
 #
 # This is an adaptation of ncurses' termcap/terminfo capability table, which
 # is designed to align with OSF/1 version 5 (Tru64) terminfo.
 #
 # This table is used to generate initializers for tables that drive tic,
-# infocmp, and the library compilation code used to support the termcap 
+# infocmp, and the library compilation code used to support the termcap
 # compatibility hack.  It is also used to generate the tabular portion of the
 # terminfo(5) man page; lines beginning with `#%' are passed through to become
 # the terminfo table.
@@ -47,7 +48,7 @@
 #
 # Column 1: terminfo variable name
 # Column 2: terminfo capability name
-# Column 3: capability type (boolean, numeric, or string)
+# Column 3: capability type (Boolean, numeric, or string)
 # Column 4: termcap capability name
 # Column 5: KEY_xxx name, if any, `-' otherwise
 # Column 6: value for KEY_xxx name, if any, `-' otherwise
@@ -57,7 +58,7 @@
 #
 # The codes following [Y-] in column 7 describe the versions of termcap which
 # use the given capability.  This information is not used by the curses library
-# proper; rather, it's there to help the terminfo maintainer avoid emitting
+# proper; rather, it is there to help the terminfo maintainer avoid emitting
 # termcap entry translations that are more than 1023 bytes long (and tank a
 # lot of old termcap-using programs).  The codes read as follows:
 #	B = mentioned in the BSD man page for 4.4BSD curses
@@ -97,8 +98,8 @@
 # 3. List it in the standard table.  You almost certainly do *not* want
 # to do this -- the capabilities in that one, and their order, have been
 # carefully chosen to be SVr4-binary-compatible when they're written out
-# as a terminfo object, and breaking this would be bad.  It's up to the ncurses
-# library what to do with the terminfo data after it's read in.
+# as a terminfo object, and breaking this would be bad.  It is up to the ncurses
+# library what to do with the terminfo data after it is read in.
 #
 # 4. List it in the aliases table with an IGNORE target field.  If you
 # do this, the capability will be ignored on input (though the user will
@@ -107,7 +108,7 @@
 # 5. List it in the extensions table. If you do this, the compiler will
 # silently accept the capability, but the curses library proper will never
 # see it (because it won't be written out as part of the terminfo object
-# format).  It's up to you what you have the compiler do with it.
+# format).  It is up to you what you have the compiler do with it.
 #
 # There are two opposite reasons to choose option 5.  One is when you want
 # to eat the capability silently and discard it when doing translations
@@ -119,14 +120,14 @@
 # You'll need to write custom code, probably in postprocess_termcap() or
 # postprocess_terminfo(), to handle the translation.
 #
-# CONTROLLING ENTRY LENGTH 
+# CONTROLLING ENTRY LENGTH
 #
 # Notes on specific elisions made to fit translations within 1023 bytes:
 #
 # Machines with IBM PC-like keyboards want to be able to define the following
 # keys: key_npage, key_ppage, key_home, key_ll (which is used for in termcap-
 # only environments for End or Home-Down), key_dc, and key_ic.  This is also
-# the set of keys the `joe' editor will be upset if it can't see.  So don't 
+# the set of keys the `joe' editor will be upset if it can't see.  So don't
 # trim those out of the set to be translated to termcap, or various users of
 # the termcap file will become irate.
 #
@@ -147,68 +148,108 @@
 #
 # It would be nice to keep f11 and f12 for Emacs use, but a couple of termcap
 # translations go back over critical if we do this.  As 4.4BSD curses fades
-# into history and GNU termcap's application base shrinks towards being GNU 
+# into history and GNU termcap's application base shrinks towards being GNU
 # Emacs only, we'll probably elide out some BSD-only capabilities in order
 # to buy space for non-essentials Emacs is still using.  Capabilities high
 # on that hit list: rc, sc, uc.
 #
+# FORMATTING THE TABLES
+#
+# We manually specify a (minimum) column width for the capability name
+# and terminfo code columns in the tables to achieve a consistent
+# arrangement; as used here, tbl(1) cannot know the width required by
+# one table's data while formatting another's.
+#
+# The longest capability names (C variables) are
+# "enter_near_letter_quality" and "bit_image_carriage_return" (tied at
+# 25n), and the longest terminfo code is "setcolor" (8n).
+#
+# The tables are a tight fit on traditional man(7) implementations that
+# use a line length of 65n, and the "Description" column has little room
+# within which the formatter can make breaking or adjustment decisions.
+# Words like "micro_..._address" and "parm_..._micro" don't break.
+# Reducing the inter-column gaps to 2 ens gives them enough room.  --GBR
+#
 #############################################################################
 #
 # STANDARD CAPABILITIES
 #
-#%The following is a complete table of the capabilities included in a
-#%terminfo description block and available to terminfo-using code.  In each
-#%line of the table,
-#%
-#%The \fBvariable\fR is the name by which the programmer (at the terminfo level)
-#%accesses the capability.
-#%
-#%The \fBcapname\fR is the short name used in the text of the database,
-#%and is used by a person updating the database.
-#%Whenever possible, capnames are chosen to be the same as or similar to
-#%the ANSI X3.64-1979 standard (now superseded by ECMA-48, which uses 
-#%identical or very similar names).  Semantics are also intended to match
-#%those of the specification.
-#%
-#%The termcap code is the old
-#%.B termcap
-#%capability name (some capabilities are new, and have names which termcap
-#%did not originate).
-#%.P
-#%Capability names have no hard length limit, but an informal limit of 5
-#%characters has been adopted to keep them short and to allow the tabs in
-#%the source file
-#%.B Caps
+#%Tables of capabilities
+#%.I \%ncurses
+#%recognizes in a
+#%.I \%term\%info
+#%terminal type description and available to
+#%.IR \%term\%info -using
+#%code follow.
+#%.bP
+#%The capability name identifies the symbol by which the programmer
+#%using the
+#%.I \%term\%info
+#%API accesses the capability.
+#%.bP
+#%The TI
+#%.RI ( \%term\%info )
+#%code is the short name used by a person composing or updating a
+#%terminal type entry.
+#%.IP
+#%Whenever possible,
+#%these codes are the same as or similar to those of the ANSI X3.64-1979
+#%standard
+#%(now superseded by ECMA-48,
+#%which uses identical or very similar names).
+#%Semantics are also intended to match those of the specification.
+#%.IP
+#%.I \%term\%info
+#%codes have no hard length limit,
+#%but
+#%.I \%ncurses
+#%maintains an informal one of 5 characters to keep them short and to
+#%allow the tabs in the source file
+#%.I Caps
 #%to line up nicely.
-#%
-#%Finally, the description field attempts to convey the semantics of the
-#%capability.  You may find some codes in the description field:
-#%.TP
-#%(P)
-#%indicates that padding may be specified
-#%.TP
-#%#[1-9]
-#%in the description field indicates that the string is passed through tparm with
-#%parms as given (#\fIi\fP).
-#%.TP
-#%(P*)
-#%indicates that padding may vary in proportion to the number of
-#%lines affected
-#%.TP
-#%(#\d\fIi\fP\u)
-#%indicates the \fIi\fP\uth\d parameter.
-#%
+#%(Some standard codes exceed this limit regardless.)
+#%.bP
+#%The TC
+#%.RI ( termcap )
+#%code is that used by the corresponding API of
+#%.IR \%ncurses .
+#%(Some capabilities are new,
+#%and have names that BSD
+#%.I termcap
+#%did not originate.)
+#%.bP
+#%The description field attempts to convey the capability's semantics.
 #%.PP
-#% These are the boolean capabilities:
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBBooleans	name	Code\fR
+#%The description field employs a handful of notations.
+#%.TP
+#%.B (P)
+#%indicates that padding may be specified.
+#%.TP
+#%.B (P*)
+#%indicates that padding may vary in proportion to the number of output
+#%lines affected.
+#%.TP
+#%.BI # i
+#%indicates the
+#%.IR i th
+#%parameter of a string capability;
+#%the programmer should pass the string to \fB\%tparm\fP(3X) with the
+#%parameters listed.
+#%.IP
+#%If the description lists no parameters,
+#%passing the string to \fB\%tparm\fP(3X) may produce unexpected
+#%behavior,
+#%for instance if the string contains percent signs.
+#%.
+#%.PP
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%Boolean Capability Name	TI	TC	Description
+#%_
 auto_left_margin		bw	bool	bw	-	-	YB-G-	cub1 wraps from column 0 to last column
 auto_right_margin		am	bool	am	-	-	YBCGE	terminal has automatic margins
 no_esc_ctlc			xsb	bool	xb	-	-	YBCG-	beehive (f1=escape, f2=ctrl C)
@@ -247,18 +288,16 @@
 row_addr_glitch			xvpa	bool	YD	-	-	-----	only positive motion for vpa/mvpa caps
 semi_auto_right_margin		sam	bool	YE	-	-	-----	printing in last column causes cr
 #%.TE
-#%.ad
-#%
-#%These are the numeric capabilities:
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBNumeric	name	Code\fR
+#%.PP
+#%.
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%Numeric Capability Name	TI	TC	Description
+#%_
 columns				cols	num	co	-	-	YBCGE	number of columns in a line
 init_tabs			it	num	it	-	-	YB-G-	tabs initially every # spaces
 lines				lines	num	li	-	-	YBCGE	number of lines on screen or page
@@ -293,18 +332,16 @@
 print_rate			cps	num	Ym	-	-	-----	print rate in characters per second
 wide_char_size			widcs	num	Yn	-	-	-----	character step size when in double wide mode
 #%.TE
-#%.ad
-#%
-#%These are the string capabilities:
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBString	name	Code\fR
+#%.PP
+#%.
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
+#%\&	Code	\&
+#%String Capability Name	TI	TC	Description
+#%_
 back_tab			cbt	str	bt	-		-	YBCGE	back tab (P)
 bell				bel	str	bl	-		-	YB-GE	audible signal (bell) (P)
 carriage_return			cr	str	cr	-		-	YBCGE	carriage return (P*) (P*)
@@ -367,6 +404,10 @@
 key_dc				kdch1	str	kD	KEY_DC		0512	YB-G-	delete-character key
 key_dl				kdl1	str	kL	KEY_DL		0510	-B-G-*	delete-line key
 key_down			kcud1	str	kd	KEY_DOWN	0402	YBCGE	down-arrow key
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 key_eic				krmir	str	kM	KEY_EIC		0514	-B-G-*	sent by rmir or smir in insert mode
 key_eol				kel	str	kE	KEY_EOL		0517	-B-G-*	clear-to-end-of-line key
 key_eos				ked	str	kS	KEY_EOS		0516	-B-G-*	clear-to-end-of-screen key
@@ -429,6 +470,10 @@
 repeat_char			rep	str	rp	-		-	YB-GE	repeat char #1 #2 times (P*)
 reset_1string			rs1	str	r1	-		-	-B---	reset string
 reset_2string			rs2	str	r2	-		-	-B---	reset string
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 reset_3string			rs3	str	r3	-		-	-B---	reset string
 reset_file			rf	str	rf	-		-	-B---	name of reset file
 restore_cursor			rc	str	rc	-		-	YBCG-	restore cursor to position of last save_cursor
@@ -584,6 +629,10 @@
 end_bit_image_region		endbi	str	Yy	-		-	-----	End a bit-image region
 enter_am_mode			smam	str	SA	-		-	-----	turn on automatic margins
 enter_doublewide_mode		swidm	str	ZF	-		-	-----	Enter double-wide mode
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 enter_draft_quality		sdrfq	str	ZG	-		-	-----	Enter draft-quality mode
 enter_italics_mode		sitm	str	ZH	-		-	-----	Enter italic mode
 enter_leftward_mode		slm	str	ZI	-		-	-----	Start leftward carriage motion
@@ -630,6 +679,10 @@
 key_f40				kf40	str	FU	KEY_F(40)	-	----E	F40 function key
 key_f41				kf41	str	FV	KEY_F(41)	-	----E	F41 function key
 key_f42				kf42	str	FW	KEY_F(42)	-	----E	F42 function key
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 key_f43				kf43	str	FX	KEY_F(43)	-	----E	F43 function key
 key_f44				kf44	str	FY	KEY_F(44)	-	----E	F44 function key
 key_f45				kf45	str	FZ	KEY_F(45)	-	----E	F45 function key
@@ -668,6 +721,10 @@
 key_restart			krst	str	&4	KEY_RESTART	0567	-----	restart key
 key_resume			kres	str	&5	KEY_RESUME	0570	-----	resume key
 key_save			ksav	str	&6	KEY_SAVE	0571	-----	save key
+#%.TE
+#%.TS
+#%center;
+#%Lbw(25n)2 Lbw(8n)2 Lb2 Lx.
 key_sbeg			kBEG	str	&9	KEY_SBEG	0572	-----	shifted begin key
 key_scancel			kCAN	str	&0	KEY_SCANCEL	0573	-----	shifted cancel key
 key_scommand			kCMD	str	*1	KEY_SCOMMAND	0574	-----	shifted command key
@@ -738,7 +795,7 @@
 set_color_band		setcolor	str	Yz	-		-	-----	Change to ribbon color #1
 set_color_pair			scp	str	sp	-		-	-----	Set current color pair to #1
 set_foreground			setf	str	Sf	-		-	-----	Set foreground color #1
-set_left_margin			smgl	str	ML	-		-	-----	set left soft margin at current column.	 See smgl. (ML is not in BSD termcap).
+set_left_margin			smgl	str	ML	-		-	-----	set left soft margin at current column (not in BSD \fItermcap\fP)
 set_left_margin_parm		smglp	str	Zm	-		-	-----	Set left (right) margin at column #1
 set_lr_margin			smglr	str	ML	-		-	-----	Set both left and right margins to #1, #2.  (ML is not in BSD termcap).
 set_page_length			slines	str	YZ	-		-	-----	Set page length to #1 lines
@@ -834,7 +891,7 @@
 # GNU termcap *does* include the following extended capability,  Only the
 # now-obsolete Ann Arbor terminals used it.
 #
-# gnu_change_scroll_region	OTcS	str	cS	-		-	---GE	alternate set scrolling region 
+# gnu_change_scroll_region	OTcS	str	cS	-		-	---GE	alternate set scrolling region
 #
 # The following comments describe capnames so ancient that I believe no
 # software uses them any longer.  Some of these have to go because they
@@ -851,9 +908,9 @@
 # comma-separated list of capabilities for which there are corresponding keys.
 # The `kn' code is accepted but ignored.
 #
-# The `ma' capability seems to have been designed to map between the rogue(2)
-# motion keys (including jkhl) and characters emitted by arrow keys on some
-# primitive pre-ANSI terminals.  It's so obsolete it's fossilized...
+# The `ma' capability was a 4.0BSD feature used by vi version 2.
+# It consists of pairs of characters corresponding to kl, kr, ku, kd, and kh.
+# Besides being obsolete, that interpretation conflicts with max_attributes.
 #
 # Here is a description of memory_lock_above and memory_unlock:
 # "You can 'freeze' data on the screen by turning on Memory Lock in a line of
@@ -879,14 +936,14 @@
 # vertical_tab_delay		OTdV	num	dV	-		-	-B---	padding required for ^V
 number_of_function_keys		OTkn	num	kn	-		-	-B-G-	count of function keys
 other_non_function_keys		OTko	str	ko	-		-	-B-G-	list of self-mapped keycaps
-arrow_key_map			OTma	str	ma	-		-	YBC--	map arrow keys rogue(1) motion keys
+arrow_key_map			OTma	str	ma	-		-	YBC--	map motion-keys for vi version 2
 # memory_lock_above		OTml	str	ml	-		-	-B---	lock visible screen memory above the current line
 # memory_unlock			OTmu	str	mu	-		-	-B---	unlock visible screen memory above the current line
 has_hardware_tabs		OTpt	bool	pt	-		-	YB---	has 8-char tabs invoked with ^I
 return_does_clr_eol		OTxr	bool	xr	-		-	YB---	return clears the line
 # tek_4025_insert_line		OTxx	bool	xx	-		-	-BC--	Tektronix 4025 insert-line glitch
 #
-# mytinfo described this as a termcap capability, but it's not listed in the
+# mytinfo described this as a termcap capability, but it is not listed in the
 # 4.4BSD man pages, and not found in the 4.4BSD termcap file.  The ncurses
 # package, like System V, behaves as though it is always true.
 #
@@ -895,7 +952,7 @@
 # University of Waterloo termcap extensions (as described in mytinfo).
 # The `xl' termcap file clashes with a terminfo name; this ambiguity cannot
 # be resolved by a type check.  The descriptions are guesses from what was
-# in the mytinfo tables. 
+# in the mytinfo tables.
 #
 # key_interrupt_char		OTki	str	ki	-		-	-----	string set by interrupt key (?)
 # key_kill_char			OTkk	str	kk	-		-	-----	string set by kill key (?)
@@ -944,7 +1001,7 @@
 # Gv	186 \272 M-:	double vertical line
 #
 # The compiler will translate the single-line caps and discard the others
-# (via IGNORE aliases further down).  We don't want to do normal pad 
+# (via IGNORE aliases further down).  We don't want to do normal pad
 # translation on these, they're often single-character printable ASCII
 # strings that happen to be numerics.  There's awk code in parametrized.sh
 # that detects the acs_ prefix and uses it to suppress pad translation.
@@ -966,303 +1023,9 @@
 #
 # TERMINFO EXTENSION CAPABILITIES
 #
-# This section is almost all comments.  What it's mainly for is to describe
-# what capabilities need to be squeezed out to get down to the XSI Curses
-# standard set.  They are flagged with K.
-#
-# HP extensions
-#
-# These extensions follow ptr_non (replacing everything after it) in HP
-# terminfo files.  Except for memory_lock and memory_unlock, they are
-# functionally identical to SVr4 extensions, but they make the binary format
-# different.  Grrr....
+# (see Caps-ncurses for the complete set of comments)
 #
 memory_lock			meml	str	ml	-		-	----K	lock memory above cursor
 memory_unlock			memu	str	mu	-		-	----K	unlock memory
-#plab_norm			pln	str	pn	-		-	-----	program label #1 to show string #2
-#label_on			smln	str	LO	-		-	-----	turn on soft labels
-#label_off			rmln	str	LF	-		-	-----	turn off soft labels
-#key_f11			kf11	str	F1	-		-	-----	F11 function key
-#key_f12			kf12	str	F2	-		-	-----	F12 function key
-#key_f13			kf13	str	F3	-		-	-----	F13 function key
-#key_f14			kf14	str	F4	-		-	-----	F14 function key
-#key_f15			kf15	str	F5	-		-	-----	F15 function key
-#key_f16			kf16	str	F6	-		-	-----	F16 function key
-#key_f17			kf17	str	F7	-		-	-----	F17 function key
-#key_f18			kf18	str	F8	-		-	-----	F18 function key
-#key_f19			kf19	str	F9	-		-	-----	F19 function key
-#key_f20			kf20	str	FA	-		-	-----	F20 function key
-#key_f21			kf21	str	FB	-		-	-----	F21 function key
-#key_f22			kf22	str	FC	-		-	-----	F22 function key
-#key_f23			kf23	str	FD	-		-	-----	F23 function key
-#key_f24			kf24	str	FE	-		-	-----	F24 function key
-#key_f25			kf25	str	FF	-		-	-----	F25 function key
-#key_f26			kf26	str	FG	-		-	-----	F26 function key
-#key_f27			kf27	str	FH	-		-	-----	F27 function key
-#key_f28			kf28	str	FI	-		-	-----	F28 function key
-#key_f29			kf29	str	FJ	-		-	-----	F29 function key
-#key_f30			kf30	str	FK	-		-	-----	F30 function key
-#key_f31			kf31	str	FL	-		-	-----	F31 function key
-#key_f32			kf32	str	FM	-		-	-----	F32 function key
-#key_f33			kf33	str	FN	-		-	-----	F33 function key
-#key_f34			kf34	str	FO	-		-	-----	F34 function key
-#key_f35			kf35	str	FP	-		-	-----	F35 function key
-#key_f36			kf36	str	FQ	-		-	-----	F36 function key
-#key_f37			kf37	str	FR	-		-	-----	F37 function key
-#key_f38			kf38	str	FS	-		-	-----	F38 function key
-#key_f39			kf39	str	FT	-		-	-----	F39 function key
-#key_f40			kf40	str	FU	-		-	-----	F40 function key
-#key_f41			kf41	str	FV	-		-	-----	F41 function key
-#key_f42			kf42	str	FW	-		-	-----	F42 function key
-#key_f43			kf43	str	FX	-		-	-----	F43 function key
-#key_f44			kf44	str	FY	-		-	-----	F44 function key
-#key_f45			kf45	str	FZ	-		-	-----	F45 function key
-#key_f46			kf46	str	Fa	-		-	-----	F46 function key
-#key_f47			kf47	str	Fb	-		-	-----	F47 function key
-#key_f48			kf48	str	Fc	-		-	-----	F48 function key
-#key_f49			kf49	str	Fd	-		-	-----	F49 function key
-#key_f50			kf50	str	Fe	-		-	-----	F50 function key
-#key_f51			kf51	str	Ff	-		-	-----	F51 function key
-#key_f52			kf52	str	Fg	-		-	-----	F52 function key
-#key_f53			kf53	str	Fh	-		-	-----	F53 function key
-#key_f54			kf54	str	Fi	-		-	-----	F54 function key
-#key_f55			kf55	str	Fj	-		-	-----	F55 function key
-#key_f56			kf56	str	Fk	-		-	-----	F56 function key
-#key_f57			kf57	str	Fl	-		-	-----	F57 function key
-#key_f58			kf58	str	Fm	-		-	-----	F58 function key
-#key_f59			kf59	str	Fn	-		-	-----	F59 function key
-#key_f60			kf60	str	Fo	-		-	-----	F60 function key
-#key_f61			kf61	str	Fp	-		-	-----	F61 function key
-#key_f62			kf62	str	Fq	-		-	-----	F62 function key
-#key_f63			kf63	str	Fr	-		-	-----	F63 function key
-#
-# IBM extensions
-#
-# These extensions follow ptr_non (replacing everything after it) in IBM
-# terminfo files.
-#
-# The places in the box[12] capabilities correspond to acsc characters, here is
-# the mapping:
-#
-#	box1[0]  = ACS_ULCORNER
-#	box1[1]  = ACS_HLINE	
-#	box1[2]  = ACS_URCORNER
-#	box1[3]  = ACS_VLINE
-#	box1[4]  = ACS_LRCORNER
-#	box1[5]  = ACS_LLCORNER
-#	box1[6]  = ACS_TTEE
-#	box1[7]  = ACS_RTEE
-#	box1[8]  = ACS_BTEE
-#	box1[9]  = ACS_LTEE
-#	box1[10] = ACS_PLUS
-#
-# The box2 characters are the double-line versions of these forms graphics.
-#
-#box_chars_1			box1	str	bx	-		-	----K	box characters primary set
-#box_chars_2			box2	str	by	-		-	----K	box characters secondary set
-#box_attr_1			batt1	str	Bx	-		-	----K	attributes for box1
-#box_attr_2			batt2	str	By	-		-	----K	attributes for box2
-#color_bg_0			colb0	str	d0	-		-	----K	background color 0
-#color_bg_1			colb1	str	d1	-		-	----K	background color 1
-#color_bg_2			colb2	str	d2	-		-	----K	background color 2
-#color_bg_3			colb3	str	d3	-		-	----K	background color 3
-#color_bg_4			colb4	str	d4	-		-	----K	background color 4
-#color_bg_5			colb5	str	d5	-		-	----K	background color 5
-#color_bg_6			colb6	str	d6	-		-	----K	background color 6
-#color_bg_7			colb7	str	d7	-		-	----K	background color 7
-#color_fg_0			colf0	str	c0	-		-	----K	foreground color 0
-#color_fg_1			colf1	str	c1	-		-	----K	foreground color 1
-#color_fg_2			colf2	str	c2	-		-	----K	foreground color 2
-#color_fg_3			colf3	str	c3	-		-	----K	foreground color 3
-#color_fg_4			colf4	str	c4	-		-	----K	foreground color 4
-#color_fg_5			colf5	str	c5	-		-	----K	foreground color 5
-#color_fg_6			colf6	str	c6	-		-	----K	foreground color 6
-#color_fg_7			colf7	str	c7	-		-	----K	foreground color 7
-#font_0				font0	str	f0	-		-	-----	select font 0
-#font_1				font1	str	f1	-		-	-----	select font 1
-#font_2				font2	str	f2	-		-	-----	select font 2
-#font_3				font3	str	f3	-		-	-----	select font 3
-#font_4				font4	str	f4	-		-	----K	select font 4
-#font_5				font5	str	f5	-		-	----K	select font 5
-#font_6				font6	str	f6	-		-	----K	select font 6
-#font_7				font7	str	f7	-		-	----K	select font 7
-#key_back_tab			kbtab	str	k0	-		-	-----	backtab key
-#key_do				kdo	str	ki	-		-	----K	do request key
-#key_command			kcmd	str	kd	-		-	----K	command-request key
-#key_command_pane		kcpn	str	kW	-		-	----K	command-pane key
-#key_end			kend	str	kw	-		-	-----	end key
-#key_help			khlp	str	kq	-		-	-----	help key
-#key_newline			knl	str	nl	-		-	----K	newline key
-#key_next_pane			knpn	str	kv	-		-	----K	next-pane key
-#key_prev_cmd			kppn	str	kp	-		-	----K	previous-command key
-#key_prev_pane			kppn	str	kV	-		-	----K	previous-pane key
-#key_quit			kquit	str	kQ	-		-	----K	quit key
-#key_select			ksel	str	kU	-		-	-----	select key
-#key_scroll_left		kscl	str	kz	-		-	----K	scroll left
-#key_scroll_right		kscr	str	kZ	-		-	----K	scroll right
-#key_tab			ktab	str	ko	-		-	----K	tab key
-#key_smap_in1			kmpf1	str	Kv	-		-	----K	special mapped key 1 input
-#key_smap_out1			kmpt1	str	KV	-		-	----K	special mapped key 1 output
-#key_smap_in2			kmpf2	str	Kw	-		-	----K	special mapped key 2 input
-#key_smap_out2			kmpt2	str	KW	-		-	----K	special mapped key 2 output
-#key_smap_in3			kmpf3	str	Kx	-		-	----K	special mapped key 3 input
-#key_smap_out3			kmpt3	str	KX	-		-	----K	special mapped key 3 output
-#key_smap_in4			kmpf4	str	Ky	-		-	----K	special mapped key 4 input
-#key_smap_out4			kmpt4	str	KY	-		-	----K	special mapped key 4 output
-#key_smap_in5			kmpf5	str	Kz	-		-	----K	special mapped key 5 input
-#key_smap_out5			kmpt5	str	KZ	-		-	----K	special mapped key 5 output
-#appl_defined_str		apstr	str	za	-		-	----K	application-defined string
-# The key_smap_in[6789] and key_smap_out[6789] capabilities aren't described in
-# the IBM manual pages, so the cap name strings are guesses.  The terminfo
-# names are almost certainly right, the termcap ones almost certainly wrong.
-#key_smap_in6			kmpf6	str	k!	-		-	----K	special mapped key 6 input
-#key_smap_out6			kmpt6	str	K@	-		-	----K	special mapped key 6 output
-#key_smap_in7			kmpf7	str	k#	-		-	----K	special mapped key 7 input
-#key_smap_out7			kmpt7	str	K$	-		-	----K	special mapped key 7 output
-#key_smap_in8			kmpf8	str	k%	-		-	----K	special mapped key 8 input
-#key_smap_out8			kmpt8	str	K^	-		-	----K	special mapped key 8 output
-#key_smap_in9			kmpf9	str	k&	-		-	----K	special mapped key 9 input
-#key_smap_out9			kmpt9	str	K*	-		-	----K	special mapped key 9 output
-# Undocumented capabilities end here
-#key_sf1			ksf1	str	S1	-		-	----K	special function key 1
-#key_sf2			ksf2	str	S2	-		-	----K	special function key 2
-#key_sf3			ksf3	str	S3	-		-	----K	special function key 3
-#key_sf4			ksf4	str	S4	-		-	----K	special function key 4
-#key_sf5			ksf5	str	S5	-		-	----K	special function key 5
-#key_sf6			ksf6	str	S6	-		-	----K	special function key 6
-#key_sf7			ksf7	str	S7	-		-	----K	special function key 7
-#key_sf8			ksf8	str	S8	-		-	----K	special function key 8
-#key_sf9			ksf9	str	S9	-		-	----K	special function key 9
-#key_sf10			ksf10	str	SA	-		-	----K	special function key 10
-# AIX version 3 documents different codes for F11, F12 and does not mention
-# F13-F64.  AIX version 4 uses the same naming for F0-F63 as above.
-#key_f11			kf11	str	k<	-		-	-----	function key 11
-#key_f12			kf12	str	k>	-		-	-----	function key 12
-# Undocumented capabilities end here.
-#key_action			kact	str	kJ	-		-	----K	sent by action key
-# The IBM docs say these capabilities are for table-drawing, and are
-# valid only for aixterm descriptions.
-#enter_topline_mode		topl	str	tp	-		-	----K	start top-line mode
-#enter_bottom_mode		btml	str	bm	-		-	----K	start bottom-line mode
-#enter_rvert_mode		rvert	str	rv	-		-	----K	start right-vertical mode
-#enter_lvert_mode		lvert	str	lv	-		-	----K	start left-vertical mode
-#
-#############################################################################
-#
-# ALIAS DECLARATIONS
-#
-# Here we set up aliases for translating extensions into standard terminfo.
-#
-#---------------------------------- Termcap aliases -------------------------
-#
-# BSD aliases:
-#
-# This is a common error in many termcap files.  We'll get notified during
-# translation when this (or any other alias) fires.
-#
-capalias	sb	sr	BSD	scroll text down
-#
-# AT&T extensions:
-#
-# The old AT&T 5410, 5420, 5425, pc6300plus, 610, and s4 entries used a set of
-# nonstandard capabilities.  Its signature is the KM capability, used to name
-# some sort of keymap file.  EE, BO, CI, CV, XS, DS, FL and FE are in this
-# set.  Comments in the original, and a little cross-checking with other AT&T
-# documentation, seem to establish the following mappings:
-#
-capalias	BO	mr	AT&T	enter_reverse_mode
-capalias	CI	vi	AT&T	cursor_invisible
-capalias	CV	ve	AT&T	cursor_normal
-capalias	DS	mh	AT&T	enter_dim_mode
-#capalias	EE	me	AT&T	exit_attribute_mode	
-capalias	FE	LF	AT&T	label_on
-capalias	FL	LO	AT&T	label_off
-capalias	XS	mk	AT&T	enter_secure_mode
-#
-# We comment out EE because the conflicting XENIX EE is more common in 
-# old entries.
-#
-# XENIX extensions:
-#
-# These are the ones we know how to translate directly:
-#
-capalias	EE	mh	XENIX	exit_attribute_mode	
-capalias	GE	ae	XENIX	exit_alt_charset_mode
-capalias	GS	as	XENIX	enter_alt_charset_mode
-capalias	CF	vi	XENIX	cursor_invis
-capalias	CO	ve	XENIX	cursor_normal
-capalias	EN	@7	XENIX	key_end
-capalias	HM	kh	XENIX	key_home
-capalias	LD	kL	XENIX	key_dl
-capalias	PD	kN	XENIX	key_npage
-capalias	PN	po	XENIX	prtr_off
-capalias	PS	pf	XENIX	prtr_on
-capalias	PU	kP	XENIX	key_ppage
-capalias	RT	@8	XENIX	kent
-capalias	UP	ku	XENIX	kcuu1
-capalias	G6	IGNORE	XENIX	double-ACS_ULCORNER
-capalias	G7	IGNORE	XENIX	double-ACS_LLCORNER
-capalias	G5	IGNORE	XENIX	double-ACS_URCORNER
-capalias	G8	IGNORE	XENIX	double-ACS_LRCORNER
-capalias	Gr	IGNORE	XENIX	double-ACS_LTEE
-capalias	Gr	IGNORE	XENIX	double-ACS_RTEE
-capalias	Gu	IGNORE	XENIX	double-ACS_BTEE
-capalias	Gd	IGNORE	XENIX	double ACS_TTEE
-capalias	Gh	IGNORE	XENIX	double-ACS_HLINE
-capalias	Gv	IGNORE	XENIX	double-ACS_VLINE
-capalias	Gc	IGNORE	XENIX	double-ACS_PLUS
-capalias	GG	IGNORE	XENIX	acs-glitch
-#
-# IBM extensions:
-#
-capalias	kq	%1	IBM	key_help
-#
-# Iris extensions:
-#
-capalias	HS	mh	IRIS	enter_dim_mode
-#
-# Tektronix extensions:
-#
-capalias	KA	k;	Tek	key_f10
-capalias	KB	F1	Tek	key_f11
-capalias	KC	F2	Tek	key_f12
-capalias	KD	F3	Tek	key_f13
-capalias	KE	F4	Tek	key_f14
-capalias	KF	F5	Tek	key_f15
-capalias	BC	Sb	Tek	set_background
-capalias	FC	Sf	Tek	set_foreground
-#
-# There are also the following:
-#
-#	XENIX	XENIX variable name	name clash with terminfo?
-#	-----	-------------------	-------------------------
-#	CL	key_char_left
-#	CR	key_char_right
-#	CW	key_change_window
-#	HP	??
-#	LF	key_linefeed 		label_off
-#	NU	key_next_unlocked_cell
-#	PL	??
-#	PR	??
-#	RC	key_recalc		remove_clock
-#	RF	key_toggle_ref		req_for_input
-#	WL	key_word_left
-#	WR	key_word_right
-#
-# If you know what any of the question-marked ones mean, please tell us.
-#
-#--------------------------------- Terminfo aliases ------------------------
-#
-# IBM extensions:
-#
-infoalias	font0	s0ds	IBM	set0_des_seq
-infoalias	font1	s1ds	IBM	set1_des_seq
-infoalias	font2	s2ds	IBM	set2_des_seq
-infoalias	font3	s3ds	IBM	set3_des_seq
-infoalias	kbtab	kcbt	IBM	key_backtab
-infoalias	ksel	kslt	IBM	key_select
-#
-# Some others are identical to SVr4/XPG4 capabilities, in particular:
-# kcmd, kend, khlp, and kf11...kf63.
 #
 #############################################################################
diff --git a/include/Caps.uwin b/include/Caps.uwin
index b09f612..a41e9ec 100644
--- a/include/Caps.uwin
+++ b/include/Caps.uwin
@@ -1,5 +1,6 @@
 ##############################################################################
-# Copyright (c) 2001-2010,2015 Free Software Foundation, Inc.                #
+# Copyright 2019-2023,2024 Thomas E. Dickey                                  #
+# Copyright 2001-2015,2016 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 "Software"), #
@@ -28,13 +29,13 @@
 #
 # Author: Thomas Dickey
 #
-# $Id: Caps.uwin,v 1.6 2015/04/26 15:24:21 tom Exp $
+# $Id: Caps.uwin,v 1.23 2024/04/20 21:05:02 tom Exp $
 #
 # This is an adaptation of ncurses' termcap/terminfo capability table, which
 # is designed to align with U/Win's terminfo.
 #
 # This table is used to generate initializers for tables that drive tic,
-# infocmp, and the library compilation code used to support the termcap 
+# infocmp, and the library compilation code used to support the termcap
 # compatibility hack.  It is also used to generate the tabular portion of the
 # terminfo(5) man page; lines beginning with `#%' are passed through to become
 # the terminfo table.
@@ -47,7 +48,7 @@
 #
 # Column 1: terminfo variable name
 # Column 2: terminfo capability name
-# Column 3: capability type (boolean, numeric, or string)
+# Column 3: capability type (Boolean, numeric, or string)
 # Column 4: termcap capability name
 # Column 5: KEY_xxx name, if any, `-' otherwise
 # Column 6: value for KEY_xxx name, if any, `-' otherwise
@@ -57,7 +58,7 @@
 #
 # The codes following [Y-] in column 7 describe the versions of termcap which
 # use the given capability.  This information is not used by the curses library
-# proper; rather, it's there to help the terminfo maintainer avoid emitting
+# proper; rather, it is there to help the terminfo maintainer avoid emitting
 # termcap entry translations that are more than 1023 bytes long (and tank a
 # lot of old termcap-using programs).  The codes read as follows:
 #	B = mentioned in the BSD man page for 4.4BSD curses
@@ -97,8 +98,8 @@
 # 3. List it in the standard table.  You almost certainly do *not* want
 # to do this -- the capabilities in that one, and their order, have been
 # carefully chosen to be SVr4-binary-compatible when they're written out
-# as a terminfo object, and breaking this would be bad.  It's up to the ncurses
-# library what to do with the terminfo data after it's read in.
+# as a terminfo object, and breaking this would be bad.  It is up to the ncurses
+# library what to do with the terminfo data after it is read in.
 #
 # 4. List it in the aliases table with an IGNORE target field.  If you
 # do this, the capability will be ignored on input (though the user will
@@ -107,7 +108,7 @@
 # 5. List it in the extensions table. If you do this, the compiler will
 # silently accept the capability, but the curses library proper will never
 # see it (because it won't be written out as part of the terminfo object
-# format).  It's up to you what you have the compiler do with it.
+# format).  It is up to you what you have the compiler do with it.
 #
 # There are two opposite reasons to choose option 5.  One is when you want
 # to eat the capability silently and discard it when doing translations
@@ -119,14 +120,14 @@
 # You'll need to write custom code, probably in postprocess_termcap() or
 # postprocess_terminfo(), to handle the translation.
 #
-# CONTROLLING ENTRY LENGTH 
+# CONTROLLING ENTRY LENGTH
 #
 # Notes on specific elisions made to fit translations within 1023 bytes:
 #
 # Machines with IBM PC-like keyboards want to be able to define the following
 # keys: key_npage, key_ppage, key_home, key_ll (which is used for in termcap-
 # only environments for End or Home-Down), key_dc, and key_ic.  This is also
-# the set of keys the `joe' editor will be upset if it can't see.  So don't 
+# the set of keys the `joe' editor will be upset if it can't see.  So don't
 # trim those out of the set to be translated to termcap, or various users of
 # the termcap file will become irate.
 #
@@ -147,68 +148,108 @@
 #
 # It would be nice to keep f11 and f12 for Emacs use, but a couple of termcap
 # translations go back over critical if we do this.  As 4.4BSD curses fades
-# into history and GNU termcap's application base shrinks towards being GNU 
+# into history and GNU termcap's application base shrinks towards being GNU
 # Emacs only, we'll probably elide out some BSD-only capabilities in order
 # to buy space for non-essentials Emacs is still using.  Capabilities high
 # on that hit list: rc, sc, uc.
 #
+# FORMATTING THE TABLES
+#
+# We manually specify a (minimum) column width for the capability name
+# and terminfo code columns in the tables to achieve a consistent
+# arrangement; as used here, tbl(1) cannot know the width required by
+# one table's data while formatting another's.
+#
+# The longest capability names (C variable) is
+# "hue_lightness_saturation" (24n), and the longest terminfo code is
+# "colornm" (7n).
+#
+# The tables are a tight fit on traditional man(7) implementations that
+# use a line length of 65n, and the "Description" column has little room
+# within which the formatter can make breaking or adjustment decisions.
+# Words like "micro_..._address" and "parm_..._micro" don't break.
+# Reducing the inter-column gaps to 2 ens gives them enough room.  --GBR
+#
 #############################################################################
 #
 # STANDARD CAPABILITIES
 #
-#%The following is a complete table of the capabilities included in a
-#%terminfo description block and available to terminfo-using code.  In each
-#%line of the table,
-#%
-#%The \fBvariable\fR is the name by which the programmer (at the terminfo level)
-#%accesses the capability.
-#%
-#%The \fBcapname\fR is the short name used in the text of the database,
-#%and is used by a person updating the database.
-#%Whenever possible, capnames are chosen to be the same as or similar to
-#%the ANSI X3.64-1979 standard (now superseded by ECMA-48, which uses 
-#%identical or very similar names).  Semantics are also intended to match
-#%those of the specification.
-#%
-#%The termcap code is the old
-#%.B termcap
-#%capability name (some capabilities are new, and have names which termcap
-#%did not originate).
-#%.P
-#%Capability names have no hard length limit, but an informal limit of 5
-#%characters has been adopted to keep them short and to allow the tabs in
-#%the source file
-#%.B Caps
+#%Tables of capabilities
+#%.I \%ncurses
+#%recognizes in a
+#%.I \%term\%info
+#%terminal type description and available to
+#%.IR \%term\%info -using
+#%code follow.
+#%.bP
+#%The capability name identifies the symbol by which the programmer
+#%using the
+#%.I \%term\%info
+#%API accesses the capability.
+#%.bP
+#%The TI
+#%.RI ( \%term\%info )
+#%code is the short name used by a person composing or updating a
+#%terminal type entry.
+#%.IP
+#%Whenever possible,
+#%these codes are the same as or similar to those of the ANSI X3.64-1979
+#%standard
+#%(now superseded by ECMA-48,
+#%which uses identical or very similar names).
+#%Semantics are also intended to match those of the specification.
+#%.IP
+#%.I \%term\%info
+#%codes have no hard length limit,
+#%but
+#%.I \%ncurses
+#%maintains an informal one of 5 characters to keep them short and to
+#%allow the tabs in the source file
+#%.I Caps
 #%to line up nicely.
-#%
-#%Finally, the description field attempts to convey the semantics of the
-#%capability.  You may find some codes in the description field:
-#%.TP
-#%(P)
-#%indicates that padding may be specified
-#%.TP
-#%#[1-9]
-#%in the description field indicates that the string is passed through tparm with
-#%parms as given (#\fIi\fP).
-#%.TP
-#%(P*)
-#%indicates that padding may vary in proportion to the number of
-#%lines affected
-#%.TP
-#%(#\d\fIi\fP\u)
-#%indicates the \fIi\fP\uth\d parameter.
-#%
+#%(Some standard codes exceed this limit regardless.)
+#%.bP
+#%The TC
+#%.RI ( termcap )
+#%code is that used by the corresponding API of
+#%.IR \%ncurses .
+#%(Some capabilities are new,
+#%and have names that BSD
+#%.I termcap
+#%did not originate.)
+#%.bP
+#%The description field attempts to convey the capability's semantics.
 #%.PP
-#% These are the boolean capabilities:
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBBooleans	name	Code\fR
+#%The description field employs a handful of notations.
+#%.TP
+#%.B (P)
+#%indicates that padding may be specified.
+#%.TP
+#%.B (P*)
+#%indicates that padding may vary in proportion to the number of output
+#%lines affected.
+#%.TP
+#%.BI # i
+#%indicates the
+#%.IR i th
+#%parameter of a string capability;
+#%the programmer should pass the string to \fB\%tparm\fP(3X) with the
+#%parameters listed.
+#%.IP
+#%If the description lists no parameters,
+#%passing the string to \fB\%tparm\fP(3X) may produce unexpected
+#%behavior,
+#%for instance if the string contains percent signs.
+#%.
+#%.PP
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(24n)2 Lbw(7n)2 Lb2 Lx.
+#%\&	Code	\&
+#%Boolean Capability Name	TI	TC	Description
+#%_
 auto_left_margin		bw	bool	bw	-	-	YB-G-	cub1 wraps from column 0 to last column
 auto_right_margin		am	bool	am	-	-	YBCGE	terminal has automatic margins
 no_esc_ctlc			xsb	bool	xb	-	-	YBCG-	beehive (f1=escape, f2=ctrl C)
@@ -240,18 +281,16 @@
 can_change			ccc	bool	cc	-	-	-----	terminal can re-define existing colors
 hue_lightness_saturation	hls	bool	hl	-	-	-----	terminal uses only HLS color notation (Tektronix)
 #%.TE
-#%.ad
-#%
-#%These are the numeric capabilities:
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBNumeric	name	Code\fR
+#%.PP
+#%.
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(24n)2 Lbw(7n)2 Lb2 Lx.
+#%\&	Code	\&
+#%Numeric Capability Name	TI	TC	Description
+#%_
 columns				cols	num	co	-	-	YBCGE	number of columns in a line
 init_tabs			it	num	it	-	-	YB-G-	tabs initially every # spaces
 lines				lines	num	li	-	-	YBCGE	number of lines on screen or page
@@ -271,24 +310,16 @@
 max_pairs			pairs	num	pa	-	-	-----	maximum number of color-pairs on the screen
 no_color_video			ncv	num	NC	-	-	-----	video attributes that cannot be used with colors
 #%.TE
-#%.ad
-#%
-#%The following numeric capabilities are present in the SVr4.0 term structure,
-#%but are not yet documented in the man page.  They came in with SVr4's
-#%printer support.
-#%
-#%.na
-#%
-#%These are the string capabilities:
-#%
-#%.na
-#%.TS H
-#%center expand;
-#%c l l c
-#%c l l c
-#%lw25 lw6 lw2 lw20.
-#%\fBVariable	Cap-	TCap	Description\fR
-#%\fBString	name	Code\fR
+#%.PP
+#%.
+#%.TS
+#%center;
+#%Lb        Cb       S   Lb
+#%Lb        Lb       Lb  Lb
+#%Lbw(24n)2 Lbw(7n)2 Lb2 Lx.
+#%\&	Code	\&
+#%String Capability Name	TI	TC	Description
+#%_
 back_tab			cbt	str	bt	-		-	YBCGE	back tab (P)
 bell				bel	str	bl	-		-	YB-GE	audible signal (bell) (P)
 carriage_return			cr	str	cr	-		-	YBCGE	carriage return (P*) (P*)
@@ -351,6 +382,10 @@
 key_dc				kdch1	str	kD	KEY_DC		0512	YB-G-	delete-character key
 key_dl				kdl1	str	kL	KEY_DL		0510	-B-G-*	delete-line key
 key_down			kcud1	str	kd	KEY_DOWN	0402	YBCGE	down-arrow key
+#%.TE
+#%.TS
+#%center;
+#%Lbw(24n)2 Lbw(7n)2 Lb2 Lx.
 key_eic				krmir	str	kM	KEY_EIC		0514	-B-G-*	sent by rmir or smir in insert mode
 key_eol				kel	str	kE	KEY_EOL		0517	-B-G-*	clear-to-end-of-line key
 key_eos				ked	str	kS	KEY_EOS		0516	-B-G-*	clear-to-end-of-screen key
@@ -413,6 +448,10 @@
 repeat_char			rep	str	rp	-		-	YB-GE	repeat char #1 #2 times (P*)
 reset_1string			rs1	str	r1	-		-	-B---	reset string
 reset_2string			rs2	str	r2	-		-	-B---	reset string
+#%.TE
+#%.TS
+#%center;
+#%Lbw(24n)2 Lbw(7n)2 Lb2 Lx.
 reset_3string			rs3	str	r3	-		-	-B---	reset string
 reset_file			rf	str	rf	-		-	-B---	name of reset file
 restore_cursor			rc	str	rc	-		-	YBCG-	restore cursor to position of last save_cursor
@@ -479,6 +518,10 @@
 key_save			ksav	str	&6	KEY_SAVE	0571	-----	save key
 key_suspend			kspd	str	&7	KEY_SUSPEND	0627	-----	suspend key
 key_undo			kund	str	&8	KEY_UNDO	0630	-----	undo key
+#%.TE
+#%.TS
+#%center;
+#%Lbw(24n)2 Lbw(7n)2 Lb2 Lx.
 key_sbeg			kBEG	str	&9	KEY_SBEG	0572	-----	shifted begin key
 key_scancel			kCAN	str	&0	KEY_SCANCEL	0573	-----	shifted cancel key
 key_scommand			kCMD	str	*1	KEY_SCOMMAND	0574	-----	shifted command key
@@ -541,6 +584,10 @@
 key_f40				kf40	str	FU	KEY_F(40)	-	----E	F40 function key
 key_f41				kf41	str	FV	KEY_F(41)	-	----E	F41 function key
 key_f42				kf42	str	FW	KEY_F(42)	-	----E	F42 function key
+#%.TE
+#%.TS
+#%center;
+#%Lbw(24n)2 Lbw(7n)2 Lb2 Lx.
 key_f43				kf43	str	FX	KEY_F(43)	-	----E	F43 function key
 key_f44				kf44	str	FY	KEY_F(44)	-	----E	F44 function key
 key_f45				kf45	str	FZ	KEY_F(45)	-	----E	F45 function key
@@ -564,7 +611,7 @@
 key_f63				kf63	str	Fr	KEY_F(63)	-	----E	F63 function key
 clr_bol				el1	str	cb	-		-	-----	Clear to beginning of line
 clear_margins			mgc	str	MC	-		-	-----	clear right and left soft margins
-set_left_margin			smgl	str	ML	-		-	-----	set left soft margin at current column.	 See smgl. (ML is not in BSD termcap).
+set_left_margin			smgl	str	ML	-		-	-----	set left soft margin at current column (not in BSD \fItermcap\fP)
 set_right_margin		smgr	str	MR	-		-	-----	set right soft margin at current column
 device_type			devt	str	dv	-		-	-----	Indicate language/codeset support
 code_set_init			csin	str	ci	-		-	-----	Init sequence for multiple codesets
@@ -588,7 +635,6 @@
 set_color_pair			scp	str	sp	-		-	-----	Set current color pair to #1
 set_foreground			setf	str	Sf	-		-	-----	Set foreground color #1
 #%.TE
-#%.ad
 #%
 # The magic token below tells the tic compiler-generator code that all the caps
 # past it should be ignored (not written out) when dumping terminfo objects. It
@@ -650,7 +696,7 @@
 # GNU termcap *does* include the following extended capability,  Only the
 # now-obsolete Ann Arbor terminals used it.
 #
-# gnu_change_scroll_region	OTcS	str	cS	-		-	---GE	alternate set scrolling region 
+# gnu_change_scroll_region	OTcS	str	cS	-		-	---GE	alternate set scrolling region
 #
 # The following comments describe capnames so ancient that I believe no
 # software uses them any longer.  Some of these have to go because they
@@ -667,9 +713,9 @@
 # comma-separated list of capabilities for which there are corresponding keys.
 # The `kn' code is accepted but ignored.
 #
-# The `ma' capability seems to have been designed to map between the rogue(2)
-# motion keys (including jkhl) and characters emitted by arrow keys on some
-# primitive pre-ANSI terminals.  It's so obsolete it's fossilized...
+# The `ma' capability was a 4.0BSD feature used by vi version 2.
+# It consists of pairs of characters corresponding to kl, kr, ku, kd, and kh.
+# Besides being obsolete, that interpretation conflicts with max_attributes.
 #
 # Here is a description of memory_lock_above and memory_unlock:
 # "You can 'freeze' data on the screen by turning on Memory Lock in a line of
@@ -695,14 +741,14 @@
 # vertical_tab_delay		OTdV	num	dV	-		-	-B---	padding required for ^V
 number_of_function_keys		OTkn	num	kn	-		-	-B-G-	count of function keys
 other_non_function_keys		OTko	str	ko	-		-	-B-G-	list of self-mapped keycaps
-arrow_key_map			OTma	str	ma	-		-	YBC--	map arrow keys rogue(1) motion keys
+arrow_key_map			OTma	str	ma	-		-	YBC--	map motion-keys for vi version 2
 # memory_lock_above		OTml	str	ml	-		-	-B---	lock visible screen memory above the current line
 # memory_unlock			OTmu	str	mu	-		-	-B---	unlock visible screen memory above the current line
 has_hardware_tabs		OTpt	bool	pt	-		-	YB---	has 8-char tabs invoked with ^I
 return_does_clr_eol		OTxr	bool	xr	-		-	YB---	return clears the line
 # tek_4025_insert_line		OTxx	bool	xx	-		-	-BC--	Tektronix 4025 insert-line glitch
 #
-# mytinfo described this as a termcap capability, but it's not listed in the
+# mytinfo described this as a termcap capability, but it is not listed in the
 # 4.4BSD man pages, and not found in the 4.4BSD termcap file.  The ncurses
 # package, like System V, behaves as though it is always true.
 #
@@ -711,7 +757,7 @@
 # University of Waterloo termcap extensions (as described in mytinfo).
 # The `xl' termcap file clashes with a terminfo name; this ambiguity cannot
 # be resolved by a type check.  The descriptions are guesses from what was
-# in the mytinfo tables. 
+# in the mytinfo tables.
 #
 # key_interrupt_char		OTki	str	ki	-		-	-----	string set by interrupt key (?)
 # key_kill_char			OTkk	str	kk	-		-	-----	string set by kill key (?)
@@ -760,7 +806,7 @@
 # Gv	186 \272 M-:	double vertical line
 #
 # The compiler will translate the single-line caps and discard the others
-# (via IGNORE aliases further down).  We don't want to do normal pad 
+# (via IGNORE aliases further down).  We don't want to do normal pad
 # translation on these, they're often single-character printable ASCII
 # strings that happen to be numerics.  There's awk code in parametrized.sh
 # that detects the acs_ prefix and uses it to suppress pad translation.
@@ -782,303 +828,10 @@
 #
 # TERMINFO EXTENSION CAPABILITIES
 #
-# This section is almost all comments.  What it's mainly for is to describe
-# what capabilities need to be squeezed out to get down to the XSI Curses
-# standard set.  They are flagged with K.
-#
-# HP extensions
-#
-# These extensions follow ptr_non (replacing everything after it) in HP
-# terminfo files.  Except for memory_lock and memory_unlock, they are
-# functionally identical to SVr4 extensions, but they make the binary format
-# different.  Grrr....
+# (see Caps-ncurses for the complete set of comments)
 #
 memory_lock			meml	str	ml	-		-	----K	lock memory above cursor
 memory_unlock			memu	str	mu	-		-	----K	unlock memory
-#plab_norm			pln	str	pn	-		-	-----	program label #1 to show string #2
-#label_on			smln	str	LO	-		-	-----	turn on soft labels
-#label_off			rmln	str	LF	-		-	-----	turn off soft labels
-#key_f11			kf11	str	F1	-		-	-----	F11 function key
-#key_f12			kf12	str	F2	-		-	-----	F12 function key
-#key_f13			kf13	str	F3	-		-	-----	F13 function key
-#key_f14			kf14	str	F4	-		-	-----	F14 function key
-#key_f15			kf15	str	F5	-		-	-----	F15 function key
-#key_f16			kf16	str	F6	-		-	-----	F16 function key
-#key_f17			kf17	str	F7	-		-	-----	F17 function key
-#key_f18			kf18	str	F8	-		-	-----	F18 function key
-#key_f19			kf19	str	F9	-		-	-----	F19 function key
-#key_f20			kf20	str	FA	-		-	-----	F20 function key
-#key_f21			kf21	str	FB	-		-	-----	F21 function key
-#key_f22			kf22	str	FC	-		-	-----	F22 function key
-#key_f23			kf23	str	FD	-		-	-----	F23 function key
-#key_f24			kf24	str	FE	-		-	-----	F24 function key
-#key_f25			kf25	str	FF	-		-	-----	F25 function key
-#key_f26			kf26	str	FG	-		-	-----	F26 function key
-#key_f27			kf27	str	FH	-		-	-----	F27 function key
-#key_f28			kf28	str	FI	-		-	-----	F28 function key
-#key_f29			kf29	str	FJ	-		-	-----	F29 function key
-#key_f30			kf30	str	FK	-		-	-----	F30 function key
-#key_f31			kf31	str	FL	-		-	-----	F31 function key
-#key_f32			kf32	str	FM	-		-	-----	F32 function key
-#key_f33			kf33	str	FN	-		-	-----	F33 function key
-#key_f34			kf34	str	FO	-		-	-----	F34 function key
-#key_f35			kf35	str	FP	-		-	-----	F35 function key
-#key_f36			kf36	str	FQ	-		-	-----	F36 function key
-#key_f37			kf37	str	FR	-		-	-----	F37 function key
-#key_f38			kf38	str	FS	-		-	-----	F38 function key
-#key_f39			kf39	str	FT	-		-	-----	F39 function key
-#key_f40			kf40	str	FU	-		-	-----	F40 function key
-#key_f41			kf41	str	FV	-		-	-----	F41 function key
-#key_f42			kf42	str	FW	-		-	-----	F42 function key
-#key_f43			kf43	str	FX	-		-	-----	F43 function key
-#key_f44			kf44	str	FY	-		-	-----	F44 function key
-#key_f45			kf45	str	FZ	-		-	-----	F45 function key
-#key_f46			kf46	str	Fa	-		-	-----	F46 function key
-#key_f47			kf47	str	Fb	-		-	-----	F47 function key
-#key_f48			kf48	str	Fc	-		-	-----	F48 function key
-#key_f49			kf49	str	Fd	-		-	-----	F49 function key
-#key_f50			kf50	str	Fe	-		-	-----	F50 function key
-#key_f51			kf51	str	Ff	-		-	-----	F51 function key
-#key_f52			kf52	str	Fg	-		-	-----	F52 function key
-#key_f53			kf53	str	Fh	-		-	-----	F53 function key
-#key_f54			kf54	str	Fi	-		-	-----	F54 function key
-#key_f55			kf55	str	Fj	-		-	-----	F55 function key
-#key_f56			kf56	str	Fk	-		-	-----	F56 function key
-#key_f57			kf57	str	Fl	-		-	-----	F57 function key
-#key_f58			kf58	str	Fm	-		-	-----	F58 function key
-#key_f59			kf59	str	Fn	-		-	-----	F59 function key
-#key_f60			kf60	str	Fo	-		-	-----	F60 function key
-#key_f61			kf61	str	Fp	-		-	-----	F61 function key
-#key_f62			kf62	str	Fq	-		-	-----	F62 function key
-#key_f63			kf63	str	Fr	-		-	-----	F63 function key
-#
-# IBM extensions
-#
-# These extensions follow ptr_non (replacing everything after it) in IBM
-# terminfo files.
-#
-# The places in the box[12] capabilities correspond to acsc characters, here is
-# the mapping:
-#
-#	box1[0]  = ACS_ULCORNER
-#	box1[1]  = ACS_HLINE	
-#	box1[2]  = ACS_URCORNER
-#	box1[3]  = ACS_VLINE
-#	box1[4]  = ACS_LRCORNER
-#	box1[5]  = ACS_LLCORNER
-#	box1[6]  = ACS_TTEE
-#	box1[7]  = ACS_RTEE
-#	box1[8]  = ACS_BTEE
-#	box1[9]  = ACS_LTEE
-#	box1[10] = ACS_PLUS
-#
-# The box2 characters are the double-line versions of these forms graphics.
-#
 box_chars_1			box1	str	bx	-		-	----K	box characters primary set
-#box_chars_2			box2	str	by	-		-	----K	box characters secondary set
-#box_attr_1			batt1	str	Bx	-		-	----K	attributes for box1
-#box_attr_2			batt2	str	By	-		-	----K	attributes for box2
-#color_bg_0			colb0	str	d0	-		-	----K	background color 0
-#color_bg_1			colb1	str	d1	-		-	----K	background color 1
-#color_bg_2			colb2	str	d2	-		-	----K	background color 2
-#color_bg_3			colb3	str	d3	-		-	----K	background color 3
-#color_bg_4			colb4	str	d4	-		-	----K	background color 4
-#color_bg_5			colb5	str	d5	-		-	----K	background color 5
-#color_bg_6			colb6	str	d6	-		-	----K	background color 6
-#color_bg_7			colb7	str	d7	-		-	----K	background color 7
-#color_fg_0			colf0	str	c0	-		-	----K	foreground color 0
-#color_fg_1			colf1	str	c1	-		-	----K	foreground color 1
-#color_fg_2			colf2	str	c2	-		-	----K	foreground color 2
-#color_fg_3			colf3	str	c3	-		-	----K	foreground color 3
-#color_fg_4			colf4	str	c4	-		-	----K	foreground color 4
-#color_fg_5			colf5	str	c5	-		-	----K	foreground color 5
-#color_fg_6			colf6	str	c6	-		-	----K	foreground color 6
-#color_fg_7			colf7	str	c7	-		-	----K	foreground color 7
-#font_0				font0	str	f0	-		-	-----	select font 0
-#font_1				font1	str	f1	-		-	-----	select font 1
-#font_2				font2	str	f2	-		-	-----	select font 2
-#font_3				font3	str	f3	-		-	-----	select font 3
-#font_4				font4	str	f4	-		-	----K	select font 4
-#font_5				font5	str	f5	-		-	----K	select font 5
-#font_6				font6	str	f6	-		-	----K	select font 6
-#font_7				font7	str	f7	-		-	----K	select font 7
-#key_back_tab			kbtab	str	k0	-		-	-----	backtab key
-#key_do				kdo	str	ki	-		-	----K	do request key
-#key_command			kcmd	str	kd	-		-	----K	command-request key
-#key_command_pane		kcpn	str	kW	-		-	----K	command-pane key
-#key_end			kend	str	kw	-		-	-----	end key
-#key_help			khlp	str	kq	-		-	-----	help key
-#key_newline			knl	str	nl	-		-	----K	newline key
-#key_next_pane			knpn	str	kv	-		-	----K	next-pane key
-#key_prev_cmd			kppn	str	kp	-		-	----K	previous-command key
-#key_prev_pane			kppn	str	kV	-		-	----K	previous-pane key
-#key_quit			kquit	str	kQ	-		-	----K	quit key
-#key_select			ksel	str	kU	-		-	-----	select key
-#key_scroll_left		kscl	str	kz	-		-	----K	scroll left
-#key_scroll_right		kscr	str	kZ	-		-	----K	scroll right
-#key_tab			ktab	str	ko	-		-	----K	tab key
-#key_smap_in1			kmpf1	str	Kv	-		-	----K	special mapped key 1 input
-#key_smap_out1			kmpt1	str	KV	-		-	----K	special mapped key 1 output
-#key_smap_in2			kmpf2	str	Kw	-		-	----K	special mapped key 2 input
-#key_smap_out2			kmpt2	str	KW	-		-	----K	special mapped key 2 output
-#key_smap_in3			kmpf3	str	Kx	-		-	----K	special mapped key 3 input
-#key_smap_out3			kmpt3	str	KX	-		-	----K	special mapped key 3 output
-#key_smap_in4			kmpf4	str	Ky	-		-	----K	special mapped key 4 input
-#key_smap_out4			kmpt4	str	KY	-		-	----K	special mapped key 4 output
-#key_smap_in5			kmpf5	str	Kz	-		-	----K	special mapped key 5 input
-#key_smap_out5			kmpt5	str	KZ	-		-	----K	special mapped key 5 output
-#appl_defined_str		apstr	str	za	-		-	----K	application-defined string
-# The key_smap_in[6789] and key_smap_out[6789] capabilities aren't described in
-# the IBM manual pages, so the cap name strings are guesses.  The terminfo
-# names are almost certainly right, the termcap ones almost certainly wrong.
-#key_smap_in6			kmpf6	str	k!	-		-	----K	special mapped key 6 input
-#key_smap_out6			kmpt6	str	K@	-		-	----K	special mapped key 6 output
-#key_smap_in7			kmpf7	str	k#	-		-	----K	special mapped key 7 input
-#key_smap_out7			kmpt7	str	K$	-		-	----K	special mapped key 7 output
-#key_smap_in8			kmpf8	str	k%	-		-	----K	special mapped key 8 input
-#key_smap_out8			kmpt8	str	K^	-		-	----K	special mapped key 8 output
-#key_smap_in9			kmpf9	str	k&	-		-	----K	special mapped key 9 input
-#key_smap_out9			kmpt9	str	K*	-		-	----K	special mapped key 9 output
-# Undocumented capabilities end here
-#key_sf1			ksf1	str	S1	-		-	----K	special function key 1
-#key_sf2			ksf2	str	S2	-		-	----K	special function key 2
-#key_sf3			ksf3	str	S3	-		-	----K	special function key 3
-#key_sf4			ksf4	str	S4	-		-	----K	special function key 4
-#key_sf5			ksf5	str	S5	-		-	----K	special function key 5
-#key_sf6			ksf6	str	S6	-		-	----K	special function key 6
-#key_sf7			ksf7	str	S7	-		-	----K	special function key 7
-#key_sf8			ksf8	str	S8	-		-	----K	special function key 8
-#key_sf9			ksf9	str	S9	-		-	----K	special function key 9
-#key_sf10			ksf10	str	SA	-		-	----K	special function key 10
-# AIX version 3 documents different codes for F11, F12 and does not mention
-# F13-F64.  AIX version 4 uses the same naming for F0-F63 as above.
-#key_f11			kf11	str	k<	-		-	-----	function key 11
-#key_f12			kf12	str	k>	-		-	-----	function key 12
-# Undocumented capabilities end here.
-#key_action			kact	str	kJ	-		-	----K	sent by action key
-# The IBM docs say these capabilities are for table-drawing, and are
-# valid only for aixterm descriptions.
-#enter_topline_mode		topl	str	tp	-		-	----K	start top-line mode
-#enter_bottom_mode		btml	str	bm	-		-	----K	start bottom-line mode
-#enter_rvert_mode		rvert	str	rv	-		-	----K	start right-vertical mode
-#enter_lvert_mode		lvert	str	lv	-		-	----K	start left-vertical mode
-#
-#############################################################################
-#
-# ALIAS DECLARATIONS
-#
-# Here we set up aliases for translating extensions into standard terminfo.
-#
-#---------------------------------- Termcap aliases -------------------------
-#
-# BSD aliases:
-#
-# This is a common error in many termcap files.  We'll get notified during
-# translation when this (or any other alias) fires.
-#
-capalias	sb	sr	BSD	scroll text down
-#
-# AT&T extensions:
-#
-# The old AT&T 5410, 5420, 5425, pc6300plus, 610, and s4 entries used a set of
-# nonstandard capabilities.  Its signature is the KM capability, used to name
-# some sort of keymap file.  EE, BO, CI, CV, XS, DS, FL and FE are in this
-# set.  Comments in the original, and a little cross-checking with other AT&T
-# documentation, seem to establish the following mappings:
-#
-capalias	BO	mr	AT&T	enter_reverse_mode
-capalias	CI	vi	AT&T	cursor_invisible
-capalias	CV	ve	AT&T	cursor_normal
-capalias	DS	mh	AT&T	enter_dim_mode
-#capalias	EE	me	AT&T	exit_attribute_mode	
-capalias	FE	LF	AT&T	label_on
-capalias	FL	LO	AT&T	label_off
-capalias	XS	mk	AT&T	enter_secure_mode
-#
-# We comment out EE because the conflicting XENIX EE is more common in 
-# old entries.
-#
-# XENIX extensions:
-#
-# These are the ones we know how to translate directly:
-#
-capalias	EE	mh	XENIX	exit_attribute_mode	
-capalias	GE	ae	XENIX	exit_alt_charset_mode
-capalias	GS	as	XENIX	enter_alt_charset_mode
-capalias	CF	vi	XENIX	cursor_invis
-capalias	CO	ve	XENIX	cursor_normal
-capalias	EN	@7	XENIX	key_end
-capalias	HM	kh	XENIX	key_home
-capalias	LD	kL	XENIX	key_dl
-capalias	PD	kN	XENIX	key_npage
-capalias	PN	po	XENIX	prtr_off
-capalias	PS	pf	XENIX	prtr_on
-capalias	PU	kP	XENIX	key_ppage
-capalias	RT	@8	XENIX	kent
-capalias	UP	ku	XENIX	kcuu1
-capalias	G6	IGNORE	XENIX	double-ACS_ULCORNER
-capalias	G7	IGNORE	XENIX	double-ACS_LLCORNER
-capalias	G5	IGNORE	XENIX	double-ACS_URCORNER
-capalias	G8	IGNORE	XENIX	double-ACS_LRCORNER
-capalias	Gr	IGNORE	XENIX	double-ACS_LTEE
-capalias	Gr	IGNORE	XENIX	double-ACS_RTEE
-capalias	Gu	IGNORE	XENIX	double-ACS_BTEE
-capalias	Gd	IGNORE	XENIX	double ACS_TTEE
-capalias	Gh	IGNORE	XENIX	double-ACS_HLINE
-capalias	Gv	IGNORE	XENIX	double-ACS_VLINE
-capalias	Gc	IGNORE	XENIX	double-ACS_PLUS
-capalias	GG	IGNORE	XENIX	acs-glitch
-#
-# IBM extensions:
-#
-capalias	kq	%1	IBM	key_help
-#
-# Iris extensions:
-#
-capalias	HS	mh	IRIS	enter_dim_mode
-#
-# Tektronix extensions:
-#
-capalias	KA	k;	Tek	key_f10
-capalias	KB	F1	Tek	key_f11
-capalias	KC	F2	Tek	key_f12
-capalias	KD	F3	Tek	key_f13
-capalias	KE	F4	Tek	key_f14
-capalias	KF	F5	Tek	key_f15
-capalias	BC	Sb	Tek	set_background
-capalias	FC	Sf	Tek	set_foreground
-#
-# There are also the following:
-#
-#	XENIX	XENIX variable name	name clash with terminfo?
-#	-----	-------------------	-------------------------
-#	CL	key_char_left
-#	CR	key_char_right
-#	CW	key_change_window
-#	HP	??
-#	LF	key_linefeed 		label_off
-#	NU	key_next_unlocked_cell
-#	PL	??
-#	PR	??
-#	RC	key_recalc		remove_clock
-#	RF	key_toggle_ref		req_for_input
-#	WL	key_word_left
-#	WR	key_word_right
-#
-# If you know what any of the question-marked ones mean, please tell us.
-#
-#--------------------------------- Terminfo aliases ------------------------
-#
-# IBM extensions:
-#
-infoalias	font0	s0ds	IBM	set0_des_seq
-infoalias	font1	s1ds	IBM	set1_des_seq
-infoalias	font2	s2ds	IBM	set2_des_seq
-infoalias	font3	s3ds	IBM	set3_des_seq
-infoalias	kbtab	kcbt	IBM	key_backtab
-infoalias	ksel	kslt	IBM	key_select
-#
-# Some others are identical to SVr4/XPG4 capabilities, in particular:
-# kcmd, kend, khlp, and kf11...kf63.
 #
 #############################################################################
diff --git a/include/MKhashsize.sh b/include/MKhashsize.sh
index 11b3111..8a534d4 100755
--- a/include/MKhashsize.sh
+++ b/include/MKhashsize.sh
@@ -1,6 +1,7 @@
 #!/bin/sh
 ##############################################################################
-# Copyright (c) 1998,2006 Free Software Foundation, Inc.                     #
+# Copyright 2019,2020 Thomas E. Dickey                                       #
+# Copyright 1998,2006 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 "Software"), #
@@ -26,7 +27,7 @@
 # use or other dealings in this Software without prior written               #
 # authorization.                                                             #
 ##############################################################################
-# $Id: MKhashsize.sh,v 1.7 2006/10/22 00:45:39 tom Exp $
+# $Id: MKhashsize.sh,v 1.9 2020/02/02 23:34:34 tom Exp $
 #
 # MKhashsize.sh --- generate size include for hash functions
 #
@@ -34,8 +35,8 @@
 echo " * hashsize.h -- hash and token table constants"
 echo " */"
 
-CAPS="${1-Caps}"
-TABSIZE=`grep -v '^[ #]' $CAPS | grep -v "^$" | grep -v "^capalias"| grep -v "^infoalias" | wc -l`
+test $# = 0 && set Caps
+TABSIZE=`cat "$@" | grep -v '^[ #]' | grep -v "^$" | grep -v "^capalias"| grep -v "^infoalias" | grep -v "^userdef" | grep -v "^used_by" | wc -l`
 
 echo ""
 echo "#define CAPTABSIZE	${TABSIZE}"
diff --git a/include/MKkey_defs.sh b/include/MKkey_defs.sh
index 45a06d0..e58ee2b 100755
--- a/include/MKkey_defs.sh
+++ b/include/MKkey_defs.sh
@@ -1,7 +1,8 @@
 #! /bin/sh
-# $Id: MKkey_defs.sh,v 1.15 2013/03/09 16:32:01 tom Exp $
+# $Id: MKkey_defs.sh,v 1.24 2024/01/19 12:26:17 tom Exp $
 ##############################################################################
-# Copyright (c) 2001-2003,2013 Free Software Foundation, Inc.                #
+# Copyright 2019-2022,2024 Thomas E. Dickey                                  #
+# Copyright 2001-2013,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 "Software"), #
@@ -34,26 +35,28 @@
 #
 # Extract function-key definitions from the Caps file
 #
-: ${AWK-awk}
-DATA=${1-Caps}
+: "${AWK-awk}"
+
+test $# = 0 && set Caps
 
 data=data$$
 pass1=pass1_$$
 pass2=pass2_$$
 pass3=pass3_$$
 pass4=pass4_$$
-trap 'rm -f $data pass[1234]_$$' 0 1 2 5 15
+trap 'rm -f $data pass[1234]_$$; exit 1' 1 2 3 15
+trap 'rm -f $data pass[1234]_$$' 0
 
 # change repeated tabs (used for readability) to single tabs (needed to make
 # awk see the right field alignment of the corresponding columns):
-if sort -k 6 $DATA >$data 2>/dev/null
+if sort -k 6 "$@" >$data 2>/dev/null
 then
 	# POSIX
-	sed -e 's/[	][	]*/	/g' < $DATA |sort -n -k 6 >$data
-elif sort -n +5 $DATA >$data 2>/dev/null
+	sed -e 's/[	][	]*/	/g' "$@" |sort -n -k 6 >$data
+elif sort -n +5 "$@" >$data 2>/dev/null
 then
 	# SunOS (and SVr4, marked as obsolete but still recognized)
-	sed -e 's/[	][	]*/	/g' < $DATA |sort -n +5 >$data
+	sed -e 's/[	][	]*/	/g' "$@" |sort -n +5 >$data
 else
 	echo "Your sort utility is broken.  Please install one that works." >&2
 	exit 1
@@ -61,16 +64,14 @@
 
 # add keys that we generate automatically:
 cat >>$data <<EOF
-key_resize	kr1	str	R1	KEY_RESIZE	+	-----	Terminal resize event
-key_event	kv1	str	V1	KEY_EVENT	+	-----	We were interrupted by an event
+key_resize	kr1	str	R1	KEY_RESIZE	+	NCURSES_SIGWINCH 	Terminal resize event
 EOF
 
-THIS=./`basename $0`
-PARM=./`basename $DATA`
+THIS=./`basename "$0"`
 
 cat <<EOF
 /*
- * These definitions were generated by $THIS $PARM
+ * These definitions were generated by $THIS $*
  */
 EOF
 
@@ -124,6 +125,8 @@
 /^#/		{next;}
 /^capalias/	{next;}
 /^infoalias/	{next;}
+/^used_by/	{next;}
+/^userdef/	{next;}
 
 $5 != "-" && $6 != "-" {
 		if ($6 == "+") {
@@ -139,6 +142,12 @@
 			maxkey = thiskey;
 		if (pass == 2 || pass == 3) {
 			showkey=sprintf(octal_fmt, thiskey);
+			ifdef = 0;
+			if (index($7,"NCURSES_") == 1) {
+				ifdef = 1;
+				printf "\n";
+				printf "#if %s\n", $7;
+			}
 			if ($5 == "KEY_F(0)" ) {
 				printf "#define "
 				print_cols("KEY_F0", 16);
@@ -157,6 +166,9 @@
 					printf " %s", $i
 				print " */"
 			}
+			if (ifdef != 0) {
+				printf "#endif\n";
+			}
 		}
 	}
 END	{
diff --git a/include/MKncurses_def.sh b/include/MKncurses_def.sh
index 4aac865..22d80c2 100755
--- a/include/MKncurses_def.sh
+++ b/include/MKncurses_def.sh
@@ -1,7 +1,8 @@
 #! /bin/sh
-# $Id: MKncurses_def.sh,v 1.2 2003/10/25 16:19:46 tom Exp $
+# $Id: MKncurses_def.sh,v 1.5 2022/07/16 17:03:59 tom Exp $
 ##############################################################################
-# Copyright (c) 2000 Free Software Foundation, Inc.                          #
+# Copyright 2020,2022 Thomas E. Dickey                                       #
+# Copyright 2000,2003 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 "Software"), #
@@ -55,7 +56,7 @@
 
 EOF
 
-${AWK-awk} <$DEFS '
+"${AWK-awk}" <"$DEFS" '
 !/^[@#]/ {
 	if ( NF == 1 )
 	{
diff --git a/include/MKparametrized.sh b/include/MKparametrized.sh
index 3ce5d9c..5d0cae1 100755
--- a/include/MKparametrized.sh
+++ b/include/MKparametrized.sh
@@ -1,6 +1,7 @@
 #!/bin/sh
 ##############################################################################
-# Copyright (c) 1998-2006,2014 Free Software Foundation, Inc.                #
+# Copyright 2019,2020 Thomas E. Dickey                                       #
+# Copyright 1998-2014,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 "Software"), #
@@ -26,15 +27,18 @@
 # use or other dealings in this Software without prior written               #
 # authorization.                                                             #
 ##############################################################################
-# $Id: MKparametrized.sh,v 1.7 2014/05/24 15:07:19 tom Exp $
+# $Id: MKparametrized.sh,v 1.10 2020/02/02 23:34:34 tom Exp $
 #
 # MKparametrized.sh -- generate indirection vectors for various sort methods
 #
 # The output of this script is C source for an array specifying whether
 # termcap strings should undergo parameter and padding translation.
 #
-CAPS="${1-Caps}"
+[ $# = 0 ] && set - Caps
+
 cat <<EOF
+#ifndef PARAMETRIZED_H
+#define PARAMETRIZED_H 1
 /*
  * parametrized.h --- is a termcap capability parametrized?
  *
@@ -52,7 +56,14 @@
 # XENIX acs_* capabilities.  Maybe someday we'll dedicate a flag field for
 # this, that would be cleaner....
 
-${AWK-awk} <$CAPS '
+cat "$@" | ${AWK-awk} '
+
+/^#/ { next ; }
+/^capalias/ { next ; }
+/^infoalias/ { next ; }
+/^used_by/ { next ; }
+/^userdef/ { next ; }
+
 $3 != "str"		{next;}
 $1 ~ /^acs_/		{print "-1,\t/* ", $2, " */"; count++; next;}
 $1 ~ /^label_format/	{print "-1,\t/* ", $2, " */"; count++; next;}
@@ -61,3 +72,4 @@
 END			{printf("} /* %d entries */;\n\n", count);}
 '
 
+echo "#endif /* PARAMETRIZED_H */"
diff --git a/include/MKterm.h.awk b/include/MKterm.h.awk
deleted file mode 100644
index 3ba0433..0000000
--- a/include/MKterm.h.awk
+++ /dev/null
@@ -1,334 +0,0 @@
-# vile:awkmode
-BEGIN		{
-		    print  "/****************************************************************************"
-		    print  " * Copyright (c) 1998-2011,2013 Free Software Foundation, Inc.              *"
-		    print  " *                                                                          *"
-		    print  " * Permission is hereby granted, free of charge, to any person obtaining a  *"
-		    print  " * copy of this software and associated documentation files (the            *"
-		    print  " * \"Software\"), to deal in the Software without restriction, including      *"
-		    print  " * without limitation the rights to use, copy, modify, merge, publish,      *"
-		    print  " * distribute, distribute with modifications, sublicense, and/or sell       *"
-		    print  " * copies of the Software, and to permit persons to whom the Software is    *"
-		    print  " * furnished to do so, subject to the following conditions:                 *"
-		    print  " *                                                                          *"
-		    print  " * The above copyright notice and this permission notice shall be included  *"
-		    print  " * in all copies or substantial portions of the Software.                   *"
-		    print  " *                                                                          *"
-		    print  " * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *"
-		    print  " * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *"
-		    print  " * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *"
-		    print  " * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *"
-		    print  " * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *"
-		    print  " * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *"
-		    print  " * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *"
-		    print  " *                                                                          *"
-		    print  " * Except as contained in this notice, the name(s) of the above copyright   *"
-		    print  " * holders shall not be used in advertising or otherwise to promote the     *"
-		    print  " * sale, use or other dealings in this Software without prior written       *"
-		    print  " * authorization.                                                           *"
-		    print  " ****************************************************************************/"
-		    print  ""
-		    print  "/****************************************************************************/"
-		    print  "/* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995                */"
-		    print  "/*    and: Eric S. Raymond <esr@snark.thyrsus.com>                          */"
-		    print  "/*    and: Thomas E. Dickey                        1995-on                  */"
-		    print  "/****************************************************************************/"
-		    print  ""
-		    print  "/* $Id: MKterm.h.awk.in,v 1.62 2013/08/17 19:21:56 tom Exp $ */"
-		    print  ""
-		    print  "/*"
-		    print  "**	term.h -- Definition of struct term"
-		    print  "*/"
-		    print  ""
-		    print  "#ifndef NCURSES_TERM_H_incl"
-		    print  "#define NCURSES_TERM_H_incl 1"
-		    print  ""
-		    print  "#undef  NCURSES_VERSION"
-		    print  "#define NCURSES_VERSION \"6.0\""
-		    print  ""
-		    print  "#include <ncurses_dll.h>"
-		    print  ""
-		    print  "#ifdef __cplusplus"
-		    print  "extern \"C\" {"
-		    print  "#endif"
-		    print  ""
-		    print  "/* Make this file self-contained by providing defaults for the HAVE_TERMIO[S]_H"
-		    print  " * definition (based on the system for which this was configured)."
-		    print  " */"
-		    print  ""
-		    print  "#undef  NCURSES_CONST"
-		    print  "#define NCURSES_CONST const"
-		    print  ""
-		    print  "#undef  NCURSES_SBOOL"
-		    print  "#define NCURSES_SBOOL char"
-		    print  ""
-		    print  "#undef  NCURSES_USE_DATABASE"
-		    print  "#define NCURSES_USE_DATABASE 1"
-		    print  ""
-		    print  "#undef  NCURSES_USE_TERMCAP"
-		    print  "#define NCURSES_USE_TERMCAP 0"
-		    print  ""
-		    print  "#undef  NCURSES_XNAMES"
-		    print  "#define NCURSES_XNAMES 1"
-		    print  ""
-		    print  "/* We will use these symbols to hide differences between"
-		    print  " * termios/termio/sgttyb interfaces."
-		    print  " */"
-		    print  "#undef  TTY"
-		    print  "#undef  SET_TTY"
-		    print  "#undef  GET_TTY"
-		    print  ""
-		    print  "/* Assume POSIX termio if we have the header and function */"
-		    print  "/* #if HAVE_TERMIOS_H && HAVE_TCGETATTR */"
-		    print  "#if 1 && 1"
-		    print  ""
-		    print  "#undef  TERMIOS"
-		    print  "#define TERMIOS 1"
-		    print  ""
-		    print  "#include <termios.h>"
-		    print  "#define TTY struct termios"
-		    print  ""
-		    print  "#else /* !HAVE_TERMIOS_H */"
-		    print  ""
-		    print  "/* #if HAVE_TERMIO_H */"
-		    print  "#if 1"
-		    print  ""
-		    print  "#undef  TERMIOS"
-		    print  "#define TERMIOS 1"
-		    print  ""
-		    print  "#include <termio.h>"
-		    print  "#define TTY struct termio"
-		    print  ""
-		    print  "#else /* !HAVE_TERMIO_H */"
-		    print  ""
-		    print  "#if __MINGW32__"
-		    print  "#  include <ncurses_mingw.h>"
-		    print  "#  define TTY struct termios"
-		    print  "#else"
-		    print  "#undef TERMIOS"
-		    print  "#include <sgtty.h>"
-		    print  "#include <sys/ioctl.h>"
-		    print  "#define TTY struct sgttyb"
-		    print  "#endif /* MINGW32 */"
-		    print  "#endif /* HAVE_TERMIO_H */"
-		    print  ""
-		    print  "#endif /* HAVE_TERMIOS_H */"
-		    print  ""
-		    print  "#ifdef TERMIOS"
-		    print  "#define GET_TTY(fd, buf) tcgetattr(fd, buf)"
-		    print  "#define SET_TTY(fd, buf) tcsetattr(fd, TCSADRAIN, buf)"
-		    print  "#else"
-		    print  "#define GET_TTY(fd, buf) gtty(fd, buf)"
-		    print  "#define SET_TTY(fd, buf) stty(fd, buf)"
-		    print  "#endif"
-		    print  ""
-		    print  "#define NAMESIZE 256"
-		    print  ""
-		    print  "#define CUR cur_term->type."
-		    print  ""
-		}
-
-$2 == "%%-STOP-HERE-%%"	{
-			print  ""
-			printf "#define BOOLWRITE %d\n", BoolCount
-			printf "#define NUMWRITE  %d\n", NumberCount
-			printf "#define STRWRITE  %d\n", StringCount
-			print  ""
-			print  "/* older synonyms for some capabilities */"
-			print  "#define beehive_glitch	no_esc_ctlc"
-			print  "#define teleray_glitch	dest_tabs_magic_smso"
-			print  "#define micro_char_size micro_col_size"
-			print  ""
-			print  "#ifdef __INTERNAL_CAPS_VISIBLE"
-		}
-
-/^#/		{next;}
-
-$1 == "acs_chars"	{acsindex = StringCount}
-
-$3 == "bool"	{
-		    printf "#define %-30s CUR Booleans[%d]\n", $1, BoolCount++
-		}
-
-$3 == "num"	{
-		    printf "#define %-30s CUR Numbers[%d]\n", $1, NumberCount++
-		}
-
-$3 == "str"	{
-		    printf "#define %-30s CUR Strings[%d]\n", $1, StringCount++
-		}
-
-END		{
-			print  "#endif /* __INTERNAL_CAPS_VISIBLE */"
-			print  ""
-			print  ""
-			print  "/*"
-			print  " * Predefined terminfo array sizes"
-			print  " */"
-			printf "#define BOOLCOUNT %d\n", BoolCount
-			printf "#define NUMCOUNT  %d\n", NumberCount
-			printf "#define STRCOUNT  %d\n", StringCount
-			print  ""
-			print  "/* used by code for comparing entries */"
-			print  "#define acs_chars_index	", acsindex
-			print  ""
-			print  "typedef struct termtype {	/* in-core form of terminfo data */"
-			print  "    char  *term_names;		/* str_table offset of term names */"
-			print  "    char  *str_table;		/* pointer to string table */"
-			print  "    NCURSES_SBOOL  *Booleans;	/* array of boolean values */"
-			print  "    short *Numbers;		/* array of integer values */"
-			print  "    char  **Strings;		/* array of string offsets */"
-			print  ""
-			print  "#if NCURSES_XNAMES"
-			print  "    char  *ext_str_table;	/* pointer to extended string table */"
-			print  "    char  **ext_Names;		/* corresponding names */"
-			print  ""
-			print  "    unsigned short num_Booleans;/* count total Booleans */"
-			print  "    unsigned short num_Numbers;	/* count total Numbers */"
-			print  "    unsigned short num_Strings;	/* count total Strings */"
-			print  ""
-			print  "    unsigned short ext_Booleans;/* count extensions to Booleans */"
-			print  "    unsigned short ext_Numbers;	/* count extensions to Numbers */"
-			print  "    unsigned short ext_Strings;	/* count extensions to Strings */"
-			print  "#endif /* NCURSES_XNAMES */"
-			print  ""
-			print  "} TERMTYPE;"
-			print  ""
-			print  "typedef struct term {		/* describe an actual terminal */"
-			print  "    TERMTYPE	type;		/* terminal type description */"
-			print  "    short	Filedes;	/* file description being written to */"
-			print  "    TTY		Ottyb,		/* original state of the terminal */"
-			print  "		Nttyb;		/* current state of the terminal */"
-			print  "    int		_baudrate;	/* used to compute padding */"
-			print  "    char *      _termname;      /* used for termname() */"
-			print  "} TERMINAL;"
-			print  ""
-			print  "#if 0 && !0"
-			print  "extern NCURSES_EXPORT_VAR(TERMINAL *) cur_term;"
-			print  "#elif 0"
-			print  "NCURSES_WRAPPED_VAR(TERMINAL *, cur_term);"
-			print  "#define cur_term   NCURSES_PUBLIC_VAR(cur_term())"
-			print  "#else"
-			print  "extern NCURSES_EXPORT_VAR(TERMINAL *) cur_term;"
-			print  "#endif"
-			print  ""
-			print  "#if 0 || 0"
-			print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolnames);"
-			print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolcodes);"
-			print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolfnames);"
-			print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numnames);"
-			print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numcodes);"
-			print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numfnames);"
-			print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strnames);"
-			print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strcodes);"
-			print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strfnames);"
-			print  ""
-			print  "#define boolnames  NCURSES_PUBLIC_VAR(boolnames())"
-			print  "#define boolcodes  NCURSES_PUBLIC_VAR(boolcodes())"
-			print  "#define boolfnames NCURSES_PUBLIC_VAR(boolfnames())"
-			print  "#define numnames   NCURSES_PUBLIC_VAR(numnames())"
-			print  "#define numcodes   NCURSES_PUBLIC_VAR(numcodes())"
-			print  "#define numfnames  NCURSES_PUBLIC_VAR(numfnames())"
-			print  "#define strnames   NCURSES_PUBLIC_VAR(strnames())"
-			print  "#define strcodes   NCURSES_PUBLIC_VAR(strcodes())"
-			print  "#define strfnames  NCURSES_PUBLIC_VAR(strfnames())"
-			print  ""
-			print  "#else"
-			print  ""
-			print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolnames[];"
-			print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolcodes[];"
-			print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolfnames[];"
-			print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numnames[];"
-			print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numcodes[];"
-			print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numfnames[];"
-			print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strnames[];"
-			print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strcodes[];"
-			print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strfnames[];"
-			print  ""
-			print  "#endif"
-			print  ""
-			print  "/* internals */"
-			print  "extern NCURSES_EXPORT(int) _nc_set_tty_mode (TTY *buf);"
-			print  "extern NCURSES_EXPORT(int) _nc_get_tty_mode (TTY *buf);"
-			print  "extern NCURSES_EXPORT(int) _nc_read_entry (const char * const, char * const, TERMTYPE *const);"
-			print  "extern NCURSES_EXPORT(int) _nc_read_file_entry (const char *const, TERMTYPE *);"
-			print  "extern NCURSES_EXPORT(void) _nc_init_termtype (TERMTYPE *const);"
-			print  "extern NCURSES_EXPORT(int) _nc_read_termtype (TERMTYPE *, char *, int);"
-			print  "extern NCURSES_EXPORT(char *) _nc_first_name (const char *const);"
-			print  "extern NCURSES_EXPORT(int) _nc_name_match (const char *const, const char *const, const char *const);"
-			print  "extern NCURSES_EXPORT(const TERMTYPE *) _nc_fallback (const char *);"
-			print  ""
-			print  "/* entry points */"
-			print  "extern NCURSES_EXPORT(TERMINAL *) set_curterm (TERMINAL *);"
-			print  "extern NCURSES_EXPORT(int) del_curterm (TERMINAL *);"
-			print  ""
-			print  "/* miscellaneous entry points */"
-			print  "extern NCURSES_EXPORT(int) restartterm (NCURSES_CONST char *, int, int *);"
-			print  "extern NCURSES_EXPORT(int) setupterm (NCURSES_CONST char *,int,int *);"
-			print  ""
-			print  "/* terminfo entry points, also declared in curses.h */"
-			print  "#if !defined(__NCURSES_H)"
-			print  "extern NCURSES_EXPORT(char *) tigetstr (NCURSES_CONST char *);"
-			print  "extern NCURSES_EXPORT_VAR(char) ttytype[];"
-			print  "extern NCURSES_EXPORT(int) putp (const char *);"
-			print  "extern NCURSES_EXPORT(int) tigetflag (NCURSES_CONST char *);"
-			print  "extern NCURSES_EXPORT(int) tigetnum (NCURSES_CONST char *);"
-			print  ""
-			print  "#if 1 /* NCURSES_TPARM_VARARGS */"
-			print  "extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, ...);	/* special */"
-			print  "#else"
-			print  "extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, long,long,long,long,long,long,long,long,long);	/* special */"
-			print  "extern NCURSES_EXPORT(char *) tparm_varargs (NCURSES_CONST char *, ...);	/* special */"
-			print  "#endif"
-			print  ""
-			print  "extern NCURSES_EXPORT(char *) tiparm (const char *, ...);		/* special */"
-			print  ""
-			print  "#endif /* __NCURSES_H */"
-			print  ""
-			print  "/* termcap database emulation (XPG4 uses const only for 2nd param of tgetent) */"
-			print  "#if !defined(NCURSES_TERMCAP_H_incl)"
-			print  "extern NCURSES_EXPORT(char *) tgetstr (NCURSES_CONST char *, char **);"
-			print  "extern NCURSES_EXPORT(char *) tgoto (const char *, int, int);"
-			print  "extern NCURSES_EXPORT(int) tgetent (char *, const char *);"
-			print  "extern NCURSES_EXPORT(int) tgetflag (NCURSES_CONST char *);"
-			print  "extern NCURSES_EXPORT(int) tgetnum (NCURSES_CONST char *);"
-			print  "extern NCURSES_EXPORT(int) tputs (const char *, int, int (*)(int));"
-			print  "#endif /* NCURSES_TERMCAP_H_incl */"
-			print  ""
-			print  "/*"
-			print  " * Include curses.h before term.h to enable these extensions."
-			print  " */"
-			print  "#if defined(NCURSES_SP_FUNCS) && (NCURSES_SP_FUNCS != 0)"
-			print  ""
-			print  "extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tigetstr) (SCREEN*, NCURSES_CONST char *);"
-			print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(putp) (SCREEN*, const char *);"
-			print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tigetflag) (SCREEN*, NCURSES_CONST char *);"
-			print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tigetnum) (SCREEN*, NCURSES_CONST char *);"
-			print  ""
-			print  "#if 1 /* NCURSES_TPARM_VARARGS */"
-			print  "extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tparm) (SCREEN*, NCURSES_CONST char *, ...);	/* special */"
-			print  "#else"
-			print  "extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tparm) (SCREEN*, NCURSES_CONST char *, long,long,long,long,long,long,long,long,long);	/* special */"
-			print  "extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tparm_varargs) (SCREEN*, NCURSES_CONST char *, ...);	/* special */"
-			print  "#endif"
-			print  ""
-			print  "/* termcap database emulation (XPG4 uses const only for 2nd param of tgetent) */"
-			print  "extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tgetstr) (SCREEN*, NCURSES_CONST char *, char **);"
-			print  "extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tgoto) (SCREEN*, const char *, int, int);"
-			print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tgetent) (SCREEN*, char *, const char *);"
-			print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tgetflag) (SCREEN*, NCURSES_CONST char *);"
-			print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tgetnum) (SCREEN*, NCURSES_CONST char *);"
-			print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tputs) (SCREEN*, const char *, int, NCURSES_SP_OUTC);"
-			print  ""
-			print  "extern NCURSES_EXPORT(TERMINAL *) NCURSES_SP_NAME(set_curterm) (SCREEN*, TERMINAL *);"
-			print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(del_curterm) (SCREEN*, TERMINAL *);"
-			print  ""
-			print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(restartterm) (SCREEN*, NCURSES_CONST char *, int, int *);"
-			print  "#endif /* NCURSES_SP_FUNCS */"
-			print  ""
-			print  "#ifdef __cplusplus"
-			print  "}"
-			print  "#endif"
-			print  ""
-			print  "#endif /* NCURSES_TERM_H_incl */"
-		}
diff --git a/include/MKterm.h.awk.in b/include/MKterm.h.awk.in
index 587ee52..a93d8e8 100644
--- a/include/MKterm.h.awk.in
+++ b/include/MKterm.h.awk.in
@@ -1,334 +1,413 @@
 # vile:awkmode
-BEGIN		{
-		    print  "/****************************************************************************"
-		    print  " * Copyright (c) 1998-2011,2013 Free Software Foundation, Inc.              *"
-		    print  " *                                                                          *"
-		    print  " * Permission is hereby granted, free of charge, to any person obtaining a  *"
-		    print  " * copy of this software and associated documentation files (the            *"
-		    print  " * \"Software\"), to deal in the Software without restriction, including      *"
-		    print  " * without limitation the rights to use, copy, modify, merge, publish,      *"
-		    print  " * distribute, distribute with modifications, sublicense, and/or sell       *"
-		    print  " * copies of the Software, and to permit persons to whom the Software is    *"
-		    print  " * furnished to do so, subject to the following conditions:                 *"
-		    print  " *                                                                          *"
-		    print  " * The above copyright notice and this permission notice shall be included  *"
-		    print  " * in all copies or substantial portions of the Software.                   *"
-		    print  " *                                                                          *"
-		    print  " * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *"
-		    print  " * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *"
-		    print  " * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *"
-		    print  " * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *"
-		    print  " * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *"
-		    print  " * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *"
-		    print  " * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *"
-		    print  " *                                                                          *"
-		    print  " * Except as contained in this notice, the name(s) of the above copyright   *"
-		    print  " * holders shall not be used in advertising or otherwise to promote the     *"
-		    print  " * sale, use or other dealings in this Software without prior written       *"
-		    print  " * authorization.                                                           *"
-		    print  " ****************************************************************************/"
-		    print  ""
-		    print  "/****************************************************************************/"
-		    print  "/* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995                */"
-		    print  "/*    and: Eric S. Raymond <esr@snark.thyrsus.com>                          */"
-		    print  "/*    and: Thomas E. Dickey                        1995-on                  */"
-		    print  "/****************************************************************************/"
-		    print  ""
-		    print  "/* $Id: MKterm.h.awk.in,v 1.62 2013/08/17 19:21:56 tom Exp $ */"
-		    print  ""
-		    print  "/*"
-		    print  "**	term.h -- Definition of struct term"
-		    print  "*/"
-		    print  ""
-		    print  "#ifndef NCURSES_TERM_H_incl"
-		    print  "#define NCURSES_TERM_H_incl 1"
-		    print  ""
-		    print  "#undef  NCURSES_VERSION"
-		    print  "#define NCURSES_VERSION \"@NCURSES_MAJOR@.@NCURSES_MINOR@\""
-		    print  ""
-		    print  "#include <ncurses_dll.h>"
-		    print  ""
-		    print  "#ifdef __cplusplus"
-		    print  "extern \"C\" {"
-		    print  "#endif"
-		    print  ""
-		    print  "/* Make this file self-contained by providing defaults for the HAVE_TERMIO[S]_H"
-		    print  " * definition (based on the system for which this was configured)."
-		    print  " */"
-		    print  ""
-		    print  "#undef  NCURSES_CONST"
-		    print  "#define NCURSES_CONST @NCURSES_CONST@"
-		    print  ""
-		    print  "#undef  NCURSES_SBOOL"
-		    print  "#define NCURSES_SBOOL @NCURSES_SBOOL@"
-		    print  ""
-		    print  "#undef  NCURSES_USE_DATABASE"
-		    print  "#define NCURSES_USE_DATABASE @NCURSES_USE_DATABASE@"
-		    print  ""
-		    print  "#undef  NCURSES_USE_TERMCAP"
-		    print  "#define NCURSES_USE_TERMCAP @NCURSES_USE_TERMCAP@"
-		    print  ""
-		    print  "#undef  NCURSES_XNAMES"
-		    print  "#define NCURSES_XNAMES @NCURSES_XNAMES@"
-		    print  ""
-		    print  "/* We will use these symbols to hide differences between"
-		    print  " * termios/termio/sgttyb interfaces."
-		    print  " */"
-		    print  "#undef  TTY"
-		    print  "#undef  SET_TTY"
-		    print  "#undef  GET_TTY"
-		    print  ""
-		    print  "/* Assume POSIX termio if we have the header and function */"
-		    print  "/* #if HAVE_TERMIOS_H && HAVE_TCGETATTR */"
-		    print  "#if @HAVE_TERMIOS_H@ && @HAVE_TCGETATTR@"
-		    print  ""
-		    print  "#undef  TERMIOS"
-		    print  "#define TERMIOS 1"
-		    print  ""
-		    print  "#include <termios.h>"
-		    print  "#define TTY struct termios"
-		    print  ""
-		    print  "#else /* !HAVE_TERMIOS_H */"
-		    print  ""
-		    print  "/* #if HAVE_TERMIO_H */"
-		    print  "#if @HAVE_TERMIO_H@"
-		    print  ""
-		    print  "#undef  TERMIOS"
-		    print  "#define TERMIOS 1"
-		    print  ""
-		    print  "#include <termio.h>"
-		    print  "#define TTY struct termio"
-		    print  ""
-		    print  "#else /* !HAVE_TERMIO_H */"
-		    print  ""
-		    print  "#if __MINGW32__"
-		    print  "#  include <ncurses_mingw.h>"
-		    print  "#  define TTY struct termios"
-		    print  "#else"
-		    print  "#undef TERMIOS"
-		    print  "#include <sgtty.h>"
-		    print  "#include <sys/ioctl.h>"
-		    print  "#define TTY struct sgttyb"
-		    print  "#endif /* MINGW32 */"
-		    print  "#endif /* HAVE_TERMIO_H */"
-		    print  ""
-		    print  "#endif /* HAVE_TERMIOS_H */"
-		    print  ""
-		    print  "#ifdef TERMIOS"
-		    print  "#define GET_TTY(fd, buf) tcgetattr(fd, buf)"
-		    print  "#define SET_TTY(fd, buf) tcsetattr(fd, TCSADRAIN, buf)"
-		    print  "#else"
-		    print  "#define GET_TTY(fd, buf) gtty(fd, buf)"
-		    print  "#define SET_TTY(fd, buf) stty(fd, buf)"
-		    print  "#endif"
-		    print  ""
-		    print  "#define NAMESIZE 256"
-		    print  ""
-		    print  "#define CUR cur_term->type."
-		    print  ""
-		}
+function declare_termtype(number,suffix) {
+	printf "typedef struct termtype%s {	/* in-core form of terminfo data */\n", suffix;
+	print  "    char  *term_names;		/* str_table offset of term names */"
+	print  "    char  *str_table;		/* pointer to string table */"
+	print  "    NCURSES_SBOOL  *Booleans;	/* array of boolean values */"
+	printf "    %-5s *Numbers;		/* array of integer values */\n", number;
+	print  "    char  **Strings;		/* array of string offsets */"
+	print  ""
+	print  "#if NCURSES_XNAMES"
+	print  "    char  *ext_str_table;	/* pointer to extended string table */"
+	print  "    char  **ext_Names;		/* corresponding names */"
+	print  ""
+	print  "    unsigned short num_Booleans;/* count total Booleans */";
+	print  "    unsigned short num_Numbers;	/* count total Numbers */";
+	print  "    unsigned short num_Strings;	/* count total Strings */";
+	print  ""
+	print  "    unsigned short ext_Booleans;/* count extensions to Booleans */";
+	print  "    unsigned short ext_Numbers;	/* count extensions to Numbers */";
+	print  "    unsigned short ext_Strings;	/* count extensions to Strings */";
+	print  "#endif /* NCURSES_XNAMES */"
+	print  ""
+	printf "} TERMTYPE%s;\n", suffix;
+}
+BEGIN {
+	lcurl = "{";
+	rcurl = "}";
+	print  "/****************************************************************************"
+	print  " * Copyright 2018-2021,2023 Thomas E. Dickey                                *"
+	print  " * Copyright 1998-2013,2017 Free Software Foundation, Inc.                  *"
+	print  " *                                                                          *"
+	print  " * Permission is hereby granted, free of charge, to any person obtaining a  *"
+	print  " * copy of this software and associated documentation files (the            *"
+	print  " * \"Software\"), to deal in the Software without restriction, including      *"
+	print  " * without limitation the rights to use, copy, modify, merge, publish,      *"
+	print  " * distribute, distribute with modifications, sublicense, and/or sell       *"
+	print  " * copies of the Software, and to permit persons to whom the Software is    *"
+	print  " * furnished to do so, subject to the following conditions:                 *"
+	print  " *                                                                          *"
+	print  " * The above copyright notice and this permission notice shall be included  *"
+	print  " * in all copies or substantial portions of the Software.                   *"
+	print  " *                                                                          *"
+	print  " * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *"
+	print  " * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *"
+	print  " * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *"
+	print  " * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *"
+	print  " * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *"
+	print  " * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *"
+	print  " * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *"
+	print  " *                                                                          *"
+	print  " * Except as contained in this notice, the name(s) of the above copyright   *"
+	print  " * holders shall not be used in advertising or otherwise to promote the     *"
+	print  " * sale, use or other dealings in this Software without prior written       *"
+	print  " * authorization.                                                           *"
+	print  " ****************************************************************************/"
+	print  ""
+	print  "/****************************************************************************/"
+	print  "/* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995                */"
+	print  "/*    and: Eric S. Raymond <esr@snark.thyrsus.com>                          */"
+	print  "/*    and: Thomas E. Dickey                        1995-on                  */"
+	print  "/****************************************************************************/"
+	print  ""
+	print  "/* $Id: MKterm.h.awk.in,v 1.85 2023/04/23 19:15:36 tom Exp $ */"
+	print  ""
+	print  "/*"
+	print  "**	term.h -- Definition of struct term"
+	print  "*/"
+	print  ""
+	print  "#ifndef NCURSES_TERM_H_incl"
+	print  "#define NCURSES_TERM_H_incl 1"
+	print  ""
+	print  "#undef  NCURSES_VERSION"
+	print  "#define NCURSES_VERSION \"@NCURSES_MAJOR@.@NCURSES_MINOR@\""
+	print  ""
+	print  "#include <ncurses_dll.h>"
+	print  ""
+	print  "#ifdef __cplusplus"
+	printf "extern \"C\" %s\n", lcurl;
+	print  "#endif"
+	print  ""
+	print  "/* Make this file self-contained by providing defaults for the HAVE_TERMIO[S]_H"
+	print  " * definition (based on the system for which this was configured)."
+	print  " */"
+	print  ""
+	print  "#ifndef __NCURSES_H"
+	print  ""
+	print  "typedef struct screen  SCREEN;"
+	print  ""
+	print  "#if @NCURSES_SP_FUNCS@"
+	print  "#undef  NCURSES_SP_FUNCS"
+	print  "#define NCURSES_SP_FUNCS @NCURSES_PATCH@"
+	print  "#undef  NCURSES_SP_NAME"
+	print  "#define NCURSES_SP_NAME(name) name##_sp"
+	print  ""
+	print  "/* Define the sp-funcs helper function */"
+	print  "#undef  NCURSES_SP_OUTC"
+	print  "#define NCURSES_SP_OUTC NCURSES_SP_NAME(NCURSES_OUTC)"
+	print  "typedef int (*NCURSES_SP_OUTC)(SCREEN*, int);"
+	print  "#endif"
+	print  ""
+	print  "#endif /* __NCURSES_H */"
+	print  ""
+	print  "#undef  NCURSES_CONST"
+	print  "#define NCURSES_CONST @NCURSES_CONST@"
+	print  ""
+	print  "#undef  NCURSES_SBOOL"
+	print  "#define NCURSES_SBOOL @NCURSES_SBOOL@"
+	print  ""
+	print  "#undef  NCURSES_USE_DATABASE"
+	print  "#define NCURSES_USE_DATABASE @NCURSES_USE_DATABASE@"
+	print  ""
+	print  "#undef  NCURSES_USE_TERMCAP"
+	print  "#define NCURSES_USE_TERMCAP @NCURSES_USE_TERMCAP@"
+	print  ""
+	print  "#undef  NCURSES_XNAMES"
+	print  "#define NCURSES_XNAMES @NCURSES_XNAMES@"
+	print  ""
+	print  "/* We will use these symbols to hide differences between"
+	print  " * termios/termio/sgttyb interfaces."
+	print  " */"
+	print  "#undef  TTY"
+	print  "#undef  SET_TTY"
+	print  "#undef  GET_TTY"
+	print  ""
+	print  "/* Assume POSIX termio if we have the header and function */"
+	print  "/* #if HAVE_TERMIOS_H && HAVE_TCGETATTR */"
+	print  "#if @HAVE_TERMIOS_H@ && @HAVE_TCGETATTR@"
+	print  ""
+	print  "#undef  TERMIOS"
+	print  "#define TERMIOS 1"
+	print  ""
+	print  "#include <termios.h>"
+	print  "#define TTY struct termios"
+	print  ""
+	print  "#else /* !HAVE_TERMIOS_H */"
+	print  ""
+	print  "/* #if HAVE_TERMIO_H */"
+	print  "#if @HAVE_TERMIO_H@"
+	print  ""
+	print  "#undef  TERMIOS"
+	print  "#define TERMIOS 1"
+	print  ""
+	print  "#include <termio.h>"
+	print  "#define TTY struct termio"
+	print  ""
+	print  "#else /* !HAVE_TERMIO_H */"
+	print  ""
+	print  "#if (defined(_WIN32) || defined(_WIN64))"
+	print  "#if @EXP_WIN32_DRIVER@"
+	print  "#include <win32_curses.h>"
+	print  "#define TTY struct winconmode"
+	print  "#else"
+	print  "#include <ncurses_mingw.h>"
+	print  "#define TTY struct termios"
+	print  "#endif"
+	print  "#else"
+	print  "#undef TERMIOS"
+	print  "#include <sgtty.h>"
+	print  "#include <sys/ioctl.h>"
+	print  "#define TTY struct sgttyb"
+	print  "#endif /* MINGW32 */"
+	print  "#endif /* HAVE_TERMIO_H */"
+	print  ""
+	print  "#endif /* HAVE_TERMIOS_H */"
+	print  ""
+	print  "#ifdef TERMIOS"
+	print  "#define GET_TTY(fd, buf) tcgetattr(fd, buf)"
+	print  "#define SET_TTY(fd, buf) tcsetattr(fd, TCSADRAIN, buf)"
+	print  "#elif @EXP_WIN32_DRIVER@ && (defined(_WIN32) || defined(_WIN64))"
+	print  "#define GET_TTY(fd, buf) _nc_console_getmode(_nc_console_fd2handle(fd),buf)"
+	print  "#define SET_TTY(fd, buf) _nc_console_setmode(_nc_console_fd2handle(fd),buf)"
+	print  "#else"
+	print  "#define GET_TTY(fd, buf) gtty(fd, buf)"
+	print  "#define SET_TTY(fd, buf) stty(fd, buf)"
+	print  "#endif"
+	print  ""
+	print  "#ifndef	GCC_NORETURN"
+	print  "#define	GCC_NORETURN /* nothing */"
+	print  "#endif"
+	print  ""
+	print  "#define NAMESIZE 256"
+	print  ""
+	print  "/* The cast works because TERMTYPE is the first data in TERMINAL */"
+	print  "#define CUR ((TERMTYPE *)(cur_term))->"
+	print  ""
+}
 
-$2 == "%%-STOP-HERE-%%"	{
-			print  ""
-			printf "#define BOOLWRITE %d\n", BoolCount
-			printf "#define NUMWRITE  %d\n", NumberCount
-			printf "#define STRWRITE  %d\n", StringCount
-			print  ""
-			print  "/* older synonyms for some capabilities */"
-			print  "#define beehive_glitch	no_esc_ctlc"
-			print  "#define teleray_glitch	dest_tabs_magic_smso"
-			print  "#define micro_char_size micro_col_size"
-			print  ""
-			print  "#ifdef __INTERNAL_CAPS_VISIBLE"
-		}
+$2 == "%%-STOP-HERE-%%" {
+	print  ""
+	printf "#define BOOLWRITE %d\n", BoolCount
+	printf "#define NUMWRITE  %d\n", NumberCount
+	printf "#define STRWRITE  %d\n", StringCount
+	print  ""
+	print  "/* older synonyms for some capabilities */"
+	print  "#define beehive_glitch	no_esc_ctlc"
+	print  "#define teleray_glitch	dest_tabs_magic_smso"
+	print  ""
+	print  "/* HPUX-11 uses this name rather than the standard one */"
+	print  "#ifndef micro_char_size"
+	print  "#define micro_char_size micro_col_size"
+	print  "#endif"
+	print  ""
+	print  "#ifdef __INTERNAL_CAPS_VISIBLE"
+}
 
-/^#/		{next;}
+/^#/ { next; }
 
-$1 == "acs_chars"	{acsindex = StringCount}
+/^used_by/ { next ; }
+/^userdef/ { next ; }
 
-$3 == "bool"	{
-		    printf "#define %-30s CUR Booleans[%d]\n", $1, BoolCount++
-		}
+$1 == "acs_chars" {
+	acsindex = StringCount;
+}
 
-$3 == "num"	{
-		    printf "#define %-30s CUR Numbers[%d]\n", $1, NumberCount++
-		}
+$3 == "bool" {
+	printf "#define %-30s CUR Booleans[%d]\n", $1, BoolCount++
+}
 
-$3 == "str"	{
-		    printf "#define %-30s CUR Strings[%d]\n", $1, StringCount++
-		}
+$3 == "num" {
+	printf "#define %-30s CUR Numbers[%d]\n", $1, NumberCount++
+}
 
-END		{
-			print  "#endif /* __INTERNAL_CAPS_VISIBLE */"
-			print  ""
-			print  ""
-			print  "/*"
-			print  " * Predefined terminfo array sizes"
-			print  " */"
-			printf "#define BOOLCOUNT %d\n", BoolCount
-			printf "#define NUMCOUNT  %d\n", NumberCount
-			printf "#define STRCOUNT  %d\n", StringCount
-			print  ""
-			print  "/* used by code for comparing entries */"
-			print  "#define acs_chars_index	", acsindex
-			print  ""
-			print  "typedef struct termtype {	/* in-core form of terminfo data */"
-			print  "    char  *term_names;		/* str_table offset of term names */"
-			print  "    char  *str_table;		/* pointer to string table */"
-			print  "    NCURSES_SBOOL  *Booleans;	/* array of boolean values */"
-			print  "    short *Numbers;		/* array of integer values */"
-			print  "    char  **Strings;		/* array of string offsets */"
-			print  ""
-			print  "#if NCURSES_XNAMES"
-			print  "    char  *ext_str_table;	/* pointer to extended string table */"
-			print  "    char  **ext_Names;		/* corresponding names */"
-			print  ""
-			print  "    unsigned short num_Booleans;/* count total Booleans */"
-			print  "    unsigned short num_Numbers;	/* count total Numbers */"
-			print  "    unsigned short num_Strings;	/* count total Strings */"
-			print  ""
-			print  "    unsigned short ext_Booleans;/* count extensions to Booleans */"
-			print  "    unsigned short ext_Numbers;	/* count extensions to Numbers */"
-			print  "    unsigned short ext_Strings;	/* count extensions to Strings */"
-			print  "#endif /* NCURSES_XNAMES */"
-			print  ""
-			print  "} TERMTYPE;"
-			print  ""
-			print  "typedef struct term {		/* describe an actual terminal */"
-			print  "    TERMTYPE	type;		/* terminal type description */"
-			print  "    short	Filedes;	/* file description being written to */"
-			print  "    TTY		Ottyb,		/* original state of the terminal */"
-			print  "		Nttyb;		/* current state of the terminal */"
-			print  "    int		_baudrate;	/* used to compute padding */"
-			print  "    char *      _termname;      /* used for termname() */"
-			print  "} TERMINAL;"
-			print  ""
-			print  "#if @BROKEN_LINKER@ && !@cf_cv_enable_reentrant@"
-			print  "extern NCURSES_EXPORT_VAR(TERMINAL *) cur_term;"
-			print  "#elif @cf_cv_enable_reentrant@"
-			print  "NCURSES_WRAPPED_VAR(TERMINAL *, cur_term);"
-			print  "#define cur_term   NCURSES_PUBLIC_VAR(cur_term())"
-			print  "#else"
-			print  "extern NCURSES_EXPORT_VAR(TERMINAL *) cur_term;"
-			print  "#endif"
-			print  ""
-			print  "#if @BROKEN_LINKER@ || @cf_cv_enable_reentrant@"
-			print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolnames);"
-			print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolcodes);"
-			print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolfnames);"
-			print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numnames);"
-			print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numcodes);"
-			print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numfnames);"
-			print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strnames);"
-			print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strcodes);"
-			print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strfnames);"
-			print  ""
-			print  "#define boolnames  NCURSES_PUBLIC_VAR(boolnames())"
-			print  "#define boolcodes  NCURSES_PUBLIC_VAR(boolcodes())"
-			print  "#define boolfnames NCURSES_PUBLIC_VAR(boolfnames())"
-			print  "#define numnames   NCURSES_PUBLIC_VAR(numnames())"
-			print  "#define numcodes   NCURSES_PUBLIC_VAR(numcodes())"
-			print  "#define numfnames  NCURSES_PUBLIC_VAR(numfnames())"
-			print  "#define strnames   NCURSES_PUBLIC_VAR(strnames())"
-			print  "#define strcodes   NCURSES_PUBLIC_VAR(strcodes())"
-			print  "#define strfnames  NCURSES_PUBLIC_VAR(strfnames())"
-			print  ""
-			print  "#else"
-			print  ""
-			print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolnames[];"
-			print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolcodes[];"
-			print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolfnames[];"
-			print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numnames[];"
-			print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numcodes[];"
-			print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numfnames[];"
-			print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strnames[];"
-			print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strcodes[];"
-			print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strfnames[];"
-			print  ""
-			print  "#endif"
-			print  ""
-			print  "/* internals */"
-			print  "extern NCURSES_EXPORT(int) _nc_set_tty_mode (TTY *buf);"
-			print  "extern NCURSES_EXPORT(int) _nc_get_tty_mode (TTY *buf);"
-			print  "extern NCURSES_EXPORT(int) _nc_read_entry (const char * const, char * const, TERMTYPE *const);"
-			print  "extern NCURSES_EXPORT(int) _nc_read_file_entry (const char *const, TERMTYPE *);"
-			print  "extern NCURSES_EXPORT(void) _nc_init_termtype (TERMTYPE *const);"
-			print  "extern NCURSES_EXPORT(int) _nc_read_termtype (TERMTYPE *, char *, int);"
-			print  "extern NCURSES_EXPORT(char *) _nc_first_name (const char *const);"
-			print  "extern NCURSES_EXPORT(int) _nc_name_match (const char *const, const char *const, const char *const);"
-			print  "extern NCURSES_EXPORT(const TERMTYPE *) _nc_fallback (const char *);"
-			print  ""
-			print  "/* entry points */"
-			print  "extern NCURSES_EXPORT(TERMINAL *) set_curterm (TERMINAL *);"
-			print  "extern NCURSES_EXPORT(int) del_curterm (TERMINAL *);"
-			print  ""
-			print  "/* miscellaneous entry points */"
-			print  "extern NCURSES_EXPORT(int) restartterm (NCURSES_CONST char *, int, int *);"
-			print  "extern NCURSES_EXPORT(int) setupterm (NCURSES_CONST char *,int,int *);"
-			print  ""
-			print  "/* terminfo entry points, also declared in curses.h */"
-			print  "#if !defined(__NCURSES_H)"
-			print  "extern NCURSES_EXPORT(char *) tigetstr (NCURSES_CONST char *);"
-			print  "extern NCURSES_EXPORT_VAR(char) ttytype[];"
-			print  "extern NCURSES_EXPORT(int) putp (const char *);"
-			print  "extern NCURSES_EXPORT(int) tigetflag (NCURSES_CONST char *);"
-			print  "extern NCURSES_EXPORT(int) tigetnum (NCURSES_CONST char *);"
-			print  ""
-			print  "#if @NCURSES_TPARM_VARARGS@ /* NCURSES_TPARM_VARARGS */"
-			print  "extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, ...);	/* special */"
-			print  "#else"
-			print  "extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, long,long,long,long,long,long,long,long,long);	/* special */"
-			print  "extern NCURSES_EXPORT(char *) tparm_varargs (NCURSES_CONST char *, ...);	/* special */"
-			print  "#endif"
-			print  ""
-			print  "extern NCURSES_EXPORT(char *) tiparm (const char *, ...);		/* special */"
-			print  ""
-			print  "#endif /* __NCURSES_H */"
-			print  ""
-			print  "/* termcap database emulation (XPG4 uses const only for 2nd param of tgetent) */"
-			print  "#if !defined(NCURSES_TERMCAP_H_incl)"
-			print  "extern NCURSES_EXPORT(char *) tgetstr (NCURSES_CONST char *, char **);"
-			print  "extern NCURSES_EXPORT(char *) tgoto (const char *, int, int);"
-			print  "extern NCURSES_EXPORT(int) tgetent (char *, const char *);"
-			print  "extern NCURSES_EXPORT(int) tgetflag (NCURSES_CONST char *);"
-			print  "extern NCURSES_EXPORT(int) tgetnum (NCURSES_CONST char *);"
-			print  "extern NCURSES_EXPORT(int) tputs (const char *, int, int (*)(int));"
-			print  "#endif /* NCURSES_TERMCAP_H_incl */"
-			print  ""
-			print  "/*"
-			print  " * Include curses.h before term.h to enable these extensions."
-			print  " */"
-			print  "#if defined(NCURSES_SP_FUNCS) && (NCURSES_SP_FUNCS != 0)"
-			print  ""
-			print  "extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tigetstr) (SCREEN*, NCURSES_CONST char *);"
-			print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(putp) (SCREEN*, const char *);"
-			print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tigetflag) (SCREEN*, NCURSES_CONST char *);"
-			print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tigetnum) (SCREEN*, NCURSES_CONST char *);"
-			print  ""
-			print  "#if @NCURSES_TPARM_VARARGS@ /* NCURSES_TPARM_VARARGS */"
-			print  "extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tparm) (SCREEN*, NCURSES_CONST char *, ...);	/* special */"
-			print  "#else"
-			print  "extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tparm) (SCREEN*, NCURSES_CONST char *, long,long,long,long,long,long,long,long,long);	/* special */"
-			print  "extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tparm_varargs) (SCREEN*, NCURSES_CONST char *, ...);	/* special */"
-			print  "#endif"
-			print  ""
-			print  "/* termcap database emulation (XPG4 uses const only for 2nd param of tgetent) */"
-			print  "extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tgetstr) (SCREEN*, NCURSES_CONST char *, char **);"
-			print  "extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tgoto) (SCREEN*, const char *, int, int);"
-			print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tgetent) (SCREEN*, char *, const char *);"
-			print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tgetflag) (SCREEN*, NCURSES_CONST char *);"
-			print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tgetnum) (SCREEN*, NCURSES_CONST char *);"
-			print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tputs) (SCREEN*, const char *, int, NCURSES_SP_OUTC);"
-			print  ""
-			print  "extern NCURSES_EXPORT(TERMINAL *) NCURSES_SP_NAME(set_curterm) (SCREEN*, TERMINAL *);"
-			print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(del_curterm) (SCREEN*, TERMINAL *);"
-			print  ""
-			print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(restartterm) (SCREEN*, NCURSES_CONST char *, int, int *);"
-			print  "#endif /* NCURSES_SP_FUNCS */"
-			print  ""
-			print  "#ifdef __cplusplus"
-			print  "}"
-			print  "#endif"
-			print  ""
-			print  "#endif /* NCURSES_TERM_H_incl */"
-		}
+$3 == "str" {
+	printf "#define %-30s CUR Strings[%d]\n", $1, StringCount++
+}
+
+END {
+	print  "#endif /* __INTERNAL_CAPS_VISIBLE */"
+	print  ""
+	print  ""
+	print  "/*"
+	print  " * Predefined terminfo array sizes"
+	print  " */"
+	printf "#define BOOLCOUNT %d\n", BoolCount
+	printf "#define NUMCOUNT  %d\n", NumberCount
+	printf "#define STRCOUNT  %d\n", StringCount
+	print  ""
+	print  "/* used by code for comparing entries */"
+	print  "#define acs_chars_index	", acsindex
+	print  ""
+	declare_termtype("short","");
+	print  ""
+	print  "/*"
+	print  " * The only reason these structures are visible is for read-only use."
+	print  " * Programs which modify the data are not, never were, portable across"
+	print  " * curses implementations."
+	print  " *"
+	print  " * The first field in TERMINAL is used in macros."
+	print  " * The remaining fields are private."
+	print  " */"
+	print  "#ifdef NCURSES_INTERNALS"
+	print  ""
+	print  "#undef TERMINAL"
+	print  "#define TERMINAL struct term"
+	print  "TERMINAL;"
+	print  ""
+	if (@NCURSES_EXT_COLORS@) {
+	declare_termtype("int","2");
+	} else {
+	print  "#undef TERMTYPE2"
+	print  "#define TERMTYPE2 TERMTYPE"
+	}
+	print  "#else"
+	print  ""
+	print  "typedef struct term {		/* describe an actual terminal */"
+	print  "    TERMTYPE	type;		/* terminal type description */"
+	print  "} TERMINAL;"
+	print  ""
+	print  "#endif /* NCURSES_INTERNALS */"
+	print  ""
+	print  ""
+	print  "#if @BROKEN_LINKER@ && !@cf_cv_enable_reentrant@"
+	print  "extern NCURSES_EXPORT_VAR(TERMINAL *) cur_term;"
+	print  "#elif @cf_cv_enable_reentrant@"
+	print  "NCURSES_WRAPPED_VAR(TERMINAL *, cur_term);"
+	print  "#define cur_term   NCURSES_PUBLIC_VAR(cur_term())"
+	print  "#else"
+	print  "extern NCURSES_EXPORT_VAR(TERMINAL *) cur_term;"
+	print  "#endif"
+	print  ""
+	print  "#if @BROKEN_LINKER@ || @cf_cv_enable_reentrant@"
+	print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolnames);"
+	print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolcodes);"
+	print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolfnames);"
+	print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numnames);"
+	print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numcodes);"
+	print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numfnames);"
+	print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strnames);"
+	print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strcodes);"
+	print  "NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strfnames);"
+	print  ""
+	print  "#define boolnames  NCURSES_PUBLIC_VAR(boolnames())"
+	print  "#define boolcodes  NCURSES_PUBLIC_VAR(boolcodes())"
+	print  "#define boolfnames NCURSES_PUBLIC_VAR(boolfnames())"
+	print  "#define numnames   NCURSES_PUBLIC_VAR(numnames())"
+	print  "#define numcodes   NCURSES_PUBLIC_VAR(numcodes())"
+	print  "#define numfnames  NCURSES_PUBLIC_VAR(numfnames())"
+	print  "#define strnames   NCURSES_PUBLIC_VAR(strnames())"
+	print  "#define strcodes   NCURSES_PUBLIC_VAR(strcodes())"
+	print  "#define strfnames  NCURSES_PUBLIC_VAR(strfnames())"
+	print  ""
+	print  "#else"
+	print  ""
+	print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolnames[];"
+	print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolcodes[];"
+	print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolfnames[];"
+	print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numnames[];"
+	print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numcodes[];"
+	print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numfnames[];"
+	print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strnames[];"
+	print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strcodes[];"
+	print  "extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strfnames[];"
+	print  ""
+	print  "#endif"
+	print  ""
+	print  "/*"
+	print  " * These entrypoints are used only by the ncurses utilities such as tic."
+	print  " */"
+	print  "#ifdef NCURSES_INTERNALS"
+	print  ""
+	print  "extern NCURSES_EXPORT(int) _nc_set_tty_mode (TTY *buf);"
+	print  "extern NCURSES_EXPORT(int) _nc_read_entry2 (const char * const, char * const, TERMTYPE2 *const);"
+	print  "extern NCURSES_EXPORT(int) _nc_read_file_entry (const char *const, TERMTYPE2 *);"
+	print  "extern NCURSES_EXPORT(int) _nc_read_termtype (TERMTYPE2 *, char *, int);"
+	print  "extern NCURSES_EXPORT(char *) _nc_first_name (const char *const);"
+	print  "extern NCURSES_EXPORT(int) _nc_name_match (const char *const, const char *const, const char *const);"
+	print  "extern NCURSES_EXPORT(char *) _nc_tiparm(int, const char *, ...);"
+	print  "extern NCURSES_EXPORT(const TERMTYPE *) _nc_fallback (const char *);"
+	print  "extern NCURSES_EXPORT(int) _nc_read_entry (const char * const, char * const, TERMTYPE *const);"
+	print  ""
+	print  "#endif /* NCURSES_INTERNALS */"
+	print  ""
+	print  "/*"
+	print  " * Normal entry points"
+	print  " */"
+	print  "extern NCURSES_EXPORT(TERMINAL *) set_curterm (TERMINAL *);"
+	print  "extern NCURSES_EXPORT(int) del_curterm (TERMINAL *);"
+	print  ""
+	print  "/* miscellaneous entry points */"
+	print  "extern NCURSES_EXPORT(int) restartterm (NCURSES_CONST char *, int, int *);"
+	print  "extern NCURSES_EXPORT(int) setupterm (const char *,int,int *);"
+	print  ""
+	print  "/* terminfo entry points, also declared in curses.h */"
+	print  "#if !defined(__NCURSES_H)"
+	print  "extern NCURSES_EXPORT(char *) tigetstr (const char *);"
+	print  "extern NCURSES_EXPORT_VAR(char) ttytype[];"
+	print  "extern NCURSES_EXPORT(int) putp (const char *);"
+	print  "extern NCURSES_EXPORT(int) tigetflag (const char *);"
+	print  "extern NCURSES_EXPORT(int) tigetnum (const char *);"
+	print  ""
+	print  "#if @NCURSES_TPARM_VARARGS@ /* NCURSES_TPARM_VARARGS */"
+	print  "extern NCURSES_EXPORT(char *) tparm (const char *, ...);	/* special */"
+	print  "#else"
+	print  "extern NCURSES_EXPORT(char *) tparm (const char *, long,long,long,long,long,long,long,long,long);	/* special */"
+	print  "#endif"
+	print  ""
+	print  "extern NCURSES_EXPORT(char *) tiparm (const char *, ...);		/* special */"
+	print  "extern NCURSES_EXPORT(char *) tiparm_s (int, int, const char *, ...);	/* special */"
+	print  "extern NCURSES_EXPORT(int) tiscan_s (int *, int *, const char *);	/* special */"
+	print  ""
+	print  "#endif /* __NCURSES_H */"
+	print  ""
+	print  "/* termcap database emulation (XPG4 uses const only for 2nd param of tgetent) */"
+	print  "#if !defined(NCURSES_TERMCAP_H_incl)"
+	print  "extern NCURSES_EXPORT(char *) tgetstr (const char *, char **);"
+	print  "extern NCURSES_EXPORT(char *) tgoto (const char *, int, int);"
+	print  "extern NCURSES_EXPORT(int) tgetent (char *, const char *);"
+	print  "extern NCURSES_EXPORT(int) tgetflag (const char *);"
+	print  "extern NCURSES_EXPORT(int) tgetnum (const char *);"
+	print  "extern NCURSES_EXPORT(int) tputs (const char *, int, int (*)(int));"
+	print  "#endif /* NCURSES_TERMCAP_H_incl */"
+	print  ""
+	print  "/*"
+	print  " * Include curses.h before term.h to enable these extensions."
+	print  " */"
+	print  "#if defined(NCURSES_SP_FUNCS) && (NCURSES_SP_FUNCS != 0)"
+	print  ""
+	print  "extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tigetstr) (SCREEN*, const char *);"
+	print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(putp) (SCREEN*, const char *);"
+	print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tigetflag) (SCREEN*, const char *);"
+	print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tigetnum) (SCREEN*, const char *);"
+	print  ""
+	print  "#if @NCURSES_TPARM_VARARGS@ /* NCURSES_TPARM_VARARGS */"
+	print  "extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tparm) (SCREEN*, const char *, ...);	/* special */"
+	print  "#else"
+	print  "extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tparm) (SCREEN*, const char *, long,long,long,long,long,long,long,long,long);	/* special */"
+	print  "#endif"
+	print  ""
+	print  "/* termcap database emulation (XPG4 uses const only for 2nd param of tgetent) */"
+	print  "extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tgetstr) (SCREEN*, const char *, char **);"
+	print  "extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tgoto) (SCREEN*, const char *, int, int);"
+	print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tgetent) (SCREEN*, char *, const char *);"
+	print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tgetflag) (SCREEN*, const char *);"
+	print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tgetnum) (SCREEN*, const char *);"
+	print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tputs) (SCREEN*, const char *, int, NCURSES_SP_OUTC);"
+	print  ""
+	print  "extern NCURSES_EXPORT(TERMINAL *) NCURSES_SP_NAME(set_curterm) (SCREEN*, TERMINAL *);"
+	print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(del_curterm) (SCREEN*, TERMINAL *);"
+	print  ""
+	print  "extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(restartterm) (SCREEN*, NCURSES_CONST char *, int, int *);"
+	print  "#endif /* NCURSES_SP_FUNCS */"
+	print  ""
+	print  "/*"
+	print  " * Debugging features."
+	print  " */"
+	print  "extern GCC_NORETURN NCURSES_EXPORT(void)    exit_terminfo(int);"
+	print  ""
+	print  "#ifdef __cplusplus"
+	printf "%s\n", rcurl;
+	print  "#endif"
+	print  ""
+	print  "#endif /* NCURSES_TERM_H_incl */"
+}
diff --git a/include/Makefile b/include/Makefile
deleted file mode 100644
index e8470fc..0000000
--- a/include/Makefile
+++ /dev/null
@@ -1,181 +0,0 @@
-# $Id: Makefile.in,v 1.43 2015/08/05 09:25:55 tom Exp $
-##############################################################################
-# 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 "Software"), #
-# to deal in the Software without restriction, including without limitation  #
-# the rights to use, copy, modify, merge, publish, distribute, distribute    #
-# with modifications, sublicense, and/or sell copies of the Software, and to #
-# permit persons to whom the Software is furnished to do so, subject to the  #
-# following conditions:                                                      #
-#                                                                            #
-# The above copyright notice and this permission notice shall be included in #
-# all copies or substantial portions of the Software.                        #
-#                                                                            #
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   #
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL    #
-# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER      #
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING    #
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER        #
-# DEALINGS IN THE SOFTWARE.                                                  #
-#                                                                            #
-# Except as contained in this notice, the name(s) of the above copyright     #
-# holders shall not be used in advertising or otherwise to promote the sale, #
-# use or other dealings in this Software without prior written               #
-# authorization.                                                             #
-##############################################################################
-#
-# Author: Thomas E. Dickey 1996-2001
-#
-# Makefile for ncurses source code.
-#
-# This makes/installs ncurses include-files
-#
-# The variable 'srcdir' refers to the source-distribution, and can be set with
-# the configure script by "--srcdir=DIR".
-
-# turn off _all_ suffix rules; we'll generate our own
-.SUFFIXES:
-
-SHELL		= /bin/sh
-
-THIS		= Makefile
-
-DESTDIR		= 
-srcdir		= .
-prefix		= /system
-exec_prefix	= ${prefix}
-includedir	= ${prefix}/include
-includesubdir	= /ncurses
-
-INCLUDEDIR	= $(DESTDIR)$(includedir)$(includesubdir)
-
-INSTALL		= /usr/bin/install -c
-INSTALL_DATA	= ${INSTALL} -m 644
-
-AWK		= mawk
-LN_S		= ln -s -f
-
-CTAGS		= 
-ETAGS		= 
-
-VERSION		= 6.0
-
-# The "Caps" file specifies the terminfo database format, as well as the list
-# of function keys.
-TERMINFO_CAPS	= $(srcdir)/Caps
-
-# These files are generated by the configure script
-CONFIG_SRC = \
-	MKterm.h.awk \
-	curses.head \
-	ncurses_dll.h \
-	termcap.h \
-	unctrl.h
-
-# These files are generated by this makefile
-AUTO_SRC = \
-	curses.h \
-	hashsize.h \
-	ncurses_def.h \
-	parametrized.h \
-	config.h \
-	term.h
-
-################################################################################
-all \
-libs \
-depend \
-sources \
-install ::	$(AUTO_SRC)
-
-curses.h : $(TERMINFO_CAPS) \
-		curses.head \
-		$(srcdir)/curses.tail \
-		$(srcdir)/MKkey_defs.sh
-	cat curses.head >$@
-	AWK=$(AWK) $(SHELL) $(srcdir)/MKkey_defs.sh $(TERMINFO_CAPS) >>$@
-	$(SHELL) -c 'if test "chtype" = "cchar_t" ; then cat $(srcdir)/curses.wide >>$@ ; fi'
-	cat $(srcdir)/curses.tail >>$@
-
-term.h: $(TERMINFO_CAPS) MKterm.h.awk
-	$(AWK) -f MKterm.h.awk $(TERMINFO_CAPS) > $@
-	$(SHELL) $(srcdir)/edit_cfg.sh ../include/ncurses_cfg.h $@
-
-hashsize.h: $(TERMINFO_CAPS) $(srcdir)/MKhashsize.sh
-	$(SHELL) $(srcdir)/MKhashsize.sh $(TERMINFO_CAPS) >$@
-
-ncurses_def.h: $(srcdir)/ncurses_defs $(srcdir)/MKncurses_def.sh
-	AWK=$(AWK) $(SHELL) $(srcdir)/MKncurses_def.sh $(srcdir)/ncurses_defs >$@
-
-parametrized.h: $(TERMINFO_CAPS) $(srcdir)/MKparametrized.sh
-	AWK=$(AWK) $(SHELL) $(srcdir)/MKparametrized.sh $(TERMINFO_CAPS) >$@
-
-# This is required by pthread.h on MinGW
-config.h:
-	touch $@
-
-tags:
-	$(CTAGS) *.[ch]
-
-#TAGS:
-#	$(ETAGS) *.[ch]
-
-mostlyclean ::
-	-rm -f core tags TAGS *~ *.bak *.i *.ln *.atac trace
-
-clean :: mostlyclean
-	-rm -f $(AUTO_SRC)
-	-rm -rf *.dSYM
-
-distclean :: clean
-	-rm -f Makefile $(CONFIG_SRC) config.h
-
-realclean :: distclean
-
-###############################################################################
-# The remainder of this file is automatically generated during configuration
-###############################################################################
-
-# generated by mk-hdr.awk
-#  subset:     ticlib+termlib+ext_tinfo+base+ext_funcs
-#  compat:     yes
-
-${INCLUDEDIR} :
-	mkdir -p $@
-
-install \
-install.libs \
-install.includes :: ${AUTO_SRC} ${INCLUDEDIR} \
-		curses.h \
-		unctrl.h \
-		ncurses_dll.h \
-		term.h \
-		termcap.h \
-		$(srcdir)/tic.h \
-		$(srcdir)/term_entry.h \
-		$(srcdir)/nc_tparm.h
-	@ (cd ${INCLUDEDIR} && rm -f curses.h) ; ../headers.sh ${INSTALL_DATA} ${INCLUDEDIR} ${srcdir} curses.h
-	@ (cd ${INCLUDEDIR} && rm -f ncurses.h && ${LN_S} curses.h ncurses.h)
-	@ (cd ${INCLUDEDIR} && rm -f unctrl.h) ; ../headers.sh ${INSTALL_DATA} ${INCLUDEDIR} ${srcdir} unctrl.h
-	@ (cd ${INCLUDEDIR} && rm -f ncurses_dll.h) ; ../headers.sh ${INSTALL_DATA} ${INCLUDEDIR} ${srcdir} ncurses_dll.h
-	@ (cd ${INCLUDEDIR} && rm -f term.h) ; ../headers.sh ${INSTALL_DATA} ${INCLUDEDIR} ${srcdir} term.h
-	@ (cd ${INCLUDEDIR} && rm -f termcap.h) ; ../headers.sh ${INSTALL_DATA} ${INCLUDEDIR} ${srcdir} termcap.h
-	@ (cd ${INCLUDEDIR} && rm -f tic.h) ; ../headers.sh ${INSTALL_DATA} ${INCLUDEDIR} ${srcdir} $(srcdir)/tic.h
-	@ (cd ${INCLUDEDIR} && rm -f term_entry.h) ; ../headers.sh ${INSTALL_DATA} ${INCLUDEDIR} ${srcdir} $(srcdir)/term_entry.h
-	@ (cd ${INCLUDEDIR} && rm -f nc_tparm.h) ; ../headers.sh ${INSTALL_DATA} ${INCLUDEDIR} ${srcdir} $(srcdir)/nc_tparm.h
-
-uninstall \
-uninstall.libs \
-uninstall.includes ::
-	-@ (cd ${INCLUDEDIR} && rm -f curses.h)
-	-@ (cd ${INCLUDEDIR} && rm -f ncurses.h)
-	-@ (cd ${INCLUDEDIR} && rm -f unctrl.h)
-	-@ (cd ${INCLUDEDIR} && rm -f ncurses_dll.h)
-	-@ (cd ${INCLUDEDIR} && rm -f term.h)
-	-@ (cd ${INCLUDEDIR} && rm -f termcap.h)
-	-@ (cd ${INCLUDEDIR} && rm -f tic.h)
-	-@ (cd ${INCLUDEDIR} && rm -f term_entry.h)
-	-@ (cd ${INCLUDEDIR} && rm -f nc_tparm.h)
diff --git a/include/Makefile.in b/include/Makefile.in
index cfa9876..351383b 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -1,6 +1,7 @@
-# $Id: Makefile.in,v 1.43 2015/08/05 09:25:55 tom Exp $
+# $Id: Makefile.in,v 1.53 2021/07/03 18:56:51 tom Exp $
 ##############################################################################
-# Copyright (c) 1998-2013,2015 Free Software Foundation, Inc.                #
+# Copyright 2019-2020,2021 Thomas E. Dickey                                  #
+# Copyright 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 "Software"), #
@@ -27,7 +28,7 @@
 # authorization.                                                             #
 ##############################################################################
 #
-# Author: Thomas E. Dickey 1996-2001
+# Author: Thomas E. Dickey 1996-on
 #
 # Makefile for ncurses source code.
 #
@@ -58,6 +59,10 @@
 AWK		= @AWK@
 LN_S		= @LN_S@
 
+CC		= @CC@
+CFLAGS		= @CFLAGS@ @EXTRA_CFLAGS@
+CPPFLAGS	= -DHAVE_CONFIG_H -I. @CPPFLAGS@
+
 CTAGS		= @CTAGS@
 ETAGS		= @ETAGS@
 
@@ -66,6 +71,8 @@
 # The "Caps" file specifies the terminfo database format, as well as the list
 # of function keys.
 TERMINFO_CAPS	= $(srcdir)/@TERMINFO_CAPS@
+CAPLIST	=	$(TERMINFO_CAPS) \
+		$(srcdir)/Caps-ncurses
 
 # These files are generated by the configure script
 CONFIG_SRC = \
@@ -85,33 +92,52 @@
 	term.h
 
 ################################################################################
+
+@MAKE_PHONY@.PHONY :	all
+@MAKE_PHONY@.PHONY :	check
+@MAKE_PHONY@.PHONY :	clean
+@MAKE_PHONY@.PHONY :	depend
+@MAKE_PHONY@.PHONY :	distclean
+@MAKE_PHONY@.PHONY :	install
+@MAKE_PHONY@.PHONY :	install.libs
+@MAKE_PHONY@.PHONY :	libs
+@MAKE_PHONY@.PHONY :	mostlyclean
+@MAKE_PHONY@.PHONY :	realclean
+@MAKE_PHONY@.PHONY :	sources
+@MAKE_PHONY@.PHONY :	uninstall
+@MAKE_PHONY@.PHONY :	uninstall.libs
+
 all \
 libs \
 depend \
 sources \
 install ::	$(AUTO_SRC)
 
-curses.h : $(TERMINFO_CAPS) \
+curses.h :	$(CAPLIST) \
 		curses.head \
 		$(srcdir)/curses.tail \
 		$(srcdir)/MKkey_defs.sh
 	cat curses.head >$@
-	AWK=$(AWK) $(SHELL) $(srcdir)/MKkey_defs.sh $(TERMINFO_CAPS) >>$@
+	AWK=$(AWK) $(SHELL) $(srcdir)/MKkey_defs.sh $(CAPLIST) >>$@
+	$(SHELL) -c 'if test "@NCURSES_WGETCH_EVENTS@" = "1" ; then cat $(srcdir)/curses.events >>$@ ; fi'
 	$(SHELL) -c 'if test "@NCURSES_CH_T@" = "cchar_t" ; then cat $(srcdir)/curses.wide >>$@ ; fi'
 	cat $(srcdir)/curses.tail >>$@
 
-term.h: $(TERMINFO_CAPS) MKterm.h.awk
-	$(AWK) -f MKterm.h.awk $(TERMINFO_CAPS) > $@
+term.h: 	$(CAPLIST) \
+		MKterm.h.awk
+	$(AWK) -f MKterm.h.awk $(CAPLIST) > $@
 	$(SHELL) $(srcdir)/edit_cfg.sh ../include/ncurses_cfg.h $@
 
-hashsize.h: $(TERMINFO_CAPS) $(srcdir)/MKhashsize.sh
-	$(SHELL) $(srcdir)/MKhashsize.sh $(TERMINFO_CAPS) >$@
+hashsize.h:	$(CAPLIST) \
+		$(srcdir)/MKhashsize.sh
+	$(SHELL) $(srcdir)/MKhashsize.sh $(CAPLIST) >$@
 
 ncurses_def.h: $(srcdir)/ncurses_defs $(srcdir)/MKncurses_def.sh
 	AWK=$(AWK) $(SHELL) $(srcdir)/MKncurses_def.sh $(srcdir)/ncurses_defs >$@
 
-parametrized.h: $(TERMINFO_CAPS) $(srcdir)/MKparametrized.sh
-	AWK=$(AWK) $(SHELL) $(srcdir)/MKparametrized.sh $(TERMINFO_CAPS) >$@
+parametrized.h: $(CAPLIST) \
+		$(srcdir)/MKparametrized.sh
+	AWK=$(AWK) $(SHELL) $(srcdir)/MKparametrized.sh $(CAPLIST) >$@
 
 # This is required by pthread.h on MinGW
 config.h:
@@ -135,6 +161,17 @@
 
 realclean :: distclean
 
+# Verify that each header-file can be compiled without including another.
+check:
+	@$(SHELL) -c "for header in *.h;\
+		do \
+			echo \"** testing \$${header}\" ; \
+			echo \"#include <\$${header}>\" >headers.c; \
+			echo \"int main(void) { return 0; }\" >>headers.c; \
+			$(CC) -c $(CFLAGS) $(CPPFLAGS) headers.c; \
+		done"
+	-@rm -f headers.*
+
 ###############################################################################
 # The remainder of this file is automatically generated during configuration
 ###############################################################################
diff --git a/include/capdefaults.c b/include/capdefaults.c
index da76cc1..0bdda14 100644
--- a/include/capdefaults.c
+++ b/include/capdefaults.c
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998-2000,2008 Free Software Foundation, Inc.              *
+ * Copyright 2020,2021 Thomas E. Dickey                                     *
+ * Copyright 1998-2000,2008 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            *
@@ -32,11 +33,11 @@
  *     and: Thomas E. Dickey                        1996-on                 *
  ****************************************************************************/
 
-/* $Id: capdefaults.c,v 1.14 2008/11/16 00:19:59 juergen Exp $ */
+/* $Id: capdefaults.c,v 1.16 2021/09/04 10:52:55 tom Exp $ */
 
     /*
      * Compute obsolete capabilities.  The reason this is an include file is
-     * that the two places where it's needed want the macros to generate
+     * that the two places where it is needed require the macros to generate
      * offsets to different structures.  See the file Caps for explanations of
      * these conversions.
      *
diff --git a/include/config.h b/include/config.h
deleted file mode 100644
index e69de29..0000000
--- a/include/config.h
+++ /dev/null
diff --git a/include/curses.events b/include/curses.events
new file mode 100644
index 0000000..2509b1b
--- /dev/null
+++ b/include/curses.events
@@ -0,0 +1,55 @@
+/* $Id: curses.events,v 1.4 2024/01/19 09:24:17 tom Exp $ */
+/*
+ * vile:cmode:
+ * This file is part of ncurses, designed to be appended after curses.h.in
+ * (see that file for the relevant copyright).
+ */
+
+/*
+ * This is an extension to support events...
+ */
+#ifdef NCURSES_WGETCH_EVENTS
+#if !defined(__BEOS__) || defined(__HAIKU__)
+   /* Fix _nc_timed_wait() on BEOS... */
+#  define NCURSES_EVENT_VERSION	1
+#endif	/* !defined(__BEOS__) */
+
+/*
+ * Bits to set in _nc_event.data.flags
+ */
+#  define _NC_EVENT_TIMEOUT_MSEC	1
+#  define _NC_EVENT_FILE		2
+#  define _NC_EVENT_FILE_READABLE	2
+#  if 0					/* Not supported yet... */
+#    define _NC_EVENT_FILE_WRITABLE	4
+#    define _NC_EVENT_FILE_EXCEPTION	8
+#  endif
+
+typedef struct
+{
+    int type;
+    union
+    {
+	long timeout_msec;	/* _NC_EVENT_TIMEOUT_MSEC */
+	struct
+	{
+	    unsigned int flags;
+	    int fd;
+	    unsigned int result;
+	} fev;				/* _NC_EVENT_FILE */
+    } data;
+} _nc_event;
+
+typedef struct
+{
+    int count;
+    int result_flags;	/* _NC_EVENT_TIMEOUT_MSEC or _NC_EVENT_FILE_READABLE */
+    _nc_event *events[1];
+} _nc_eventlist;
+
+extern NCURSES_EXPORT(int) wgetch_events (WINDOW *, _nc_eventlist *) GCC_DEPRECATED(experimental option); /* experimental */
+extern NCURSES_EXPORT(int) wgetnstr_events (WINDOW *,char *,int,_nc_eventlist *) GCC_DEPRECATED(experimental option); /* experimental */
+
+#define KEY_EVENT	0634		/* We were interrupted by an event */
+
+#endif /* NCURSES_WGETCH_EVENTS */
diff --git a/include/curses.h b/include/curses.h
deleted file mode 100644
index 1ca213b..0000000
--- a/include/curses.h
+++ /dev/null
@@ -1,1712 +0,0 @@
-/****************************************************************************
- * Copyright (c) 1998-2013,2014 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            *
- * "Software"), to deal in the Software without restriction, including      *
- * without limitation the rights to use, copy, modify, merge, publish,      *
- * distribute, distribute with modifications, sublicense, and/or sell       *
- * copies of the Software, and to permit persons to whom the Software is    *
- * furnished to do so, subject to the following conditions:                 *
- *                                                                          *
- * The above copyright notice and this permission notice shall be included  *
- * in all copies or substantial portions of the Software.                   *
- *                                                                          *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
- * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
- * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
- *                                                                          *
- * Except as contained in this notice, the name(s) of the above copyright   *
- * holders shall not be used in advertising or otherwise to promote the     *
- * sale, use or other dealings in this Software without prior written       *
- * authorization.                                                           *
- ****************************************************************************/
-
-/****************************************************************************
- *  Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995               *
- *     and: Eric S. Raymond <esr@snark.thyrsus.com>                         *
- *     and: Thomas E. Dickey                        1996-on                 *
- ****************************************************************************/
-
-/* $Id: curses.h.in,v 1.241 2014/08/09 20:39:44 tom Exp $ */
-
-#ifndef __NCURSES_H
-#define __NCURSES_H
-
-#define CURSES 1
-#define CURSES_H 1
-
-/* These are defined only in curses.h, and are used for conditional compiles */
-#define NCURSES_VERSION_MAJOR 6
-#define NCURSES_VERSION_MINOR 0
-#define NCURSES_VERSION_PATCH 20150808
-
-/* This is defined in more than one ncurses header, for identification */
-#undef  NCURSES_VERSION
-#define NCURSES_VERSION "6.0"
-
-/*
- * Identify the mouse encoding version.
- */
-#define NCURSES_MOUSE_VERSION 2
-
-/*
- * Definitions to facilitate DLL's.
- */
-#include <ncurses_dll.h>
-
-#if 1
-#include <stdint.h>
-#endif
-
-/*
- * User-definable tweak to disable the include of <stdbool.h>.
- */
-#ifndef NCURSES_ENABLE_STDBOOL_H
-#define NCURSES_ENABLE_STDBOOL_H 1
-#endif
-
-/*
- * NCURSES_ATTR_T is used to quiet compiler warnings when building ncurses
- * configured using --disable-macros.
- */
-#ifndef NCURSES_ATTR_T
-#define NCURSES_ATTR_T int
-#endif
-
-/*
- * Expands to 'const' if ncurses is configured using --enable-const.  Note that
- * doing so makes it incompatible with other implementations of X/Open Curses.
- */
-#undef  NCURSES_CONST
-#define NCURSES_CONST const
-
-#undef NCURSES_INLINE
-#define NCURSES_INLINE inline
-
-/*
- * The internal type used for color values, and for color-pairs.  The latter
- * allows the curses library to enumerate the combinations of foreground and
- * background colors used by an application, and is normally the product of the
- * total foreground and background colors.
- *
- * X/Open uses "short" for both of these types, ultimately because they are
- * numbers from the terminal database, which uses 16-bit signed values.
- */
-#undef	NCURSES_COLOR_T
-#define	NCURSES_COLOR_T short
-
-#undef	NCURSES_PAIRS_T
-#define	NCURSES_PAIRS_T short
-
-/*
- * Definition used to make WINDOW and similar structs opaque.
- */
-#ifndef NCURSES_OPAQUE
-#define NCURSES_OPAQUE 0
-#endif
-
-/*
- * The reentrant code relies on the opaque setting, but adds features.
- */
-#ifndef NCURSES_REENTRANT
-#define NCURSES_REENTRANT 0
-#endif
-
-/*
- * Control whether bindings for interop support are added.
- */
-#undef	NCURSES_INTEROP_FUNCS
-#define	NCURSES_INTEROP_FUNCS 1
-
-/*
- * The internal type used for window dimensions.
- */
-#undef	NCURSES_SIZE_T
-#define	NCURSES_SIZE_T short
-
-/*
- * Control whether tparm() supports varargs or fixed-parameter list.
- */
-#undef NCURSES_TPARM_VARARGS
-#define NCURSES_TPARM_VARARGS 1
-
-/*
- * Control type used for tparm's arguments.  While X/Open equates long and
- * char* values, this is not always workable for 64-bit platforms.
- */
-#undef NCURSES_TPARM_ARG
-#define NCURSES_TPARM_ARG intptr_t
-
-/*
- * NCURSES_CH_T is used in building the library, but not used otherwise in
- * this header file, since that would make the normal/wide-character versions
- * of the header incompatible.
- */
-#undef	NCURSES_CH_T
-#define NCURSES_CH_T chtype
-
-#if 1 && defined(_LP64)
-typedef unsigned chtype;
-typedef unsigned mmask_t;
-#else
-typedef uint32_t chtype;
-typedef uint32_t mmask_t;
-#endif
-
-/*
- * We need FILE, etc.  Include this before checking any feature symbols.
- */
-#include <stdio.h>
-
-/*
- * With XPG4, you must define _XOPEN_SOURCE_EXTENDED, it is redundant (or
- * conflicting) when _XOPEN_SOURCE is 500 or greater.  If NCURSES_WIDECHAR is
- * not already defined, e.g., if the platform relies upon nonstandard feature
- * test macros, define it at this point if the standard feature test macros
- * indicate that it should be defined.
- */
-#ifndef NCURSES_WIDECHAR
-#if defined(_XOPEN_SOURCE_EXTENDED) || (defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0 >= 500))
-#define NCURSES_WIDECHAR 1
-#else
-#define NCURSES_WIDECHAR 0
-#endif
-#endif /* NCURSES_WIDECHAR */
-
-#include <stdarg.h>	/* we need va_list */
-#if NCURSES_WIDECHAR
-#include <stddef.h>	/* we want wchar_t */
-#endif
-
-/* X/Open and SVr4 specify that curses implements 'bool'.  However, C++ may also
- * implement it.  If so, we must use the C++ compiler's type to avoid conflict
- * with other interfaces.
- *
- * A further complication is that <stdbool.h> may declare 'bool' to be a
- * different type, such as an enum which is not necessarily compatible with
- * C++.  If we have <stdbool.h>, make 'bool' a macro, so users may #undef it.
- * Otherwise, let it remain a typedef to avoid conflicts with other #define's.
- * In either case, make a typedef for NCURSES_BOOL which can be used if needed
- * from either C or C++.
- */
-
-#undef TRUE
-#define TRUE    1
-
-#undef FALSE
-#define FALSE   0
-
-typedef unsigned NCURSES_BOOL;
-
-#if defined(__cplusplus)	/* __cplusplus, etc. */
-
-/* use the C++ compiler's bool type */
-#define NCURSES_BOOL bool
-
-#else			/* c89, c99, etc. */
-
-#if NCURSES_ENABLE_STDBOOL_H
-#include <stdbool.h>
-/* use whatever the C compiler decides bool really is */
-#define NCURSES_BOOL bool
-#else
-/* there is no predefined bool - use our own */
-#undef bool
-#define bool NCURSES_BOOL
-#endif
-
-#endif /* !__cplusplus, etc. */
-
-#ifdef __cplusplus
-extern "C" {
-#define NCURSES_CAST(type,value) static_cast<type>(value)
-#else
-#define NCURSES_CAST(type,value) (type)(value)
-#endif
-
-/*
- * X/Open attributes.  In the ncurses implementation, they are identical to the
- * A_ attributes.
- */
-#define WA_ATTRIBUTES	A_ATTRIBUTES
-#define WA_NORMAL	A_NORMAL
-#define WA_STANDOUT	A_STANDOUT
-#define WA_UNDERLINE	A_UNDERLINE
-#define WA_REVERSE	A_REVERSE
-#define WA_BLINK	A_BLINK
-#define WA_DIM		A_DIM
-#define WA_BOLD		A_BOLD
-#define WA_ALTCHARSET	A_ALTCHARSET
-#define WA_INVIS	A_INVIS
-#define WA_PROTECT	A_PROTECT
-#define WA_HORIZONTAL	A_HORIZONTAL
-#define WA_LEFT		A_LEFT
-#define WA_LOW		A_LOW
-#define WA_RIGHT	A_RIGHT
-#define WA_TOP		A_TOP
-#define WA_VERTICAL	A_VERTICAL
-
-#if 1
-#define WA_ITALIC	A_ITALIC	/* ncurses extension */
-#endif
-
-/* colors */
-#define COLOR_BLACK	0
-#define COLOR_RED	1
-#define COLOR_GREEN	2
-#define COLOR_YELLOW	3
-#define COLOR_BLUE	4
-#define COLOR_MAGENTA	5
-#define COLOR_CYAN	6
-#define COLOR_WHITE	7
-
-/* line graphics */
-
-#if 0 || NCURSES_REENTRANT
-NCURSES_WRAPPED_VAR(chtype*, acs_map);
-#define acs_map NCURSES_PUBLIC_VAR(acs_map())
-#else
-extern NCURSES_EXPORT_VAR(chtype) acs_map[];
-#endif
-
-#define NCURSES_ACS(c)	(acs_map[NCURSES_CAST(unsigned char,(c))])
-
-/* VT100 symbols begin here */
-#define ACS_ULCORNER	NCURSES_ACS('l') /* upper left corner */
-#define ACS_LLCORNER	NCURSES_ACS('m') /* lower left corner */
-#define ACS_URCORNER	NCURSES_ACS('k') /* upper right corner */
-#define ACS_LRCORNER	NCURSES_ACS('j') /* lower right corner */
-#define ACS_LTEE	NCURSES_ACS('t') /* tee pointing right */
-#define ACS_RTEE	NCURSES_ACS('u') /* tee pointing left */
-#define ACS_BTEE	NCURSES_ACS('v') /* tee pointing up */
-#define ACS_TTEE	NCURSES_ACS('w') /* tee pointing down */
-#define ACS_HLINE	NCURSES_ACS('q') /* horizontal line */
-#define ACS_VLINE	NCURSES_ACS('x') /* vertical line */
-#define ACS_PLUS	NCURSES_ACS('n') /* large plus or crossover */
-#define ACS_S1		NCURSES_ACS('o') /* scan line 1 */
-#define ACS_S9		NCURSES_ACS('s') /* scan line 9 */
-#define ACS_DIAMOND	NCURSES_ACS('`') /* diamond */
-#define ACS_CKBOARD	NCURSES_ACS('a') /* checker board (stipple) */
-#define ACS_DEGREE	NCURSES_ACS('f') /* degree symbol */
-#define ACS_PLMINUS	NCURSES_ACS('g') /* plus/minus */
-#define ACS_BULLET	NCURSES_ACS('~') /* bullet */
-/* Teletype 5410v1 symbols begin here */
-#define ACS_LARROW	NCURSES_ACS(',') /* arrow pointing left */
-#define ACS_RARROW	NCURSES_ACS('+') /* arrow pointing right */
-#define ACS_DARROW	NCURSES_ACS('.') /* arrow pointing down */
-#define ACS_UARROW	NCURSES_ACS('-') /* arrow pointing up */
-#define ACS_BOARD	NCURSES_ACS('h') /* board of squares */
-#define ACS_LANTERN	NCURSES_ACS('i') /* lantern symbol */
-#define ACS_BLOCK	NCURSES_ACS('0') /* solid square block */
-/*
- * These aren't documented, but a lot of System Vs have them anyway
- * (you can spot pprryyzz{{||}} in a lot of AT&T terminfo strings).
- * The ACS_names may not match AT&T's, our source didn't know them.
- */
-#define ACS_S3		NCURSES_ACS('p') /* scan line 3 */
-#define ACS_S7		NCURSES_ACS('r') /* scan line 7 */
-#define ACS_LEQUAL	NCURSES_ACS('y') /* less/equal */
-#define ACS_GEQUAL	NCURSES_ACS('z') /* greater/equal */
-#define ACS_PI		NCURSES_ACS('{') /* Pi */
-#define ACS_NEQUAL	NCURSES_ACS('|') /* not equal */
-#define ACS_STERLING	NCURSES_ACS('}') /* UK pound sign */
-
-/*
- * Line drawing ACS names are of the form ACS_trbl, where t is the top, r
- * is the right, b is the bottom, and l is the left.  t, r, b, and l might
- * be B (blank), S (single), D (double), or T (thick).  The subset defined
- * here only uses B and S.
- */
-#define ACS_BSSB	ACS_ULCORNER
-#define ACS_SSBB	ACS_LLCORNER
-#define ACS_BBSS	ACS_URCORNER
-#define ACS_SBBS	ACS_LRCORNER
-#define ACS_SBSS	ACS_RTEE
-#define ACS_SSSB	ACS_LTEE
-#define ACS_SSBS	ACS_BTEE
-#define ACS_BSSS	ACS_TTEE
-#define ACS_BSBS	ACS_HLINE
-#define ACS_SBSB	ACS_VLINE
-#define ACS_SSSS	ACS_PLUS
-
-#undef	ERR
-#define ERR     (-1)
-
-#undef	OK
-#define OK      (0)
-
-/* values for the _flags member */
-#define _SUBWIN         0x01	/* is this a sub-window? */
-#define _ENDLINE        0x02	/* is the window flush right? */
-#define _FULLWIN        0x04	/* is the window full-screen? */
-#define _SCROLLWIN      0x08	/* bottom edge is at screen bottom? */
-#define _ISPAD	        0x10	/* is this window a pad? */
-#define _HASMOVED       0x20	/* has cursor moved since last refresh? */
-#define _WRAPPED        0x40	/* cursor was just wrappped */
-
-/*
- * this value is used in the firstchar and lastchar fields to mark
- * unchanged lines
- */
-#define _NOCHANGE       -1
-
-/*
- * this value is used in the oldindex field to mark lines created by insertions
- * and scrolls.
- */
-#define _NEWINDEX	-1
-
-typedef struct screen  SCREEN;
-typedef struct _win_st WINDOW;
-
-typedef	chtype	attr_t;		/* ...must be at least as wide as chtype */
-
-#if NCURSES_WIDECHAR
-
-#if 0
-#ifdef mblen			/* libutf8.h defines it w/o undefining first */
-#undef mblen
-#endif
-#include <libutf8.h>
-#endif
-
-#if 0
-#include <wchar.h>		/* ...to get mbstate_t, etc. */
-#endif
-
-#if 0
-typedef unsigned short wchar_t;
-#endif
-
-#if 0
-typedef unsigned int wint_t;
-#endif
-
-/*
- * cchar_t stores an array of CCHARW_MAX wide characters.  The first is
- * normally a spacing character.  The others are non-spacing.  If those
- * (spacing and nonspacing) do not fill the array, a null L'\0' follows.
- * Otherwise, a null is assumed to follow when extracting via getcchar().
- */
-#define CCHARW_MAX	5
-typedef struct
-{
-    attr_t	attr;
-    wchar_t	chars[CCHARW_MAX];
-#if 0
-#undef NCURSES_EXT_COLORS
-#define NCURSES_EXT_COLORS 20150808
-    int		ext_color;	/* color pair, must be more than 16-bits */
-#endif
-}
-cchar_t;
-
-#endif /* NCURSES_WIDECHAR */
-
-#if !NCURSES_OPAQUE
-struct ldat;
-
-struct _win_st
-{
-	NCURSES_SIZE_T _cury, _curx; /* current cursor position */
-
-	/* window location and size */
-	NCURSES_SIZE_T _maxy, _maxx; /* maximums of x and y, NOT window size */
-	NCURSES_SIZE_T _begy, _begx; /* screen coords of upper-left-hand corner */
-
-	short   _flags;		/* window state flags */
-
-	/* attribute tracking */
-	attr_t  _attrs;		/* current attribute for non-space character */
-	chtype  _bkgd;		/* current background char/attribute pair */
-
-	/* option values set by user */
-	bool	_notimeout;	/* no time out on function-key entry? */
-	bool	_clear;		/* consider all data in the window invalid? */
-	bool	_leaveok;	/* OK to not reset cursor on exit? */
-	bool	_scroll;	/* OK to scroll this window? */
-	bool	_idlok;		/* OK to use insert/delete line? */
-	bool	_idcok;		/* OK to use insert/delete char? */
-	bool	_immed;		/* window in immed mode? (not yet used) */
-	bool	_sync;		/* window in sync mode? */
-	bool	_use_keypad;	/* process function keys into KEY_ symbols? */
-	int	_delay;		/* 0 = nodelay, <0 = blocking, >0 = delay */
-
-	struct ldat *_line;	/* the actual line data */
-
-	/* global screen state */
-	NCURSES_SIZE_T _regtop;	/* top line of scrolling region */
-	NCURSES_SIZE_T _regbottom; /* bottom line of scrolling region */
-
-	/* these are used only if this is a sub-window */
-	int	_parx;		/* x coordinate of this window in parent */
-	int	_pary;		/* y coordinate of this window in parent */
-	WINDOW	*_parent;	/* pointer to parent if a sub-window */
-
-	/* these are used only if this is a pad */
-	struct pdat
-	{
-	    NCURSES_SIZE_T _pad_y,      _pad_x;
-	    NCURSES_SIZE_T _pad_top,    _pad_left;
-	    NCURSES_SIZE_T _pad_bottom, _pad_right;
-	} _pad;
-
-	NCURSES_SIZE_T _yoffset; /* real begy is _begy + _yoffset */
-
-#if NCURSES_WIDECHAR
-	cchar_t  _bkgrnd;	/* current background char/attribute pair */
-#if 0
-	int	_color;		/* current color-pair for non-space character */
-#endif
-#endif
-};
-#endif /* NCURSES_OPAQUE */
-
-/*
- * This is an extension to support events...
- */
-#if 1
-#ifdef NCURSES_WGETCH_EVENTS
-#if !defined(__BEOS__) || defined(__HAIKU__)
-   /* Fix _nc_timed_wait() on BEOS... */
-#  define NCURSES_EVENT_VERSION	1
-#endif	/* !defined(__BEOS__) */
-
-/*
- * Bits to set in _nc_event.data.flags
- */
-#  define _NC_EVENT_TIMEOUT_MSEC	1
-#  define _NC_EVENT_FILE		2
-#  define _NC_EVENT_FILE_READABLE	2
-#  if 0					/* Not supported yet... */
-#    define _NC_EVENT_FILE_WRITABLE	4
-#    define _NC_EVENT_FILE_EXCEPTION	8
-#  endif
-
-typedef struct
-{
-    int type;
-    union
-    {
-	long timeout_msec;	/* _NC_EVENT_TIMEOUT_MSEC */
-	struct
-	{
-	    unsigned int flags;
-	    int fd;
-	    unsigned int result;
-	} fev;				/* _NC_EVENT_FILE */
-    } data;
-} _nc_event;
-
-typedef struct
-{
-    int count;
-    int result_flags;	/* _NC_EVENT_TIMEOUT_MSEC or _NC_EVENT_FILE_READABLE */
-    _nc_event *events[1];
-} _nc_eventlist;
-
-extern NCURSES_EXPORT(int) wgetch_events (WINDOW *, _nc_eventlist *);	/* experimental */
-extern NCURSES_EXPORT(int) wgetnstr_events (WINDOW *,char *,int,_nc_eventlist *);/* experimental */
-
-#endif /* NCURSES_WGETCH_EVENTS */
-#endif /* NCURSES_EXT_FUNCS */
-
-/*
- * GCC (and some other compilers) define '__attribute__'; we're using this
- * macro to alert the compiler to flag inconsistencies in printf/scanf-like
- * function calls.  Just in case '__attribute__' isn't defined, make a dummy.
- * Old versions of G++ do not accept it anyway, at least not consistently with
- * GCC.
- */
-#if !(defined(__GNUC__) || defined(__GNUG__) || defined(__attribute__))
-#define __attribute__(p) /* nothing */
-#endif
-
-/*
- * We cannot define these in ncurses_cfg.h, since they require parameters to be
- * passed (that is non-portable).  If you happen to be using gcc with warnings
- * enabled, define
- *	GCC_PRINTF
- *	GCC_SCANF
- * to improve checking of calls to printw(), etc.
- */
-#ifndef GCC_PRINTFLIKE
-#if defined(GCC_PRINTF) && !defined(printf)
-#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
-#else
-#define GCC_PRINTFLIKE(fmt,var) /*nothing*/
-#endif
-#endif
-
-#ifndef GCC_SCANFLIKE
-#if defined(GCC_SCANF) && !defined(scanf)
-#define GCC_SCANFLIKE(fmt,var)  __attribute__((format(scanf,fmt,var)))
-#else
-#define GCC_SCANFLIKE(fmt,var)  /*nothing*/
-#endif
-#endif
-
-#ifndef	GCC_NORETURN
-#define	GCC_NORETURN /* nothing */
-#endif
-
-#ifndef	GCC_UNUSED
-#define	GCC_UNUSED /* nothing */
-#endif
-
-/*
- * Curses uses a helper function.  Define our type for this to simplify
- * extending it for the sp-funcs feature.
- */
-typedef int (*NCURSES_OUTC)(int);
-
-/*
- * Function prototypes.  This is the complete X/Open Curses list of required
- * functions.  Those marked `generated' will have sources generated from the
- * macro definitions later in this file, in order to satisfy XPG4.2
- * requirements.
- */
-
-extern NCURSES_EXPORT(int) addch (const chtype);			/* generated */
-extern NCURSES_EXPORT(int) addchnstr (const chtype *, int);		/* generated */
-extern NCURSES_EXPORT(int) addchstr (const chtype *);			/* generated */
-extern NCURSES_EXPORT(int) addnstr (const char *, int);			/* generated */
-extern NCURSES_EXPORT(int) addstr (const char *);			/* generated */
-extern NCURSES_EXPORT(int) attroff (NCURSES_ATTR_T);			/* generated */
-extern NCURSES_EXPORT(int) attron (NCURSES_ATTR_T);			/* generated */
-extern NCURSES_EXPORT(int) attrset (NCURSES_ATTR_T);			/* generated */
-extern NCURSES_EXPORT(int) attr_get (attr_t *, NCURSES_PAIRS_T *, void *);	/* generated */
-extern NCURSES_EXPORT(int) attr_off (attr_t, void *);			/* generated */
-extern NCURSES_EXPORT(int) attr_on (attr_t, void *);			/* generated */
-extern NCURSES_EXPORT(int) attr_set (attr_t, NCURSES_PAIRS_T, void *);		/* generated */
-extern NCURSES_EXPORT(int) baudrate (void);				/* implemented */
-extern NCURSES_EXPORT(int) beep  (void);				/* implemented */
-extern NCURSES_EXPORT(int) bkgd (chtype);				/* generated */
-extern NCURSES_EXPORT(void) bkgdset (chtype);				/* generated */
-extern NCURSES_EXPORT(int) border (chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype);	/* generated */
-extern NCURSES_EXPORT(int) box (WINDOW *, chtype, chtype);		/* generated */
-extern NCURSES_EXPORT(bool) can_change_color (void);			/* implemented */
-extern NCURSES_EXPORT(int) cbreak (void);				/* implemented */
-extern NCURSES_EXPORT(int) chgat (int, attr_t, NCURSES_PAIRS_T, const void *);	/* generated */
-extern NCURSES_EXPORT(int) clear (void);				/* generated */
-extern NCURSES_EXPORT(int) clearok (WINDOW *,bool);			/* implemented */
-extern NCURSES_EXPORT(int) clrtobot (void);				/* generated */
-extern NCURSES_EXPORT(int) clrtoeol (void);				/* generated */
-extern NCURSES_EXPORT(int) color_content (NCURSES_COLOR_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*,NCURSES_COLOR_T*);	/* implemented */
-extern NCURSES_EXPORT(int) color_set (NCURSES_PAIRS_T,void*);			/* generated */
-extern NCURSES_EXPORT(int) COLOR_PAIR (int);				/* generated */
-extern NCURSES_EXPORT(int) copywin (const WINDOW*,WINDOW*,int,int,int,int,int,int,int);	/* implemented */
-extern NCURSES_EXPORT(int) curs_set (int);				/* implemented */
-extern NCURSES_EXPORT(int) def_prog_mode (void);			/* implemented */
-extern NCURSES_EXPORT(int) def_shell_mode (void);			/* implemented */
-extern NCURSES_EXPORT(int) delay_output (int);				/* implemented */
-extern NCURSES_EXPORT(int) delch (void);				/* generated */
-extern NCURSES_EXPORT(void) delscreen (SCREEN *);			/* implemented */
-extern NCURSES_EXPORT(int) delwin (WINDOW *);				/* implemented */
-extern NCURSES_EXPORT(int) deleteln (void);				/* generated */
-extern NCURSES_EXPORT(WINDOW *) derwin (WINDOW *,int,int,int,int);	/* implemented */
-extern NCURSES_EXPORT(int) doupdate (void);				/* implemented */
-extern NCURSES_EXPORT(WINDOW *) dupwin (WINDOW *);			/* implemented */
-extern NCURSES_EXPORT(int) echo (void);					/* implemented */
-extern NCURSES_EXPORT(int) echochar (const chtype);			/* generated */
-extern NCURSES_EXPORT(int) erase (void);				/* generated */
-extern NCURSES_EXPORT(int) endwin (void);				/* implemented */
-extern NCURSES_EXPORT(char) erasechar (void);				/* implemented */
-extern NCURSES_EXPORT(void) filter (void);				/* implemented */
-extern NCURSES_EXPORT(int) flash (void);				/* implemented */
-extern NCURSES_EXPORT(int) flushinp (void);				/* implemented */
-extern NCURSES_EXPORT(chtype) getbkgd (WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) getch (void);				/* generated */
-extern NCURSES_EXPORT(int) getnstr (char *, int);			/* generated */
-extern NCURSES_EXPORT(int) getstr (char *);				/* generated */
-extern NCURSES_EXPORT(WINDOW *) getwin (FILE *);			/* implemented */
-extern NCURSES_EXPORT(int) halfdelay (int);				/* implemented */
-extern NCURSES_EXPORT(bool) has_colors (void);				/* implemented */
-extern NCURSES_EXPORT(bool) has_ic (void);				/* implemented */
-extern NCURSES_EXPORT(bool) has_il (void);				/* implemented */
-extern NCURSES_EXPORT(int) hline (chtype, int);				/* generated */
-extern NCURSES_EXPORT(void) idcok (WINDOW *, bool);			/* implemented */
-extern NCURSES_EXPORT(int) idlok (WINDOW *, bool);			/* implemented */
-extern NCURSES_EXPORT(void) immedok (WINDOW *, bool);			/* implemented */
-extern NCURSES_EXPORT(chtype) inch (void);				/* generated */
-extern NCURSES_EXPORT(int) inchnstr (chtype *, int);			/* generated */
-extern NCURSES_EXPORT(int) inchstr (chtype *);				/* generated */
-extern NCURSES_EXPORT(WINDOW *) initscr (void);				/* implemented */
-extern NCURSES_EXPORT(int) init_color (NCURSES_COLOR_T,NCURSES_COLOR_T,NCURSES_COLOR_T,NCURSES_COLOR_T);	/* implemented */
-extern NCURSES_EXPORT(int) init_pair (NCURSES_PAIRS_T,NCURSES_COLOR_T,NCURSES_COLOR_T);		/* implemented */
-extern NCURSES_EXPORT(int) innstr (char *, int);			/* generated */
-extern NCURSES_EXPORT(int) insch (chtype);				/* generated */
-extern NCURSES_EXPORT(int) insdelln (int);				/* generated */
-extern NCURSES_EXPORT(int) insertln (void);				/* generated */
-extern NCURSES_EXPORT(int) insnstr (const char *, int);			/* generated */
-extern NCURSES_EXPORT(int) insstr (const char *);			/* generated */
-extern NCURSES_EXPORT(int) instr (char *);				/* generated */
-extern NCURSES_EXPORT(int) intrflush (WINDOW *,bool);			/* implemented */
-extern NCURSES_EXPORT(bool) isendwin (void);				/* implemented */
-extern NCURSES_EXPORT(bool) is_linetouched (WINDOW *,int);		/* implemented */
-extern NCURSES_EXPORT(bool) is_wintouched (WINDOW *);			/* implemented */
-extern NCURSES_EXPORT(NCURSES_CONST char *) keyname (int);		/* implemented */
-extern NCURSES_EXPORT(int) keypad (WINDOW *,bool);			/* implemented */
-extern NCURSES_EXPORT(char) killchar (void);				/* implemented */
-extern NCURSES_EXPORT(int) leaveok (WINDOW *,bool);			/* implemented */
-extern NCURSES_EXPORT(char *) longname (void);				/* implemented */
-extern NCURSES_EXPORT(int) meta (WINDOW *,bool);			/* implemented */
-extern NCURSES_EXPORT(int) move (int, int);				/* generated */
-extern NCURSES_EXPORT(int) mvaddch (int, int, const chtype);		/* generated */
-extern NCURSES_EXPORT(int) mvaddchnstr (int, int, const chtype *, int);	/* generated */
-extern NCURSES_EXPORT(int) mvaddchstr (int, int, const chtype *);	/* generated */
-extern NCURSES_EXPORT(int) mvaddnstr (int, int, const char *, int);	/* generated */
-extern NCURSES_EXPORT(int) mvaddstr (int, int, const char *);		/* generated */
-extern NCURSES_EXPORT(int) mvchgat (int, int, int, attr_t, NCURSES_PAIRS_T, const void *);	/* generated */
-extern NCURSES_EXPORT(int) mvcur (int,int,int,int);			/* implemented */
-extern NCURSES_EXPORT(int) mvdelch (int, int);				/* generated */
-extern NCURSES_EXPORT(int) mvderwin (WINDOW *, int, int);		/* implemented */
-extern NCURSES_EXPORT(int) mvgetch (int, int);				/* generated */
-extern NCURSES_EXPORT(int) mvgetnstr (int, int, char *, int);		/* generated */
-extern NCURSES_EXPORT(int) mvgetstr (int, int, char *);			/* generated */
-extern NCURSES_EXPORT(int) mvhline (int, int, chtype, int);		/* generated */
-extern NCURSES_EXPORT(chtype) mvinch (int, int);			/* generated */
-extern NCURSES_EXPORT(int) mvinchnstr (int, int, chtype *, int);	/* generated */
-extern NCURSES_EXPORT(int) mvinchstr (int, int, chtype *);		/* generated */
-extern NCURSES_EXPORT(int) mvinnstr (int, int, char *, int);		/* generated */
-extern NCURSES_EXPORT(int) mvinsch (int, int, chtype);			/* generated */
-extern NCURSES_EXPORT(int) mvinsnstr (int, int, const char *, int);	/* generated */
-extern NCURSES_EXPORT(int) mvinsstr (int, int, const char *);		/* generated */
-extern NCURSES_EXPORT(int) mvinstr (int, int, char *);			/* generated */
-extern NCURSES_EXPORT(int) mvprintw (int,int, const char *,...)		/* implemented */
-		GCC_PRINTFLIKE(3,4);
-extern NCURSES_EXPORT(int) mvscanw (int,int, NCURSES_CONST char *,...)	/* implemented */
-		GCC_SCANFLIKE(3,4);
-extern NCURSES_EXPORT(int) mvvline (int, int, chtype, int);		/* generated */
-extern NCURSES_EXPORT(int) mvwaddch (WINDOW *, int, int, const chtype);	/* generated */
-extern NCURSES_EXPORT(int) mvwaddchnstr (WINDOW *, int, int, const chtype *, int);/* generated */
-extern NCURSES_EXPORT(int) mvwaddchstr (WINDOW *, int, int, const chtype *);	/* generated */
-extern NCURSES_EXPORT(int) mvwaddnstr (WINDOW *, int, int, const char *, int);	/* generated */
-extern NCURSES_EXPORT(int) mvwaddstr (WINDOW *, int, int, const char *);	/* generated */
-extern NCURSES_EXPORT(int) mvwchgat (WINDOW *, int, int, int, attr_t, NCURSES_PAIRS_T, const void *);/* generated */
-extern NCURSES_EXPORT(int) mvwdelch (WINDOW *, int, int);		/* generated */
-extern NCURSES_EXPORT(int) mvwgetch (WINDOW *, int, int);		/* generated */
-extern NCURSES_EXPORT(int) mvwgetnstr (WINDOW *, int, int, char *, int);	/* generated */
-extern NCURSES_EXPORT(int) mvwgetstr (WINDOW *, int, int, char *);	/* generated */
-extern NCURSES_EXPORT(int) mvwhline (WINDOW *, int, int, chtype, int);	/* generated */
-extern NCURSES_EXPORT(int) mvwin (WINDOW *,int,int);			/* implemented */
-extern NCURSES_EXPORT(chtype) mvwinch (WINDOW *, int, int);			/* generated */
-extern NCURSES_EXPORT(int) mvwinchnstr (WINDOW *, int, int, chtype *, int);	/* generated */
-extern NCURSES_EXPORT(int) mvwinchstr (WINDOW *, int, int, chtype *);		/* generated */
-extern NCURSES_EXPORT(int) mvwinnstr (WINDOW *, int, int, char *, int);		/* generated */
-extern NCURSES_EXPORT(int) mvwinsch (WINDOW *, int, int, chtype);		/* generated */
-extern NCURSES_EXPORT(int) mvwinsnstr (WINDOW *, int, int, const char *, int);	/* generated */
-extern NCURSES_EXPORT(int) mvwinsstr (WINDOW *, int, int, const char *);	/* generated */
-extern NCURSES_EXPORT(int) mvwinstr (WINDOW *, int, int, char *);		/* generated */
-extern NCURSES_EXPORT(int) mvwprintw (WINDOW*,int,int, const char *,...)	/* implemented */
-		GCC_PRINTFLIKE(4,5);
-extern NCURSES_EXPORT(int) mvwscanw (WINDOW *,int,int, NCURSES_CONST char *,...)	/* implemented */
-		GCC_SCANFLIKE(4,5);
-extern NCURSES_EXPORT(int) mvwvline (WINDOW *,int, int, chtype, int);	/* generated */
-extern NCURSES_EXPORT(int) napms (int);					/* implemented */
-extern NCURSES_EXPORT(WINDOW *) newpad (int,int);		       	/* implemented */
-extern NCURSES_EXPORT(SCREEN *) newterm (NCURSES_CONST char *,FILE *,FILE *);	/* implemented */
-extern NCURSES_EXPORT(WINDOW *) newwin (int,int,int,int);	       	/* implemented */
-extern NCURSES_EXPORT(int) nl (void);					/* implemented */
-extern NCURSES_EXPORT(int) nocbreak (void);				/* implemented */
-extern NCURSES_EXPORT(int) nodelay (WINDOW *,bool);			/* implemented */
-extern NCURSES_EXPORT(int) noecho (void);				/* implemented */
-extern NCURSES_EXPORT(int) nonl (void);					/* implemented */
-extern NCURSES_EXPORT(void) noqiflush (void);				/* implemented */
-extern NCURSES_EXPORT(int) noraw (void);				/* implemented */
-extern NCURSES_EXPORT(int) notimeout (WINDOW *,bool);			/* implemented */
-extern NCURSES_EXPORT(int) overlay (const WINDOW*,WINDOW *);		/* implemented */
-extern NCURSES_EXPORT(int) overwrite (const WINDOW*,WINDOW *);		/* implemented */
-extern NCURSES_EXPORT(int) pair_content (NCURSES_PAIRS_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*);		/* implemented */
-extern NCURSES_EXPORT(int) PAIR_NUMBER (int);				/* generated */
-extern NCURSES_EXPORT(int) pechochar (WINDOW *, const chtype);		/* implemented */
-extern NCURSES_EXPORT(int) pnoutrefresh (WINDOW*,int,int,int,int,int,int);/* implemented */
-extern NCURSES_EXPORT(int) prefresh (WINDOW *,int,int,int,int,int,int);	/* implemented */
-extern NCURSES_EXPORT(int) printw (const char *,...)			/* implemented */
-		GCC_PRINTFLIKE(1,2);
-extern NCURSES_EXPORT(int) putwin (WINDOW *, FILE *);			/* implemented */
-extern NCURSES_EXPORT(void) qiflush (void);				/* implemented */
-extern NCURSES_EXPORT(int) raw (void);					/* implemented */
-extern NCURSES_EXPORT(int) redrawwin (WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) refresh (void);				/* generated */
-extern NCURSES_EXPORT(int) resetty (void);				/* implemented */
-extern NCURSES_EXPORT(int) reset_prog_mode (void);			/* implemented */
-extern NCURSES_EXPORT(int) reset_shell_mode (void);			/* implemented */
-extern NCURSES_EXPORT(int) ripoffline (int, int (*)(WINDOW *, int));	/* implemented */
-extern NCURSES_EXPORT(int) savetty (void);				/* implemented */
-extern NCURSES_EXPORT(int) scanw (NCURSES_CONST char *,...)		/* implemented */
-		GCC_SCANFLIKE(1,2);
-extern NCURSES_EXPORT(int) scr_dump (const char *);			/* implemented */
-extern NCURSES_EXPORT(int) scr_init (const char *);			/* implemented */
-extern NCURSES_EXPORT(int) scrl (int);					/* generated */
-extern NCURSES_EXPORT(int) scroll (WINDOW *);				/* generated */
-extern NCURSES_EXPORT(int) scrollok (WINDOW *,bool);			/* implemented */
-extern NCURSES_EXPORT(int) scr_restore (const char *);			/* implemented */
-extern NCURSES_EXPORT(int) scr_set (const char *);			/* implemented */
-extern NCURSES_EXPORT(int) setscrreg (int,int);				/* generated */
-extern NCURSES_EXPORT(SCREEN *) set_term (SCREEN *);			/* implemented */
-extern NCURSES_EXPORT(int) slk_attroff (const chtype);			/* implemented */
-extern NCURSES_EXPORT(int) slk_attr_off (const attr_t, void *);		/* generated:WIDEC */
-extern NCURSES_EXPORT(int) slk_attron (const chtype);			/* implemented */
-extern NCURSES_EXPORT(int) slk_attr_on (attr_t,void*);			/* generated:WIDEC */
-extern NCURSES_EXPORT(int) slk_attrset (const chtype);			/* implemented */
-extern NCURSES_EXPORT(attr_t) slk_attr (void);				/* implemented */
-extern NCURSES_EXPORT(int) slk_attr_set (const attr_t,NCURSES_PAIRS_T,void*);	/* implemented */
-extern NCURSES_EXPORT(int) slk_clear (void);				/* implemented */
-extern NCURSES_EXPORT(int) slk_color (NCURSES_PAIRS_T);				/* implemented */
-extern NCURSES_EXPORT(int) slk_init (int);				/* implemented */
-extern NCURSES_EXPORT(char *) slk_label (int);				/* implemented */
-extern NCURSES_EXPORT(int) slk_noutrefresh (void);			/* implemented */
-extern NCURSES_EXPORT(int) slk_refresh (void);				/* implemented */
-extern NCURSES_EXPORT(int) slk_restore (void);				/* implemented */
-extern NCURSES_EXPORT(int) slk_set (int,const char *,int);		/* implemented */
-extern NCURSES_EXPORT(int) slk_touch (void);	      	       		/* implemented */
-extern NCURSES_EXPORT(int) standout (void);				/* generated */
-extern NCURSES_EXPORT(int) standend (void);				/* generated */
-extern NCURSES_EXPORT(int) start_color (void);				/* implemented */
-extern NCURSES_EXPORT(WINDOW *) subpad (WINDOW *, int, int, int, int);	/* implemented */
-extern NCURSES_EXPORT(WINDOW *) subwin (WINDOW *, int, int, int, int);	/* implemented */
-extern NCURSES_EXPORT(int) syncok (WINDOW *, bool);			/* implemented */
-extern NCURSES_EXPORT(chtype) termattrs (void);				/* implemented */
-extern NCURSES_EXPORT(char *) termname (void);				/* implemented */
-extern NCURSES_EXPORT(void) timeout (int);				/* generated */
-extern NCURSES_EXPORT(int) touchline (WINDOW *, int, int);		/* generated */
-extern NCURSES_EXPORT(int) touchwin (WINDOW *);				/* generated */
-extern NCURSES_EXPORT(int) typeahead (int);				/* implemented */
-extern NCURSES_EXPORT(int) ungetch (int);				/* implemented */
-extern NCURSES_EXPORT(int) untouchwin (WINDOW *);			/* generated */
-extern NCURSES_EXPORT(void) use_env (bool);				/* implemented */
-extern NCURSES_EXPORT(void) use_tioctl (bool);				/* implemented */
-extern NCURSES_EXPORT(int) vidattr (chtype);				/* implemented */
-extern NCURSES_EXPORT(int) vidputs (chtype, NCURSES_OUTC);		/* implemented */
-extern NCURSES_EXPORT(int) vline (chtype, int);				/* generated */
-extern NCURSES_EXPORT(int) vwprintw (WINDOW *, const char *,va_list);	/* implemented */
-extern NCURSES_EXPORT(int) vw_printw (WINDOW *, const char *,va_list);	/* generated */
-extern NCURSES_EXPORT(int) vwscanw (WINDOW *, NCURSES_CONST char *,va_list);	/* implemented */
-extern NCURSES_EXPORT(int) vw_scanw (WINDOW *, NCURSES_CONST char *,va_list);	/* generated */
-extern NCURSES_EXPORT(int) waddch (WINDOW *, const chtype);		/* implemented */
-extern NCURSES_EXPORT(int) waddchnstr (WINDOW *,const chtype *,int);	/* implemented */
-extern NCURSES_EXPORT(int) waddchstr (WINDOW *,const chtype *);		/* generated */
-extern NCURSES_EXPORT(int) waddnstr (WINDOW *,const char *,int);	/* implemented */
-extern NCURSES_EXPORT(int) waddstr (WINDOW *,const char *);		/* generated */
-extern NCURSES_EXPORT(int) wattron (WINDOW *, int);			/* generated */
-extern NCURSES_EXPORT(int) wattroff (WINDOW *, int);			/* generated */
-extern NCURSES_EXPORT(int) wattrset (WINDOW *, int);			/* generated */
-extern NCURSES_EXPORT(int) wattr_get (WINDOW *, attr_t *, NCURSES_PAIRS_T *, void *);	/* generated */
-extern NCURSES_EXPORT(int) wattr_on (WINDOW *, attr_t, void *);		/* implemented */
-extern NCURSES_EXPORT(int) wattr_off (WINDOW *, attr_t, void *);	/* implemented */
-extern NCURSES_EXPORT(int) wattr_set (WINDOW *, attr_t, NCURSES_PAIRS_T, void *);	/* generated */
-extern NCURSES_EXPORT(int) wbkgd (WINDOW *, chtype);			/* implemented */
-extern NCURSES_EXPORT(void) wbkgdset (WINDOW *,chtype);			/* implemented */
-extern NCURSES_EXPORT(int) wborder (WINDOW *,chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype);	/* implemented */
-extern NCURSES_EXPORT(int) wchgat (WINDOW *, int, attr_t, NCURSES_PAIRS_T, const void *);/* implemented */
-extern NCURSES_EXPORT(int) wclear (WINDOW *);				/* implemented */
-extern NCURSES_EXPORT(int) wclrtobot (WINDOW *);			/* implemented */
-extern NCURSES_EXPORT(int) wclrtoeol (WINDOW *);			/* implemented */
-extern NCURSES_EXPORT(int) wcolor_set (WINDOW*,NCURSES_PAIRS_T,void*);		/* implemented */
-extern NCURSES_EXPORT(void) wcursyncup (WINDOW *);			/* implemented */
-extern NCURSES_EXPORT(int) wdelch (WINDOW *);				/* implemented */
-extern NCURSES_EXPORT(int) wdeleteln (WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) wechochar (WINDOW *, const chtype);		/* implemented */
-extern NCURSES_EXPORT(int) werase (WINDOW *);				/* implemented */
-extern NCURSES_EXPORT(int) wgetch (WINDOW *);				/* implemented */
-extern NCURSES_EXPORT(int) wgetnstr (WINDOW *,char *,int);		/* implemented */
-extern NCURSES_EXPORT(int) wgetstr (WINDOW *, char *);			/* generated */
-extern NCURSES_EXPORT(int) whline (WINDOW *, chtype, int);		/* implemented */
-extern NCURSES_EXPORT(chtype) winch (WINDOW *);				/* implemented */
-extern NCURSES_EXPORT(int) winchnstr (WINDOW *, chtype *, int);		/* implemented */
-extern NCURSES_EXPORT(int) winchstr (WINDOW *, chtype *);		/* generated */
-extern NCURSES_EXPORT(int) winnstr (WINDOW *, char *, int);		/* implemented */
-extern NCURSES_EXPORT(int) winsch (WINDOW *, chtype);			/* implemented */
-extern NCURSES_EXPORT(int) winsdelln (WINDOW *,int);			/* implemented */
-extern NCURSES_EXPORT(int) winsertln (WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) winsnstr (WINDOW *, const char *,int);	/* implemented */
-extern NCURSES_EXPORT(int) winsstr (WINDOW *, const char *);		/* generated */
-extern NCURSES_EXPORT(int) winstr (WINDOW *, char *);			/* generated */
-extern NCURSES_EXPORT(int) wmove (WINDOW *,int,int);			/* implemented */
-extern NCURSES_EXPORT(int) wnoutrefresh (WINDOW *);			/* implemented */
-extern NCURSES_EXPORT(int) wprintw (WINDOW *, const char *,...)		/* implemented */
-		GCC_PRINTFLIKE(2,3);
-extern NCURSES_EXPORT(int) wredrawln (WINDOW *,int,int);		/* implemented */
-extern NCURSES_EXPORT(int) wrefresh (WINDOW *);				/* implemented */
-extern NCURSES_EXPORT(int) wscanw (WINDOW *, NCURSES_CONST char *,...)	/* implemented */
-		GCC_SCANFLIKE(2,3);
-extern NCURSES_EXPORT(int) wscrl (WINDOW *,int);			/* implemented */
-extern NCURSES_EXPORT(int) wsetscrreg (WINDOW *,int,int);		/* implemented */
-extern NCURSES_EXPORT(int) wstandout (WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) wstandend (WINDOW *);			/* generated */
-extern NCURSES_EXPORT(void) wsyncdown (WINDOW *);			/* implemented */
-extern NCURSES_EXPORT(void) wsyncup (WINDOW *);				/* implemented */
-extern NCURSES_EXPORT(void) wtimeout (WINDOW *,int);			/* implemented */
-extern NCURSES_EXPORT(int) wtouchln (WINDOW *,int,int,int);		/* implemented */
-extern NCURSES_EXPORT(int) wvline (WINDOW *,chtype,int);		/* implemented */
-
-/*
- * These are also declared in <term.h>:
- */
-extern NCURSES_EXPORT(int) tigetflag (NCURSES_CONST char *);		/* implemented */
-extern NCURSES_EXPORT(int) tigetnum (NCURSES_CONST char *);		/* implemented */
-extern NCURSES_EXPORT(char *) tigetstr (NCURSES_CONST char *);		/* implemented */
-extern NCURSES_EXPORT(int) putp (const char *);				/* implemented */
-
-#if NCURSES_TPARM_VARARGS
-extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, ...);	/* special */
-#else
-extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG);	/* special */
-extern NCURSES_EXPORT(char *) tparm_varargs (NCURSES_CONST char *, ...);	/* special */
-#endif
-
-extern NCURSES_EXPORT(char *) tiparm (const char *, ...);		/* special */
-
-/*
- * These functions are not in X/Open, but we use them in macro definitions:
- */
-extern NCURSES_EXPORT(int) getattrs (const WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) getcurx (const WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) getcury (const WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) getbegx (const WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) getbegy (const WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) getmaxx (const WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) getmaxy (const WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) getparx (const WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) getpary (const WINDOW *);			/* generated */
-
-/*
- * vid_attr() was implemented originally based on a draft of X/Open curses.
- */
-#if !NCURSES_WIDECHAR
-#define vid_attr(a,pair,opts) vidattr(a)
-#endif
-
-/*
- * These functions are extensions - not in X/Open Curses.
- */
-#if 1
-#undef  NCURSES_EXT_FUNCS
-#define NCURSES_EXT_FUNCS 20150808
-typedef int (*NCURSES_WINDOW_CB)(WINDOW *, void *);
-typedef int (*NCURSES_SCREEN_CB)(SCREEN *, void *);
-extern NCURSES_EXPORT(bool) is_term_resized (int, int);
-extern NCURSES_EXPORT(char *) keybound (int, int);
-extern NCURSES_EXPORT(const char *) curses_version (void);
-extern NCURSES_EXPORT(int) assume_default_colors (int, int);
-extern NCURSES_EXPORT(int) define_key (const char *, int);
-extern NCURSES_EXPORT(int) get_escdelay (void);
-extern NCURSES_EXPORT(int) key_defined (const char *);
-extern NCURSES_EXPORT(int) keyok (int, bool);
-extern NCURSES_EXPORT(int) resize_term (int, int);
-extern NCURSES_EXPORT(int) resizeterm (int, int);
-extern NCURSES_EXPORT(int) set_escdelay (int);
-extern NCURSES_EXPORT(int) set_tabsize (int);
-extern NCURSES_EXPORT(int) use_default_colors (void);
-extern NCURSES_EXPORT(int) use_extended_names (bool);
-extern NCURSES_EXPORT(int) use_legacy_coding (int);
-extern NCURSES_EXPORT(int) use_screen (SCREEN *, NCURSES_SCREEN_CB, void *);
-extern NCURSES_EXPORT(int) use_window (WINDOW *, NCURSES_WINDOW_CB, void *);
-extern NCURSES_EXPORT(int) wresize (WINDOW *, int, int);
-extern NCURSES_EXPORT(void) nofilter(void);
-
-/*
- * These extensions provide access to information stored in the WINDOW even
- * when NCURSES_OPAQUE is set:
- */
-extern NCURSES_EXPORT(WINDOW *) wgetparent (const WINDOW *);	/* generated */
-extern NCURSES_EXPORT(bool) is_cleared (const WINDOW *);	/* generated */
-extern NCURSES_EXPORT(bool) is_idcok (const WINDOW *);		/* generated */
-extern NCURSES_EXPORT(bool) is_idlok (const WINDOW *);		/* generated */
-extern NCURSES_EXPORT(bool) is_immedok (const WINDOW *);	/* generated */
-extern NCURSES_EXPORT(bool) is_keypad (const WINDOW *);		/* generated */
-extern NCURSES_EXPORT(bool) is_leaveok (const WINDOW *);	/* generated */
-extern NCURSES_EXPORT(bool) is_nodelay (const WINDOW *);	/* generated */
-extern NCURSES_EXPORT(bool) is_notimeout (const WINDOW *);	/* generated */
-extern NCURSES_EXPORT(bool) is_pad (const WINDOW *);		/* generated */
-extern NCURSES_EXPORT(bool) is_scrollok (const WINDOW *);	/* generated */
-extern NCURSES_EXPORT(bool) is_subwin (const WINDOW *);		/* generated */
-extern NCURSES_EXPORT(bool) is_syncok (const WINDOW *);		/* generated */
-extern NCURSES_EXPORT(int) wgetdelay (const WINDOW *);		/* generated */
-extern NCURSES_EXPORT(int) wgetscrreg (const WINDOW *, int *, int *); /* generated */
-
-#else
-#define curses_version() NCURSES_VERSION
-#endif
-
-/*
- * Extra extension-functions, which pass a SCREEN pointer rather than using
- * a global variable SP.
- */
-#if 1
-#undef  NCURSES_SP_FUNCS
-#define NCURSES_SP_FUNCS 20150808
-#define NCURSES_SP_NAME(name) name##_sp
-
-/* Define the sp-funcs helper function */
-#define NCURSES_SP_OUTC NCURSES_SP_NAME(NCURSES_OUTC)
-typedef int (*NCURSES_SP_OUTC)(SCREEN*, int);
-
-extern NCURSES_EXPORT(SCREEN *) new_prescr (void); /* implemented:SP_FUNC */
-
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(baudrate) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(beep) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(can_change_color) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(cbreak) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(curs_set) (SCREEN*, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(color_content) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T*, NCURSES_COLOR_T*, NCURSES_COLOR_T*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(def_prog_mode) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(def_shell_mode) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(delay_output) (SCREEN*, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(doupdate) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(echo) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(endwin) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(char) NCURSES_SP_NAME(erasechar) (SCREEN*);/* implemented:SP_FUNC */
-extern NCURSES_EXPORT(void) NCURSES_SP_NAME(filter) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(flash) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(flushinp) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(getwin) (SCREEN*, FILE *);			/* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(halfdelay) (SCREEN*, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_colors) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_ic) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_il) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_color) (SCREEN*, NCURSES_COLOR_T, NCURSES_COLOR_T, NCURSES_COLOR_T, NCURSES_COLOR_T); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_pair) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T, NCURSES_COLOR_T); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(intrflush) (SCREEN*, WINDOW*, bool);	/* implemented:SP_FUNC */
-extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(isendwin) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(NCURSES_CONST char *) NCURSES_SP_NAME(keyname) (SCREEN*, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(char) NCURSES_SP_NAME(killchar) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(longname) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(mvcur) (SCREEN*, int, int, int, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(napms) (SCREEN*, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newpad) (SCREEN*, int, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(SCREEN *) NCURSES_SP_NAME(newterm) (SCREEN*, NCURSES_CONST char *, FILE *, FILE *); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newwin) (SCREEN*, int, int, int, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nl) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nocbreak) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(noecho) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nonl) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(void) NCURSES_SP_NAME(noqiflush) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(noraw) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(pair_content) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T*, NCURSES_COLOR_T*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(void) NCURSES_SP_NAME(qiflush) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(raw) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(reset_prog_mode) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(reset_shell_mode) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resetty) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(ripoffline) (SCREEN*, int, int (*)(WINDOW *, int));	/* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(savetty) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_init) (SCREEN*, const char *); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_restore) (SCREEN*, const char *); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_set) (SCREEN*, const char *); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attroff) (SCREEN*, const chtype); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attron) (SCREEN*, const chtype); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attrset) (SCREEN*, const chtype); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(attr_t) NCURSES_SP_NAME(slk_attr) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attr_set) (SCREEN*, const attr_t, NCURSES_PAIRS_T, void*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_clear) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_color) (SCREEN*, NCURSES_PAIRS_T); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_init) (SCREEN*, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(slk_label) (SCREEN*, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_noutrefresh) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_refresh) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_restore) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_set) (SCREEN*, int, const char *, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_touch) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(start_color) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(chtype) NCURSES_SP_NAME(termattrs) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(termname) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(typeahead) (SCREEN*, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(ungetch) (SCREEN*, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(void) NCURSES_SP_NAME(use_env) (SCREEN*, bool); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(void) NCURSES_SP_NAME(use_tioctl) (SCREEN*, bool); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vidattr) (SCREEN*, chtype);	/* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vidputs) (SCREEN*, chtype, NCURSES_SP_OUTC); /* implemented:SP_FUNC */
-#if 1
-extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(keybound) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(assume_default_colors) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(define_key) (SCREEN*, const char *, int);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(get_escdelay) (SCREEN*);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(is_term_resized) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(key_defined) (SCREEN*, const char *);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(keyok) (SCREEN*, int, bool);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(void) NCURSES_SP_NAME(nofilter) (SCREEN*); /* implemented */	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resize_term) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resizeterm) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(set_escdelay) (SCREEN*, int);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(set_tabsize) (SCREEN*, int);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_default_colors) (SCREEN*);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_legacy_coding) (SCREEN*, int);	/* implemented:EXT_SP_FUNC */
-#endif
-#else
-#undef  NCURSES_SP_FUNCS
-#define NCURSES_SP_FUNCS 0
-#define NCURSES_SP_NAME(name) name
-#define NCURSES_SP_OUTC NCURSES_OUTC
-#endif
-
-/* attributes */
-
-#define NCURSES_ATTR_SHIFT       8
-#define NCURSES_BITS(mask,shift) (NCURSES_CAST(chtype,(mask)) << ((shift) + NCURSES_ATTR_SHIFT))
-
-#define A_NORMAL	(1U - 1U)
-#define A_ATTRIBUTES	NCURSES_BITS(~(1U - 1U),0)
-#define A_CHARTEXT	(NCURSES_BITS(1U,0) - 1U)
-#define A_COLOR		NCURSES_BITS(((1U) << 8) - 1U,0)
-#define A_STANDOUT	NCURSES_BITS(1U,8)
-#define A_UNDERLINE	NCURSES_BITS(1U,9)
-#define A_REVERSE	NCURSES_BITS(1U,10)
-#define A_BLINK		NCURSES_BITS(1U,11)
-#define A_DIM		NCURSES_BITS(1U,12)
-#define A_BOLD		NCURSES_BITS(1U,13)
-#define A_ALTCHARSET	NCURSES_BITS(1U,14)
-#define A_INVIS		NCURSES_BITS(1U,15)
-#define A_PROTECT	NCURSES_BITS(1U,16)
-#define A_HORIZONTAL	NCURSES_BITS(1U,17)
-#define A_LEFT		NCURSES_BITS(1U,18)
-#define A_LOW		NCURSES_BITS(1U,19)
-#define A_RIGHT		NCURSES_BITS(1U,20)
-#define A_TOP		NCURSES_BITS(1U,21)
-#define A_VERTICAL	NCURSES_BITS(1U,22)
-
-#if 1
-#define A_ITALIC	NCURSES_BITS(1U,23)	/* ncurses extension */
-#endif
-
-/*
- * Most of the pseudo functions are macros that either provide compatibility
- * with older versions of curses, or provide inline functionality to improve
- * performance.
- */
-
-/*
- * These pseudo functions are always implemented as macros:
- */
-
-#define getyx(win,y,x)   	(y = getcury(win), x = getcurx(win))
-#define getbegyx(win,y,x)	(y = getbegy(win), x = getbegx(win))
-#define getmaxyx(win,y,x)	(y = getmaxy(win), x = getmaxx(win))
-#define getparyx(win,y,x)	(y = getpary(win), x = getparx(win))
-
-#define getsyx(y,x) do { if (newscr) { \
-			     if (is_leaveok(newscr)) \
-				(y) = (x) = -1; \
-			     else \
-				 getyx(newscr,(y), (x)); \
-			} \
-		    } while(0)
-
-#define setsyx(y,x) do { if (newscr) { \
-			    if ((y) == -1 && (x) == -1) \
-				leaveok(newscr, TRUE); \
-			    else { \
-				leaveok(newscr, FALSE); \
-				wmove(newscr, (y), (x)); \
-			    } \
-			} \
-		    } while(0)
-
-#ifndef NCURSES_NOMACROS
-
-/*
- * These miscellaneous pseudo functions are provided for compatibility:
- */
-
-#define wgetstr(w, s)		wgetnstr(w, s, -1)
-#define getnstr(s, n)		wgetnstr(stdscr, s, (n))
-
-#define setterm(term)		setupterm(term, 1, (int *)0)
-
-#define fixterm()		reset_prog_mode()
-#define resetterm()		reset_shell_mode()
-#define saveterm()		def_prog_mode()
-#define crmode()		cbreak()
-#define nocrmode()		nocbreak()
-#define gettmode()
-
-/* It seems older SYSV curses versions define these */
-#if !NCURSES_OPAQUE
-#define getattrs(win)		NCURSES_CAST(int, (win) ? (win)->_attrs : A_NORMAL)
-#define getcurx(win)		((win) ? (win)->_curx : ERR)
-#define getcury(win)		((win) ? (win)->_cury : ERR)
-#define getbegx(win)		((win) ? (win)->_begx : ERR)
-#define getbegy(win)		((win) ? (win)->_begy : ERR)
-#define getmaxx(win)		((win) ? ((win)->_maxx + 1) : ERR)
-#define getmaxy(win)		((win) ? ((win)->_maxy + 1) : ERR)
-#define getparx(win)		((win) ? (win)->_parx : ERR)
-#define getpary(win)		((win) ? (win)->_pary : ERR)
-#endif /* NCURSES_OPAQUE */
-
-#define wstandout(win)      	(wattrset(win,A_STANDOUT))
-#define wstandend(win)      	(wattrset(win,A_NORMAL))
-
-#define wattron(win,at)		wattr_on(win, NCURSES_CAST(attr_t, at), NULL)
-#define wattroff(win,at)	wattr_off(win, NCURSES_CAST(attr_t, at), NULL)
-
-#if !NCURSES_OPAQUE
-#if NCURSES_WIDECHAR && 0
-#define wattrset(win,at)	((win) \
-				  ? ((win)->_color = NCURSES_CAST(int, PAIR_NUMBER(at)), \
-                                     (win)->_attrs = NCURSES_CAST(attr_t, at), \
-                                     OK) \
-				  : ERR)
-#else
-#define wattrset(win,at)        ((win) \
-				  ? ((win)->_attrs = NCURSES_CAST(attr_t, at), \
-				     OK) \
-				  : ERR)
-#endif
-#endif /* NCURSES_OPAQUE */
-
-#define scroll(win)		wscrl(win,1)
-
-#define touchwin(win)		wtouchln((win), 0, getmaxy(win), 1)
-#define touchline(win, s, c)	wtouchln((win), s, c, 1)
-#define untouchwin(win)		wtouchln((win), 0, getmaxy(win), 0)
-
-#define box(win, v, h)		wborder(win, v, v, h, h, 0, 0, 0, 0)
-#define border(ls, rs, ts, bs, tl, tr, bl, br)	wborder(stdscr, ls, rs, ts, bs, tl, tr, bl, br)
-#define hline(ch, n)		whline(stdscr, ch, (n))
-#define vline(ch, n)		wvline(stdscr, ch, (n))
-
-#define winstr(w, s)		winnstr(w, s, -1)
-#define winchstr(w, s)		winchnstr(w, s, -1)
-#define winsstr(w, s)		winsnstr(w, s, -1)
-
-#if !NCURSES_OPAQUE
-#define redrawwin(win)		wredrawln(win, 0, ((win) ? (win)->_maxy+1 : -1))
-#endif /* NCURSES_OPAQUE */
-
-#define waddstr(win,str)	waddnstr(win,str,-1)
-#define waddchstr(win,str)	waddchnstr(win,str,-1)
-
-/*
- * These apply to the first 256 color pairs.
- */
-#define COLOR_PAIR(n)	NCURSES_BITS((n), 0)
-#define PAIR_NUMBER(a)	(NCURSES_CAST(int,((NCURSES_CAST(unsigned long,(a)) & A_COLOR) >> NCURSES_ATTR_SHIFT)))
-
-/*
- * pseudo functions for standard screen
- */
-
-#define addch(ch)		waddch(stdscr,(ch))
-#define addchnstr(str,n)	waddchnstr(stdscr,(str),(n))
-#define addchstr(str)		waddchstr(stdscr,(str))
-#define addnstr(str,n)		waddnstr(stdscr,(str),(n))
-#define addstr(str)		waddnstr(stdscr,(str),-1)
-#define attroff(at)		wattroff(stdscr,(at))
-#define attron(at)		wattron(stdscr,(at))
-#define attrset(at)		wattrset(stdscr,(at))
-#define attr_get(ap,cp,o)	wattr_get(stdscr,(ap),(cp),(o))
-#define attr_off(a,o)		wattr_off(stdscr,(a),(o))
-#define attr_on(a,o)		wattr_on(stdscr,(a),(o))
-#define attr_set(a,c,o)		wattr_set(stdscr,(a),(c),(o))
-#define bkgd(ch)		wbkgd(stdscr,(ch))
-#define bkgdset(ch)		wbkgdset(stdscr,(ch))
-#define chgat(n,a,c,o)		wchgat(stdscr,(n),(a),(c),(o))
-#define clear()			wclear(stdscr)
-#define clrtobot()		wclrtobot(stdscr)
-#define clrtoeol()		wclrtoeol(stdscr)
-#define color_set(c,o)		wcolor_set(stdscr,(c),(o))
-#define delch()			wdelch(stdscr)
-#define deleteln()		winsdelln(stdscr,-1)
-#define echochar(c)		wechochar(stdscr,(c))
-#define erase()			werase(stdscr)
-#define getch()			wgetch(stdscr)
-#define getstr(str)		wgetstr(stdscr,(str))
-#define inch()			winch(stdscr)
-#define inchnstr(s,n)		winchnstr(stdscr,(s),(n))
-#define inchstr(s)		winchstr(stdscr,(s))
-#define innstr(s,n)		winnstr(stdscr,(s),(n))
-#define insch(c)		winsch(stdscr,(c))
-#define insdelln(n)		winsdelln(stdscr,(n))
-#define insertln()		winsdelln(stdscr,1)
-#define insnstr(s,n)		winsnstr(stdscr,(s),(n))
-#define insstr(s)		winsstr(stdscr,(s))
-#define instr(s)		winstr(stdscr,(s))
-#define move(y,x)		wmove(stdscr,(y),(x))
-#define refresh()		wrefresh(stdscr)
-#define scrl(n)			wscrl(stdscr,(n))
-#define setscrreg(t,b)		wsetscrreg(stdscr,(t),(b))
-#define standend()		wstandend(stdscr)
-#define standout()		wstandout(stdscr)
-#define timeout(delay)		wtimeout(stdscr,(delay))
-#define wdeleteln(win)		winsdelln(win,-1)
-#define winsertln(win)		winsdelln(win,1)
-
-/*
- * mv functions
- */
-
-#define mvwaddch(win,y,x,ch)		(wmove((win),(y),(x)) == ERR ? ERR : waddch((win),(ch)))
-#define mvwaddchnstr(win,y,x,str,n)	(wmove((win),(y),(x)) == ERR ? ERR : waddchnstr((win),(str),(n)))
-#define mvwaddchstr(win,y,x,str)	(wmove((win),(y),(x)) == ERR ? ERR : waddchnstr((win),(str),-1))
-#define mvwaddnstr(win,y,x,str,n)	(wmove((win),(y),(x)) == ERR ? ERR : waddnstr((win),(str),(n)))
-#define mvwaddstr(win,y,x,str)		(wmove((win),(y),(x)) == ERR ? ERR : waddnstr((win),(str),-1))
-#define mvwdelch(win,y,x)		(wmove((win),(y),(x)) == ERR ? ERR : wdelch(win))
-#define mvwchgat(win,y,x,n,a,c,o)	(wmove((win),(y),(x)) == ERR ? ERR : wchgat((win),(n),(a),(c),(o)))
-#define mvwgetch(win,y,x)		(wmove((win),(y),(x)) == ERR ? ERR : wgetch(win))
-#define mvwgetnstr(win,y,x,str,n)	(wmove((win),(y),(x)) == ERR ? ERR : wgetnstr((win),(str),(n)))
-#define mvwgetstr(win,y,x,str)		(wmove((win),(y),(x)) == ERR ? ERR : wgetstr((win),(str)))
-#define mvwhline(win,y,x,c,n)		(wmove((win),(y),(x)) == ERR ? ERR : whline((win),(c),(n)))
-#define mvwinch(win,y,x)		(wmove((win),(y),(x)) == ERR ? NCURSES_CAST(chtype, ERR) : winch(win))
-#define mvwinchnstr(win,y,x,s,n)	(wmove((win),(y),(x)) == ERR ? ERR : winchnstr((win),(s),(n)))
-#define mvwinchstr(win,y,x,s)		(wmove((win),(y),(x)) == ERR ? ERR : winchstr((win),(s)))
-#define mvwinnstr(win,y,x,s,n)		(wmove((win),(y),(x)) == ERR ? ERR : winnstr((win),(s),(n)))
-#define mvwinsch(win,y,x,c)		(wmove((win),(y),(x)) == ERR ? ERR : winsch((win),(c)))
-#define mvwinsnstr(win,y,x,s,n)		(wmove((win),(y),(x)) == ERR ? ERR : winsnstr((win),(s),(n)))
-#define mvwinsstr(win,y,x,s)		(wmove((win),(y),(x)) == ERR ? ERR : winsstr((win),(s)))
-#define mvwinstr(win,y,x,s)		(wmove((win),(y),(x)) == ERR ? ERR : winstr((win),(s)))
-#define mvwvline(win,y,x,c,n)		(wmove((win),(y),(x)) == ERR ? ERR : wvline((win),(c),(n)))
-
-#define mvaddch(y,x,ch)			mvwaddch(stdscr,(y),(x),(ch))
-#define mvaddchnstr(y,x,str,n)		mvwaddchnstr(stdscr,(y),(x),(str),(n))
-#define mvaddchstr(y,x,str)		mvwaddchstr(stdscr,(y),(x),(str))
-#define mvaddnstr(y,x,str,n)		mvwaddnstr(stdscr,(y),(x),(str),(n))
-#define mvaddstr(y,x,str)		mvwaddstr(stdscr,(y),(x),(str))
-#define mvchgat(y,x,n,a,c,o)		mvwchgat(stdscr,(y),(x),(n),(a),(c),(o))
-#define mvdelch(y,x)			mvwdelch(stdscr,(y),(x))
-#define mvgetch(y,x)			mvwgetch(stdscr,(y),(x))
-#define mvgetnstr(y,x,str,n)		mvwgetnstr(stdscr,(y),(x),(str),(n))
-#define mvgetstr(y,x,str)		mvwgetstr(stdscr,(y),(x),(str))
-#define mvhline(y,x,c,n)		mvwhline(stdscr,(y),(x),(c),(n))
-#define mvinch(y,x)			mvwinch(stdscr,(y),(x))
-#define mvinchnstr(y,x,s,n)		mvwinchnstr(stdscr,(y),(x),(s),(n))
-#define mvinchstr(y,x,s)		mvwinchstr(stdscr,(y),(x),(s))
-#define mvinnstr(y,x,s,n)		mvwinnstr(stdscr,(y),(x),(s),(n))
-#define mvinsch(y,x,c)			mvwinsch(stdscr,(y),(x),(c))
-#define mvinsnstr(y,x,s,n)		mvwinsnstr(stdscr,(y),(x),(s),(n))
-#define mvinsstr(y,x,s)			mvwinsstr(stdscr,(y),(x),(s))
-#define mvinstr(y,x,s)			mvwinstr(stdscr,(y),(x),(s))
-#define mvvline(y,x,c,n)		mvwvline(stdscr,(y),(x),(c),(n))
-
-/*
- * Some wide-character functions can be implemented without the extensions.
- */
-#if !NCURSES_OPAQUE
-#define getbkgd(win)                    ((win) ? ((win)->_bkgd) : 0)
-#endif /* NCURSES_OPAQUE */
-
-#define slk_attr_off(a,v)		((v) ? ERR : slk_attroff(a))
-#define slk_attr_on(a,v)		((v) ? ERR : slk_attron(a))
-
-#if !NCURSES_OPAQUE
-#if NCURSES_WIDECHAR && 0
-#define wattr_set(win,a,p,opts)		(((win) \
-					  ? ((win)->_attrs = ((a) & ~A_COLOR), \
-					     (win)->_color = (p)) \
-					  : OK), \
-					 OK)
-#define wattr_get(win,a,p,opts)		((void)(((a) != (void *)0) ? (*(a) = (win) ? (win)->_attrs : 0) : OK), \
-					 (void)(((p) != (void *)0) ? (*(p) = (NCURSES_PAIRS_T) ((win) ? (win)->_color : 0)) : OK), \
-					 OK)
-#else
-#define wattr_set(win,a,p,opts)		(((win) \
-					  ? ((win)->_attrs = (((a) & ~A_COLOR) | (attr_t)COLOR_PAIR(p))) \
-					  : OK), \
-					 OK)
-#define wattr_get(win,a,p,opts)		((void)(((a) != (void *)0) ? (*(a) = (win) ? (win)->_attrs : 0) : OK), \
-					 (void)(((p) != (void *)0) ? (*(p) = (NCURSES_PAIRS_T) ((win) ? PAIR_NUMBER((win)->_attrs) : 0)) : OK), \
-					 OK)
-#endif
-#endif /* NCURSES_OPAQUE */
-
-/*
- * X/Open curses deprecates SVr4 vwprintw/vwscanw, which are supposed to use
- * varargs.h.  It adds new calls vw_printw/vw_scanw, which are supposed to
- * use POSIX stdarg.h.  The ncurses versions of vwprintw/vwscanw already
- * use stdarg.h, so...
- */
-#define vw_printw		vwprintw
-#define vw_scanw		vwscanw
-
-/*
- * Export fallback function for use in C++ binding.
- */
-#if !1
-#define vsscanf(a,b,c) _nc_vsscanf(a,b,c)
-NCURSES_EXPORT(int) vsscanf(const char *, const char *, va_list);
-#endif
-
-/*
- * These macros are extensions - not in X/Open Curses.
- */
-#if 1
-#if !NCURSES_OPAQUE
-#define is_cleared(win)		((win) ? (win)->_clear : FALSE)
-#define is_idcok(win)		((win) ? (win)->_idcok : FALSE)
-#define is_idlok(win)		((win) ? (win)->_idlok : FALSE)
-#define is_immedok(win)		((win) ? (win)->_immed : FALSE)
-#define is_keypad(win)		((win) ? (win)->_use_keypad : FALSE)
-#define is_leaveok(win)		((win) ? (win)->_leaveok : FALSE)
-#define is_nodelay(win)		((win) ? ((win)->_delay == 0) : FALSE)
-#define is_notimeout(win)	((win) ? (win)->_notimeout : FALSE)
-#define is_pad(win)		((win) ? ((win)->_flags & _ISPAD) != 0 : FALSE)
-#define is_scrollok(win)	((win) ? (win)->_scroll : FALSE)
-#define is_subwin(win)		((win) ? ((win)->_flags & _SUBWIN) != 0 : FALSE)
-#define is_syncok(win)		((win) ? (win)->_sync : FALSE)
-#define wgetdelay(win)		((win) ? (win)->_delay : 0)
-#define wgetparent(win)		((win) ? (win)->_parent : 0)
-#define wgetscrreg(win,t,b)	((win) ? (*(t) = (win)->_regtop, *(b) = (win)->_regbottom, OK) : ERR)
-#endif
-#endif
-
-#endif /* NCURSES_NOMACROS */
-
-/*
- * Public variables.
- *
- * Notes:
- *	a. ESCDELAY was an undocumented feature under AIX curses.
- *	   It gives the ESC expire time in milliseconds.
- *	b. ttytype is needed for backward compatibility
- */
-#if NCURSES_REENTRANT
-
-NCURSES_WRAPPED_VAR(WINDOW *, curscr);
-NCURSES_WRAPPED_VAR(WINDOW *, newscr);
-NCURSES_WRAPPED_VAR(WINDOW *, stdscr);
-NCURSES_WRAPPED_VAR(char *, ttytype);
-NCURSES_WRAPPED_VAR(int, COLORS);
-NCURSES_WRAPPED_VAR(int, COLOR_PAIRS);
-NCURSES_WRAPPED_VAR(int, COLS);
-NCURSES_WRAPPED_VAR(int, ESCDELAY);
-NCURSES_WRAPPED_VAR(int, LINES);
-NCURSES_WRAPPED_VAR(int, TABSIZE);
-
-#define curscr      NCURSES_PUBLIC_VAR(curscr())
-#define newscr      NCURSES_PUBLIC_VAR(newscr())
-#define stdscr      NCURSES_PUBLIC_VAR(stdscr())
-#define ttytype     NCURSES_PUBLIC_VAR(ttytype())
-#define COLORS      NCURSES_PUBLIC_VAR(COLORS())
-#define COLOR_PAIRS NCURSES_PUBLIC_VAR(COLOR_PAIRS())
-#define COLS        NCURSES_PUBLIC_VAR(COLS())
-#define ESCDELAY    NCURSES_PUBLIC_VAR(ESCDELAY())
-#define LINES       NCURSES_PUBLIC_VAR(LINES())
-#define TABSIZE     NCURSES_PUBLIC_VAR(TABSIZE())
-
-#else
-
-extern NCURSES_EXPORT_VAR(WINDOW *) curscr;
-extern NCURSES_EXPORT_VAR(WINDOW *) newscr;
-extern NCURSES_EXPORT_VAR(WINDOW *) stdscr;
-extern NCURSES_EXPORT_VAR(char) ttytype[];
-extern NCURSES_EXPORT_VAR(int) COLORS;
-extern NCURSES_EXPORT_VAR(int) COLOR_PAIRS;
-extern NCURSES_EXPORT_VAR(int) COLS;
-extern NCURSES_EXPORT_VAR(int) ESCDELAY;
-extern NCURSES_EXPORT_VAR(int) LINES;
-extern NCURSES_EXPORT_VAR(int) TABSIZE;
-
-#endif
-
-/*
- * Pseudo-character tokens outside ASCII range.  The curses wgetch() function
- * will return any given one of these only if the corresponding k- capability
- * is defined in your terminal's terminfo entry.
- *
- * Some keys (KEY_A1, etc) are arranged like this:
- *	a1     up    a3
- *	left   b2    right
- *	c1     down  c3
- *
- * A few key codes do not depend upon the terminfo entry.
- */
-#define KEY_CODE_YES	0400		/* A wchar_t contains a key code */
-#define KEY_MIN		0401		/* Minimum curses key */
-#define KEY_BREAK	0401		/* Break key (unreliable) */
-#define KEY_SRESET	0530		/* Soft (partial) reset (unreliable) */
-#define KEY_RESET	0531		/* Reset or hard reset (unreliable) */
-/*
- * These definitions were generated by ./MKkey_defs.sh ./Caps
- */
-#define KEY_DOWN	0402		/* down-arrow key */
-#define KEY_UP		0403		/* up-arrow key */
-#define KEY_LEFT	0404		/* left-arrow key */
-#define KEY_RIGHT	0405		/* right-arrow key */
-#define KEY_HOME	0406		/* home key */
-#define KEY_BACKSPACE	0407		/* backspace key */
-#define KEY_F0		0410		/* Function keys.  Space for 64 */
-#define KEY_F(n)	(KEY_F0+(n))	/* Value of function key n */
-#define KEY_DL		0510		/* delete-line key */
-#define KEY_IL		0511		/* insert-line key */
-#define KEY_DC		0512		/* delete-character key */
-#define KEY_IC		0513		/* insert-character key */
-#define KEY_EIC		0514		/* sent by rmir or smir in insert mode */
-#define KEY_CLEAR	0515		/* clear-screen or erase key */
-#define KEY_EOS		0516		/* clear-to-end-of-screen key */
-#define KEY_EOL		0517		/* clear-to-end-of-line key */
-#define KEY_SF		0520		/* scroll-forward key */
-#define KEY_SR		0521		/* scroll-backward key */
-#define KEY_NPAGE	0522		/* next-page key */
-#define KEY_PPAGE	0523		/* previous-page key */
-#define KEY_STAB	0524		/* set-tab key */
-#define KEY_CTAB	0525		/* clear-tab key */
-#define KEY_CATAB	0526		/* clear-all-tabs key */
-#define KEY_ENTER	0527		/* enter/send key */
-#define KEY_PRINT	0532		/* print key */
-#define KEY_LL		0533		/* lower-left key (home down) */
-#define KEY_A1		0534		/* upper left of keypad */
-#define KEY_A3		0535		/* upper right of keypad */
-#define KEY_B2		0536		/* center of keypad */
-#define KEY_C1		0537		/* lower left of keypad */
-#define KEY_C3		0540		/* lower right of keypad */
-#define KEY_BTAB	0541		/* back-tab key */
-#define KEY_BEG		0542		/* begin key */
-#define KEY_CANCEL	0543		/* cancel key */
-#define KEY_CLOSE	0544		/* close key */
-#define KEY_COMMAND	0545		/* command key */
-#define KEY_COPY	0546		/* copy key */
-#define KEY_CREATE	0547		/* create key */
-#define KEY_END		0550		/* end key */
-#define KEY_EXIT	0551		/* exit key */
-#define KEY_FIND	0552		/* find key */
-#define KEY_HELP	0553		/* help key */
-#define KEY_MARK	0554		/* mark key */
-#define KEY_MESSAGE	0555		/* message key */
-#define KEY_MOVE	0556		/* move key */
-#define KEY_NEXT	0557		/* next key */
-#define KEY_OPEN	0560		/* open key */
-#define KEY_OPTIONS	0561		/* options key */
-#define KEY_PREVIOUS	0562		/* previous key */
-#define KEY_REDO	0563		/* redo key */
-#define KEY_REFERENCE	0564		/* reference key */
-#define KEY_REFRESH	0565		/* refresh key */
-#define KEY_REPLACE	0566		/* replace key */
-#define KEY_RESTART	0567		/* restart key */
-#define KEY_RESUME	0570		/* resume key */
-#define KEY_SAVE	0571		/* save key */
-#define KEY_SBEG	0572		/* shifted begin key */
-#define KEY_SCANCEL	0573		/* shifted cancel key */
-#define KEY_SCOMMAND	0574		/* shifted command key */
-#define KEY_SCOPY	0575		/* shifted copy key */
-#define KEY_SCREATE	0576		/* shifted create key */
-#define KEY_SDC		0577		/* shifted delete-character key */
-#define KEY_SDL		0600		/* shifted delete-line key */
-#define KEY_SELECT	0601		/* select key */
-#define KEY_SEND	0602		/* shifted end key */
-#define KEY_SEOL	0603		/* shifted clear-to-end-of-line key */
-#define KEY_SEXIT	0604		/* shifted exit key */
-#define KEY_SFIND	0605		/* shifted find key */
-#define KEY_SHELP	0606		/* shifted help key */
-#define KEY_SHOME	0607		/* shifted home key */
-#define KEY_SIC		0610		/* shifted insert-character key */
-#define KEY_SLEFT	0611		/* shifted left-arrow key */
-#define KEY_SMESSAGE	0612		/* shifted message key */
-#define KEY_SMOVE	0613		/* shifted move key */
-#define KEY_SNEXT	0614		/* shifted next key */
-#define KEY_SOPTIONS	0615		/* shifted options key */
-#define KEY_SPREVIOUS	0616		/* shifted previous key */
-#define KEY_SPRINT	0617		/* shifted print key */
-#define KEY_SREDO	0620		/* shifted redo key */
-#define KEY_SREPLACE	0621		/* shifted replace key */
-#define KEY_SRIGHT	0622		/* shifted right-arrow key */
-#define KEY_SRSUME	0623		/* shifted resume key */
-#define KEY_SSAVE	0624		/* shifted save key */
-#define KEY_SSUSPEND	0625		/* shifted suspend key */
-#define KEY_SUNDO	0626		/* shifted undo key */
-#define KEY_SUSPEND	0627		/* suspend key */
-#define KEY_UNDO	0630		/* undo key */
-#define KEY_MOUSE	0631		/* Mouse event has occurred */
-#define KEY_RESIZE	0632		/* Terminal resize event */
-#define KEY_EVENT	0633		/* We were interrupted by an event */
-
-#define KEY_MAX		0777		/* Maximum key value is 0633 */
-/* $Id: curses.tail,v 1.21 2011/10/29 20:03:22 tom Exp $ */
-/*
- * vile:cmode:
- * This file is part of ncurses, designed to be appended after curses.h.in
- * (see that file for the relevant copyright).
- */
-
-/* mouse interface */
-
-#if NCURSES_MOUSE_VERSION > 1
-#define NCURSES_MOUSE_MASK(b,m) ((m) << (((b) - 1) * 5))
-#else
-#define NCURSES_MOUSE_MASK(b,m) ((m) << (((b) - 1) * 6))
-#endif
-
-#define	NCURSES_BUTTON_RELEASED	001L
-#define	NCURSES_BUTTON_PRESSED	002L
-#define	NCURSES_BUTTON_CLICKED	004L
-#define	NCURSES_DOUBLE_CLICKED	010L
-#define	NCURSES_TRIPLE_CLICKED	020L
-#define	NCURSES_RESERVED_EVENT	040L
-
-/* event masks */
-#define	BUTTON1_RELEASED	NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_RELEASED)
-#define	BUTTON1_PRESSED		NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_PRESSED)
-#define	BUTTON1_CLICKED		NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_CLICKED)
-#define	BUTTON1_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(1, NCURSES_DOUBLE_CLICKED)
-#define	BUTTON1_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(1, NCURSES_TRIPLE_CLICKED)
-
-#define	BUTTON2_RELEASED	NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_RELEASED)
-#define	BUTTON2_PRESSED		NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_PRESSED)
-#define	BUTTON2_CLICKED		NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_CLICKED)
-#define	BUTTON2_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(2, NCURSES_DOUBLE_CLICKED)
-#define	BUTTON2_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(2, NCURSES_TRIPLE_CLICKED)
-
-#define	BUTTON3_RELEASED	NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_RELEASED)
-#define	BUTTON3_PRESSED		NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_PRESSED)
-#define	BUTTON3_CLICKED		NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_CLICKED)
-#define	BUTTON3_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(3, NCURSES_DOUBLE_CLICKED)
-#define	BUTTON3_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(3, NCURSES_TRIPLE_CLICKED)
-
-#define	BUTTON4_RELEASED	NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_RELEASED)
-#define	BUTTON4_PRESSED		NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_PRESSED)
-#define	BUTTON4_CLICKED		NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_CLICKED)
-#define	BUTTON4_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(4, NCURSES_DOUBLE_CLICKED)
-#define	BUTTON4_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(4, NCURSES_TRIPLE_CLICKED)
-
-/*
- * In 32 bits the version-1 scheme does not provide enough space for a 5th
- * button, unless we choose to change the ABI by omitting the reserved-events.
- */
-#if NCURSES_MOUSE_VERSION > 1
-
-#define	BUTTON5_RELEASED	NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_RELEASED)
-#define	BUTTON5_PRESSED		NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_PRESSED)
-#define	BUTTON5_CLICKED		NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_CLICKED)
-#define	BUTTON5_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(5, NCURSES_DOUBLE_CLICKED)
-#define	BUTTON5_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(5, NCURSES_TRIPLE_CLICKED)
-
-#define	BUTTON_CTRL		NCURSES_MOUSE_MASK(6, 0001L)
-#define	BUTTON_SHIFT		NCURSES_MOUSE_MASK(6, 0002L)
-#define	BUTTON_ALT		NCURSES_MOUSE_MASK(6, 0004L)
-#define	REPORT_MOUSE_POSITION	NCURSES_MOUSE_MASK(6, 0010L)
-
-#else
-
-#define	BUTTON1_RESERVED_EVENT	NCURSES_MOUSE_MASK(1, NCURSES_RESERVED_EVENT)
-#define	BUTTON2_RESERVED_EVENT	NCURSES_MOUSE_MASK(2, NCURSES_RESERVED_EVENT)
-#define	BUTTON3_RESERVED_EVENT	NCURSES_MOUSE_MASK(3, NCURSES_RESERVED_EVENT)
-#define	BUTTON4_RESERVED_EVENT	NCURSES_MOUSE_MASK(4, NCURSES_RESERVED_EVENT)
-
-#define	BUTTON_CTRL		NCURSES_MOUSE_MASK(5, 0001L)
-#define	BUTTON_SHIFT		NCURSES_MOUSE_MASK(5, 0002L)
-#define	BUTTON_ALT		NCURSES_MOUSE_MASK(5, 0004L)
-#define	REPORT_MOUSE_POSITION	NCURSES_MOUSE_MASK(5, 0010L)
-
-#endif
-
-#define	ALL_MOUSE_EVENTS	(REPORT_MOUSE_POSITION - 1)
-
-/* macros to extract single event-bits from masks */
-#define	BUTTON_RELEASE(e, x)		((e) & NCURSES_MOUSE_MASK(x, 001))
-#define	BUTTON_PRESS(e, x)		((e) & NCURSES_MOUSE_MASK(x, 002))
-#define	BUTTON_CLICK(e, x)		((e) & NCURSES_MOUSE_MASK(x, 004))
-#define	BUTTON_DOUBLE_CLICK(e, x)	((e) & NCURSES_MOUSE_MASK(x, 010))
-#define	BUTTON_TRIPLE_CLICK(e, x)	((e) & NCURSES_MOUSE_MASK(x, 020))
-#define	BUTTON_RESERVED_EVENT(e, x)	((e) & NCURSES_MOUSE_MASK(x, 040))
-
-typedef struct
-{
-    short id;		/* ID to distinguish multiple devices */
-    int x, y, z;	/* event coordinates (character-cell) */
-    mmask_t bstate;	/* button state bits */
-}
-MEVENT;
-
-extern NCURSES_EXPORT(bool)    has_mouse(void);
-extern NCURSES_EXPORT(int)     getmouse (MEVENT *);
-extern NCURSES_EXPORT(int)     ungetmouse (MEVENT *);
-extern NCURSES_EXPORT(mmask_t) mousemask (mmask_t, mmask_t *);
-extern NCURSES_EXPORT(bool)    wenclose (const WINDOW *, int, int);
-extern NCURSES_EXPORT(int)     mouseinterval (int);
-extern NCURSES_EXPORT(bool)    wmouse_trafo (const WINDOW*, int*, int*, bool);
-extern NCURSES_EXPORT(bool)    mouse_trafo (int*, int*, bool);              /* generated */
-
-#if NCURSES_SP_FUNCS
-extern NCURSES_EXPORT(bool)    NCURSES_SP_NAME(has_mouse) (SCREEN*);
-extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(getmouse) (SCREEN*, MEVENT *);
-extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(ungetmouse) (SCREEN*,MEVENT *);
-extern NCURSES_EXPORT(mmask_t) NCURSES_SP_NAME(mousemask) (SCREEN*, mmask_t, mmask_t *);
-extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(mouseinterval) (SCREEN*, int);
-#endif
-
-#define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen)
-
-/* other non-XSI functions */
-
-extern NCURSES_EXPORT(int) mcprint (char *, int);	/* direct data to printer */
-extern NCURSES_EXPORT(int) has_key (int);		/* do we have given key? */
-
-#if NCURSES_SP_FUNCS
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(has_key) (SCREEN*, int);    /* do we have given key? */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(mcprint) (SCREEN*, char *, int);	/* direct data to printer */
-#endif
-
-/* Debugging : use with libncurses_g.a */
-
-extern NCURSES_EXPORT(void) _tracef (const char *, ...) GCC_PRINTFLIKE(1,2);
-extern NCURSES_EXPORT(void) _tracedump (const char *, WINDOW *);
-extern NCURSES_EXPORT(char *) _traceattr (attr_t);
-extern NCURSES_EXPORT(char *) _traceattr2 (int, chtype);
-extern NCURSES_EXPORT(char *) _nc_tracebits (void);
-extern NCURSES_EXPORT(char *) _tracechar (int);
-extern NCURSES_EXPORT(char *) _tracechtype (chtype);
-extern NCURSES_EXPORT(char *) _tracechtype2 (int, chtype);
-#if NCURSES_WIDECHAR
-#define _tracech_t		_tracecchar_t
-extern NCURSES_EXPORT(char *) _tracecchar_t (const cchar_t *);
-#define _tracech_t2		_tracecchar_t2
-extern NCURSES_EXPORT(char *) _tracecchar_t2 (int, const cchar_t *);
-#else
-#define _tracech_t		_tracechtype
-#define _tracech_t2		_tracechtype2
-#endif
-extern NCURSES_EXPORT(char *) _tracemouse (const MEVENT *);
-extern NCURSES_EXPORT(void) trace (const unsigned int);
-
-/* trace masks */
-#define TRACE_DISABLE	0x0000	/* turn off tracing */
-#define TRACE_TIMES	0x0001	/* trace user and system times of updates */
-#define TRACE_TPUTS	0x0002	/* trace tputs calls */
-#define TRACE_UPDATE	0x0004	/* trace update actions, old & new screens */
-#define TRACE_MOVE	0x0008	/* trace cursor moves and scrolls */
-#define TRACE_CHARPUT	0x0010	/* trace all character outputs */
-#define TRACE_ORDINARY	0x001F	/* trace all update actions */
-#define TRACE_CALLS	0x0020	/* trace all curses calls */
-#define TRACE_VIRTPUT	0x0040	/* trace virtual character puts */
-#define TRACE_IEVENT	0x0080	/* trace low-level input processing */
-#define TRACE_BITS	0x0100	/* trace state of TTY control bits */
-#define TRACE_ICALLS	0x0200	/* trace internal/nested calls */
-#define TRACE_CCALLS	0x0400	/* trace per-character calls */
-#define TRACE_DATABASE	0x0800	/* trace read/write of terminfo/termcap data */
-#define TRACE_ATTRS	0x1000	/* trace attribute updates */
-
-#define TRACE_SHIFT	13	/* number of bits in the trace masks */
-#define TRACE_MAXIMUM	((1 << TRACE_SHIFT) - 1) /* maximum trace level */
-
-#if defined(TRACE) || defined(NCURSES_TEST)
-extern NCURSES_EXPORT_VAR(int) _nc_optimize_enable;		/* enable optimizations */
-extern NCURSES_EXPORT(const char *) _nc_visbuf (const char *);
-#define OPTIMIZE_MVCUR		0x01	/* cursor movement optimization */
-#define OPTIMIZE_HASHMAP	0x02	/* diff hashing to detect scrolls */
-#define OPTIMIZE_SCROLL		0x04	/* scroll optimization */
-#define OPTIMIZE_ALL		0xff	/* enable all optimizations (dflt) */
-#endif
-
-#include <unctrl.h>
-
-#ifdef __cplusplus
-
-#ifndef NCURSES_NOMACROS
-
-/* these names conflict with STL */
-#undef box
-#undef clear
-#undef erase
-#undef move
-#undef refresh
-
-#endif /* NCURSES_NOMACROS */
-
-}
-#endif
-
-#endif /* __NCURSES_H */
diff --git a/include/curses.h.in b/include/curses.h.in
index 65eedaa..8cfa0b9 100644
--- a/include/curses.h.in
+++ b/include/curses.h.in
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc.              *
+ * Copyright 2018-2023,2024 Thomas E. Dickey                                *
+ * Copyright 1998-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            *
@@ -32,11 +33,40 @@
  *     and: Thomas E. Dickey                        1996-on                 *
  ****************************************************************************/
 
-/* $Id: curses.h.in,v 1.241 2014/08/09 20:39:44 tom Exp $ */
+/* $Id: curses.h.in,v 1.282 2024/01/19 11:50:07 tom Exp $ */
 
 #ifndef __NCURSES_H
 #define __NCURSES_H
 
+/*
+ The symbols beginning NCURSES_ or USE_ are configuration choices.
+ A few of the former can be overridden by applications at compile-time.
+ Most of the others correspond to configure-script options (or checks
+ by the configure-script for features of the system on which it is built).
+
+ These symbols can be overridden by applications at compile-time:
+ NCURSES_NOMACROS suppresses macro definitions in favor of functions
+ NCURSES_WATTR_MACROS suppresses wattr_* macro definitions
+ NCURSES_WIDECHAR is an alternative for declaring wide-character functions.
+
+ These symbols are used only when building ncurses:
+ NCURSES_ATTR_T
+ NCURSES_FIELD_INTERNALS
+ NCURSES_INTERNALS
+
+ These symbols are set by the configure script:
+ NCURSES_ENABLE_STDBOOL_H
+ NCURSES_EXPANDED
+ NCURSES_EXT_COLORS
+ NCURSES_EXT_FUNCS
+ NCURSES_EXT_PUTWIN
+ NCURSES_NO_PADDING
+ NCURSES_OSPEED_COMPAT
+ NCURSES_PATHSEP
+ NCURSES_REENTRANT
+ NCURSES_SIGWINCH
+ */
+
 #define CURSES 1
 #define CURSES_H 1
 
@@ -59,10 +89,22 @@
  */
 #include <ncurses_dll.h>
 
+/*
+ * Extra headers.
+ */
 #if @HAVE_STDINT_H@
 #include <stdint.h>
 #endif
 
+#ifdef __cplusplus
+#else
+#if @HAVE_STDNORETURN_H@
+#include <stdnoreturn.h>
+#undef GCC_NORETURN
+#define GCC_NORETURN _Noreturn
+#endif
+#endif
+
 /*
  * User-definable tweak to disable the include of <stdbool.h>.
  */
@@ -89,13 +131,13 @@
 #define NCURSES_INLINE @NCURSES_INLINE@
 
 /*
- * The internal type used for color values, and for color-pairs.  The latter
+ * The standard type used for color values, and for color-pairs.  The latter
  * allows the curses library to enumerate the combinations of foreground and
  * background colors used by an application, and is normally the product of the
  * total foreground and background colors.
  *
  * X/Open uses "short" for both of these types, ultimately because they are
- * numbers from the terminal database, which uses 16-bit signed values.
+ * numbers from the SVr4 terminal database, which uses 16-bit signed values.
  */
 #undef	NCURSES_COLOR_T
 #define	NCURSES_COLOR_T short
@@ -104,10 +146,22 @@
 #define	NCURSES_PAIRS_T short
 
 /*
- * Definition used to make WINDOW and similar structs opaque.
+ * Definitions used to make WINDOW and similar structs opaque.
  */
-#ifndef @cf_cv_enable_opaque@
-#define NCURSES_OPAQUE @NCURSES_OPAQUE@
+#ifndef NCURSES_INTERNALS
+#define NCURSES_OPAQUE       @NCURSES_OPAQUE@
+#define NCURSES_OPAQUE_FORM  @NCURSES_OPAQUE_FORM@
+#define NCURSES_OPAQUE_MENU  @NCURSES_OPAQUE_MENU@
+#define NCURSES_OPAQUE_PANEL @NCURSES_OPAQUE_PANEL@
+#endif
+
+/*
+ * Definition used to optionally suppress wattr* macros to help with the
+ * transition from ncurses5 to ncurses6 by allowing the header files to
+ * be shared across development packages for ncursesw in both ABIs.
+ */
+#ifndef NCURSES_WATTR_MACROS
+#define NCURSES_WATTR_MACROS @NCURSES_WATTR_MACROS@
 #endif
 
 /*
@@ -118,6 +172,27 @@
 #endif
 
 /*
+ * KEY_RESIZE is an extended feature that relies upon the SIGWINCH handler
+ * in ncurses.
+ */
+#if @NCURSES_EXT_FUNCS@
+#ifndef NCURSES_SIGWINCH
+#define NCURSES_SIGWINCH @cf_cv_enable_sigwinch@
+#endif
+#else
+#undef NCURSES_SIGWINCH
+#define NCURSES_SIGWINCH 0
+#endif
+
+/*
+ * In certain environments, we must work around linker problems for data
+ */
+#undef NCURSES_BROKEN_LINKER
+#if @BROKEN_LINKER@
+#define NCURSES_BROKEN_LINKER 1
+#endif
+
+/*
  * Control whether bindings for interop support are added.
  */
 #undef	NCURSES_INTEROP_FUNCS
@@ -143,6 +218,13 @@
 #define NCURSES_TPARM_ARG @NCURSES_TPARM_ARG@
 
 /*
+ * Control whether ncurses uses wcwidth() for checking width of line-drawing
+ * characters.
+ */
+#undef NCURSES_WCWIDTH_GRAPHICS
+#define NCURSES_WCWIDTH_GRAPHICS @NCURSES_WCWIDTH_GRAPHICS@
+
+/*
  * NCURSES_CH_T is used in building the library, but not used otherwise in
  * this header file, since that would make the normal/wide-character versions
  * of the header incompatible.
@@ -229,6 +311,8 @@
 #define NCURSES_CAST(type,value) (type)(value)
 #endif
 
+#define NCURSES_OK_ADDR(p) (0 != NCURSES_CAST(const void *, (p)))
+
 /*
  * X/Open attributes.  In the ncurses implementation, they are identical to the
  * A_ attributes.
@@ -361,7 +445,14 @@
  */
 #define _NEWINDEX	-1
 
+#ifdef NCURSES_INTERNALS
+#undef SCREEN
+#define SCREEN struct screen
+SCREEN;
+#else
 typedef struct screen  SCREEN;
+#endif
+
 typedef struct _win_st WINDOW;
 
 typedef	chtype	attr_t;		/* ...must be at least as wide as chtype */
@@ -468,55 +559,6 @@
 #endif /* NCURSES_OPAQUE */
 
 /*
- * This is an extension to support events...
- */
-#if @NCURSES_EXT_FUNCS@
-#ifdef NCURSES_WGETCH_EVENTS
-#if !defined(__BEOS__) || defined(__HAIKU__)
-   /* Fix _nc_timed_wait() on BEOS... */
-#  define NCURSES_EVENT_VERSION	1
-#endif	/* !defined(__BEOS__) */
-
-/*
- * Bits to set in _nc_event.data.flags
- */
-#  define _NC_EVENT_TIMEOUT_MSEC	1
-#  define _NC_EVENT_FILE		2
-#  define _NC_EVENT_FILE_READABLE	2
-#  if 0					/* Not supported yet... */
-#    define _NC_EVENT_FILE_WRITABLE	4
-#    define _NC_EVENT_FILE_EXCEPTION	8
-#  endif
-
-typedef struct
-{
-    int type;
-    union
-    {
-	long timeout_msec;	/* _NC_EVENT_TIMEOUT_MSEC */
-	struct
-	{
-	    unsigned int flags;
-	    int fd;
-	    unsigned int result;
-	} fev;				/* _NC_EVENT_FILE */
-    } data;
-} _nc_event;
-
-typedef struct
-{
-    int count;
-    int result_flags;	/* _NC_EVENT_TIMEOUT_MSEC or _NC_EVENT_FILE_READABLE */
-    _nc_event *events[1];
-} _nc_eventlist;
-
-extern NCURSES_EXPORT(int) wgetch_events (WINDOW *, _nc_eventlist *);	/* experimental */
-extern NCURSES_EXPORT(int) wgetnstr_events (WINDOW *,char *,int,_nc_eventlist *);/* experimental */
-
-#endif /* NCURSES_WGETCH_EVENTS */
-#endif /* NCURSES_EXT_FUNCS */
-
-/*
  * GCC (and some other compilers) define '__attribute__'; we're using this
  * macro to alert the compiler to flag inconsistencies in printf/scanf-like
  * function calls.  Just in case '__attribute__' isn't defined, make a dummy.
@@ -529,14 +571,10 @@
 
 /*
  * We cannot define these in ncurses_cfg.h, since they require parameters to be
- * passed (that is non-portable).  If you happen to be using gcc with warnings
- * enabled, define
- *	GCC_PRINTF
- *	GCC_SCANF
- * to improve checking of calls to printw(), etc.
+ * passed (that is non-portable).
  */
 #ifndef GCC_PRINTFLIKE
-#if defined(GCC_PRINTF) && !defined(printf)
+#ifndef printf
 #define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
 #else
 #define GCC_PRINTFLIKE(fmt,var) /*nothing*/
@@ -544,7 +582,7 @@
 #endif
 
 #ifndef GCC_SCANFLIKE
-#if defined(GCC_SCANF) && !defined(scanf)
+#ifndef scanf
 #define GCC_SCANFLIKE(fmt,var)  __attribute__((format(scanf,fmt,var)))
 #else
 #define GCC_SCANFLIKE(fmt,var)  /*nothing*/
@@ -559,6 +597,13 @@
 #define	GCC_UNUSED /* nothing */
 #endif
 
+#undef  GCC_DEPRECATED
+#if (__GNUC__ - 0 > 3 || (__GNUC__ - 0 == 3 && __GNUC_MINOR__ - 0 >= 2)) && !defined(NCURSES_INTERNALS)
+#define GCC_DEPRECATED(msg) __attribute__((deprecated))
+#else
+#define GCC_DEPRECATED(msg) /* nothing */
+#endif
+
 /*
  * Curses uses a helper function.  Define our type for this to simplify
  * extending it for the sp-funcs feature.
@@ -680,7 +725,7 @@
 extern NCURSES_EXPORT(int) mvinstr (int, int, char *);			/* generated */
 extern NCURSES_EXPORT(int) mvprintw (int,int, const char *,...)		/* implemented */
 		GCC_PRINTFLIKE(3,4);
-extern NCURSES_EXPORT(int) mvscanw (int,int, NCURSES_CONST char *,...)	/* implemented */
+extern NCURSES_EXPORT(int) mvscanw (int,int, const char *,...)		/* implemented */
 		GCC_SCANFLIKE(3,4);
 extern NCURSES_EXPORT(int) mvvline (int, int, chtype, int);		/* generated */
 extern NCURSES_EXPORT(int) mvwaddch (WINDOW *, int, int, const chtype);	/* generated */
@@ -705,13 +750,13 @@
 extern NCURSES_EXPORT(int) mvwinstr (WINDOW *, int, int, char *);		/* generated */
 extern NCURSES_EXPORT(int) mvwprintw (WINDOW*,int,int, const char *,...)	/* implemented */
 		GCC_PRINTFLIKE(4,5);
-extern NCURSES_EXPORT(int) mvwscanw (WINDOW *,int,int, NCURSES_CONST char *,...)	/* implemented */
+extern NCURSES_EXPORT(int) mvwscanw (WINDOW *,int,int, const char *,...)	/* implemented */
 		GCC_SCANFLIKE(4,5);
 extern NCURSES_EXPORT(int) mvwvline (WINDOW *,int, int, chtype, int);	/* generated */
 extern NCURSES_EXPORT(int) napms (int);					/* implemented */
-extern NCURSES_EXPORT(WINDOW *) newpad (int,int);		       	/* implemented */
-extern NCURSES_EXPORT(SCREEN *) newterm (NCURSES_CONST char *,FILE *,FILE *);	/* implemented */
-extern NCURSES_EXPORT(WINDOW *) newwin (int,int,int,int);	       	/* implemented */
+extern NCURSES_EXPORT(WINDOW *) newpad (int,int);			/* implemented */
+extern NCURSES_EXPORT(SCREEN *) newterm (const char *,FILE *,FILE *);	/* implemented */
+extern NCURSES_EXPORT(WINDOW *) newwin (int,int,int,int);		/* implemented */
 extern NCURSES_EXPORT(int) nl (void);					/* implemented */
 extern NCURSES_EXPORT(int) nocbreak (void);				/* implemented */
 extern NCURSES_EXPORT(int) nodelay (WINDOW *,bool);			/* implemented */
@@ -739,7 +784,7 @@
 extern NCURSES_EXPORT(int) reset_shell_mode (void);			/* implemented */
 extern NCURSES_EXPORT(int) ripoffline (int, int (*)(WINDOW *, int));	/* implemented */
 extern NCURSES_EXPORT(int) savetty (void);				/* implemented */
-extern NCURSES_EXPORT(int) scanw (NCURSES_CONST char *,...)		/* implemented */
+extern NCURSES_EXPORT(int) scanw (const char *,...)			/* implemented */
 		GCC_SCANFLIKE(1,2);
 extern NCURSES_EXPORT(int) scr_dump (const char *);			/* implemented */
 extern NCURSES_EXPORT(int) scr_init (const char *);			/* implemented */
@@ -765,7 +810,7 @@
 extern NCURSES_EXPORT(int) slk_refresh (void);				/* implemented */
 extern NCURSES_EXPORT(int) slk_restore (void);				/* implemented */
 extern NCURSES_EXPORT(int) slk_set (int,const char *,int);		/* implemented */
-extern NCURSES_EXPORT(int) slk_touch (void);	      	       		/* implemented */
+extern NCURSES_EXPORT(int) slk_touch (void);				/* implemented */
 extern NCURSES_EXPORT(int) standout (void);				/* generated */
 extern NCURSES_EXPORT(int) standend (void);				/* generated */
 extern NCURSES_EXPORT(int) start_color (void);				/* implemented */
@@ -785,10 +830,14 @@
 extern NCURSES_EXPORT(int) vidattr (chtype);				/* implemented */
 extern NCURSES_EXPORT(int) vidputs (chtype, NCURSES_OUTC);		/* implemented */
 extern NCURSES_EXPORT(int) vline (chtype, int);				/* generated */
-extern NCURSES_EXPORT(int) vwprintw (WINDOW *, const char *,va_list);	/* implemented */
-extern NCURSES_EXPORT(int) vw_printw (WINDOW *, const char *,va_list);	/* generated */
-extern NCURSES_EXPORT(int) vwscanw (WINDOW *, NCURSES_CONST char *,va_list);	/* implemented */
-extern NCURSES_EXPORT(int) vw_scanw (WINDOW *, NCURSES_CONST char *,va_list);	/* generated */
+extern NCURSES_EXPORT(int) vwprintw (WINDOW *, const char *, va_list) GCC_DEPRECATED(use vw_printw)	/* implemented */
+		GCC_PRINTFLIKE(2,0);
+extern NCURSES_EXPORT(int) vw_printw (WINDOW *, const char *, va_list)	/* implemented */
+		GCC_PRINTFLIKE(2,0);	
+extern NCURSES_EXPORT(int) vwscanw (WINDOW *, const char *, va_list) GCC_DEPRECATED(use vw_scanw)	/* implemented */
+		GCC_SCANFLIKE(2,0);
+extern NCURSES_EXPORT(int) vw_scanw (WINDOW *, const char *, va_list)	/* implemented */
+		GCC_SCANFLIKE(2,0);
 extern NCURSES_EXPORT(int) waddch (WINDOW *, const chtype);		/* implemented */
 extern NCURSES_EXPORT(int) waddchnstr (WINDOW *,const chtype *,int);	/* implemented */
 extern NCURSES_EXPORT(int) waddchstr (WINDOW *,const chtype *);		/* generated */
@@ -834,7 +883,7 @@
 		GCC_PRINTFLIKE(2,3);
 extern NCURSES_EXPORT(int) wredrawln (WINDOW *,int,int);		/* implemented */
 extern NCURSES_EXPORT(int) wrefresh (WINDOW *);				/* implemented */
-extern NCURSES_EXPORT(int) wscanw (WINDOW *, NCURSES_CONST char *,...)	/* implemented */
+extern NCURSES_EXPORT(int) wscanw (WINDOW *, const char *,...)		/* implemented */
 		GCC_SCANFLIKE(2,3);
 extern NCURSES_EXPORT(int) wscrl (WINDOW *,int);			/* implemented */
 extern NCURSES_EXPORT(int) wsetscrreg (WINDOW *,int,int);		/* implemented */
@@ -849,19 +898,20 @@
 /*
  * These are also declared in <term.h>:
  */
-extern NCURSES_EXPORT(int) tigetflag (NCURSES_CONST char *);		/* implemented */
-extern NCURSES_EXPORT(int) tigetnum (NCURSES_CONST char *);		/* implemented */
-extern NCURSES_EXPORT(char *) tigetstr (NCURSES_CONST char *);		/* implemented */
+extern NCURSES_EXPORT(int) tigetflag (const char *);			/* implemented */
+extern NCURSES_EXPORT(int) tigetnum (const char *);			/* implemented */
+extern NCURSES_EXPORT(char *) tigetstr (const char *);			/* implemented */
 extern NCURSES_EXPORT(int) putp (const char *);				/* implemented */
 
 #if NCURSES_TPARM_VARARGS
-extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, ...);	/* special */
+extern NCURSES_EXPORT(char *) tparm (const char *, ...);		/* special */
 #else
-extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG);	/* special */
-extern NCURSES_EXPORT(char *) tparm_varargs (NCURSES_CONST char *, ...);	/* special */
+extern NCURSES_EXPORT(char *) tparm (const char *, NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG);	/* special */
 #endif
 
 extern NCURSES_EXPORT(char *) tiparm (const char *, ...);		/* special */
+extern NCURSES_EXPORT(char *) tiparm_s (int, int, const char *, ...);	/* special */
+extern NCURSES_EXPORT(int) tiscan_s (int *, int *, const char *);	/* special */
 
 /*
  * These functions are not in X/Open, but we use them in macro definitions:
@@ -891,25 +941,43 @@
 #define NCURSES_EXT_FUNCS @NCURSES_PATCH@
 typedef int (*NCURSES_WINDOW_CB)(WINDOW *, void *);
 typedef int (*NCURSES_SCREEN_CB)(SCREEN *, void *);
-extern NCURSES_EXPORT(bool) is_term_resized (int, int);
-extern NCURSES_EXPORT(char *) keybound (int, int);
-extern NCURSES_EXPORT(const char *) curses_version (void);
+extern NCURSES_EXPORT(int) alloc_pair (int, int);
 extern NCURSES_EXPORT(int) assume_default_colors (int, int);
+extern NCURSES_EXPORT(const char *) curses_version (void);
 extern NCURSES_EXPORT(int) define_key (const char *, int);
+extern NCURSES_EXPORT(int) extended_color_content(int, int *, int *, int *);
+extern NCURSES_EXPORT(int) extended_pair_content(int, int *, int *);
+extern NCURSES_EXPORT(int) extended_slk_color(int);
+extern NCURSES_EXPORT(int) find_pair (int, int);
+extern NCURSES_EXPORT(int) free_pair (int);
 extern NCURSES_EXPORT(int) get_escdelay (void);
+extern NCURSES_EXPORT(int) init_extended_color(int, int, int, int);
+extern NCURSES_EXPORT(int) init_extended_pair(int, int, int);
+extern NCURSES_EXPORT(int) is_cbreak(void);
+extern NCURSES_EXPORT(int) is_echo(void);
+extern NCURSES_EXPORT(int) is_nl(void);
+extern NCURSES_EXPORT(int) is_raw(void);
+extern NCURSES_EXPORT(bool) is_term_resized (int, int);
 extern NCURSES_EXPORT(int) key_defined (const char *);
+extern NCURSES_EXPORT(char *) keybound (int, int);
 extern NCURSES_EXPORT(int) keyok (int, bool);
+extern NCURSES_EXPORT(void) nofilter(void);
+extern NCURSES_EXPORT(void) reset_color_pairs (void);
 extern NCURSES_EXPORT(int) resize_term (int, int);
 extern NCURSES_EXPORT(int) resizeterm (int, int);
 extern NCURSES_EXPORT(int) set_escdelay (int);
 extern NCURSES_EXPORT(int) set_tabsize (int);
 extern NCURSES_EXPORT(int) use_default_colors (void);
-extern NCURSES_EXPORT(int) use_extended_names (bool);
 extern NCURSES_EXPORT(int) use_legacy_coding (int);
 extern NCURSES_EXPORT(int) use_screen (SCREEN *, NCURSES_SCREEN_CB, void *);
 extern NCURSES_EXPORT(int) use_window (WINDOW *, NCURSES_WINDOW_CB, void *);
 extern NCURSES_EXPORT(int) wresize (WINDOW *, int, int);
-extern NCURSES_EXPORT(void) nofilter(void);
+
+#if @NCURSES_XNAMES@
+#undef  NCURSES_XNAMES
+#define NCURSES_XNAMES @NCURSES_XNAMES@
+extern NCURSES_EXPORT(int) use_extended_names (bool);
+#endif
 
 /*
  * These extensions provide access to information stored in the WINDOW even
@@ -981,7 +1049,7 @@
 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(mvcur) (SCREEN*, int, int, int, int); /* implemented:SP_FUNC */
 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(napms) (SCREEN*, int); /* implemented:SP_FUNC */
 extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newpad) (SCREEN*, int, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(SCREEN *) NCURSES_SP_NAME(newterm) (SCREEN*, NCURSES_CONST char *, FILE *, FILE *); /* implemented:SP_FUNC */
+extern NCURSES_EXPORT(SCREEN *) NCURSES_SP_NAME(newterm) (SCREEN*, const char *, FILE *, FILE *); /* implemented:SP_FUNC */
 extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newwin) (SCREEN*, int, int, int, int); /* implemented:SP_FUNC */
 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nl) (SCREEN*); /* implemented:SP_FUNC */
 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nocbreak) (SCREEN*); /* implemented:SP_FUNC */
@@ -1024,14 +1092,27 @@
 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vidattr) (SCREEN*, chtype);	/* implemented:SP_FUNC */
 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vidputs) (SCREEN*, chtype, NCURSES_SP_OUTC); /* implemented:SP_FUNC */
 #if @NCURSES_EXT_FUNCS@
-extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(keybound) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(alloc_pair) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(assume_default_colors) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(define_key) (SCREEN*, const char *, int);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(extended_color_content) (SCREEN*, int, int *, int *, int *);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(extended_pair_content) (SCREEN*, int, int *, int *);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(extended_slk_color) (SCREEN*, int);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(find_pair) (SCREEN*, int, int); /* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(free_pair) (SCREEN*, int); /* implemented:EXT_SP_FUNC */
 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(get_escdelay) (SCREEN*);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_extended_color) (SCREEN*, int, int, int, int);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_extended_pair) (SCREEN*, int, int, int);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(is_cbreak) (SCREEN*);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(is_echo) (SCREEN*);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(is_nl) (SCREEN*);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(is_raw) (SCREEN*);	/* implemented:EXT_SP_FUNC */
 extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(is_term_resized) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(key_defined) (SCREEN*, const char *);	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(keybound) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(keyok) (SCREEN*, int, bool);	/* implemented:EXT_SP_FUNC */
 extern NCURSES_EXPORT(void) NCURSES_SP_NAME(nofilter) (SCREEN*); /* implemented */	/* implemented:EXT_SP_FUNC */
+extern NCURSES_EXPORT(void) NCURSES_SP_NAME(reset_color_pairs) (SCREEN*); /* implemented:EXT_SP_FUNC */
 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resize_term) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resizeterm) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(set_escdelay) (SCREEN*, int);	/* implemented:EXT_SP_FUNC */
@@ -1085,7 +1166,7 @@
  * These pseudo functions are always implemented as macros:
  */
 
-#define getyx(win,y,x)   	(y = getcury(win), x = getcurx(win))
+#define getyx(win,y,x)		(y = getcury(win), x = getcurx(win))
 #define getbegyx(win,y,x)	(y = getbegy(win), x = getbegx(win))
 #define getmaxyx(win,y,x)	(y = getmaxy(win), x = getmaxx(win))
 #define getparyx(win,y,x)	(y = getpary(win), x = getparx(win))
@@ -1128,36 +1209,40 @@
 
 /* It seems older SYSV curses versions define these */
 #if !NCURSES_OPAQUE
-#define getattrs(win)		NCURSES_CAST(int, (win) ? (win)->_attrs : A_NORMAL)
-#define getcurx(win)		((win) ? (win)->_curx : ERR)
-#define getcury(win)		((win) ? (win)->_cury : ERR)
-#define getbegx(win)		((win) ? (win)->_begx : ERR)
-#define getbegy(win)		((win) ? (win)->_begy : ERR)
-#define getmaxx(win)		((win) ? ((win)->_maxx + 1) : ERR)
-#define getmaxy(win)		((win) ? ((win)->_maxy + 1) : ERR)
-#define getparx(win)		((win) ? (win)->_parx : ERR)
-#define getpary(win)		((win) ? (win)->_pary : ERR)
+#define getattrs(win)		NCURSES_CAST(int, NCURSES_OK_ADDR(win) ? (win)->_attrs : A_NORMAL)
+#define getcurx(win)		(NCURSES_OK_ADDR(win) ? (win)->_curx : ERR)
+#define getcury(win)		(NCURSES_OK_ADDR(win) ? (win)->_cury : ERR)
+#define getbegx(win)		(NCURSES_OK_ADDR(win) ? (win)->_begx : ERR)
+#define getbegy(win)		(NCURSES_OK_ADDR(win) ? (win)->_begy : ERR)
+#define getmaxx(win)		(NCURSES_OK_ADDR(win) ? ((win)->_maxx + 1) : ERR)
+#define getmaxy(win)		(NCURSES_OK_ADDR(win) ? ((win)->_maxy + 1) : ERR)
+#define getparx(win)		(NCURSES_OK_ADDR(win) ? (win)->_parx : ERR)
+#define getpary(win)		(NCURSES_OK_ADDR(win) ? (win)->_pary : ERR)
 #endif /* NCURSES_OPAQUE */
 
-#define wstandout(win)      	(wattrset(win,A_STANDOUT))
-#define wstandend(win)      	(wattrset(win,A_NORMAL))
+#define wstandout(win)		(wattrset(win,A_STANDOUT))
+#define wstandend(win)		(wattrset(win,A_NORMAL))
 
 #define wattron(win,at)		wattr_on(win, NCURSES_CAST(attr_t, at), NULL)
 #define wattroff(win,at)	wattr_off(win, NCURSES_CAST(attr_t, at), NULL)
 
 #if !NCURSES_OPAQUE
+#if NCURSES_WATTR_MACROS
 #if NCURSES_WIDECHAR && @NCURSES_EXT_COLORS@
-#define wattrset(win,at)	((win) \
-				  ? ((win)->_color = NCURSES_CAST(int, PAIR_NUMBER(at)), \
-                                     (win)->_attrs = NCURSES_CAST(attr_t, at), \
-                                     OK) \
-				  : ERR)
+#define wattrset(win,at) \
+	(NCURSES_OK_ADDR(win) \
+	  ? ((win)->_color = NCURSES_CAST(int, PAIR_NUMBER(at)), \
+	     (win)->_attrs = NCURSES_CAST(attr_t, at), \
+	     OK) \
+	  : ERR)
 #else
-#define wattrset(win,at)        ((win) \
-				  ? ((win)->_attrs = NCURSES_CAST(attr_t, at), \
-				     OK) \
-				  : ERR)
+#define wattrset(win,at) \
+	(NCURSES_OK_ADDR(win) \
+	  ? ((win)->_attrs = NCURSES_CAST(attr_t, at), \
+	     OK) \
+	  : ERR)
 #endif
+#endif /* NCURSES_WATTR_MACROS */
 #endif /* NCURSES_OPAQUE */
 
 #define scroll(win)		wscrl(win,1)
@@ -1176,7 +1261,7 @@
 #define winsstr(w, s)		winsnstr(w, s, -1)
 
 #if !NCURSES_OPAQUE
-#define redrawwin(win)		wredrawln(win, 0, ((win) ? (win)->_maxy+1 : -1))
+#define redrawwin(win)		wredrawln(win, 0, (NCURSES_OK_ADDR(win) ? (win)->_maxy+1 : -1))
 #endif /* NCURSES_OPAQUE */
 
 #define waddstr(win,str)	waddnstr(win,str,-1)
@@ -1185,7 +1270,7 @@
 /*
  * These apply to the first 256 color pairs.
  */
-#define COLOR_PAIR(n)	NCURSES_BITS((n), 0)
+#define COLOR_PAIR(n)	(NCURSES_BITS((n), 0) & A_COLOR)
 #define PAIR_NUMBER(a)	(NCURSES_CAST(int,((NCURSES_CAST(unsigned long,(a)) & A_COLOR) >> NCURSES_ATTR_SHIFT)))
 
 /*
@@ -1197,13 +1282,13 @@
 #define addchstr(str)		waddchstr(stdscr,(str))
 #define addnstr(str,n)		waddnstr(stdscr,(str),(n))
 #define addstr(str)		waddnstr(stdscr,(str),-1)
-#define attroff(at)		wattroff(stdscr,(at))
-#define attron(at)		wattron(stdscr,(at))
-#define attrset(at)		wattrset(stdscr,(at))
 #define attr_get(ap,cp,o)	wattr_get(stdscr,(ap),(cp),(o))
 #define attr_off(a,o)		wattr_off(stdscr,(a),(o))
 #define attr_on(a,o)		wattr_on(stdscr,(a),(o))
 #define attr_set(a,c,o)		wattr_set(stdscr,(a),(c),(o))
+#define attroff(at)		wattroff(stdscr,(at))
+#define attron(at)		wattron(stdscr,(at))
+#define attrset(at)		wattrset(stdscr,(at))
 #define bkgd(ch)		wbkgd(stdscr,(ch))
 #define bkgdset(ch)		wbkgdset(stdscr,(ch))
 #define chgat(n,a,c,o)		wchgat(stdscr,(n),(a),(c),(o))
@@ -1246,8 +1331,8 @@
 #define mvwaddchstr(win,y,x,str)	(wmove((win),(y),(x)) == ERR ? ERR : waddchnstr((win),(str),-1))
 #define mvwaddnstr(win,y,x,str,n)	(wmove((win),(y),(x)) == ERR ? ERR : waddnstr((win),(str),(n)))
 #define mvwaddstr(win,y,x,str)		(wmove((win),(y),(x)) == ERR ? ERR : waddnstr((win),(str),-1))
-#define mvwdelch(win,y,x)		(wmove((win),(y),(x)) == ERR ? ERR : wdelch(win))
 #define mvwchgat(win,y,x,n,a,c,o)	(wmove((win),(y),(x)) == ERR ? ERR : wchgat((win),(n),(a),(c),(o)))
+#define mvwdelch(win,y,x)		(wmove((win),(y),(x)) == ERR ? ERR : wdelch(win))
 #define mvwgetch(win,y,x)		(wmove((win),(y),(x)) == ERR ? ERR : wgetch(win))
 #define mvwgetnstr(win,y,x,str,n)	(wmove((win),(y),(x)) == ERR ? ERR : wgetnstr((win),(str),(n)))
 #define mvwgetstr(win,y,x,str)		(wmove((win),(y),(x)) == ERR ? ERR : wgetstr((win),(str)))
@@ -1287,31 +1372,53 @@
  * Some wide-character functions can be implemented without the extensions.
  */
 #if !NCURSES_OPAQUE
-#define getbkgd(win)                    ((win) ? ((win)->_bkgd) : 0)
+#define getbkgd(win)                    (NCURSES_OK_ADDR(win) ? ((win)->_bkgd) : 0)
 #endif /* NCURSES_OPAQUE */
 
 #define slk_attr_off(a,v)		((v) ? ERR : slk_attroff(a))
 #define slk_attr_on(a,v)		((v) ? ERR : slk_attron(a))
 
 #if !NCURSES_OPAQUE
+#if NCURSES_WATTR_MACROS
 #if NCURSES_WIDECHAR && @NCURSES_EXT_COLORS@
-#define wattr_set(win,a,p,opts)		(((win) \
-					  ? ((win)->_attrs = ((a) & ~A_COLOR), \
-					     (win)->_color = (p)) \
-					  : OK), \
-					 OK)
-#define wattr_get(win,a,p,opts)		((void)(((a) != (void *)0) ? (*(a) = (win) ? (win)->_attrs : 0) : OK), \
-					 (void)(((p) != (void *)0) ? (*(p) = (NCURSES_PAIRS_T) ((win) ? (win)->_color : 0)) : OK), \
-					 OK)
-#else
-#define wattr_set(win,a,p,opts)		(((win) \
-					  ? ((win)->_attrs = (((a) & ~A_COLOR) | (attr_t)COLOR_PAIR(p))) \
-					  : OK), \
-					 OK)
-#define wattr_get(win,a,p,opts)		((void)(((a) != (void *)0) ? (*(a) = (win) ? (win)->_attrs : 0) : OK), \
-					 (void)(((p) != (void *)0) ? (*(p) = (NCURSES_PAIRS_T) ((win) ? PAIR_NUMBER((win)->_attrs) : 0)) : OK), \
-					 OK)
-#endif
+#define wattr_set(win,a,p,opts) \
+	(NCURSES_OK_ADDR(win) \
+	 ? ((void)((win)->_attrs = ((a) & ~A_COLOR), \
+		   (win)->_color = (opts) ? *(int *)(opts) : (p)), \
+	    OK) \
+	 : ERR)
+#define wattr_get(win,a,p,opts) \
+	(NCURSES_OK_ADDR(win) \
+	 ? ((void)(NCURSES_OK_ADDR(a) \
+		   ? (*(a) = (win)->_attrs) \
+		   : OK), \
+	    (void)(NCURSES_OK_ADDR(p) \
+		   ? (*(p) = (NCURSES_PAIRS_T) (win)->_color) \
+		   : OK), \
+	    (void)(NCURSES_OK_ADDR(opts) \
+		   ? (*(int *)(opts) = (win)->_color) \
+		   : OK), \
+	    OK) \
+	 : ERR)
+#else /* !(NCURSES_WIDECHAR && NCURSES_EXE_COLORS) */
+#define wattr_set(win,a,p,opts) \
+	 (NCURSES_OK_ADDR(win) \
+	  ? ((void)((win)->_attrs = (((a) & ~A_COLOR) | \
+				     (attr_t)COLOR_PAIR(p))), \
+	     OK) \
+	  : ERR)
+#define wattr_get(win,a,p,opts) \
+	(NCURSES_OK_ADDR(win) \
+	 ? ((void)(NCURSES_OK_ADDR(a) \
+		   ? (*(a) = (win)->_attrs) \
+		   : OK), \
+	    (void)(NCURSES_OK_ADDR(p) \
+		   ? (*(p) = (NCURSES_PAIRS_T) PAIR_NUMBER((win)->_attrs)) \
+		   : OK), \
+	    OK) \
+	 : ERR)
+#endif /* (NCURSES_WIDECHAR && NCURSES_EXE_COLORS) */
+#endif /* NCURSES_WATTR_MACROS */
 #endif /* NCURSES_OPAQUE */
 
 /*
@@ -1320,8 +1427,8 @@
  * use POSIX stdarg.h.  The ncurses versions of vwprintw/vwscanw already
  * use stdarg.h, so...
  */
-#define vw_printw		vwprintw
-#define vw_scanw		vwscanw
+/* define vw_printw		vwprintw */
+/* define vw_scanw		vwscanw */
 
 /*
  * Export fallback function for use in C++ binding.
@@ -1336,24 +1443,30 @@
  */
 #if @NCURSES_EXT_FUNCS@
 #if !NCURSES_OPAQUE
-#define is_cleared(win)		((win) ? (win)->_clear : FALSE)
-#define is_idcok(win)		((win) ? (win)->_idcok : FALSE)
-#define is_idlok(win)		((win) ? (win)->_idlok : FALSE)
-#define is_immedok(win)		((win) ? (win)->_immed : FALSE)
-#define is_keypad(win)		((win) ? (win)->_use_keypad : FALSE)
-#define is_leaveok(win)		((win) ? (win)->_leaveok : FALSE)
-#define is_nodelay(win)		((win) ? ((win)->_delay == 0) : FALSE)
-#define is_notimeout(win)	((win) ? (win)->_notimeout : FALSE)
-#define is_pad(win)		((win) ? ((win)->_flags & _ISPAD) != 0 : FALSE)
-#define is_scrollok(win)	((win) ? (win)->_scroll : FALSE)
-#define is_subwin(win)		((win) ? ((win)->_flags & _SUBWIN) != 0 : FALSE)
-#define is_syncok(win)		((win) ? (win)->_sync : FALSE)
-#define wgetdelay(win)		((win) ? (win)->_delay : 0)
-#define wgetparent(win)		((win) ? (win)->_parent : 0)
-#define wgetscrreg(win,t,b)	((win) ? (*(t) = (win)->_regtop, *(b) = (win)->_regbottom, OK) : ERR)
+#define is_cleared(win)		(NCURSES_OK_ADDR(win) ? (win)->_clear : FALSE)
+#define is_idcok(win)		(NCURSES_OK_ADDR(win) ? (win)->_idcok : FALSE)
+#define is_idlok(win)		(NCURSES_OK_ADDR(win) ? (win)->_idlok : FALSE)
+#define is_immedok(win)		(NCURSES_OK_ADDR(win) ? (win)->_immed : FALSE)
+#define is_keypad(win)		(NCURSES_OK_ADDR(win) ? (win)->_use_keypad : FALSE)
+#define is_leaveok(win)		(NCURSES_OK_ADDR(win) ? (win)->_leaveok : FALSE)
+#define is_nodelay(win)		(NCURSES_OK_ADDR(win) ? ((win)->_delay == 0) : FALSE)
+#define is_notimeout(win)	(NCURSES_OK_ADDR(win) ? (win)->_notimeout : FALSE)
+#define is_pad(win)		(NCURSES_OK_ADDR(win) ? ((win)->_flags & _ISPAD) != 0 : FALSE)
+#define is_scrollok(win)	(NCURSES_OK_ADDR(win) ? (win)->_scroll : FALSE)
+#define is_subwin(win)		(NCURSES_OK_ADDR(win) ? ((win)->_flags & _SUBWIN) != 0 : FALSE)
+#define is_syncok(win)		(NCURSES_OK_ADDR(win) ? (win)->_sync : FALSE)
+#define wgetdelay(win)		(NCURSES_OK_ADDR(win) ? (win)->_delay : 0)
+#define wgetparent(win)		(NCURSES_OK_ADDR(win) ? (win)->_parent : 0)
+#define wgetscrreg(win,t,b)	(NCURSES_OK_ADDR(win) ? (*(t) = (win)->_regtop, *(b) = (win)->_regbottom, OK) : ERR)
 #endif
 #endif
 
+/*
+ * X/Open says this returns a bool; SVr4 also checked for out-of-range line.
+ * The macro provides compatibility:
+ */
+#define is_linetouched(w,l) ((!(w) || ((l) > getmaxy(w)) || ((l) < 0)) ? ERR : (is_linetouched)((w),(l)))
+
 #endif /* NCURSES_NOMACROS */
 
 /*
diff --git a/include/curses.head b/include/curses.head
deleted file mode 100644
index 1b23e5f..0000000
--- a/include/curses.head
+++ /dev/null
@@ -1,1422 +0,0 @@
-/****************************************************************************
- * Copyright (c) 1998-2013,2014 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            *
- * "Software"), to deal in the Software without restriction, including      *
- * without limitation the rights to use, copy, modify, merge, publish,      *
- * distribute, distribute with modifications, sublicense, and/or sell       *
- * copies of the Software, and to permit persons to whom the Software is    *
- * furnished to do so, subject to the following conditions:                 *
- *                                                                          *
- * The above copyright notice and this permission notice shall be included  *
- * in all copies or substantial portions of the Software.                   *
- *                                                                          *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
- * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
- * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
- *                                                                          *
- * Except as contained in this notice, the name(s) of the above copyright   *
- * holders shall not be used in advertising or otherwise to promote the     *
- * sale, use or other dealings in this Software without prior written       *
- * authorization.                                                           *
- ****************************************************************************/
-
-/****************************************************************************
- *  Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995               *
- *     and: Eric S. Raymond <esr@snark.thyrsus.com>                         *
- *     and: Thomas E. Dickey                        1996-on                 *
- ****************************************************************************/
-
-/* $Id: curses.h.in,v 1.241 2014/08/09 20:39:44 tom Exp $ */
-
-#ifndef __NCURSES_H
-#define __NCURSES_H
-
-#define CURSES 1
-#define CURSES_H 1
-
-/* These are defined only in curses.h, and are used for conditional compiles */
-#define NCURSES_VERSION_MAJOR 6
-#define NCURSES_VERSION_MINOR 0
-#define NCURSES_VERSION_PATCH 20150808
-
-/* This is defined in more than one ncurses header, for identification */
-#undef  NCURSES_VERSION
-#define NCURSES_VERSION "6.0"
-
-/*
- * Identify the mouse encoding version.
- */
-#define NCURSES_MOUSE_VERSION 2
-
-/*
- * Definitions to facilitate DLL's.
- */
-#include <ncurses_dll.h>
-
-#if 1
-#include <stdint.h>
-#endif
-
-/*
- * User-definable tweak to disable the include of <stdbool.h>.
- */
-#ifndef NCURSES_ENABLE_STDBOOL_H
-#define NCURSES_ENABLE_STDBOOL_H 1
-#endif
-
-/*
- * NCURSES_ATTR_T is used to quiet compiler warnings when building ncurses
- * configured using --disable-macros.
- */
-#ifndef NCURSES_ATTR_T
-#define NCURSES_ATTR_T int
-#endif
-
-/*
- * Expands to 'const' if ncurses is configured using --enable-const.  Note that
- * doing so makes it incompatible with other implementations of X/Open Curses.
- */
-#undef  NCURSES_CONST
-#define NCURSES_CONST const
-
-#undef NCURSES_INLINE
-#define NCURSES_INLINE inline
-
-/*
- * The internal type used for color values, and for color-pairs.  The latter
- * allows the curses library to enumerate the combinations of foreground and
- * background colors used by an application, and is normally the product of the
- * total foreground and background colors.
- *
- * X/Open uses "short" for both of these types, ultimately because they are
- * numbers from the terminal database, which uses 16-bit signed values.
- */
-#undef	NCURSES_COLOR_T
-#define	NCURSES_COLOR_T short
-
-#undef	NCURSES_PAIRS_T
-#define	NCURSES_PAIRS_T short
-
-/*
- * Definition used to make WINDOW and similar structs opaque.
- */
-#ifndef NCURSES_OPAQUE
-#define NCURSES_OPAQUE 0
-#endif
-
-/*
- * The reentrant code relies on the opaque setting, but adds features.
- */
-#ifndef NCURSES_REENTRANT
-#define NCURSES_REENTRANT 0
-#endif
-
-/*
- * Control whether bindings for interop support are added.
- */
-#undef	NCURSES_INTEROP_FUNCS
-#define	NCURSES_INTEROP_FUNCS 1
-
-/*
- * The internal type used for window dimensions.
- */
-#undef	NCURSES_SIZE_T
-#define	NCURSES_SIZE_T short
-
-/*
- * Control whether tparm() supports varargs or fixed-parameter list.
- */
-#undef NCURSES_TPARM_VARARGS
-#define NCURSES_TPARM_VARARGS 1
-
-/*
- * Control type used for tparm's arguments.  While X/Open equates long and
- * char* values, this is not always workable for 64-bit platforms.
- */
-#undef NCURSES_TPARM_ARG
-#define NCURSES_TPARM_ARG intptr_t
-
-/*
- * NCURSES_CH_T is used in building the library, but not used otherwise in
- * this header file, since that would make the normal/wide-character versions
- * of the header incompatible.
- */
-#undef	NCURSES_CH_T
-#define NCURSES_CH_T chtype
-
-#if 1 && defined(_LP64)
-typedef unsigned chtype;
-typedef unsigned mmask_t;
-#else
-typedef uint32_t chtype;
-typedef uint32_t mmask_t;
-#endif
-
-/*
- * We need FILE, etc.  Include this before checking any feature symbols.
- */
-#include <stdio.h>
-
-/*
- * With XPG4, you must define _XOPEN_SOURCE_EXTENDED, it is redundant (or
- * conflicting) when _XOPEN_SOURCE is 500 or greater.  If NCURSES_WIDECHAR is
- * not already defined, e.g., if the platform relies upon nonstandard feature
- * test macros, define it at this point if the standard feature test macros
- * indicate that it should be defined.
- */
-#ifndef NCURSES_WIDECHAR
-#if defined(_XOPEN_SOURCE_EXTENDED) || (defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0 >= 500))
-#define NCURSES_WIDECHAR 1
-#else
-#define NCURSES_WIDECHAR 0
-#endif
-#endif /* NCURSES_WIDECHAR */
-
-#include <stdarg.h>	/* we need va_list */
-#if NCURSES_WIDECHAR
-#include <stddef.h>	/* we want wchar_t */
-#endif
-
-/* X/Open and SVr4 specify that curses implements 'bool'.  However, C++ may also
- * implement it.  If so, we must use the C++ compiler's type to avoid conflict
- * with other interfaces.
- *
- * A further complication is that <stdbool.h> may declare 'bool' to be a
- * different type, such as an enum which is not necessarily compatible with
- * C++.  If we have <stdbool.h>, make 'bool' a macro, so users may #undef it.
- * Otherwise, let it remain a typedef to avoid conflicts with other #define's.
- * In either case, make a typedef for NCURSES_BOOL which can be used if needed
- * from either C or C++.
- */
-
-#undef TRUE
-#define TRUE    1
-
-#undef FALSE
-#define FALSE   0
-
-typedef unsigned NCURSES_BOOL;
-
-#if defined(__cplusplus)	/* __cplusplus, etc. */
-
-/* use the C++ compiler's bool type */
-#define NCURSES_BOOL bool
-
-#else			/* c89, c99, etc. */
-
-#if NCURSES_ENABLE_STDBOOL_H
-#include <stdbool.h>
-/* use whatever the C compiler decides bool really is */
-#define NCURSES_BOOL bool
-#else
-/* there is no predefined bool - use our own */
-#undef bool
-#define bool NCURSES_BOOL
-#endif
-
-#endif /* !__cplusplus, etc. */
-
-#ifdef __cplusplus
-extern "C" {
-#define NCURSES_CAST(type,value) static_cast<type>(value)
-#else
-#define NCURSES_CAST(type,value) (type)(value)
-#endif
-
-/*
- * X/Open attributes.  In the ncurses implementation, they are identical to the
- * A_ attributes.
- */
-#define WA_ATTRIBUTES	A_ATTRIBUTES
-#define WA_NORMAL	A_NORMAL
-#define WA_STANDOUT	A_STANDOUT
-#define WA_UNDERLINE	A_UNDERLINE
-#define WA_REVERSE	A_REVERSE
-#define WA_BLINK	A_BLINK
-#define WA_DIM		A_DIM
-#define WA_BOLD		A_BOLD
-#define WA_ALTCHARSET	A_ALTCHARSET
-#define WA_INVIS	A_INVIS
-#define WA_PROTECT	A_PROTECT
-#define WA_HORIZONTAL	A_HORIZONTAL
-#define WA_LEFT		A_LEFT
-#define WA_LOW		A_LOW
-#define WA_RIGHT	A_RIGHT
-#define WA_TOP		A_TOP
-#define WA_VERTICAL	A_VERTICAL
-
-#if 1
-#define WA_ITALIC	A_ITALIC	/* ncurses extension */
-#endif
-
-/* colors */
-#define COLOR_BLACK	0
-#define COLOR_RED	1
-#define COLOR_GREEN	2
-#define COLOR_YELLOW	3
-#define COLOR_BLUE	4
-#define COLOR_MAGENTA	5
-#define COLOR_CYAN	6
-#define COLOR_WHITE	7
-
-/* line graphics */
-
-#if 0 || NCURSES_REENTRANT
-NCURSES_WRAPPED_VAR(chtype*, acs_map);
-#define acs_map NCURSES_PUBLIC_VAR(acs_map())
-#else
-extern NCURSES_EXPORT_VAR(chtype) acs_map[];
-#endif
-
-#define NCURSES_ACS(c)	(acs_map[NCURSES_CAST(unsigned char,(c))])
-
-/* VT100 symbols begin here */
-#define ACS_ULCORNER	NCURSES_ACS('l') /* upper left corner */
-#define ACS_LLCORNER	NCURSES_ACS('m') /* lower left corner */
-#define ACS_URCORNER	NCURSES_ACS('k') /* upper right corner */
-#define ACS_LRCORNER	NCURSES_ACS('j') /* lower right corner */
-#define ACS_LTEE	NCURSES_ACS('t') /* tee pointing right */
-#define ACS_RTEE	NCURSES_ACS('u') /* tee pointing left */
-#define ACS_BTEE	NCURSES_ACS('v') /* tee pointing up */
-#define ACS_TTEE	NCURSES_ACS('w') /* tee pointing down */
-#define ACS_HLINE	NCURSES_ACS('q') /* horizontal line */
-#define ACS_VLINE	NCURSES_ACS('x') /* vertical line */
-#define ACS_PLUS	NCURSES_ACS('n') /* large plus or crossover */
-#define ACS_S1		NCURSES_ACS('o') /* scan line 1 */
-#define ACS_S9		NCURSES_ACS('s') /* scan line 9 */
-#define ACS_DIAMOND	NCURSES_ACS('`') /* diamond */
-#define ACS_CKBOARD	NCURSES_ACS('a') /* checker board (stipple) */
-#define ACS_DEGREE	NCURSES_ACS('f') /* degree symbol */
-#define ACS_PLMINUS	NCURSES_ACS('g') /* plus/minus */
-#define ACS_BULLET	NCURSES_ACS('~') /* bullet */
-/* Teletype 5410v1 symbols begin here */
-#define ACS_LARROW	NCURSES_ACS(',') /* arrow pointing left */
-#define ACS_RARROW	NCURSES_ACS('+') /* arrow pointing right */
-#define ACS_DARROW	NCURSES_ACS('.') /* arrow pointing down */
-#define ACS_UARROW	NCURSES_ACS('-') /* arrow pointing up */
-#define ACS_BOARD	NCURSES_ACS('h') /* board of squares */
-#define ACS_LANTERN	NCURSES_ACS('i') /* lantern symbol */
-#define ACS_BLOCK	NCURSES_ACS('0') /* solid square block */
-/*
- * These aren't documented, but a lot of System Vs have them anyway
- * (you can spot pprryyzz{{||}} in a lot of AT&T terminfo strings).
- * The ACS_names may not match AT&T's, our source didn't know them.
- */
-#define ACS_S3		NCURSES_ACS('p') /* scan line 3 */
-#define ACS_S7		NCURSES_ACS('r') /* scan line 7 */
-#define ACS_LEQUAL	NCURSES_ACS('y') /* less/equal */
-#define ACS_GEQUAL	NCURSES_ACS('z') /* greater/equal */
-#define ACS_PI		NCURSES_ACS('{') /* Pi */
-#define ACS_NEQUAL	NCURSES_ACS('|') /* not equal */
-#define ACS_STERLING	NCURSES_ACS('}') /* UK pound sign */
-
-/*
- * Line drawing ACS names are of the form ACS_trbl, where t is the top, r
- * is the right, b is the bottom, and l is the left.  t, r, b, and l might
- * be B (blank), S (single), D (double), or T (thick).  The subset defined
- * here only uses B and S.
- */
-#define ACS_BSSB	ACS_ULCORNER
-#define ACS_SSBB	ACS_LLCORNER
-#define ACS_BBSS	ACS_URCORNER
-#define ACS_SBBS	ACS_LRCORNER
-#define ACS_SBSS	ACS_RTEE
-#define ACS_SSSB	ACS_LTEE
-#define ACS_SSBS	ACS_BTEE
-#define ACS_BSSS	ACS_TTEE
-#define ACS_BSBS	ACS_HLINE
-#define ACS_SBSB	ACS_VLINE
-#define ACS_SSSS	ACS_PLUS
-
-#undef	ERR
-#define ERR     (-1)
-
-#undef	OK
-#define OK      (0)
-
-/* values for the _flags member */
-#define _SUBWIN         0x01	/* is this a sub-window? */
-#define _ENDLINE        0x02	/* is the window flush right? */
-#define _FULLWIN        0x04	/* is the window full-screen? */
-#define _SCROLLWIN      0x08	/* bottom edge is at screen bottom? */
-#define _ISPAD	        0x10	/* is this window a pad? */
-#define _HASMOVED       0x20	/* has cursor moved since last refresh? */
-#define _WRAPPED        0x40	/* cursor was just wrappped */
-
-/*
- * this value is used in the firstchar and lastchar fields to mark
- * unchanged lines
- */
-#define _NOCHANGE       -1
-
-/*
- * this value is used in the oldindex field to mark lines created by insertions
- * and scrolls.
- */
-#define _NEWINDEX	-1
-
-typedef struct screen  SCREEN;
-typedef struct _win_st WINDOW;
-
-typedef	chtype	attr_t;		/* ...must be at least as wide as chtype */
-
-#if NCURSES_WIDECHAR
-
-#if 0
-#ifdef mblen			/* libutf8.h defines it w/o undefining first */
-#undef mblen
-#endif
-#include <libutf8.h>
-#endif
-
-#if 0
-#include <wchar.h>		/* ...to get mbstate_t, etc. */
-#endif
-
-#if 0
-typedef unsigned short wchar_t;
-#endif
-
-#if 0
-typedef unsigned int wint_t;
-#endif
-
-/*
- * cchar_t stores an array of CCHARW_MAX wide characters.  The first is
- * normally a spacing character.  The others are non-spacing.  If those
- * (spacing and nonspacing) do not fill the array, a null L'\0' follows.
- * Otherwise, a null is assumed to follow when extracting via getcchar().
- */
-#define CCHARW_MAX	5
-typedef struct
-{
-    attr_t	attr;
-    wchar_t	chars[CCHARW_MAX];
-#if 0
-#undef NCURSES_EXT_COLORS
-#define NCURSES_EXT_COLORS 20150808
-    int		ext_color;	/* color pair, must be more than 16-bits */
-#endif
-}
-cchar_t;
-
-#endif /* NCURSES_WIDECHAR */
-
-#if !NCURSES_OPAQUE
-struct ldat;
-
-struct _win_st
-{
-	NCURSES_SIZE_T _cury, _curx; /* current cursor position */
-
-	/* window location and size */
-	NCURSES_SIZE_T _maxy, _maxx; /* maximums of x and y, NOT window size */
-	NCURSES_SIZE_T _begy, _begx; /* screen coords of upper-left-hand corner */
-
-	short   _flags;		/* window state flags */
-
-	/* attribute tracking */
-	attr_t  _attrs;		/* current attribute for non-space character */
-	chtype  _bkgd;		/* current background char/attribute pair */
-
-	/* option values set by user */
-	bool	_notimeout;	/* no time out on function-key entry? */
-	bool	_clear;		/* consider all data in the window invalid? */
-	bool	_leaveok;	/* OK to not reset cursor on exit? */
-	bool	_scroll;	/* OK to scroll this window? */
-	bool	_idlok;		/* OK to use insert/delete line? */
-	bool	_idcok;		/* OK to use insert/delete char? */
-	bool	_immed;		/* window in immed mode? (not yet used) */
-	bool	_sync;		/* window in sync mode? */
-	bool	_use_keypad;	/* process function keys into KEY_ symbols? */
-	int	_delay;		/* 0 = nodelay, <0 = blocking, >0 = delay */
-
-	struct ldat *_line;	/* the actual line data */
-
-	/* global screen state */
-	NCURSES_SIZE_T _regtop;	/* top line of scrolling region */
-	NCURSES_SIZE_T _regbottom; /* bottom line of scrolling region */
-
-	/* these are used only if this is a sub-window */
-	int	_parx;		/* x coordinate of this window in parent */
-	int	_pary;		/* y coordinate of this window in parent */
-	WINDOW	*_parent;	/* pointer to parent if a sub-window */
-
-	/* these are used only if this is a pad */
-	struct pdat
-	{
-	    NCURSES_SIZE_T _pad_y,      _pad_x;
-	    NCURSES_SIZE_T _pad_top,    _pad_left;
-	    NCURSES_SIZE_T _pad_bottom, _pad_right;
-	} _pad;
-
-	NCURSES_SIZE_T _yoffset; /* real begy is _begy + _yoffset */
-
-#if NCURSES_WIDECHAR
-	cchar_t  _bkgrnd;	/* current background char/attribute pair */
-#if 0
-	int	_color;		/* current color-pair for non-space character */
-#endif
-#endif
-};
-#endif /* NCURSES_OPAQUE */
-
-/*
- * This is an extension to support events...
- */
-#if 1
-#ifdef NCURSES_WGETCH_EVENTS
-#if !defined(__BEOS__) || defined(__HAIKU__)
-   /* Fix _nc_timed_wait() on BEOS... */
-#  define NCURSES_EVENT_VERSION	1
-#endif	/* !defined(__BEOS__) */
-
-/*
- * Bits to set in _nc_event.data.flags
- */
-#  define _NC_EVENT_TIMEOUT_MSEC	1
-#  define _NC_EVENT_FILE		2
-#  define _NC_EVENT_FILE_READABLE	2
-#  if 0					/* Not supported yet... */
-#    define _NC_EVENT_FILE_WRITABLE	4
-#    define _NC_EVENT_FILE_EXCEPTION	8
-#  endif
-
-typedef struct
-{
-    int type;
-    union
-    {
-	long timeout_msec;	/* _NC_EVENT_TIMEOUT_MSEC */
-	struct
-	{
-	    unsigned int flags;
-	    int fd;
-	    unsigned int result;
-	} fev;				/* _NC_EVENT_FILE */
-    } data;
-} _nc_event;
-
-typedef struct
-{
-    int count;
-    int result_flags;	/* _NC_EVENT_TIMEOUT_MSEC or _NC_EVENT_FILE_READABLE */
-    _nc_event *events[1];
-} _nc_eventlist;
-
-extern NCURSES_EXPORT(int) wgetch_events (WINDOW *, _nc_eventlist *);	/* experimental */
-extern NCURSES_EXPORT(int) wgetnstr_events (WINDOW *,char *,int,_nc_eventlist *);/* experimental */
-
-#endif /* NCURSES_WGETCH_EVENTS */
-#endif /* NCURSES_EXT_FUNCS */
-
-/*
- * GCC (and some other compilers) define '__attribute__'; we're using this
- * macro to alert the compiler to flag inconsistencies in printf/scanf-like
- * function calls.  Just in case '__attribute__' isn't defined, make a dummy.
- * Old versions of G++ do not accept it anyway, at least not consistently with
- * GCC.
- */
-#if !(defined(__GNUC__) || defined(__GNUG__) || defined(__attribute__))
-#define __attribute__(p) /* nothing */
-#endif
-
-/*
- * We cannot define these in ncurses_cfg.h, since they require parameters to be
- * passed (that is non-portable).  If you happen to be using gcc with warnings
- * enabled, define
- *	GCC_PRINTF
- *	GCC_SCANF
- * to improve checking of calls to printw(), etc.
- */
-#ifndef GCC_PRINTFLIKE
-#if defined(GCC_PRINTF) && !defined(printf)
-#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
-#else
-#define GCC_PRINTFLIKE(fmt,var) /*nothing*/
-#endif
-#endif
-
-#ifndef GCC_SCANFLIKE
-#if defined(GCC_SCANF) && !defined(scanf)
-#define GCC_SCANFLIKE(fmt,var)  __attribute__((format(scanf,fmt,var)))
-#else
-#define GCC_SCANFLIKE(fmt,var)  /*nothing*/
-#endif
-#endif
-
-#ifndef	GCC_NORETURN
-#define	GCC_NORETURN /* nothing */
-#endif
-
-#ifndef	GCC_UNUSED
-#define	GCC_UNUSED /* nothing */
-#endif
-
-/*
- * Curses uses a helper function.  Define our type for this to simplify
- * extending it for the sp-funcs feature.
- */
-typedef int (*NCURSES_OUTC)(int);
-
-/*
- * Function prototypes.  This is the complete X/Open Curses list of required
- * functions.  Those marked `generated' will have sources generated from the
- * macro definitions later in this file, in order to satisfy XPG4.2
- * requirements.
- */
-
-extern NCURSES_EXPORT(int) addch (const chtype);			/* generated */
-extern NCURSES_EXPORT(int) addchnstr (const chtype *, int);		/* generated */
-extern NCURSES_EXPORT(int) addchstr (const chtype *);			/* generated */
-extern NCURSES_EXPORT(int) addnstr (const char *, int);			/* generated */
-extern NCURSES_EXPORT(int) addstr (const char *);			/* generated */
-extern NCURSES_EXPORT(int) attroff (NCURSES_ATTR_T);			/* generated */
-extern NCURSES_EXPORT(int) attron (NCURSES_ATTR_T);			/* generated */
-extern NCURSES_EXPORT(int) attrset (NCURSES_ATTR_T);			/* generated */
-extern NCURSES_EXPORT(int) attr_get (attr_t *, NCURSES_PAIRS_T *, void *);	/* generated */
-extern NCURSES_EXPORT(int) attr_off (attr_t, void *);			/* generated */
-extern NCURSES_EXPORT(int) attr_on (attr_t, void *);			/* generated */
-extern NCURSES_EXPORT(int) attr_set (attr_t, NCURSES_PAIRS_T, void *);		/* generated */
-extern NCURSES_EXPORT(int) baudrate (void);				/* implemented */
-extern NCURSES_EXPORT(int) beep  (void);				/* implemented */
-extern NCURSES_EXPORT(int) bkgd (chtype);				/* generated */
-extern NCURSES_EXPORT(void) bkgdset (chtype);				/* generated */
-extern NCURSES_EXPORT(int) border (chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype);	/* generated */
-extern NCURSES_EXPORT(int) box (WINDOW *, chtype, chtype);		/* generated */
-extern NCURSES_EXPORT(bool) can_change_color (void);			/* implemented */
-extern NCURSES_EXPORT(int) cbreak (void);				/* implemented */
-extern NCURSES_EXPORT(int) chgat (int, attr_t, NCURSES_PAIRS_T, const void *);	/* generated */
-extern NCURSES_EXPORT(int) clear (void);				/* generated */
-extern NCURSES_EXPORT(int) clearok (WINDOW *,bool);			/* implemented */
-extern NCURSES_EXPORT(int) clrtobot (void);				/* generated */
-extern NCURSES_EXPORT(int) clrtoeol (void);				/* generated */
-extern NCURSES_EXPORT(int) color_content (NCURSES_COLOR_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*,NCURSES_COLOR_T*);	/* implemented */
-extern NCURSES_EXPORT(int) color_set (NCURSES_PAIRS_T,void*);			/* generated */
-extern NCURSES_EXPORT(int) COLOR_PAIR (int);				/* generated */
-extern NCURSES_EXPORT(int) copywin (const WINDOW*,WINDOW*,int,int,int,int,int,int,int);	/* implemented */
-extern NCURSES_EXPORT(int) curs_set (int);				/* implemented */
-extern NCURSES_EXPORT(int) def_prog_mode (void);			/* implemented */
-extern NCURSES_EXPORT(int) def_shell_mode (void);			/* implemented */
-extern NCURSES_EXPORT(int) delay_output (int);				/* implemented */
-extern NCURSES_EXPORT(int) delch (void);				/* generated */
-extern NCURSES_EXPORT(void) delscreen (SCREEN *);			/* implemented */
-extern NCURSES_EXPORT(int) delwin (WINDOW *);				/* implemented */
-extern NCURSES_EXPORT(int) deleteln (void);				/* generated */
-extern NCURSES_EXPORT(WINDOW *) derwin (WINDOW *,int,int,int,int);	/* implemented */
-extern NCURSES_EXPORT(int) doupdate (void);				/* implemented */
-extern NCURSES_EXPORT(WINDOW *) dupwin (WINDOW *);			/* implemented */
-extern NCURSES_EXPORT(int) echo (void);					/* implemented */
-extern NCURSES_EXPORT(int) echochar (const chtype);			/* generated */
-extern NCURSES_EXPORT(int) erase (void);				/* generated */
-extern NCURSES_EXPORT(int) endwin (void);				/* implemented */
-extern NCURSES_EXPORT(char) erasechar (void);				/* implemented */
-extern NCURSES_EXPORT(void) filter (void);				/* implemented */
-extern NCURSES_EXPORT(int) flash (void);				/* implemented */
-extern NCURSES_EXPORT(int) flushinp (void);				/* implemented */
-extern NCURSES_EXPORT(chtype) getbkgd (WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) getch (void);				/* generated */
-extern NCURSES_EXPORT(int) getnstr (char *, int);			/* generated */
-extern NCURSES_EXPORT(int) getstr (char *);				/* generated */
-extern NCURSES_EXPORT(WINDOW *) getwin (FILE *);			/* implemented */
-extern NCURSES_EXPORT(int) halfdelay (int);				/* implemented */
-extern NCURSES_EXPORT(bool) has_colors (void);				/* implemented */
-extern NCURSES_EXPORT(bool) has_ic (void);				/* implemented */
-extern NCURSES_EXPORT(bool) has_il (void);				/* implemented */
-extern NCURSES_EXPORT(int) hline (chtype, int);				/* generated */
-extern NCURSES_EXPORT(void) idcok (WINDOW *, bool);			/* implemented */
-extern NCURSES_EXPORT(int) idlok (WINDOW *, bool);			/* implemented */
-extern NCURSES_EXPORT(void) immedok (WINDOW *, bool);			/* implemented */
-extern NCURSES_EXPORT(chtype) inch (void);				/* generated */
-extern NCURSES_EXPORT(int) inchnstr (chtype *, int);			/* generated */
-extern NCURSES_EXPORT(int) inchstr (chtype *);				/* generated */
-extern NCURSES_EXPORT(WINDOW *) initscr (void);				/* implemented */
-extern NCURSES_EXPORT(int) init_color (NCURSES_COLOR_T,NCURSES_COLOR_T,NCURSES_COLOR_T,NCURSES_COLOR_T);	/* implemented */
-extern NCURSES_EXPORT(int) init_pair (NCURSES_PAIRS_T,NCURSES_COLOR_T,NCURSES_COLOR_T);		/* implemented */
-extern NCURSES_EXPORT(int) innstr (char *, int);			/* generated */
-extern NCURSES_EXPORT(int) insch (chtype);				/* generated */
-extern NCURSES_EXPORT(int) insdelln (int);				/* generated */
-extern NCURSES_EXPORT(int) insertln (void);				/* generated */
-extern NCURSES_EXPORT(int) insnstr (const char *, int);			/* generated */
-extern NCURSES_EXPORT(int) insstr (const char *);			/* generated */
-extern NCURSES_EXPORT(int) instr (char *);				/* generated */
-extern NCURSES_EXPORT(int) intrflush (WINDOW *,bool);			/* implemented */
-extern NCURSES_EXPORT(bool) isendwin (void);				/* implemented */
-extern NCURSES_EXPORT(bool) is_linetouched (WINDOW *,int);		/* implemented */
-extern NCURSES_EXPORT(bool) is_wintouched (WINDOW *);			/* implemented */
-extern NCURSES_EXPORT(NCURSES_CONST char *) keyname (int);		/* implemented */
-extern NCURSES_EXPORT(int) keypad (WINDOW *,bool);			/* implemented */
-extern NCURSES_EXPORT(char) killchar (void);				/* implemented */
-extern NCURSES_EXPORT(int) leaveok (WINDOW *,bool);			/* implemented */
-extern NCURSES_EXPORT(char *) longname (void);				/* implemented */
-extern NCURSES_EXPORT(int) meta (WINDOW *,bool);			/* implemented */
-extern NCURSES_EXPORT(int) move (int, int);				/* generated */
-extern NCURSES_EXPORT(int) mvaddch (int, int, const chtype);		/* generated */
-extern NCURSES_EXPORT(int) mvaddchnstr (int, int, const chtype *, int);	/* generated */
-extern NCURSES_EXPORT(int) mvaddchstr (int, int, const chtype *);	/* generated */
-extern NCURSES_EXPORT(int) mvaddnstr (int, int, const char *, int);	/* generated */
-extern NCURSES_EXPORT(int) mvaddstr (int, int, const char *);		/* generated */
-extern NCURSES_EXPORT(int) mvchgat (int, int, int, attr_t, NCURSES_PAIRS_T, const void *);	/* generated */
-extern NCURSES_EXPORT(int) mvcur (int,int,int,int);			/* implemented */
-extern NCURSES_EXPORT(int) mvdelch (int, int);				/* generated */
-extern NCURSES_EXPORT(int) mvderwin (WINDOW *, int, int);		/* implemented */
-extern NCURSES_EXPORT(int) mvgetch (int, int);				/* generated */
-extern NCURSES_EXPORT(int) mvgetnstr (int, int, char *, int);		/* generated */
-extern NCURSES_EXPORT(int) mvgetstr (int, int, char *);			/* generated */
-extern NCURSES_EXPORT(int) mvhline (int, int, chtype, int);		/* generated */
-extern NCURSES_EXPORT(chtype) mvinch (int, int);			/* generated */
-extern NCURSES_EXPORT(int) mvinchnstr (int, int, chtype *, int);	/* generated */
-extern NCURSES_EXPORT(int) mvinchstr (int, int, chtype *);		/* generated */
-extern NCURSES_EXPORT(int) mvinnstr (int, int, char *, int);		/* generated */
-extern NCURSES_EXPORT(int) mvinsch (int, int, chtype);			/* generated */
-extern NCURSES_EXPORT(int) mvinsnstr (int, int, const char *, int);	/* generated */
-extern NCURSES_EXPORT(int) mvinsstr (int, int, const char *);		/* generated */
-extern NCURSES_EXPORT(int) mvinstr (int, int, char *);			/* generated */
-extern NCURSES_EXPORT(int) mvprintw (int,int, const char *,...)		/* implemented */
-		GCC_PRINTFLIKE(3,4);
-extern NCURSES_EXPORT(int) mvscanw (int,int, NCURSES_CONST char *,...)	/* implemented */
-		GCC_SCANFLIKE(3,4);
-extern NCURSES_EXPORT(int) mvvline (int, int, chtype, int);		/* generated */
-extern NCURSES_EXPORT(int) mvwaddch (WINDOW *, int, int, const chtype);	/* generated */
-extern NCURSES_EXPORT(int) mvwaddchnstr (WINDOW *, int, int, const chtype *, int);/* generated */
-extern NCURSES_EXPORT(int) mvwaddchstr (WINDOW *, int, int, const chtype *);	/* generated */
-extern NCURSES_EXPORT(int) mvwaddnstr (WINDOW *, int, int, const char *, int);	/* generated */
-extern NCURSES_EXPORT(int) mvwaddstr (WINDOW *, int, int, const char *);	/* generated */
-extern NCURSES_EXPORT(int) mvwchgat (WINDOW *, int, int, int, attr_t, NCURSES_PAIRS_T, const void *);/* generated */
-extern NCURSES_EXPORT(int) mvwdelch (WINDOW *, int, int);		/* generated */
-extern NCURSES_EXPORT(int) mvwgetch (WINDOW *, int, int);		/* generated */
-extern NCURSES_EXPORT(int) mvwgetnstr (WINDOW *, int, int, char *, int);	/* generated */
-extern NCURSES_EXPORT(int) mvwgetstr (WINDOW *, int, int, char *);	/* generated */
-extern NCURSES_EXPORT(int) mvwhline (WINDOW *, int, int, chtype, int);	/* generated */
-extern NCURSES_EXPORT(int) mvwin (WINDOW *,int,int);			/* implemented */
-extern NCURSES_EXPORT(chtype) mvwinch (WINDOW *, int, int);			/* generated */
-extern NCURSES_EXPORT(int) mvwinchnstr (WINDOW *, int, int, chtype *, int);	/* generated */
-extern NCURSES_EXPORT(int) mvwinchstr (WINDOW *, int, int, chtype *);		/* generated */
-extern NCURSES_EXPORT(int) mvwinnstr (WINDOW *, int, int, char *, int);		/* generated */
-extern NCURSES_EXPORT(int) mvwinsch (WINDOW *, int, int, chtype);		/* generated */
-extern NCURSES_EXPORT(int) mvwinsnstr (WINDOW *, int, int, const char *, int);	/* generated */
-extern NCURSES_EXPORT(int) mvwinsstr (WINDOW *, int, int, const char *);	/* generated */
-extern NCURSES_EXPORT(int) mvwinstr (WINDOW *, int, int, char *);		/* generated */
-extern NCURSES_EXPORT(int) mvwprintw (WINDOW*,int,int, const char *,...)	/* implemented */
-		GCC_PRINTFLIKE(4,5);
-extern NCURSES_EXPORT(int) mvwscanw (WINDOW *,int,int, NCURSES_CONST char *,...)	/* implemented */
-		GCC_SCANFLIKE(4,5);
-extern NCURSES_EXPORT(int) mvwvline (WINDOW *,int, int, chtype, int);	/* generated */
-extern NCURSES_EXPORT(int) napms (int);					/* implemented */
-extern NCURSES_EXPORT(WINDOW *) newpad (int,int);		       	/* implemented */
-extern NCURSES_EXPORT(SCREEN *) newterm (NCURSES_CONST char *,FILE *,FILE *);	/* implemented */
-extern NCURSES_EXPORT(WINDOW *) newwin (int,int,int,int);	       	/* implemented */
-extern NCURSES_EXPORT(int) nl (void);					/* implemented */
-extern NCURSES_EXPORT(int) nocbreak (void);				/* implemented */
-extern NCURSES_EXPORT(int) nodelay (WINDOW *,bool);			/* implemented */
-extern NCURSES_EXPORT(int) noecho (void);				/* implemented */
-extern NCURSES_EXPORT(int) nonl (void);					/* implemented */
-extern NCURSES_EXPORT(void) noqiflush (void);				/* implemented */
-extern NCURSES_EXPORT(int) noraw (void);				/* implemented */
-extern NCURSES_EXPORT(int) notimeout (WINDOW *,bool);			/* implemented */
-extern NCURSES_EXPORT(int) overlay (const WINDOW*,WINDOW *);		/* implemented */
-extern NCURSES_EXPORT(int) overwrite (const WINDOW*,WINDOW *);		/* implemented */
-extern NCURSES_EXPORT(int) pair_content (NCURSES_PAIRS_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*);		/* implemented */
-extern NCURSES_EXPORT(int) PAIR_NUMBER (int);				/* generated */
-extern NCURSES_EXPORT(int) pechochar (WINDOW *, const chtype);		/* implemented */
-extern NCURSES_EXPORT(int) pnoutrefresh (WINDOW*,int,int,int,int,int,int);/* implemented */
-extern NCURSES_EXPORT(int) prefresh (WINDOW *,int,int,int,int,int,int);	/* implemented */
-extern NCURSES_EXPORT(int) printw (const char *,...)			/* implemented */
-		GCC_PRINTFLIKE(1,2);
-extern NCURSES_EXPORT(int) putwin (WINDOW *, FILE *);			/* implemented */
-extern NCURSES_EXPORT(void) qiflush (void);				/* implemented */
-extern NCURSES_EXPORT(int) raw (void);					/* implemented */
-extern NCURSES_EXPORT(int) redrawwin (WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) refresh (void);				/* generated */
-extern NCURSES_EXPORT(int) resetty (void);				/* implemented */
-extern NCURSES_EXPORT(int) reset_prog_mode (void);			/* implemented */
-extern NCURSES_EXPORT(int) reset_shell_mode (void);			/* implemented */
-extern NCURSES_EXPORT(int) ripoffline (int, int (*)(WINDOW *, int));	/* implemented */
-extern NCURSES_EXPORT(int) savetty (void);				/* implemented */
-extern NCURSES_EXPORT(int) scanw (NCURSES_CONST char *,...)		/* implemented */
-		GCC_SCANFLIKE(1,2);
-extern NCURSES_EXPORT(int) scr_dump (const char *);			/* implemented */
-extern NCURSES_EXPORT(int) scr_init (const char *);			/* implemented */
-extern NCURSES_EXPORT(int) scrl (int);					/* generated */
-extern NCURSES_EXPORT(int) scroll (WINDOW *);				/* generated */
-extern NCURSES_EXPORT(int) scrollok (WINDOW *,bool);			/* implemented */
-extern NCURSES_EXPORT(int) scr_restore (const char *);			/* implemented */
-extern NCURSES_EXPORT(int) scr_set (const char *);			/* implemented */
-extern NCURSES_EXPORT(int) setscrreg (int,int);				/* generated */
-extern NCURSES_EXPORT(SCREEN *) set_term (SCREEN *);			/* implemented */
-extern NCURSES_EXPORT(int) slk_attroff (const chtype);			/* implemented */
-extern NCURSES_EXPORT(int) slk_attr_off (const attr_t, void *);		/* generated:WIDEC */
-extern NCURSES_EXPORT(int) slk_attron (const chtype);			/* implemented */
-extern NCURSES_EXPORT(int) slk_attr_on (attr_t,void*);			/* generated:WIDEC */
-extern NCURSES_EXPORT(int) slk_attrset (const chtype);			/* implemented */
-extern NCURSES_EXPORT(attr_t) slk_attr (void);				/* implemented */
-extern NCURSES_EXPORT(int) slk_attr_set (const attr_t,NCURSES_PAIRS_T,void*);	/* implemented */
-extern NCURSES_EXPORT(int) slk_clear (void);				/* implemented */
-extern NCURSES_EXPORT(int) slk_color (NCURSES_PAIRS_T);				/* implemented */
-extern NCURSES_EXPORT(int) slk_init (int);				/* implemented */
-extern NCURSES_EXPORT(char *) slk_label (int);				/* implemented */
-extern NCURSES_EXPORT(int) slk_noutrefresh (void);			/* implemented */
-extern NCURSES_EXPORT(int) slk_refresh (void);				/* implemented */
-extern NCURSES_EXPORT(int) slk_restore (void);				/* implemented */
-extern NCURSES_EXPORT(int) slk_set (int,const char *,int);		/* implemented */
-extern NCURSES_EXPORT(int) slk_touch (void);	      	       		/* implemented */
-extern NCURSES_EXPORT(int) standout (void);				/* generated */
-extern NCURSES_EXPORT(int) standend (void);				/* generated */
-extern NCURSES_EXPORT(int) start_color (void);				/* implemented */
-extern NCURSES_EXPORT(WINDOW *) subpad (WINDOW *, int, int, int, int);	/* implemented */
-extern NCURSES_EXPORT(WINDOW *) subwin (WINDOW *, int, int, int, int);	/* implemented */
-extern NCURSES_EXPORT(int) syncok (WINDOW *, bool);			/* implemented */
-extern NCURSES_EXPORT(chtype) termattrs (void);				/* implemented */
-extern NCURSES_EXPORT(char *) termname (void);				/* implemented */
-extern NCURSES_EXPORT(void) timeout (int);				/* generated */
-extern NCURSES_EXPORT(int) touchline (WINDOW *, int, int);		/* generated */
-extern NCURSES_EXPORT(int) touchwin (WINDOW *);				/* generated */
-extern NCURSES_EXPORT(int) typeahead (int);				/* implemented */
-extern NCURSES_EXPORT(int) ungetch (int);				/* implemented */
-extern NCURSES_EXPORT(int) untouchwin (WINDOW *);			/* generated */
-extern NCURSES_EXPORT(void) use_env (bool);				/* implemented */
-extern NCURSES_EXPORT(void) use_tioctl (bool);				/* implemented */
-extern NCURSES_EXPORT(int) vidattr (chtype);				/* implemented */
-extern NCURSES_EXPORT(int) vidputs (chtype, NCURSES_OUTC);		/* implemented */
-extern NCURSES_EXPORT(int) vline (chtype, int);				/* generated */
-extern NCURSES_EXPORT(int) vwprintw (WINDOW *, const char *,va_list);	/* implemented */
-extern NCURSES_EXPORT(int) vw_printw (WINDOW *, const char *,va_list);	/* generated */
-extern NCURSES_EXPORT(int) vwscanw (WINDOW *, NCURSES_CONST char *,va_list);	/* implemented */
-extern NCURSES_EXPORT(int) vw_scanw (WINDOW *, NCURSES_CONST char *,va_list);	/* generated */
-extern NCURSES_EXPORT(int) waddch (WINDOW *, const chtype);		/* implemented */
-extern NCURSES_EXPORT(int) waddchnstr (WINDOW *,const chtype *,int);	/* implemented */
-extern NCURSES_EXPORT(int) waddchstr (WINDOW *,const chtype *);		/* generated */
-extern NCURSES_EXPORT(int) waddnstr (WINDOW *,const char *,int);	/* implemented */
-extern NCURSES_EXPORT(int) waddstr (WINDOW *,const char *);		/* generated */
-extern NCURSES_EXPORT(int) wattron (WINDOW *, int);			/* generated */
-extern NCURSES_EXPORT(int) wattroff (WINDOW *, int);			/* generated */
-extern NCURSES_EXPORT(int) wattrset (WINDOW *, int);			/* generated */
-extern NCURSES_EXPORT(int) wattr_get (WINDOW *, attr_t *, NCURSES_PAIRS_T *, void *);	/* generated */
-extern NCURSES_EXPORT(int) wattr_on (WINDOW *, attr_t, void *);		/* implemented */
-extern NCURSES_EXPORT(int) wattr_off (WINDOW *, attr_t, void *);	/* implemented */
-extern NCURSES_EXPORT(int) wattr_set (WINDOW *, attr_t, NCURSES_PAIRS_T, void *);	/* generated */
-extern NCURSES_EXPORT(int) wbkgd (WINDOW *, chtype);			/* implemented */
-extern NCURSES_EXPORT(void) wbkgdset (WINDOW *,chtype);			/* implemented */
-extern NCURSES_EXPORT(int) wborder (WINDOW *,chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype);	/* implemented */
-extern NCURSES_EXPORT(int) wchgat (WINDOW *, int, attr_t, NCURSES_PAIRS_T, const void *);/* implemented */
-extern NCURSES_EXPORT(int) wclear (WINDOW *);				/* implemented */
-extern NCURSES_EXPORT(int) wclrtobot (WINDOW *);			/* implemented */
-extern NCURSES_EXPORT(int) wclrtoeol (WINDOW *);			/* implemented */
-extern NCURSES_EXPORT(int) wcolor_set (WINDOW*,NCURSES_PAIRS_T,void*);		/* implemented */
-extern NCURSES_EXPORT(void) wcursyncup (WINDOW *);			/* implemented */
-extern NCURSES_EXPORT(int) wdelch (WINDOW *);				/* implemented */
-extern NCURSES_EXPORT(int) wdeleteln (WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) wechochar (WINDOW *, const chtype);		/* implemented */
-extern NCURSES_EXPORT(int) werase (WINDOW *);				/* implemented */
-extern NCURSES_EXPORT(int) wgetch (WINDOW *);				/* implemented */
-extern NCURSES_EXPORT(int) wgetnstr (WINDOW *,char *,int);		/* implemented */
-extern NCURSES_EXPORT(int) wgetstr (WINDOW *, char *);			/* generated */
-extern NCURSES_EXPORT(int) whline (WINDOW *, chtype, int);		/* implemented */
-extern NCURSES_EXPORT(chtype) winch (WINDOW *);				/* implemented */
-extern NCURSES_EXPORT(int) winchnstr (WINDOW *, chtype *, int);		/* implemented */
-extern NCURSES_EXPORT(int) winchstr (WINDOW *, chtype *);		/* generated */
-extern NCURSES_EXPORT(int) winnstr (WINDOW *, char *, int);		/* implemented */
-extern NCURSES_EXPORT(int) winsch (WINDOW *, chtype);			/* implemented */
-extern NCURSES_EXPORT(int) winsdelln (WINDOW *,int);			/* implemented */
-extern NCURSES_EXPORT(int) winsertln (WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) winsnstr (WINDOW *, const char *,int);	/* implemented */
-extern NCURSES_EXPORT(int) winsstr (WINDOW *, const char *);		/* generated */
-extern NCURSES_EXPORT(int) winstr (WINDOW *, char *);			/* generated */
-extern NCURSES_EXPORT(int) wmove (WINDOW *,int,int);			/* implemented */
-extern NCURSES_EXPORT(int) wnoutrefresh (WINDOW *);			/* implemented */
-extern NCURSES_EXPORT(int) wprintw (WINDOW *, const char *,...)		/* implemented */
-		GCC_PRINTFLIKE(2,3);
-extern NCURSES_EXPORT(int) wredrawln (WINDOW *,int,int);		/* implemented */
-extern NCURSES_EXPORT(int) wrefresh (WINDOW *);				/* implemented */
-extern NCURSES_EXPORT(int) wscanw (WINDOW *, NCURSES_CONST char *,...)	/* implemented */
-		GCC_SCANFLIKE(2,3);
-extern NCURSES_EXPORT(int) wscrl (WINDOW *,int);			/* implemented */
-extern NCURSES_EXPORT(int) wsetscrreg (WINDOW *,int,int);		/* implemented */
-extern NCURSES_EXPORT(int) wstandout (WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) wstandend (WINDOW *);			/* generated */
-extern NCURSES_EXPORT(void) wsyncdown (WINDOW *);			/* implemented */
-extern NCURSES_EXPORT(void) wsyncup (WINDOW *);				/* implemented */
-extern NCURSES_EXPORT(void) wtimeout (WINDOW *,int);			/* implemented */
-extern NCURSES_EXPORT(int) wtouchln (WINDOW *,int,int,int);		/* implemented */
-extern NCURSES_EXPORT(int) wvline (WINDOW *,chtype,int);		/* implemented */
-
-/*
- * These are also declared in <term.h>:
- */
-extern NCURSES_EXPORT(int) tigetflag (NCURSES_CONST char *);		/* implemented */
-extern NCURSES_EXPORT(int) tigetnum (NCURSES_CONST char *);		/* implemented */
-extern NCURSES_EXPORT(char *) tigetstr (NCURSES_CONST char *);		/* implemented */
-extern NCURSES_EXPORT(int) putp (const char *);				/* implemented */
-
-#if NCURSES_TPARM_VARARGS
-extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, ...);	/* special */
-#else
-extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG);	/* special */
-extern NCURSES_EXPORT(char *) tparm_varargs (NCURSES_CONST char *, ...);	/* special */
-#endif
-
-extern NCURSES_EXPORT(char *) tiparm (const char *, ...);		/* special */
-
-/*
- * These functions are not in X/Open, but we use them in macro definitions:
- */
-extern NCURSES_EXPORT(int) getattrs (const WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) getcurx (const WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) getcury (const WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) getbegx (const WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) getbegy (const WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) getmaxx (const WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) getmaxy (const WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) getparx (const WINDOW *);			/* generated */
-extern NCURSES_EXPORT(int) getpary (const WINDOW *);			/* generated */
-
-/*
- * vid_attr() was implemented originally based on a draft of X/Open curses.
- */
-#if !NCURSES_WIDECHAR
-#define vid_attr(a,pair,opts) vidattr(a)
-#endif
-
-/*
- * These functions are extensions - not in X/Open Curses.
- */
-#if 1
-#undef  NCURSES_EXT_FUNCS
-#define NCURSES_EXT_FUNCS 20150808
-typedef int (*NCURSES_WINDOW_CB)(WINDOW *, void *);
-typedef int (*NCURSES_SCREEN_CB)(SCREEN *, void *);
-extern NCURSES_EXPORT(bool) is_term_resized (int, int);
-extern NCURSES_EXPORT(char *) keybound (int, int);
-extern NCURSES_EXPORT(const char *) curses_version (void);
-extern NCURSES_EXPORT(int) assume_default_colors (int, int);
-extern NCURSES_EXPORT(int) define_key (const char *, int);
-extern NCURSES_EXPORT(int) get_escdelay (void);
-extern NCURSES_EXPORT(int) key_defined (const char *);
-extern NCURSES_EXPORT(int) keyok (int, bool);
-extern NCURSES_EXPORT(int) resize_term (int, int);
-extern NCURSES_EXPORT(int) resizeterm (int, int);
-extern NCURSES_EXPORT(int) set_escdelay (int);
-extern NCURSES_EXPORT(int) set_tabsize (int);
-extern NCURSES_EXPORT(int) use_default_colors (void);
-extern NCURSES_EXPORT(int) use_extended_names (bool);
-extern NCURSES_EXPORT(int) use_legacy_coding (int);
-extern NCURSES_EXPORT(int) use_screen (SCREEN *, NCURSES_SCREEN_CB, void *);
-extern NCURSES_EXPORT(int) use_window (WINDOW *, NCURSES_WINDOW_CB, void *);
-extern NCURSES_EXPORT(int) wresize (WINDOW *, int, int);
-extern NCURSES_EXPORT(void) nofilter(void);
-
-/*
- * These extensions provide access to information stored in the WINDOW even
- * when NCURSES_OPAQUE is set:
- */
-extern NCURSES_EXPORT(WINDOW *) wgetparent (const WINDOW *);	/* generated */
-extern NCURSES_EXPORT(bool) is_cleared (const WINDOW *);	/* generated */
-extern NCURSES_EXPORT(bool) is_idcok (const WINDOW *);		/* generated */
-extern NCURSES_EXPORT(bool) is_idlok (const WINDOW *);		/* generated */
-extern NCURSES_EXPORT(bool) is_immedok (const WINDOW *);	/* generated */
-extern NCURSES_EXPORT(bool) is_keypad (const WINDOW *);		/* generated */
-extern NCURSES_EXPORT(bool) is_leaveok (const WINDOW *);	/* generated */
-extern NCURSES_EXPORT(bool) is_nodelay (const WINDOW *);	/* generated */
-extern NCURSES_EXPORT(bool) is_notimeout (const WINDOW *);	/* generated */
-extern NCURSES_EXPORT(bool) is_pad (const WINDOW *);		/* generated */
-extern NCURSES_EXPORT(bool) is_scrollok (const WINDOW *);	/* generated */
-extern NCURSES_EXPORT(bool) is_subwin (const WINDOW *);		/* generated */
-extern NCURSES_EXPORT(bool) is_syncok (const WINDOW *);		/* generated */
-extern NCURSES_EXPORT(int) wgetdelay (const WINDOW *);		/* generated */
-extern NCURSES_EXPORT(int) wgetscrreg (const WINDOW *, int *, int *); /* generated */
-
-#else
-#define curses_version() NCURSES_VERSION
-#endif
-
-/*
- * Extra extension-functions, which pass a SCREEN pointer rather than using
- * a global variable SP.
- */
-#if 1
-#undef  NCURSES_SP_FUNCS
-#define NCURSES_SP_FUNCS 20150808
-#define NCURSES_SP_NAME(name) name##_sp
-
-/* Define the sp-funcs helper function */
-#define NCURSES_SP_OUTC NCURSES_SP_NAME(NCURSES_OUTC)
-typedef int (*NCURSES_SP_OUTC)(SCREEN*, int);
-
-extern NCURSES_EXPORT(SCREEN *) new_prescr (void); /* implemented:SP_FUNC */
-
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(baudrate) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(beep) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(can_change_color) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(cbreak) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(curs_set) (SCREEN*, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(color_content) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T*, NCURSES_COLOR_T*, NCURSES_COLOR_T*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(def_prog_mode) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(def_shell_mode) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(delay_output) (SCREEN*, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(doupdate) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(echo) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(endwin) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(char) NCURSES_SP_NAME(erasechar) (SCREEN*);/* implemented:SP_FUNC */
-extern NCURSES_EXPORT(void) NCURSES_SP_NAME(filter) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(flash) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(flushinp) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(getwin) (SCREEN*, FILE *);			/* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(halfdelay) (SCREEN*, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_colors) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_ic) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_il) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_color) (SCREEN*, NCURSES_COLOR_T, NCURSES_COLOR_T, NCURSES_COLOR_T, NCURSES_COLOR_T); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(init_pair) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T, NCURSES_COLOR_T); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(intrflush) (SCREEN*, WINDOW*, bool);	/* implemented:SP_FUNC */
-extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(isendwin) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(NCURSES_CONST char *) NCURSES_SP_NAME(keyname) (SCREEN*, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(char) NCURSES_SP_NAME(killchar) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(longname) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(mvcur) (SCREEN*, int, int, int, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(napms) (SCREEN*, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newpad) (SCREEN*, int, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(SCREEN *) NCURSES_SP_NAME(newterm) (SCREEN*, NCURSES_CONST char *, FILE *, FILE *); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(WINDOW *) NCURSES_SP_NAME(newwin) (SCREEN*, int, int, int, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nl) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nocbreak) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(noecho) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(nonl) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(void) NCURSES_SP_NAME(noqiflush) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(noraw) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(pair_content) (SCREEN*, NCURSES_PAIRS_T, NCURSES_COLOR_T*, NCURSES_COLOR_T*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(void) NCURSES_SP_NAME(qiflush) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(raw) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(reset_prog_mode) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(reset_shell_mode) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resetty) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(ripoffline) (SCREEN*, int, int (*)(WINDOW *, int));	/* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(savetty) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_init) (SCREEN*, const char *); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_restore) (SCREEN*, const char *); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(scr_set) (SCREEN*, const char *); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attroff) (SCREEN*, const chtype); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attron) (SCREEN*, const chtype); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attrset) (SCREEN*, const chtype); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(attr_t) NCURSES_SP_NAME(slk_attr) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_attr_set) (SCREEN*, const attr_t, NCURSES_PAIRS_T, void*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_clear) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_color) (SCREEN*, NCURSES_PAIRS_T); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_init) (SCREEN*, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(slk_label) (SCREEN*, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_noutrefresh) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_refresh) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_restore) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_set) (SCREEN*, int, const char *, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(slk_touch) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(start_color) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(chtype) NCURSES_SP_NAME(termattrs) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(termname) (SCREEN*); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(typeahead) (SCREEN*, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(ungetch) (SCREEN*, int); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(void) NCURSES_SP_NAME(use_env) (SCREEN*, bool); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(void) NCURSES_SP_NAME(use_tioctl) (SCREEN*, bool); /* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vidattr) (SCREEN*, chtype);	/* implemented:SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vidputs) (SCREEN*, chtype, NCURSES_SP_OUTC); /* implemented:SP_FUNC */
-#if 1
-extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(keybound) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(assume_default_colors) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(define_key) (SCREEN*, const char *, int);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(get_escdelay) (SCREEN*);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(is_term_resized) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(key_defined) (SCREEN*, const char *);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(keyok) (SCREEN*, int, bool);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(void) NCURSES_SP_NAME(nofilter) (SCREEN*); /* implemented */	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resize_term) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(resizeterm) (SCREEN*, int, int);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(set_escdelay) (SCREEN*, int);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(set_tabsize) (SCREEN*, int);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_default_colors) (SCREEN*);	/* implemented:EXT_SP_FUNC */
-extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_legacy_coding) (SCREEN*, int);	/* implemented:EXT_SP_FUNC */
-#endif
-#else
-#undef  NCURSES_SP_FUNCS
-#define NCURSES_SP_FUNCS 0
-#define NCURSES_SP_NAME(name) name
-#define NCURSES_SP_OUTC NCURSES_OUTC
-#endif
-
-/* attributes */
-
-#define NCURSES_ATTR_SHIFT       8
-#define NCURSES_BITS(mask,shift) (NCURSES_CAST(chtype,(mask)) << ((shift) + NCURSES_ATTR_SHIFT))
-
-#define A_NORMAL	(1U - 1U)
-#define A_ATTRIBUTES	NCURSES_BITS(~(1U - 1U),0)
-#define A_CHARTEXT	(NCURSES_BITS(1U,0) - 1U)
-#define A_COLOR		NCURSES_BITS(((1U) << 8) - 1U,0)
-#define A_STANDOUT	NCURSES_BITS(1U,8)
-#define A_UNDERLINE	NCURSES_BITS(1U,9)
-#define A_REVERSE	NCURSES_BITS(1U,10)
-#define A_BLINK		NCURSES_BITS(1U,11)
-#define A_DIM		NCURSES_BITS(1U,12)
-#define A_BOLD		NCURSES_BITS(1U,13)
-#define A_ALTCHARSET	NCURSES_BITS(1U,14)
-#define A_INVIS		NCURSES_BITS(1U,15)
-#define A_PROTECT	NCURSES_BITS(1U,16)
-#define A_HORIZONTAL	NCURSES_BITS(1U,17)
-#define A_LEFT		NCURSES_BITS(1U,18)
-#define A_LOW		NCURSES_BITS(1U,19)
-#define A_RIGHT		NCURSES_BITS(1U,20)
-#define A_TOP		NCURSES_BITS(1U,21)
-#define A_VERTICAL	NCURSES_BITS(1U,22)
-
-#if 1
-#define A_ITALIC	NCURSES_BITS(1U,23)	/* ncurses extension */
-#endif
-
-/*
- * Most of the pseudo functions are macros that either provide compatibility
- * with older versions of curses, or provide inline functionality to improve
- * performance.
- */
-
-/*
- * These pseudo functions are always implemented as macros:
- */
-
-#define getyx(win,y,x)   	(y = getcury(win), x = getcurx(win))
-#define getbegyx(win,y,x)	(y = getbegy(win), x = getbegx(win))
-#define getmaxyx(win,y,x)	(y = getmaxy(win), x = getmaxx(win))
-#define getparyx(win,y,x)	(y = getpary(win), x = getparx(win))
-
-#define getsyx(y,x) do { if (newscr) { \
-			     if (is_leaveok(newscr)) \
-				(y) = (x) = -1; \
-			     else \
-				 getyx(newscr,(y), (x)); \
-			} \
-		    } while(0)
-
-#define setsyx(y,x) do { if (newscr) { \
-			    if ((y) == -1 && (x) == -1) \
-				leaveok(newscr, TRUE); \
-			    else { \
-				leaveok(newscr, FALSE); \
-				wmove(newscr, (y), (x)); \
-			    } \
-			} \
-		    } while(0)
-
-#ifndef NCURSES_NOMACROS
-
-/*
- * These miscellaneous pseudo functions are provided for compatibility:
- */
-
-#define wgetstr(w, s)		wgetnstr(w, s, -1)
-#define getnstr(s, n)		wgetnstr(stdscr, s, (n))
-
-#define setterm(term)		setupterm(term, 1, (int *)0)
-
-#define fixterm()		reset_prog_mode()
-#define resetterm()		reset_shell_mode()
-#define saveterm()		def_prog_mode()
-#define crmode()		cbreak()
-#define nocrmode()		nocbreak()
-#define gettmode()
-
-/* It seems older SYSV curses versions define these */
-#if !NCURSES_OPAQUE
-#define getattrs(win)		NCURSES_CAST(int, (win) ? (win)->_attrs : A_NORMAL)
-#define getcurx(win)		((win) ? (win)->_curx : ERR)
-#define getcury(win)		((win) ? (win)->_cury : ERR)
-#define getbegx(win)		((win) ? (win)->_begx : ERR)
-#define getbegy(win)		((win) ? (win)->_begy : ERR)
-#define getmaxx(win)		((win) ? ((win)->_maxx + 1) : ERR)
-#define getmaxy(win)		((win) ? ((win)->_maxy + 1) : ERR)
-#define getparx(win)		((win) ? (win)->_parx : ERR)
-#define getpary(win)		((win) ? (win)->_pary : ERR)
-#endif /* NCURSES_OPAQUE */
-
-#define wstandout(win)      	(wattrset(win,A_STANDOUT))
-#define wstandend(win)      	(wattrset(win,A_NORMAL))
-
-#define wattron(win,at)		wattr_on(win, NCURSES_CAST(attr_t, at), NULL)
-#define wattroff(win,at)	wattr_off(win, NCURSES_CAST(attr_t, at), NULL)
-
-#if !NCURSES_OPAQUE
-#if NCURSES_WIDECHAR && 0
-#define wattrset(win,at)	((win) \
-				  ? ((win)->_color = NCURSES_CAST(int, PAIR_NUMBER(at)), \
-                                     (win)->_attrs = NCURSES_CAST(attr_t, at), \
-                                     OK) \
-				  : ERR)
-#else
-#define wattrset(win,at)        ((win) \
-				  ? ((win)->_attrs = NCURSES_CAST(attr_t, at), \
-				     OK) \
-				  : ERR)
-#endif
-#endif /* NCURSES_OPAQUE */
-
-#define scroll(win)		wscrl(win,1)
-
-#define touchwin(win)		wtouchln((win), 0, getmaxy(win), 1)
-#define touchline(win, s, c)	wtouchln((win), s, c, 1)
-#define untouchwin(win)		wtouchln((win), 0, getmaxy(win), 0)
-
-#define box(win, v, h)		wborder(win, v, v, h, h, 0, 0, 0, 0)
-#define border(ls, rs, ts, bs, tl, tr, bl, br)	wborder(stdscr, ls, rs, ts, bs, tl, tr, bl, br)
-#define hline(ch, n)		whline(stdscr, ch, (n))
-#define vline(ch, n)		wvline(stdscr, ch, (n))
-
-#define winstr(w, s)		winnstr(w, s, -1)
-#define winchstr(w, s)		winchnstr(w, s, -1)
-#define winsstr(w, s)		winsnstr(w, s, -1)
-
-#if !NCURSES_OPAQUE
-#define redrawwin(win)		wredrawln(win, 0, ((win) ? (win)->_maxy+1 : -1))
-#endif /* NCURSES_OPAQUE */
-
-#define waddstr(win,str)	waddnstr(win,str,-1)
-#define waddchstr(win,str)	waddchnstr(win,str,-1)
-
-/*
- * These apply to the first 256 color pairs.
- */
-#define COLOR_PAIR(n)	NCURSES_BITS((n), 0)
-#define PAIR_NUMBER(a)	(NCURSES_CAST(int,((NCURSES_CAST(unsigned long,(a)) & A_COLOR) >> NCURSES_ATTR_SHIFT)))
-
-/*
- * pseudo functions for standard screen
- */
-
-#define addch(ch)		waddch(stdscr,(ch))
-#define addchnstr(str,n)	waddchnstr(stdscr,(str),(n))
-#define addchstr(str)		waddchstr(stdscr,(str))
-#define addnstr(str,n)		waddnstr(stdscr,(str),(n))
-#define addstr(str)		waddnstr(stdscr,(str),-1)
-#define attroff(at)		wattroff(stdscr,(at))
-#define attron(at)		wattron(stdscr,(at))
-#define attrset(at)		wattrset(stdscr,(at))
-#define attr_get(ap,cp,o)	wattr_get(stdscr,(ap),(cp),(o))
-#define attr_off(a,o)		wattr_off(stdscr,(a),(o))
-#define attr_on(a,o)		wattr_on(stdscr,(a),(o))
-#define attr_set(a,c,o)		wattr_set(stdscr,(a),(c),(o))
-#define bkgd(ch)		wbkgd(stdscr,(ch))
-#define bkgdset(ch)		wbkgdset(stdscr,(ch))
-#define chgat(n,a,c,o)		wchgat(stdscr,(n),(a),(c),(o))
-#define clear()			wclear(stdscr)
-#define clrtobot()		wclrtobot(stdscr)
-#define clrtoeol()		wclrtoeol(stdscr)
-#define color_set(c,o)		wcolor_set(stdscr,(c),(o))
-#define delch()			wdelch(stdscr)
-#define deleteln()		winsdelln(stdscr,-1)
-#define echochar(c)		wechochar(stdscr,(c))
-#define erase()			werase(stdscr)
-#define getch()			wgetch(stdscr)
-#define getstr(str)		wgetstr(stdscr,(str))
-#define inch()			winch(stdscr)
-#define inchnstr(s,n)		winchnstr(stdscr,(s),(n))
-#define inchstr(s)		winchstr(stdscr,(s))
-#define innstr(s,n)		winnstr(stdscr,(s),(n))
-#define insch(c)		winsch(stdscr,(c))
-#define insdelln(n)		winsdelln(stdscr,(n))
-#define insertln()		winsdelln(stdscr,1)
-#define insnstr(s,n)		winsnstr(stdscr,(s),(n))
-#define insstr(s)		winsstr(stdscr,(s))
-#define instr(s)		winstr(stdscr,(s))
-#define move(y,x)		wmove(stdscr,(y),(x))
-#define refresh()		wrefresh(stdscr)
-#define scrl(n)			wscrl(stdscr,(n))
-#define setscrreg(t,b)		wsetscrreg(stdscr,(t),(b))
-#define standend()		wstandend(stdscr)
-#define standout()		wstandout(stdscr)
-#define timeout(delay)		wtimeout(stdscr,(delay))
-#define wdeleteln(win)		winsdelln(win,-1)
-#define winsertln(win)		winsdelln(win,1)
-
-/*
- * mv functions
- */
-
-#define mvwaddch(win,y,x,ch)		(wmove((win),(y),(x)) == ERR ? ERR : waddch((win),(ch)))
-#define mvwaddchnstr(win,y,x,str,n)	(wmove((win),(y),(x)) == ERR ? ERR : waddchnstr((win),(str),(n)))
-#define mvwaddchstr(win,y,x,str)	(wmove((win),(y),(x)) == ERR ? ERR : waddchnstr((win),(str),-1))
-#define mvwaddnstr(win,y,x,str,n)	(wmove((win),(y),(x)) == ERR ? ERR : waddnstr((win),(str),(n)))
-#define mvwaddstr(win,y,x,str)		(wmove((win),(y),(x)) == ERR ? ERR : waddnstr((win),(str),-1))
-#define mvwdelch(win,y,x)		(wmove((win),(y),(x)) == ERR ? ERR : wdelch(win))
-#define mvwchgat(win,y,x,n,a,c,o)	(wmove((win),(y),(x)) == ERR ? ERR : wchgat((win),(n),(a),(c),(o)))
-#define mvwgetch(win,y,x)		(wmove((win),(y),(x)) == ERR ? ERR : wgetch(win))
-#define mvwgetnstr(win,y,x,str,n)	(wmove((win),(y),(x)) == ERR ? ERR : wgetnstr((win),(str),(n)))
-#define mvwgetstr(win,y,x,str)		(wmove((win),(y),(x)) == ERR ? ERR : wgetstr((win),(str)))
-#define mvwhline(win,y,x,c,n)		(wmove((win),(y),(x)) == ERR ? ERR : whline((win),(c),(n)))
-#define mvwinch(win,y,x)		(wmove((win),(y),(x)) == ERR ? NCURSES_CAST(chtype, ERR) : winch(win))
-#define mvwinchnstr(win,y,x,s,n)	(wmove((win),(y),(x)) == ERR ? ERR : winchnstr((win),(s),(n)))
-#define mvwinchstr(win,y,x,s)		(wmove((win),(y),(x)) == ERR ? ERR : winchstr((win),(s)))
-#define mvwinnstr(win,y,x,s,n)		(wmove((win),(y),(x)) == ERR ? ERR : winnstr((win),(s),(n)))
-#define mvwinsch(win,y,x,c)		(wmove((win),(y),(x)) == ERR ? ERR : winsch((win),(c)))
-#define mvwinsnstr(win,y,x,s,n)		(wmove((win),(y),(x)) == ERR ? ERR : winsnstr((win),(s),(n)))
-#define mvwinsstr(win,y,x,s)		(wmove((win),(y),(x)) == ERR ? ERR : winsstr((win),(s)))
-#define mvwinstr(win,y,x,s)		(wmove((win),(y),(x)) == ERR ? ERR : winstr((win),(s)))
-#define mvwvline(win,y,x,c,n)		(wmove((win),(y),(x)) == ERR ? ERR : wvline((win),(c),(n)))
-
-#define mvaddch(y,x,ch)			mvwaddch(stdscr,(y),(x),(ch))
-#define mvaddchnstr(y,x,str,n)		mvwaddchnstr(stdscr,(y),(x),(str),(n))
-#define mvaddchstr(y,x,str)		mvwaddchstr(stdscr,(y),(x),(str))
-#define mvaddnstr(y,x,str,n)		mvwaddnstr(stdscr,(y),(x),(str),(n))
-#define mvaddstr(y,x,str)		mvwaddstr(stdscr,(y),(x),(str))
-#define mvchgat(y,x,n,a,c,o)		mvwchgat(stdscr,(y),(x),(n),(a),(c),(o))
-#define mvdelch(y,x)			mvwdelch(stdscr,(y),(x))
-#define mvgetch(y,x)			mvwgetch(stdscr,(y),(x))
-#define mvgetnstr(y,x,str,n)		mvwgetnstr(stdscr,(y),(x),(str),(n))
-#define mvgetstr(y,x,str)		mvwgetstr(stdscr,(y),(x),(str))
-#define mvhline(y,x,c,n)		mvwhline(stdscr,(y),(x),(c),(n))
-#define mvinch(y,x)			mvwinch(stdscr,(y),(x))
-#define mvinchnstr(y,x,s,n)		mvwinchnstr(stdscr,(y),(x),(s),(n))
-#define mvinchstr(y,x,s)		mvwinchstr(stdscr,(y),(x),(s))
-#define mvinnstr(y,x,s,n)		mvwinnstr(stdscr,(y),(x),(s),(n))
-#define mvinsch(y,x,c)			mvwinsch(stdscr,(y),(x),(c))
-#define mvinsnstr(y,x,s,n)		mvwinsnstr(stdscr,(y),(x),(s),(n))
-#define mvinsstr(y,x,s)			mvwinsstr(stdscr,(y),(x),(s))
-#define mvinstr(y,x,s)			mvwinstr(stdscr,(y),(x),(s))
-#define mvvline(y,x,c,n)		mvwvline(stdscr,(y),(x),(c),(n))
-
-/*
- * Some wide-character functions can be implemented without the extensions.
- */
-#if !NCURSES_OPAQUE
-#define getbkgd(win)                    ((win) ? ((win)->_bkgd) : 0)
-#endif /* NCURSES_OPAQUE */
-
-#define slk_attr_off(a,v)		((v) ? ERR : slk_attroff(a))
-#define slk_attr_on(a,v)		((v) ? ERR : slk_attron(a))
-
-#if !NCURSES_OPAQUE
-#if NCURSES_WIDECHAR && 0
-#define wattr_set(win,a,p,opts)		(((win) \
-					  ? ((win)->_attrs = ((a) & ~A_COLOR), \
-					     (win)->_color = (p)) \
-					  : OK), \
-					 OK)
-#define wattr_get(win,a,p,opts)		((void)(((a) != (void *)0) ? (*(a) = (win) ? (win)->_attrs : 0) : OK), \
-					 (void)(((p) != (void *)0) ? (*(p) = (NCURSES_PAIRS_T) ((win) ? (win)->_color : 0)) : OK), \
-					 OK)
-#else
-#define wattr_set(win,a,p,opts)		(((win) \
-					  ? ((win)->_attrs = (((a) & ~A_COLOR) | (attr_t)COLOR_PAIR(p))) \
-					  : OK), \
-					 OK)
-#define wattr_get(win,a,p,opts)		((void)(((a) != (void *)0) ? (*(a) = (win) ? (win)->_attrs : 0) : OK), \
-					 (void)(((p) != (void *)0) ? (*(p) = (NCURSES_PAIRS_T) ((win) ? PAIR_NUMBER((win)->_attrs) : 0)) : OK), \
-					 OK)
-#endif
-#endif /* NCURSES_OPAQUE */
-
-/*
- * X/Open curses deprecates SVr4 vwprintw/vwscanw, which are supposed to use
- * varargs.h.  It adds new calls vw_printw/vw_scanw, which are supposed to
- * use POSIX stdarg.h.  The ncurses versions of vwprintw/vwscanw already
- * use stdarg.h, so...
- */
-#define vw_printw		vwprintw
-#define vw_scanw		vwscanw
-
-/*
- * Export fallback function for use in C++ binding.
- */
-#if !1
-#define vsscanf(a,b,c) _nc_vsscanf(a,b,c)
-NCURSES_EXPORT(int) vsscanf(const char *, const char *, va_list);
-#endif
-
-/*
- * These macros are extensions - not in X/Open Curses.
- */
-#if 1
-#if !NCURSES_OPAQUE
-#define is_cleared(win)		((win) ? (win)->_clear : FALSE)
-#define is_idcok(win)		((win) ? (win)->_idcok : FALSE)
-#define is_idlok(win)		((win) ? (win)->_idlok : FALSE)
-#define is_immedok(win)		((win) ? (win)->_immed : FALSE)
-#define is_keypad(win)		((win) ? (win)->_use_keypad : FALSE)
-#define is_leaveok(win)		((win) ? (win)->_leaveok : FALSE)
-#define is_nodelay(win)		((win) ? ((win)->_delay == 0) : FALSE)
-#define is_notimeout(win)	((win) ? (win)->_notimeout : FALSE)
-#define is_pad(win)		((win) ? ((win)->_flags & _ISPAD) != 0 : FALSE)
-#define is_scrollok(win)	((win) ? (win)->_scroll : FALSE)
-#define is_subwin(win)		((win) ? ((win)->_flags & _SUBWIN) != 0 : FALSE)
-#define is_syncok(win)		((win) ? (win)->_sync : FALSE)
-#define wgetdelay(win)		((win) ? (win)->_delay : 0)
-#define wgetparent(win)		((win) ? (win)->_parent : 0)
-#define wgetscrreg(win,t,b)	((win) ? (*(t) = (win)->_regtop, *(b) = (win)->_regbottom, OK) : ERR)
-#endif
-#endif
-
-#endif /* NCURSES_NOMACROS */
-
-/*
- * Public variables.
- *
- * Notes:
- *	a. ESCDELAY was an undocumented feature under AIX curses.
- *	   It gives the ESC expire time in milliseconds.
- *	b. ttytype is needed for backward compatibility
- */
-#if NCURSES_REENTRANT
-
-NCURSES_WRAPPED_VAR(WINDOW *, curscr);
-NCURSES_WRAPPED_VAR(WINDOW *, newscr);
-NCURSES_WRAPPED_VAR(WINDOW *, stdscr);
-NCURSES_WRAPPED_VAR(char *, ttytype);
-NCURSES_WRAPPED_VAR(int, COLORS);
-NCURSES_WRAPPED_VAR(int, COLOR_PAIRS);
-NCURSES_WRAPPED_VAR(int, COLS);
-NCURSES_WRAPPED_VAR(int, ESCDELAY);
-NCURSES_WRAPPED_VAR(int, LINES);
-NCURSES_WRAPPED_VAR(int, TABSIZE);
-
-#define curscr      NCURSES_PUBLIC_VAR(curscr())
-#define newscr      NCURSES_PUBLIC_VAR(newscr())
-#define stdscr      NCURSES_PUBLIC_VAR(stdscr())
-#define ttytype     NCURSES_PUBLIC_VAR(ttytype())
-#define COLORS      NCURSES_PUBLIC_VAR(COLORS())
-#define COLOR_PAIRS NCURSES_PUBLIC_VAR(COLOR_PAIRS())
-#define COLS        NCURSES_PUBLIC_VAR(COLS())
-#define ESCDELAY    NCURSES_PUBLIC_VAR(ESCDELAY())
-#define LINES       NCURSES_PUBLIC_VAR(LINES())
-#define TABSIZE     NCURSES_PUBLIC_VAR(TABSIZE())
-
-#else
-
-extern NCURSES_EXPORT_VAR(WINDOW *) curscr;
-extern NCURSES_EXPORT_VAR(WINDOW *) newscr;
-extern NCURSES_EXPORT_VAR(WINDOW *) stdscr;
-extern NCURSES_EXPORT_VAR(char) ttytype[];
-extern NCURSES_EXPORT_VAR(int) COLORS;
-extern NCURSES_EXPORT_VAR(int) COLOR_PAIRS;
-extern NCURSES_EXPORT_VAR(int) COLS;
-extern NCURSES_EXPORT_VAR(int) ESCDELAY;
-extern NCURSES_EXPORT_VAR(int) LINES;
-extern NCURSES_EXPORT_VAR(int) TABSIZE;
-
-#endif
-
-/*
- * Pseudo-character tokens outside ASCII range.  The curses wgetch() function
- * will return any given one of these only if the corresponding k- capability
- * is defined in your terminal's terminfo entry.
- *
- * Some keys (KEY_A1, etc) are arranged like this:
- *	a1     up    a3
- *	left   b2    right
- *	c1     down  c3
- *
- * A few key codes do not depend upon the terminfo entry.
- */
-#define KEY_CODE_YES	0400		/* A wchar_t contains a key code */
-#define KEY_MIN		0401		/* Minimum curses key */
-#define KEY_BREAK	0401		/* Break key (unreliable) */
-#define KEY_SRESET	0530		/* Soft (partial) reset (unreliable) */
-#define KEY_RESET	0531		/* Reset or hard reset (unreliable) */
diff --git a/include/curses.tail b/include/curses.tail
index 5f911ae..9c91356 100644
--- a/include/curses.tail
+++ b/include/curses.tail
@@ -1,4 +1,4 @@
-/* $Id: curses.tail,v 1.21 2011/10/29 20:03:22 tom Exp $ */
+/* $Id: curses.tail,v 1.27 2023/08/05 19:43:46 tom Exp $ */
 /*
  * vile:cmode:
  * This file is part of ncurses, designed to be appended after curses.h.in
@@ -13,12 +13,12 @@
 #define NCURSES_MOUSE_MASK(b,m) ((m) << (((b) - 1) * 6))
 #endif
 
-#define	NCURSES_BUTTON_RELEASED	001L
-#define	NCURSES_BUTTON_PRESSED	002L
-#define	NCURSES_BUTTON_CLICKED	004L
-#define	NCURSES_DOUBLE_CLICKED	010L
-#define	NCURSES_TRIPLE_CLICKED	020L
-#define	NCURSES_RESERVED_EVENT	040L
+#define	NCURSES_BUTTON_RELEASED	001UL
+#define	NCURSES_BUTTON_PRESSED	002UL
+#define	NCURSES_BUTTON_CLICKED	004UL
+#define	NCURSES_DOUBLE_CLICKED	010UL
+#define	NCURSES_TRIPLE_CLICKED	020UL
+#define	NCURSES_RESERVED_EVENT	040UL
 
 /* event masks */
 #define	BUTTON1_RELEASED	NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_RELEASED)
@@ -111,7 +111,9 @@
 extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(mouseinterval) (SCREEN*, int);
 #endif
 
+#ifndef NCURSES_NOMACROS
 #define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen)
+#endif
 
 /* other non-XSI functions */
 
@@ -126,10 +128,8 @@
 /* Debugging : use with libncurses_g.a */
 
 extern NCURSES_EXPORT(void) _tracef (const char *, ...) GCC_PRINTFLIKE(1,2);
-extern NCURSES_EXPORT(void) _tracedump (const char *, WINDOW *);
 extern NCURSES_EXPORT(char *) _traceattr (attr_t);
 extern NCURSES_EXPORT(char *) _traceattr2 (int, chtype);
-extern NCURSES_EXPORT(char *) _nc_tracebits (void);
 extern NCURSES_EXPORT(char *) _tracechar (int);
 extern NCURSES_EXPORT(char *) _tracechtype (chtype);
 extern NCURSES_EXPORT(char *) _tracechtype2 (int, chtype);
@@ -142,8 +142,8 @@
 #define _tracech_t		_tracechtype
 #define _tracech_t2		_tracechtype2
 #endif
-extern NCURSES_EXPORT(char *) _tracemouse (const MEVENT *);
-extern NCURSES_EXPORT(void) trace (const unsigned int);
+extern NCURSES_EXPORT(void) trace (const unsigned) GCC_DEPRECATED("use curses_trace");
+extern NCURSES_EXPORT(unsigned) curses_trace (const unsigned);
 
 /* trace masks */
 #define TRACE_DISABLE	0x0000	/* turn off tracing */
@@ -174,6 +174,8 @@
 #define OPTIMIZE_ALL		0xff	/* enable all optimizations (dflt) */
 #endif
 
+extern GCC_NORETURN NCURSES_EXPORT(void) exit_curses (int);
+
 #include <unctrl.h>
 
 #ifdef __cplusplus
diff --git a/include/curses.wide b/include/curses.wide
index 5d130a9..33adb07 100644
--- a/include/curses.wide
+++ b/include/curses.wide
@@ -1,4 +1,4 @@
-/* $Id: curses.wide,v 1.46 2014/02/01 22:00:32 tom Exp $ */
+/* $Id: curses.wide,v 1.51 2021/05/22 20:28:29 tom Exp $ */
 /*
  * vile:cmode:
  * This file is part of ncurses, designed to be appended after curses.h.in
@@ -204,7 +204,7 @@
 extern NCURSES_EXPORT(int) wget_wch (WINDOW *, wint_t *);		/* implemented */
 extern NCURSES_EXPORT(int) wget_wstr (WINDOW *, wint_t *);		/* generated:WIDEC */
 extern NCURSES_EXPORT(int) wgetbkgrnd (WINDOW *, cchar_t *);		/* generated:WIDEC */
-extern NCURSES_EXPORT(int) wgetn_wstr (WINDOW *,wint_t *, int);		/* implemented */
+extern NCURSES_EXPORT(int) wgetn_wstr (WINDOW *, wint_t *, int);	/* implemented */
 extern NCURSES_EXPORT(int) whline_set (WINDOW *, const cchar_t *, int);	/* implemented */
 extern NCURSES_EXPORT(int) win_wch (WINDOW *, cchar_t *);		/* implemented */
 extern NCURSES_EXPORT(int) win_wchnstr (WINDOW *, cchar_t *, int);	/* implemented */
@@ -219,10 +219,12 @@
 
 #if NCURSES_SP_FUNCS
 extern NCURSES_EXPORT(attr_t) NCURSES_SP_NAME(term_attrs) (SCREEN*);		/* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(erasewchar) (SCREEN*, wchar_t *);	/* implemented:SP_FUNC */
+extern NCURSES_EXPORT(int) NCURSES_SP_NAME(killwchar) (SCREEN*, wchar_t *);	/* implemented:SP_FUNC */
 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(unget_wch) (SCREEN*, const wchar_t);	/* implemented:SP_FUNC */
-extern NCURSES_EXPORT(wchar_t*) NCURSES_SP_NAME(wunctrl) (SCREEN*, cchar_t *);	/* implemented:SP_FUNC */
 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vid_attr) (SCREEN*, attr_t, NCURSES_PAIRS_T, void *);	/* implemented:SP_FUNC */
 extern NCURSES_EXPORT(int) NCURSES_SP_NAME(vid_puts) (SCREEN*, attr_t, NCURSES_PAIRS_T, void *, NCURSES_SP_OUTC);	/* implemented:SP_FUNC */
+extern NCURSES_EXPORT(wchar_t*) NCURSES_SP_NAME(wunctrl) (SCREEN*, cchar_t *);	/* implemented:SP_FUNC */
 #endif
 
 #ifndef NCURSES_NOMACROS
@@ -261,7 +263,7 @@
 #define wins_wstr(w,t)			wins_nwstr((w),(t),-1)
 
 #if !NCURSES_OPAQUE
-#define wgetbkgrnd(win,wch)		((win) ? (*(wch) = (win)->_bkgrnd) : *(wch), OK)
+#define wgetbkgrnd(win,wch)		(NCURSES_OK_ADDR(wch) ? ((win) ? (*(wch) = (win)->_bkgrnd) : *(wch), OK) : ERR)
 #endif
 
 #define mvadd_wch(y,x,c)		mvwadd_wch(stdscr,(y),(x),(c))
diff --git a/include/edit_cfg.sh b/include/edit_cfg.sh
index 8d64fee..559b157 100755
--- a/include/edit_cfg.sh
+++ b/include/edit_cfg.sh
@@ -1,7 +1,8 @@
 #!/bin/sh
-# $Id: edit_cfg.sh,v 1.12 2001/12/23 00:52:40 tom Exp $
+# $Id: edit_cfg.sh,v 1.16 2022/07/16 18:02:32 tom Exp $
 ##############################################################################
-# Copyright (c) 1998,2000,2001 Free Software Foundation, Inc.                #
+# Copyright 2020,2022 Thomas E. Dickey                                       #
+# Copyright 1998-2001,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 "Software"), #
@@ -38,15 +39,16 @@
 #
 BAK=save$$
 TMP=edit$$
-trap "rm -f $BAK $TMP" 0 1 2 5 15
+trap "rm -f $BAK $TMP; exit 1" 1 2 3 15
+trap "rm -f $BAK $TMP" 0
 for name in \
 	HAVE_TCGETATTR \
 	HAVE_TERMIOS_H \
 	HAVE_TERMIO_H \
 	BROKEN_LINKER
 do
-	mv $2 $BAK
-	if ( grep "[ 	]$name[ 	]" $1 2>&1 >$TMP )
+	mv "$2" "$BAK"
+	if ( grep "[ 	]${name}[ 	]" "$1" >$TMP 2>&1 )
 	then
 		value=1
 	else
@@ -57,11 +59,11 @@
 		-e "s@#define ${name}.*\$@#define $name $value@" \
 		-e "s@#if $name\$@#if $value /* $name */@" \
 		-e "s@#if !$name\$@#if $value /* !$name */@" \
-		$BAK >$2
-	if (cmp -s $2 $BAK)
+		"$BAK" >"$2"
+	if (cmp -s "$2" "$BAK")
 	then
-		mv $BAK $2
+		mv "$BAK" "$2"
 	else
-		rm -f $BAK
+		rm -f "$BAK"
 	fi
 done
diff --git a/include/eti.h b/include/eti.h
deleted file mode 100644
index baa6190..0000000
--- a/include/eti.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/****************************************************************************
- * Copyright (c) 1998-2002,2003 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            *
- * "Software"), to deal in the Software without restriction, including      *
- * without limitation the rights to use, copy, modify, merge, publish,      *
- * distribute, distribute with modifications, sublicense, and/or sell       *
- * copies of the Software, and to permit persons to whom the Software is    *
- * furnished to do so, subject to the following conditions:                 *
- *                                                                          *
- * The above copyright notice and this permission notice shall be included  *
- * in all copies or substantial portions of the Software.                   *
- *                                                                          *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
- * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
- * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
- *                                                                          *
- * Except as contained in this notice, the name(s) of the above copyright   *
- * holders shall not be used in advertising or otherwise to promote the     *
- * sale, use or other dealings in this Software without prior written       *
- * authorization.                                                           *
- ****************************************************************************/
-
-/****************************************************************************
- *   Author:  Juergen Pfeifer, 1995,1997                                    *
- ****************************************************************************/
-
-/* $Id: eti.h,v 1.8 2003/10/25 15:24:29 tom Exp $ */
-
-#ifndef NCURSES_ETI_H_incl
-#define NCURSES_ETI_H_incl 1
-
-#define	E_OK			(0)
-#define	E_SYSTEM_ERROR	 	(-1)
-#define	E_BAD_ARGUMENT	 	(-2)
-#define	E_POSTED	 	(-3)
-#define	E_CONNECTED	 	(-4)
-#define	E_BAD_STATE	 	(-5)
-#define	E_NO_ROOM	 	(-6)
-#define	E_NOT_POSTED		(-7)
-#define	E_UNKNOWN_COMMAND	(-8)
-#define	E_NO_MATCH		(-9)
-#define	E_NOT_SELECTABLE	(-10)
-#define	E_NOT_CONNECTED	        (-11)
-#define	E_REQUEST_DENIED	(-12)
-#define	E_INVALID_FIELD	        (-13)
-#define	E_CURRENT		(-14)
-
-#endif
diff --git a/include/form.h b/include/form.h
deleted file mode 100644
index 09856dc..0000000
--- a/include/form.h
+++ /dev/null
@@ -1,428 +0,0 @@
-/****************************************************************************
- * Copyright (c) 1998-2013,2014 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            *
- * "Software"), to deal in the Software without restriction, including      *
- * without limitation the rights to use, copy, modify, merge, publish,      *
- * distribute, distribute with modifications, sublicense, and/or sell       *
- * copies of the Software, and to permit persons to whom the Software is    *
- * furnished to do so, subject to the following conditions:                 *
- *                                                                          *
- * The above copyright notice and this permission notice shall be included  *
- * in all copies or substantial portions of the Software.                   *
- *                                                                          *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
- * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
- * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
- *                                                                          *
- * Except as contained in this notice, the name(s) of the above copyright   *
- * holders shall not be used in advertising or otherwise to promote the     *
- * sale, use or other dealings in this Software without prior written       *
- * authorization.                                                           *
- ****************************************************************************/
-
-/****************************************************************************
- *   Author:  Juergen Pfeifer, 1995,1997                                    *
- ****************************************************************************/
-
-/* $Id: form.h,v 0.24 2014/07/26 20:52:28 tom Exp $ */
-
-#ifndef FORM_H
-#define FORM_H
-/* *INDENT-OFF*/
-
-#include <curses.h>
-#include <eti.h>
-
-#ifdef __cplusplus
-  extern "C" {
-#endif
-
-#ifndef FORM_PRIV_H
-typedef void *FIELD_CELL;
-#endif
-
-#ifndef NCURSES_FIELD_INTERNALS
-#define NCURSES_FIELD_INTERNALS /* nothing */
-#endif
-
-typedef int Form_Options;
-typedef int Field_Options;
-
-	/**********
-	*  _PAGE  *
-	**********/
-
-typedef struct {
-  short pmin;		/* index of first field on page			*/
-  short pmax;		/* index of last field on page			*/
-  short smin;		/* index of top leftmost field on page		*/
-  short smax;		/* index of bottom rightmost field on page	*/
-} _PAGE;
-
-	/**********
-	*  FIELD  *
-	**********/
-
-typedef struct fieldnode {
-  unsigned short	status;		/* flags			*/
-  short			rows;		/* size in rows			*/
-  short			cols;		/* size in cols			*/
-  short			frow;		/* first row			*/
-  short			fcol;		/* first col			*/
-  int			drows;		/* dynamic rows			*/
-  int			dcols;		/* dynamic cols			*/
-  int			maxgrow;	/* maximum field growth		*/
-  int			nrow;		/* off-screen rows		*/
-  short			nbuf;		/* additional buffers		*/
-  short			just;		/* justification		*/
-  short			page;		/* page on form			*/
-  short			index;		/* into form -> field		*/
-  int			pad;		/* pad character		*/
-  chtype		fore;		/* foreground attribute		*/
-  chtype		back;		/* background attribute		*/
-  Field_Options		opts;		/* options			*/
-  struct fieldnode *	snext;		/* sorted order pointer		*/
-  struct fieldnode *	sprev;		/* sorted order pointer		*/
-  struct fieldnode *	link;		/* linked field chain		*/
-  struct formnode *	form;		/* containing form		*/
-  struct typenode *	type;		/* field type			*/
-  void *		arg;		/* argument for type		*/
-  FIELD_CELL *		buf;		/* field buffers		*/
-  void *		usrptr;		/* user pointer			*/
-  /*
-   * The wide-character configuration requires extra information.  Because
-   * there are existing applications that manipulate the members of FIELD
-   * directly, we cannot make the struct opaque.  Offsets of members up to
-   * this point are the same in the narrow- and wide-character configuration.
-   * But note that the type of buf depends on the configuration, and is made
-   * opaque for that reason.
-   */
-  NCURSES_FIELD_INTERNALS
-} FIELD;
-
-
-	/*********
-	*  FORM  *
-	*********/
-
-typedef struct formnode {
-  unsigned short	status;	  	/* flags			*/
-  short			rows;		/* size in rows			*/
-  short			cols;		/* size in cols			*/
-  int			currow;		/* current row in field window	*/
-  int			curcol;		/* current col in field window	*/
-  int			toprow;		/* in scrollable field window	*/
-  int			begincol;	/* in horiz. scrollable field	*/
-  short			maxfield;	/* number of fields		*/
-  short			maxpage;	/* number of pages		*/
-  short			curpage;	/* index into page		*/
-  Form_Options		opts;		/* options			*/
-  WINDOW *		win;		/* window			*/
-  WINDOW *		sub;		/* subwindow			*/
-  WINDOW *		w;		/* window for current field	*/
-  FIELD **		field;		/* field [maxfield]		*/
-  FIELD *		current;	/* current field		*/
-  _PAGE *		page;		/* page [maxpage]		*/
-  void *		usrptr;		/* user pointer			*/
-
-  void			(*forminit)(struct formnode *);
-  void			(*formterm)(struct formnode *);
-  void			(*fieldinit)(struct formnode *);
-  void			(*fieldterm)(struct formnode *);
-
-} FORM;
-
-
-	/**************
-	*  FIELDTYPE  *
-	**************/
-
-typedef struct typenode {
-  unsigned short	status;			/* flags		    */
-  long			ref;			/* reference count	    */
-  struct typenode *	left;			/* ptr to operand for |     */
-  struct typenode *	right;			/* ptr to operand for |     */
-
-  void* (*makearg)(va_list *);			/* make fieldtype arg	    */
-  void* (*copyarg)(const void *);		/* copy fieldtype arg 	    */
-  void	(*freearg)(void *);			/* free fieldtype arg	    */
-
-#if NCURSES_INTEROP_FUNCS
-  union {
-    bool (*ofcheck)(FIELD *,const void *);	/* field validation	    */
-    bool (*gfcheck)(FORM*,FIELD *,const void*);	/* generic field validation */
-  } fieldcheck;
-  union {
-    bool (*occheck)(int,const void *);		/* character validation     */
-    bool (*gccheck)(int,FORM*,
-		    FIELD*,const void*);        /* generic char validation  */
-  } charcheck;
-  union {
-    bool (*onext)(FIELD *,const void *);        /* enumerate next value     */
-    bool (*gnext)(FORM*,FIELD*,const void*);    /* generic enumerate next   */
-  } enum_next;
-  union {
-    bool (*oprev)(FIELD *,const void *);	/* enumerate prev value     */
-    bool (*gprev)(FORM*,FIELD*,const void*);    /* generic enumerate prev   */
-  } enum_prev;
-  void* (*genericarg)(void*);                   /* Alternate Arg method     */
-#else
-  bool	(*fcheck)(FIELD *,const void *);	/* field validation	*/
-  bool	(*ccheck)(int,const void *);		/* character validation */
-
-  bool	(*next)(FIELD *,const void *);		/* enumerate next value */
-  bool	(*prev)(FIELD *,const void *);		/* enumerate prev value */
-#endif
-} FIELDTYPE;
-
-typedef void (*Form_Hook)(FORM *);
-
-	/***************************
-	*  miscellaneous #defines  *
-	***************************/
-
-/* field justification */
-#define NO_JUSTIFICATION	(0)
-#define JUSTIFY_LEFT		(1)
-#define JUSTIFY_CENTER		(2)
-#define JUSTIFY_RIGHT		(3)
-
-/* field options */
-#define O_VISIBLE		(0x0001U)
-#define O_ACTIVE		(0x0002U)
-#define O_PUBLIC		(0x0004U)
-#define O_EDIT			(0x0008U)
-#define O_WRAP			(0x0010U)
-#define O_BLANK			(0x0020U)
-#define O_AUTOSKIP		(0x0040U)
-#define O_NULLOK		(0x0080U)
-#define O_PASSOK		(0x0100U)
-#define O_STATIC		(0x0200U)
-#define O_DYNAMIC_JUSTIFY	(0x0400U)	/* ncurses extension	*/
-
-/* form options */
-#define O_NL_OVERLOAD		(0x0001U)
-#define O_BS_OVERLOAD		(0x0002U)
-
-/* form driver commands */
-#define REQ_NEXT_PAGE	 (KEY_MAX + 1)	/* move to next page		*/
-#define REQ_PREV_PAGE	 (KEY_MAX + 2)	/* move to previous page	*/
-#define REQ_FIRST_PAGE	 (KEY_MAX + 3)	/* move to first page		*/
-#define REQ_LAST_PAGE	 (KEY_MAX + 4)	/* move to last page		*/
-
-#define REQ_NEXT_FIELD	 (KEY_MAX + 5)	/* move to next field		*/
-#define REQ_PREV_FIELD	 (KEY_MAX + 6)	/* move to previous field	*/
-#define REQ_FIRST_FIELD	 (KEY_MAX + 7)	/* move to first field		*/
-#define REQ_LAST_FIELD	 (KEY_MAX + 8)	/* move to last field		*/
-#define REQ_SNEXT_FIELD	 (KEY_MAX + 9)	/* move to sorted next field	*/
-#define REQ_SPREV_FIELD	 (KEY_MAX + 10)	/* move to sorted prev field	*/
-#define REQ_SFIRST_FIELD (KEY_MAX + 11)	/* move to sorted first field	*/
-#define REQ_SLAST_FIELD	 (KEY_MAX + 12)	/* move to sorted last field	*/
-#define REQ_LEFT_FIELD	 (KEY_MAX + 13)	/* move to left to field	*/
-#define REQ_RIGHT_FIELD	 (KEY_MAX + 14)	/* move to right to field	*/
-#define REQ_UP_FIELD	 (KEY_MAX + 15)	/* move to up to field		*/
-#define REQ_DOWN_FIELD	 (KEY_MAX + 16)	/* move to down to field	*/
-
-#define REQ_NEXT_CHAR	 (KEY_MAX + 17)	/* move to next char in field	*/
-#define REQ_PREV_CHAR	 (KEY_MAX + 18)	/* move to prev char in field	*/
-#define REQ_NEXT_LINE	 (KEY_MAX + 19)	/* move to next line in field	*/
-#define REQ_PREV_LINE	 (KEY_MAX + 20)	/* move to prev line in field	*/
-#define REQ_NEXT_WORD	 (KEY_MAX + 21)	/* move to next word in field	*/
-#define REQ_PREV_WORD	 (KEY_MAX + 22)	/* move to prev word in field	*/
-#define REQ_BEG_FIELD	 (KEY_MAX + 23)	/* move to first char in field	*/
-#define REQ_END_FIELD	 (KEY_MAX + 24)	/* move after last char in fld	*/
-#define REQ_BEG_LINE	 (KEY_MAX + 25)	/* move to beginning of line	*/
-#define REQ_END_LINE	 (KEY_MAX + 26)	/* move after last char in line	*/
-#define REQ_LEFT_CHAR	 (KEY_MAX + 27)	/* move left in field		*/
-#define REQ_RIGHT_CHAR	 (KEY_MAX + 28)	/* move right in field		*/
-#define REQ_UP_CHAR	 (KEY_MAX + 29)	/* move up in field		*/
-#define REQ_DOWN_CHAR	 (KEY_MAX + 30)	/* move down in field		*/
-
-#define REQ_NEW_LINE	 (KEY_MAX + 31)	/* insert/overlay new line	*/
-#define REQ_INS_CHAR	 (KEY_MAX + 32)	/* insert blank char at cursor	*/
-#define REQ_INS_LINE	 (KEY_MAX + 33)	/* insert blank line at cursor	*/
-#define REQ_DEL_CHAR	 (KEY_MAX + 34)	/* delete char at cursor	*/
-#define REQ_DEL_PREV	 (KEY_MAX + 35)	/* delete char before cursor	*/
-#define REQ_DEL_LINE	 (KEY_MAX + 36)	/* delete line at cursor	*/
-#define REQ_DEL_WORD	 (KEY_MAX + 37)	/* delete word at cursor	*/
-#define REQ_CLR_EOL	 (KEY_MAX + 38)	/* clear to end of line		*/
-#define REQ_CLR_EOF	 (KEY_MAX + 39)	/* clear to end of field	*/
-#define REQ_CLR_FIELD	 (KEY_MAX + 40)	/* clear entire field		*/
-#define REQ_OVL_MODE	 (KEY_MAX + 41)	/* begin overlay mode		*/
-#define REQ_INS_MODE	 (KEY_MAX + 42)	/* begin insert mode		*/
-#define REQ_SCR_FLINE	 (KEY_MAX + 43)	/* scroll field forward a line	*/
-#define REQ_SCR_BLINE	 (KEY_MAX + 44)	/* scroll field backward a line	*/
-#define REQ_SCR_FPAGE	 (KEY_MAX + 45)	/* scroll field forward a page	*/
-#define REQ_SCR_BPAGE	 (KEY_MAX + 46)	/* scroll field backward a page	*/
-#define REQ_SCR_FHPAGE	 (KEY_MAX + 47) /* scroll field forward	 half page */
-#define REQ_SCR_BHPAGE	 (KEY_MAX + 48) /* scroll field backward half page */
-#define REQ_SCR_FCHAR	 (KEY_MAX + 49) /* horizontal scroll char	*/
-#define REQ_SCR_BCHAR	 (KEY_MAX + 50) /* horizontal scroll char	*/
-#define REQ_SCR_HFLINE	 (KEY_MAX + 51) /* horizontal scroll line	*/
-#define REQ_SCR_HBLINE	 (KEY_MAX + 52) /* horizontal scroll line	*/
-#define REQ_SCR_HFHALF	 (KEY_MAX + 53) /* horizontal scroll half line	*/
-#define REQ_SCR_HBHALF	 (KEY_MAX + 54) /* horizontal scroll half line	*/
-
-#define REQ_VALIDATION	 (KEY_MAX + 55)	/* validate field		*/
-#define REQ_NEXT_CHOICE	 (KEY_MAX + 56)	/* display next field choice	*/
-#define REQ_PREV_CHOICE	 (KEY_MAX + 57)	/* display prev field choice	*/
-
-#define MIN_FORM_COMMAND (KEY_MAX + 1)	/* used by form_driver		*/
-#define MAX_FORM_COMMAND (KEY_MAX + 57)	/* used by form_driver		*/
-
-#if defined(MAX_COMMAND)
-#  if (MAX_FORM_COMMAND > MAX_COMMAND)
-#    error Something is wrong -- MAX_FORM_COMMAND is greater than MAX_COMMAND
-#  elif (MAX_COMMAND != (KEY_MAX + 128))
-#    error Something is wrong -- MAX_COMMAND is already inconsistently defined.
-#  endif
-#else
-#  define MAX_COMMAND (KEY_MAX + 128)
-#endif
-
-	/*************************
-	*  standard field types  *
-	*************************/
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ALPHA;
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ALNUM;
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ENUM;
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_INTEGER;
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_NUMERIC;
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_REGEXP;
-
-	/************************************
-	*  built-in additional field types  *
-	*  They are not defined in SVr4     *
-	************************************/
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_IPV4;      /* Internet IP Version 4 address */
-
-	/***********************
-	*  FIELDTYPE routines  *
-	***********************/
-extern NCURSES_EXPORT(FIELDTYPE *) new_fieldtype (
-		    bool (* const field_check)(FIELD *,const void *),
-		    bool (* const char_check)(int,const void *));
-extern NCURSES_EXPORT(FIELDTYPE *) link_fieldtype(
-		    FIELDTYPE *, FIELDTYPE *);
-
-extern NCURSES_EXPORT(int)	free_fieldtype (FIELDTYPE *);
-extern NCURSES_EXPORT(int)	set_fieldtype_arg (FIELDTYPE *,
-		    void * (* const make_arg)(va_list *),
-		    void * (* const copy_arg)(const void *),
-		    void (* const free_arg)(void *));
-extern NCURSES_EXPORT(int)	 set_fieldtype_choice (FIELDTYPE *,
-		    bool (* const next_choice)(FIELD *,const void *),
-	      	    bool (* const prev_choice)(FIELD *,const void *));
-
-	/*******************
-	*  FIELD routines  *
-	*******************/
-extern NCURSES_EXPORT(FIELD *)	new_field (int,int,int,int,int,int);
-extern NCURSES_EXPORT(FIELD *)	dup_field (FIELD *,int,int);
-extern NCURSES_EXPORT(FIELD *)	link_field (FIELD *,int,int);
-
-extern NCURSES_EXPORT(int)	free_field (FIELD *);
-extern NCURSES_EXPORT(int)	field_info (const FIELD *,int *,int *,int *,int *,int *,int *);
-extern NCURSES_EXPORT(int)	dynamic_field_info (const FIELD *,int *,int *,int *);
-extern NCURSES_EXPORT(int)	set_max_field ( FIELD *,int);
-extern NCURSES_EXPORT(int)	move_field (FIELD *,int,int);
-extern NCURSES_EXPORT(int)	set_field_type (FIELD *,FIELDTYPE *,...);
-extern NCURSES_EXPORT(int)	set_new_page (FIELD *,bool);
-extern NCURSES_EXPORT(int)	set_field_just (FIELD *,int);
-extern NCURSES_EXPORT(int)	field_just (const FIELD *);
-extern NCURSES_EXPORT(int)	set_field_fore (FIELD *,chtype);
-extern NCURSES_EXPORT(int)	set_field_back (FIELD *,chtype);
-extern NCURSES_EXPORT(int)	set_field_pad (FIELD *,int);
-extern NCURSES_EXPORT(int)	field_pad (const FIELD *);
-extern NCURSES_EXPORT(int)	set_field_buffer (FIELD *,int,const char *);
-extern NCURSES_EXPORT(int)	set_field_status (FIELD *,bool);
-extern NCURSES_EXPORT(int)	set_field_userptr (FIELD *, void *);
-extern NCURSES_EXPORT(int)	set_field_opts (FIELD *,Field_Options);
-extern NCURSES_EXPORT(int)	field_opts_on (FIELD *,Field_Options);
-extern NCURSES_EXPORT(int)	field_opts_off (FIELD *,Field_Options);
-
-extern NCURSES_EXPORT(chtype)	field_fore (const FIELD *);
-extern NCURSES_EXPORT(chtype)	field_back (const FIELD *);
-
-extern NCURSES_EXPORT(bool)	new_page (const FIELD *);
-extern NCURSES_EXPORT(bool)	field_status (const FIELD *);
-
-extern NCURSES_EXPORT(void *)	field_arg (const FIELD *);
-
-extern NCURSES_EXPORT(void *)	field_userptr (const FIELD *);
-
-extern NCURSES_EXPORT(FIELDTYPE *)	field_type (const FIELD *);
-
-extern NCURSES_EXPORT(char *)	field_buffer (const FIELD *,int);
-
-extern NCURSES_EXPORT(Field_Options)	field_opts (const FIELD *);
-
-	/******************
-	*  FORM routines  *
-	******************/
-
-extern NCURSES_EXPORT(FORM *)	new_form (FIELD **);
-
-extern NCURSES_EXPORT(FIELD **)	form_fields (const FORM *);
-extern NCURSES_EXPORT(FIELD *)	current_field (const FORM *);
-
-extern NCURSES_EXPORT(WINDOW *)	form_win (const FORM *);
-extern NCURSES_EXPORT(WINDOW *)	form_sub (const FORM *);
-
-extern NCURSES_EXPORT(Form_Hook)	form_init (const FORM *);
-extern NCURSES_EXPORT(Form_Hook)	form_term (const FORM *);
-extern NCURSES_EXPORT(Form_Hook)	field_init (const FORM *);
-extern NCURSES_EXPORT(Form_Hook)	field_term (const FORM *);
-
-extern NCURSES_EXPORT(int)	free_form (FORM *);
-extern NCURSES_EXPORT(int)	set_form_fields (FORM *,FIELD **);
-extern NCURSES_EXPORT(int)	field_count (const FORM *);
-extern NCURSES_EXPORT(int)	set_form_win (FORM *,WINDOW *);
-extern NCURSES_EXPORT(int)	set_form_sub (FORM *,WINDOW *);
-extern NCURSES_EXPORT(int)	set_current_field (FORM *,FIELD *);
-extern NCURSES_EXPORT(int)	field_index (const FIELD *);
-extern NCURSES_EXPORT(int)	set_form_page (FORM *,int);
-extern NCURSES_EXPORT(int)	form_page (const FORM *);
-extern NCURSES_EXPORT(int)	scale_form (const FORM *,int *,int *);
-extern NCURSES_EXPORT(int)	set_form_init (FORM *,Form_Hook);
-extern NCURSES_EXPORT(int)	set_form_term (FORM *,Form_Hook);
-extern NCURSES_EXPORT(int)	set_field_init (FORM *,Form_Hook);
-extern NCURSES_EXPORT(int)	set_field_term (FORM *,Form_Hook);
-extern NCURSES_EXPORT(int)	post_form (FORM *);
-extern NCURSES_EXPORT(int)	unpost_form (FORM *);
-extern NCURSES_EXPORT(int)	pos_form_cursor (FORM *);
-extern NCURSES_EXPORT(int)	form_driver (FORM *,int);
-# if NCURSES_WIDECHAR
-extern NCURSES_EXPORT(int)	form_driver_w (FORM *,int,wchar_t);
-# endif
-extern NCURSES_EXPORT(int)	set_form_userptr (FORM *,void *);
-extern NCURSES_EXPORT(int)	set_form_opts (FORM *,Form_Options);
-extern NCURSES_EXPORT(int)	form_opts_on (FORM *,Form_Options);
-extern NCURSES_EXPORT(int)	form_opts_off (FORM *,Form_Options);
-extern NCURSES_EXPORT(int)	form_request_by_name (const char *);
-
-extern NCURSES_EXPORT(const char *)	form_request_name (int);
-
-extern NCURSES_EXPORT(void *)	form_userptr (const FORM *);
-
-extern NCURSES_EXPORT(Form_Options)	form_opts (const FORM *);
-
-extern NCURSES_EXPORT(bool)	data_ahead (const FORM *);
-extern NCURSES_EXPORT(bool)	data_behind (const FORM *);
-
-#if NCURSES_SP_FUNCS
-extern NCURSES_EXPORT(FORM *)	NCURSES_SP_NAME(new_form) (SCREEN*, FIELD **);
-#endif
-
-#ifdef __cplusplus
-  }
-#endif
-/* *INDENT-ON*/
-
-#endif /* FORM_H */
diff --git a/include/hashed_db.h b/include/hashed_db.h
index 1ae29b0..584fd96 100644
--- a/include/hashed_db.h
+++ b/include/hashed_db.h
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 2006 Free Software Foundation, Inc.                        *
+ * Copyright 2020 Thomas E. Dickey                                          *
+ * Copyright 2006-2014,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            *
@@ -31,12 +32,14 @@
  ****************************************************************************/
 
 /*
- * $Id: hashed_db.h,v 1.6 2014/04/12 22:41:10 tom Exp $
+ * $Id: hashed_db.h,v 1.9 2020/02/02 23:34:34 tom Exp $
  */
 
 #ifndef HASHED_DB_H
 #define HASHED_DB_H 1
 
+#include <ncurses_cfg.h>
+
 #include <curses.h>
 
 #if USE_HASHED_DB
@@ -45,7 +48,7 @@
 
 #include <db.h>
 
-#ifndef DBN_SUFFIX
+#ifndef DBM_SUFFIX
 #define DBM_SUFFIX ".db"
 #endif
 
diff --git a/include/hashsize.h b/include/hashsize.h
deleted file mode 100644
index 478fd59..0000000
--- a/include/hashsize.h
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- * hashsize.h -- hash and token table constants
- */
-
-#define CAPTABSIZE	497
-#define HASHTABSIZE	(497 * 2)
diff --git a/include/headers b/include/headers
index 2f20bed..e1293b2 100644
--- a/include/headers
+++ b/include/headers
@@ -1,6 +1,7 @@
-# $Id: headers,v 1.13 2013/10/20 00:32:21 tom Exp $
+# $Id: headers,v 1.16 2023/04/22 12:09:09 tom Exp $
 ##############################################################################
-# Copyright (c) 1998-2012,2013 Free Software Foundation, Inc.                #
+# Copyright 2020,2023 Thomas E. Dickey                                       #
+# Copyright 1998-2012,2013 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 "Software"), #
@@ -38,15 +39,15 @@
 term.h
 termcap.h
 
-# Headers used only for tic, other programs using internal interfaces
+# Header used by tack 1.08
 @ ticlib
-$(srcdir)/tic.h
 $(srcdir)/term_entry.h
-$(srcdir)/nc_tparm.h
 
 # Porting
 @ port_win32con
 $(srcdir)/ncurses_mingw.h
 $(srcdir)/nc_mingw.h
+@ port_win32
+$(srcdir)/win32_curses.h
 
 # vile:makemode
diff --git a/include/menu.h b/include/menu.h
deleted file mode 100644
index 4eeac01..0000000
--- a/include/menu.h
+++ /dev/null
@@ -1,260 +0,0 @@
-/****************************************************************************
- * Copyright (c) 1998-2007,2009 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            *
- * "Software"), to deal in the Software without restriction, including      *
- * without limitation the rights to use, copy, modify, merge, publish,      *
- * distribute, distribute with modifications, sublicense, and/or sell       *
- * copies of the Software, and to permit persons to whom the Software is    *
- * furnished to do so, subject to the following conditions:                 *
- *                                                                          *
- * The above copyright notice and this permission notice shall be included  *
- * in all copies or substantial portions of the Software.                   *
- *                                                                          *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
- * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
- * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
- *                                                                          *
- * Except as contained in this notice, the name(s) of the above copyright   *
- * holders shall not be used in advertising or otherwise to promote the     *
- * sale, use or other dealings in this Software without prior written       *
- * authorization.                                                           *
- ****************************************************************************/
-
-/****************************************************************************
- *   Author:  Juergen Pfeifer, 1995,1997                                    *
- ****************************************************************************/
-
-/* $Id: menu.h,v 1.20 2009/04/05 00:28:07 tom Exp $ */
-
-#ifndef ETI_MENU
-#define ETI_MENU
-
-#ifdef AMIGA
-#define TEXT TEXT_ncurses
-#endif
-
-#include <curses.h>
-#include <eti.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef int Menu_Options;
-typedef int Item_Options;
-
-/* Menu options: */
-#define O_ONEVALUE      (0x01)
-#define O_SHOWDESC      (0x02)
-#define O_ROWMAJOR      (0x04)
-#define O_IGNORECASE    (0x08)
-#define O_SHOWMATCH     (0x10)
-#define O_NONCYCLIC     (0x20)
-
-/* Item options: */
-#define O_SELECTABLE    (0x01)
-
-typedef struct
-{
-  const char* str;
-  unsigned short length;
-} TEXT;
-
-typedef struct tagITEM 
-{
-  TEXT           name;        /* name of menu item                         */
-  TEXT           description; /* description of item, optional in display  */ 
-  struct tagMENU *imenu;      /* Pointer to parent menu                    */
-  void           *userptr;    /* Pointer to user defined per item data     */ 
-  Item_Options   opt;         /* Item options                              */ 
-  short          index;       /* Item number if connected to a menu        */
-  short          y;           /* y and x location of item in menu          */
-  short          x;
-  bool           value;       /* Selection value                           */
-                             
-  struct tagITEM *left;       /* neighbor items                            */
-  struct tagITEM *right;
-  struct tagITEM *up;
-  struct tagITEM *down;
-
-} ITEM;
-
-typedef void (*Menu_Hook)(struct tagMENU *);
-
-typedef struct tagMENU 
-{
-  short          height;                /* Nr. of chars high               */
-  short          width;                 /* Nr. of chars wide               */
-  short          rows;                  /* Nr. of items high               */
-  short          cols;                  /* Nr. of items wide               */
-  short          frows;                 /* Nr. of formatted items high     */
-  short          fcols;                 /* Nr. of formatted items wide     */
-  short          arows;                 /* Nr. of items high (actual)      */
-  short          namelen;               /* Max. name length                */
-  short          desclen;               /* Max. description length         */
-  short          marklen;               /* Length of mark, if any          */
-  short          itemlen;               /* Length of one item              */
-  short          spc_desc;              /* Spacing for descriptor          */
-  short          spc_cols;              /* Spacing for columns             */
-  short          spc_rows;              /* Spacing for rows                */ 
-  char          *pattern;               /* Buffer to store match chars     */
-  short          pindex;                /* Index into pattern buffer       */
-  WINDOW        *win;                   /* Window containing menu          */
-  WINDOW        *sub;                   /* Subwindow for menu display      */
-  WINDOW        *userwin;               /* User's window                   */
-  WINDOW        *usersub;               /* User's subwindow                */
-  ITEM          **items;                /* array of items                  */ 
-  short          nitems;                /* Nr. of items in menu            */
-  ITEM          *curitem;               /* Current item                    */
-  short          toprow;                /* Top row of menu                 */
-  chtype         fore;                  /* Selection attribute             */
-  chtype         back;                  /* Nonselection attribute          */
-  chtype         grey;                  /* Inactive attribute              */
-  unsigned char  pad;                   /* Pad character                   */
-
-  Menu_Hook      menuinit;              /* User hooks                      */
-  Menu_Hook      menuterm;
-  Menu_Hook      iteminit;
-  Menu_Hook      itemterm;
-
-  void          *userptr;               /* Pointer to menus user data      */
-  char          *mark;                  /* Pointer to marker string        */
-
-  Menu_Options   opt;                   /* Menu options                    */
-  unsigned short status;                /* Internal state of menu          */
-
-} MENU;
-
-
-/* Define keys */
-
-#define REQ_LEFT_ITEM           (KEY_MAX + 1)
-#define REQ_RIGHT_ITEM          (KEY_MAX + 2)
-#define REQ_UP_ITEM             (KEY_MAX + 3)
-#define REQ_DOWN_ITEM           (KEY_MAX + 4)
-#define REQ_SCR_ULINE           (KEY_MAX + 5)
-#define REQ_SCR_DLINE           (KEY_MAX + 6)
-#define REQ_SCR_DPAGE           (KEY_MAX + 7)
-#define REQ_SCR_UPAGE           (KEY_MAX + 8)
-#define REQ_FIRST_ITEM          (KEY_MAX + 9)
-#define REQ_LAST_ITEM           (KEY_MAX + 10)
-#define REQ_NEXT_ITEM           (KEY_MAX + 11)
-#define REQ_PREV_ITEM           (KEY_MAX + 12)
-#define REQ_TOGGLE_ITEM         (KEY_MAX + 13)
-#define REQ_CLEAR_PATTERN       (KEY_MAX + 14)
-#define REQ_BACK_PATTERN        (KEY_MAX + 15)
-#define REQ_NEXT_MATCH          (KEY_MAX + 16)
-#define REQ_PREV_MATCH          (KEY_MAX + 17)
-
-#define MIN_MENU_COMMAND        (KEY_MAX + 1)
-#define MAX_MENU_COMMAND        (KEY_MAX + 17)
-
-/*
- * Some AT&T code expects MAX_COMMAND to be out-of-band not
- * just for menu commands but for forms ones as well.
- */
-#if defined(MAX_COMMAND)
-#  if (MAX_MENU_COMMAND > MAX_COMMAND)
-#    error Something is wrong -- MAX_MENU_COMMAND is greater than MAX_COMMAND
-#  elif (MAX_COMMAND != (KEY_MAX + 128))
-#    error Something is wrong -- MAX_COMMAND is already inconsistently defined.
-#  endif
-#else
-#  define MAX_COMMAND (KEY_MAX + 128)
-#endif
-
-
-/* --------- prototypes for libmenu functions ----------------------------- */
-
-extern NCURSES_EXPORT(ITEM **)	menu_items (const MENU *);
-extern NCURSES_EXPORT(ITEM *)	current_item (const MENU *);
-extern NCURSES_EXPORT(ITEM *)	new_item (const char *,const char *);
-
-extern NCURSES_EXPORT(MENU *)	new_menu (ITEM **);
-
-extern NCURSES_EXPORT(Item_Options)	item_opts (const ITEM *);
-extern NCURSES_EXPORT(Menu_Options)	menu_opts (const MENU *);
-
-extern NCURSES_EXPORT(Menu_Hook)	item_init (const MENU *);
-extern NCURSES_EXPORT(Menu_Hook)	item_term (const MENU *);
-extern NCURSES_EXPORT(Menu_Hook)	menu_init (const MENU *);
-extern NCURSES_EXPORT(Menu_Hook)	menu_term (const MENU *);
-
-extern NCURSES_EXPORT(WINDOW *)	menu_sub (const MENU *);
-extern NCURSES_EXPORT(WINDOW *)	menu_win (const MENU *);
-
-extern NCURSES_EXPORT(const char *)	item_description (const ITEM *);
-extern NCURSES_EXPORT(const char *)	item_name (const ITEM *);
-extern NCURSES_EXPORT(const char *)	menu_mark (const MENU *);
-extern NCURSES_EXPORT(const char *)	menu_request_name (int);
-
-extern NCURSES_EXPORT(char *)	menu_pattern (const MENU *);
-
-extern NCURSES_EXPORT(void *)	menu_userptr (const MENU *);
-extern NCURSES_EXPORT(void *)	item_userptr (const ITEM *);
-
-extern NCURSES_EXPORT(chtype)	menu_back (const MENU *);
-extern NCURSES_EXPORT(chtype)	menu_fore (const MENU *);
-extern NCURSES_EXPORT(chtype)	menu_grey (const MENU *);
-
-extern NCURSES_EXPORT(int)	free_item (ITEM *);
-extern NCURSES_EXPORT(int)	free_menu (MENU *);
-extern NCURSES_EXPORT(int)	item_count (const MENU *);
-extern NCURSES_EXPORT(int)	item_index (const ITEM *);
-extern NCURSES_EXPORT(int)	item_opts_off (ITEM *,Item_Options);
-extern NCURSES_EXPORT(int)	item_opts_on (ITEM *,Item_Options);
-extern NCURSES_EXPORT(int)	menu_driver (MENU *,int);
-extern NCURSES_EXPORT(int)	menu_opts_off (MENU *,Menu_Options);
-extern NCURSES_EXPORT(int)	menu_opts_on (MENU *,Menu_Options);
-extern NCURSES_EXPORT(int)	menu_pad (const MENU *);
-extern NCURSES_EXPORT(int)	pos_menu_cursor (const MENU *);
-extern NCURSES_EXPORT(int)	post_menu (MENU *);
-extern NCURSES_EXPORT(int)	scale_menu (const MENU *,int *,int *);
-extern NCURSES_EXPORT(int)	set_current_item (MENU *menu,ITEM *item);
-extern NCURSES_EXPORT(int)	set_item_init (MENU *, Menu_Hook);
-extern NCURSES_EXPORT(int)	set_item_opts (ITEM *,Item_Options);
-extern NCURSES_EXPORT(int)	set_item_term (MENU *, Menu_Hook);
-extern NCURSES_EXPORT(int)	set_item_userptr (ITEM *, void *);
-extern NCURSES_EXPORT(int)	set_item_value (ITEM *,bool);
-extern NCURSES_EXPORT(int)	set_menu_back (MENU *,chtype);
-extern NCURSES_EXPORT(int)	set_menu_fore (MENU *,chtype);
-extern NCURSES_EXPORT(int)	set_menu_format (MENU *,int,int);
-extern NCURSES_EXPORT(int)	set_menu_grey (MENU *,chtype);
-extern NCURSES_EXPORT(int)	set_menu_init (MENU *, Menu_Hook);
-extern NCURSES_EXPORT(int)	set_menu_items (MENU *,ITEM **);
-extern NCURSES_EXPORT(int)	set_menu_mark (MENU *, const char *);
-extern NCURSES_EXPORT(int)	set_menu_opts (MENU *,Menu_Options);
-extern NCURSES_EXPORT(int)	set_menu_pad (MENU *,int);
-extern NCURSES_EXPORT(int)	set_menu_pattern (MENU *,const char *);
-extern NCURSES_EXPORT(int)	set_menu_sub (MENU *,WINDOW *);
-extern NCURSES_EXPORT(int)	set_menu_term (MENU *, Menu_Hook);
-extern NCURSES_EXPORT(int)	set_menu_userptr (MENU *,void *);
-extern NCURSES_EXPORT(int)	set_menu_win (MENU *,WINDOW *);
-extern NCURSES_EXPORT(int)	set_top_row (MENU *,int);
-extern NCURSES_EXPORT(int)	top_row (const MENU *);
-extern NCURSES_EXPORT(int)	unpost_menu (MENU *);
-extern NCURSES_EXPORT(int)	menu_request_by_name (const char *);
-extern NCURSES_EXPORT(int)	set_menu_spacing (MENU *,int,int,int);
-extern NCURSES_EXPORT(int)	menu_spacing (const MENU *,int *,int *,int *);
-
-
-extern NCURSES_EXPORT(bool)	item_value (const ITEM *);
-extern NCURSES_EXPORT(bool)	item_visible (const ITEM *);
-
-extern NCURSES_EXPORT(void)	menu_format (const MENU *,int *,int *);
-
-#if NCURSES_SP_FUNCS
-extern NCURSES_EXPORT(MENU *)	NCURSES_SP_NAME(new_menu) (SCREEN*, ITEM **);
-#endif
-
-#ifdef __cplusplus
-  }
-#endif
-
-#endif /* ETI_MENU */
diff --git a/include/mf_common.h b/include/mf_common.h
deleted file mode 100644
index cff6563..0000000
--- a/include/mf_common.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/****************************************************************************
- * Copyright (c) 1998-2004,2012 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            *
- * "Software"), to deal in the Software without restriction, including      *
- * without limitation the rights to use, copy, modify, merge, publish,      *
- * distribute, distribute with modifications, sublicense, and/or sell       *
- * copies of the Software, and to permit persons to whom the Software is    *
- * furnished to do so, subject to the following conditions:                 *
- *                                                                          *
- * The above copyright notice and this permission notice shall be included  *
- * in all copies or substantial portions of the Software.                   *
- *                                                                          *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
- * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
- * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
- *                                                                          *
- * Except as contained in this notice, the name(s) of the above copyright   *
- * holders shall not be used in advertising or otherwise to promote the     *
- * sale, use or other dealings in this Software without prior written       *
- * authorization.                                                           *
- ****************************************************************************/
-
-/****************************************************************************
- *   Author:  Juergen Pfeifer, 1995,1997                                    *
- ****************************************************************************/
-
-/* $Id: mf_common.h,v 0.24 2012/06/10 00:06:54 tom Exp $ */
-
-/* Common internal header for menu and form library */
-
-#ifndef MF_COMMON_H_incl
-#define MF_COMMON_H_incl 1
-
-#include <ncurses_cfg.h>
-#include <curses.h>
-
-#include <stdlib.h>
-#include <sys/types.h>
-#include <assert.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-
-#if DECL_ERRNO
-extern int errno;
-#endif
-
-/* in case of debug version we ignore the suppression of assertions */
-#ifdef TRACE
-#  ifdef NDEBUG
-#    undef NDEBUG
-#  endif
-#endif
-
-#include <nc_alloc.h>
-
-#if USE_RCS_IDS
-#define MODULE_ID(id) static const char Ident[] = id;
-#else
-#define MODULE_ID(id)		/*nothing */
-#endif
-
-/* Maximum regular 8-bit character code */
-#define MAX_REGULAR_CHARACTER (0xff)
-
-#define SET_ERROR(code) (errno=(code))
-#define GET_ERROR()     (errno)
-
-#ifdef TRACE
-#define RETURN(code)    returnCode( SET_ERROR(code) )
-#else
-#define RETURN(code)    return( SET_ERROR(code) )
-#endif
-
-/* The few common values in the status fields for menus and forms */
-#define _POSTED         (0x01U)	/* menu or form is posted                  */
-#define _IN_DRIVER      (0x02U)	/* menu or form is processing hook routine */
-
-#define SetStatus(target,mask) (target)->status |= (unsigned short) (mask)
-#define ClrStatus(target,mask) (target)->status = (unsigned short) (target->status & (~mask))
-
-/* Call object hook */
-#define Call_Hook( object, handler ) \
-   if ( (object) != 0 && ((object)->handler) != (void *) 0 )\
-   {\
-	SetStatus(object, _IN_DRIVER);\
-	(object)->handler(object);\
-	ClrStatus(object, _IN_DRIVER);\
-   }
-
-#endif /* MF_COMMON_H_incl */
diff --git a/include/unctrl.h b/include/nc_access.h
similarity index 63%
rename from include/unctrl.h
rename to include/nc_access.h
index e7767d4..1d2fb0a 100644
--- a/include/unctrl.h
+++ b/include/nc_access.h
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc.              *
+ * Copyright 2021,2023 Thomas E. Dickey                                     *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -26,42 +26,55 @@
  * authorization.                                                           *
  ****************************************************************************/
 
-/****************************************************************************
- *  Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995               *
- *     and: Eric S. Raymond <esr@snark.thyrsus.com>                         *
- ****************************************************************************/
+/* $Id: nc_access.h,v 1.6 2023/05/06 10:54:55 tom Exp $ */
 
-/*
- * unctrl.h
- *
- * Display a printable version of a control character.
- * Control characters are displayed in caret notation (^x), DELETE is displayed
- * as ^?. Printable characters are displayed as is.
- */
+#ifndef NC_ACCESS_included
+#define NC_ACCESS_included 1
+/* *INDENT-OFF* */
 
-/* $Id: unctrl.h.in,v 1.11 2009/04/18 21:00:52 tom Exp $ */
-
-#ifndef NCURSES_UNCTRL_H_incl
-#define NCURSES_UNCTRL_H_incl	1
-
-#undef  NCURSES_VERSION
-#define NCURSES_VERSION "6.0"
+#include <ncurses_cfg.h>
+#include <curses.h>
+#include <sys/types.h>
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-#include <curses.h>
+/*
+ * Turn off the 'use_terminfo_vars()' symbol to limit access to environment
+ * variables when running with privileges.
+ */
+#if defined(USE_ROOT_ENVIRON) && defined(USE_SETUID_ENVIRON)
+#define use_terminfo_vars() 1
+#else
+#define use_terminfo_vars() _nc_env_access()
+#endif
 
-#undef unctrl
-NCURSES_EXPORT(NCURSES_CONST char *) unctrl (chtype);
+extern NCURSES_EXPORT(int) _nc_env_access (void);
 
-#if 1
-NCURSES_EXPORT(NCURSES_CONST char *) NCURSES_SP_NAME(unctrl) (SCREEN*, chtype);
+/*
+ * Turn off this symbol to limit access to files when running setuid.
+ */
+#ifdef USE_ROOT_ACCESS
+
+#define safe_fopen(name,mode)       fopen(name,mode)
+#define safe_open2(name,flags)      open(name,flags)
+#define safe_open3(name,flags,mode) open(name,flags,mode)
+
+#else
+
+#define safe_fopen(name,mode)       _nc_safe_fopen(name,mode)
+#define safe_open2(name,flags)      _nc_safe_open3(name,flags,0)
+#define safe_open3(name,flags,mode) _nc_safe_open3(name,flags,mode)
+extern NCURSES_EXPORT(FILE *)       _nc_safe_fopen (const char *, const char *);
+extern NCURSES_EXPORT(int)          _nc_safe_open3 (const char *, int, mode_t);
+
 #endif
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif /* NCURSES_UNCTRL_H_incl */
+/* *INDENT-ON* */
+
+#endif /* NC_ACCESS_included */
diff --git a/include/nc_alloc.h b/include/nc_alloc.h
index 356f605..cfea2be 100644
--- a/include/nc_alloc.h
+++ b/include/nc_alloc.h
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc.              *
+ * Copyright 2019-2020,2021 Thomas E. Dickey                                *
+ * Copyright 1998-2013,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            *
@@ -29,12 +30,15 @@
 /****************************************************************************
  *  Author: Thomas E. Dickey                    1996-on                     *
  ****************************************************************************/
-/* $Id: nc_alloc.h,v 1.22 2013/01/26 21:56:51 tom Exp $ */
+/* $Id: nc_alloc.h,v 1.30 2021/11/20 23:33:38 tom Exp $ */
 
 #ifndef NC_ALLOC_included
 #define NC_ALLOC_included 1
 /* *INDENT-OFF* */
 
+#include <ncurses_cfg.h>
+#include <curses.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -69,19 +73,26 @@
 #if HAVE_LIBDBMALLOC || HAVE_LIBDMALLOC || NO_LEAKS
 #define HAVE_NC_FREEALL 1
 struct termtype;
-extern NCURSES_EXPORT(void) _nc_free_and_exit(int) GCC_NORETURN;
-extern NCURSES_EXPORT(void) _nc_free_tinfo(int) GCC_NORETURN;
-extern NCURSES_EXPORT(void) _nc_free_tic(int) GCC_NORETURN;
-extern NCURSES_EXPORT(void) _nc_free_tparm(void);
-extern NCURSES_EXPORT(void) _nc_leaks_dump_entry(void);
+extern GCC_NORETURN  NCURSES_EXPORT(void) _nc_free_tinfo(int) GCC_DEPRECATED("use exit_terminfo");
+
+#ifdef NCURSES_INTERNALS
+extern GCC_NORETURN NCURSES_EXPORT(void) _nc_free_tic(int);
+extern void _nc_leaks_dump_entry(void);
 extern NCURSES_EXPORT(void) _nc_leaks_tic(void);
 
 #if NCURSES_SP_FUNCS
-extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_free_and_exit)(SCREEN*, int) GCC_NORETURN;
+extern GCC_NORETURN NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_free_and_exit)(SCREEN*, int);
+#endif
+extern GCC_NORETURN NCURSES_EXPORT(void) _nc_free_and_exit(int);
+
+#else /* !NCURSES_INTERNALS */
+extern GCC_NORETURN NCURSES_EXPORT(void) _nc_free_and_exit(int) GCC_DEPRECATED("use exit_curses");
 #endif
 
-#define ExitProgram(code) _nc_free_and_exit(code)
+#define ExitProgram(code) exit_curses(code)
 
+#else
+extern GCC_NORETURN NCURSES_EXPORT(void) _nc_free_and_exit(int) GCC_DEPRECATED("use exit_curses");
 #endif /* NO_LEAKS, etc */
 
 #ifndef HAVE_NC_FREEALL
diff --git a/include/nc_mingw.h b/include/nc_mingw.h
index 3247003..1bfc4b0 100644
--- a/include/nc_mingw.h
+++ b/include/nc_mingw.h
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 2008-2009,2010 Free Software Foundation, Inc.              *
+ * Copyright 2018-2020,2023 Thomas E. Dickey                                *
+ * Copyright 2008-2010,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            *
@@ -27,19 +28,20 @@
  ****************************************************************************/
 
 /****************************************************************************
- * Author: Thomas Dickey, 2008-on                                           * 
- *                                                                          *
+ * Author: Thomas Dickey, 2008-on                                           *
  ****************************************************************************/
 
-/* $Id: nc_mingw.h,v 1.3 2010/09/25 22:16:12 juergen Exp $ */
+/* $Id: nc_mingw.h,v 1.10 2023/02/25 19:59:24 tom Exp $ */
 
 #ifndef NC_MINGW_H
 #define NC_MINGW_H 1
 
+#ifdef _WIN32
+
 #ifdef WINVER
 #  if WINVER < 0x0501
 #    error WINVER must at least be 0x0501
-#  endif  
+#  endif
 #else
 #  define WINVER 0x0501
 #endif
@@ -48,22 +50,39 @@
 #undef sleep
 #define sleep(n) Sleep((n) * 1000)
 
-#undef gettimeofday
-#define gettimeofday(tv,tz) _nc_gettimeofday(tv,tz)
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>		/* for struct timeval */
+#endif
 
-#include <sys/time.h>	/* for struct timeval */
+#ifdef _MSC_VER
+#include <winsock2.h>		/* for struct timeval */
+#endif
 
-extern int _nc_gettimeofday(struct timeval *, void *);
+#ifdef __cplusplus
+extern "C" {
+#endif
 
+#include <ncurses_dll.h>
+
+#if !HAVE_CLOCK_GETTIME && !HAVE_GETTIMEOFDAY
+NCURSES_EXPORT(int) _nc_gettimeofday(struct timeval *, void *);
 #undef HAVE_GETTIMEOFDAY
-#define HAVE_GETTIMEOFDAY 1
+#define HAVE_GETTIMEOFDAY 2
+#define gettimeofday(tv,tz) _nc_gettimeofday(tv,tz)
+#endif
 
 #define SIGHUP  1
 #define SIGKILL 9
 #define getlogin() "username"
 
 #undef wcwidth
-#define wcwidth(ucs) _nc_wcwidth(ucs)
-extern int _nc_wcwidth(wchar_t);
+#define wcwidth(ucs) _nc_wcwidth((wchar_t)(ucs))
+NCURSES_EXPORT(int) _nc_wcwidth(wchar_t);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WIN32 */
 
 #endif /* NC_MINGW_H */
diff --git a/include/nc_panel.h b/include/nc_panel.h
index 6a9ffea..60eb811 100644
--- a/include/nc_panel.h
+++ b/include/nc_panel.h
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc.              *
+ * Copyright 2020 Thomas E. Dickey                                          *
+ * Copyright 1998-2009,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            *
@@ -32,7 +33,7 @@
  ****************************************************************************/
 
 /*
- * $Id: nc_panel.h,v 1.7 2009/07/04 18:20:02 tom Exp $
+ * $Id: nc_panel.h,v 1.10 2020/02/02 23:34:34 tom Exp $
  *
  *	nc_panel.h
  *
@@ -43,6 +44,9 @@
 #ifndef NC_PANEL_H
 #define NC_PANEL_H 1
 
+#include <ncurses_cfg.h>
+#include <curses.h>
+
 #ifdef __cplusplus
 extern "C"
 {
diff --git a/include/nc_string.h b/include/nc_string.h
index 7e6ccd4..546aa06 100644
--- a/include/nc_string.h
+++ b/include/nc_string.h
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 2012,2013 Free Software Foundation, Inc.                   *
+ * Copyright 2020,2021 Thomas E. Dickey                                     *
+ * Copyright 2012-2013,2016 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            *
@@ -35,8 +36,12 @@
 
 #include <ncurses_cfg.h>
 
+#if HAVE_BSD_STRING_H
+#include <bsd/string.h>
+#endif
+
 /*
- * $Id: nc_string.h,v 1.4 2013/12/15 01:09:19 tom Exp $
+ * $Id: nc_string.h,v 1.9 2021/04/25 00:10:43 tom Exp $
  *
  * String-hacks.  Use these macros to stifle warnings on (presumably) correct
  * uses of strcat, strcpy and sprintf.
@@ -56,18 +61,26 @@
 
 #if USE_STRING_HACKS && HAVE_STRLCAT
 #define _nc_STRCAT(d,s,n)	NCURSES_VOID strlcat((d),(s),NCURSES_CAST(size_t,n))
+#define _nc_STRNCAT(d,s,m,n)	NCURSES_VOID strlcat((d),(s),NCURSES_CAST(size_t,m))
 #else
 #define _nc_STRCAT(d,s,n)	NCURSES_VOID strcat((d),(s))
+#define _nc_STRNCAT(d,s,m,n)	NCURSES_VOID strncat((d),(s),(n))
 #endif
 
 #if USE_STRING_HACKS && HAVE_STRLCPY
 #define _nc_STRCPY(d,s,n)	NCURSES_VOID strlcpy((d),(s),NCURSES_CAST(size_t,n))
+#define _nc_STRNCPY(d,s,n)	NCURSES_VOID strlcpy((d),(s),NCURSES_CAST(size_t,n))
 #else
 #define _nc_STRCPY(d,s,n)	NCURSES_VOID strcpy((d),(s))
+#define _nc_STRNCPY(d,s,n)	NCURSES_VOID strncpy((d),(s),(n))
 #endif
 
 #if USE_STRING_HACKS && HAVE_SNPRINTF
+#ifdef __cplusplus
 #define _nc_SPRINTF             NCURSES_VOID snprintf
+#else
+#define _nc_SPRINTF             NCURSES_VOID (snprintf)
+#endif
 #define _nc_SLIMIT(n)           NCURSES_CAST(size_t,n),
 #else
 #define _nc_SPRINTF             NCURSES_VOID sprintf
diff --git a/include/nc_termios.h b/include/nc_termios.h
index 2217f07..13cc0af 100644
--- a/include/nc_termios.h
+++ b/include/nc_termios.h
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 2011,2014 Free Software Foundation, Inc.                   *
+ * Copyright 2018,2020 Thomas E. Dickey                                     *
+ * Copyright 2011-2014,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            *
@@ -30,11 +31,13 @@
  *  Author: Thomas E. Dickey                        2011                    *
  ****************************************************************************/
 
-/* $Id: nc_termios.h,v 1.3 2014/05/03 19:40:10 juergen Exp $ */
+/* $Id: nc_termios.h,v 1.8 2020/08/29 20:53:19 tom Exp $ */
 
 #ifndef NC_TERMIOS_included
 #define NC_TERMIOS_included 1
 
+#include <ncurses_cfg.h>
+
 #if HAVE_TERMIOS_H && HAVE_TCGETATTR
 
 #else /* !HAVE_TERMIOS_H */
@@ -67,9 +70,13 @@
 #define tcflush(fd, arg) ioctl(fd, TCFLSH, arg)
 #endif
 
+#if defined(EXP_WIN32_DRIVER)
+#undef TERMIOS
+#endif
+
 #else /* !HAVE_TERMIO_H */
 
-#if __MINGW32__
+#if defined(_WIN32) && !defined(EXP_WIN32_DRIVER)
 
 /* lflag bits */
 #define ISIG	0x0001
@@ -153,7 +160,7 @@
 #undef  ttyname
 #define ttyname(fd) NULL
 
-#endif /* __MINGW32__ */
+#endif /* _WIN32 */
 #endif /* HAVE_TERMIO_H */
 
 #endif /* HAVE_TERMIOS_H */
diff --git a/include/nc_tparm.h b/include/nc_tparm.h
index 248f6c0..7817099 100644
--- a/include/nc_tparm.h
+++ b/include/nc_tparm.h
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 2006-2010,2012 Free Software Foundation, Inc.              *
+ * Copyright 2018-2020,2023 Thomas E. Dickey                                *
+ * Copyright 2006-2012,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            *
@@ -30,11 +31,14 @@
  *  Author: Thomas E. Dickey                        2006                    *
  ****************************************************************************/
 
-/* $Id: nc_tparm.h,v 1.6 2012/02/18 21:34:42 tom Exp $ */
+/* $Id: nc_tparm.h,v 1.12 2023/04/16 17:57:28 tom Exp $ */
 
 #ifndef NC_TPARM_included
 #define NC_TPARM_included 1
 
+#include <ncurses_cfg.h>
+#include <curses.h>
+
 /*
  * Cast parameters past the formatting-string for tparm() to match the
  * assumption of the varargs code.
@@ -70,8 +74,20 @@
 #define TPARM_3(a,b,c,d) TPARM_4(a,b,c,d,0)
 #define TPARM_2(a,b,c) TPARM_3(a,b,c,0)
 #define TPARM_1(a,b) TPARM_2(a,b,0)
-#define TPARM_1(a,b) TPARM_2(a,b,0)
 #define TPARM_0(a) TPARM_1(a,0)
 #endif
 
+#ifdef NCURSES_INTERNALS
+#define TIPARM_0(s) _nc_tiparm(0,s)
+#define TIPARM_1(s,a) _nc_tiparm(1,s,a)
+#define TIPARM_2(s,a,b) _nc_tiparm(2,s,a,b)
+#define TIPARM_3(s,a,b,c) _nc_tiparm(3,s,a,b,c)
+#define TIPARM_4(s,a,b,c,d) _nc_tiparm(4,s,a,b,c,d)
+#define TIPARM_5(s,a,b,c,d,e) _nc_tiparm(5,s,a,b,c,d,e)
+#define TIPARM_6(s,a,b,c,d,e,f) _nc_tiparm(6,s,a,b,c,d,e,f)
+#define TIPARM_7(s,a,b,c,d,e,f,g) _nc_tiparm(7,s,a,b,c,d,e,f,g)
+#define TIPARM_8(s,a,b,c,d,e,f,g,h) _nc_tiparm(8,s,a,b,c,d,e,f,g,h)
+#define TIPARM_9(s,a,b,c,d,e,f,g,h,i) _nc_tiparm(9,s,a,b,c,d,e,f,g,h,i)
+#endif
+
 #endif /* NC_TPARM_included */
diff --git a/include/nc_win32.h b/include/nc_win32.h
new file mode 100644
index 0000000..e67b8e0
--- /dev/null
+++ b/include/nc_win32.h
@@ -0,0 +1,185 @@
+/****************************************************************************
+ * Copyright 2018-2020,2023 Thomas E. Dickey                                *
+ * Copyright 2008-2010,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            *
+ * "Software"), to deal in the Software without restriction, including      *
+ * without limitation the rights to use, copy, modify, merge, publish,      *
+ * distribute, distribute with modifications, sublicense, and/or sell       *
+ * copies of the Software, and to permit persons to whom the Software is    *
+ * furnished to do so, subject to the following conditions:                 *
+ *                                                                          *
+ * The above copyright notice and this permission notice shall be included  *
+ * in all copies or substantial portions of the Software.                   *
+ *                                                                          *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
+ * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
+ *                                                                          *
+ * Except as contained in this notice, the name(s) of the above copyright   *
+ * holders shall not be used in advertising or otherwise to promote the     *
+ * sale, use or other dealings in this Software without prior written       *
+ * authorization.                                                           *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Thomas Dickey, 2008-on                                           *
+ ****************************************************************************/
+
+/* $Id: nc_win32.h,v 1.10 2023/02/25 20:09:23 tom Exp $ */
+
+#ifndef NC_WIN32_H
+#define NC_WIN32_H 1
+
+#if defined(_WIN32) || defined(_WIN64)
+
+#ifndef _NC_WINDOWS
+#define _NC_WINDOWS
+#endif
+
+#ifdef TERMIOS
+#error TERMIOS must not be defined on Windows
+#endif
+
+/* We no longer support WindowsXP.
+   Minimum requirement is Windows Vista or Server2008,
+   aka Windows NT 6.0
+*/
+#ifdef WINVER
+#  if WINVER < 0x0600
+#    error WINVER must at least be 0x0600
+#  endif
+#else
+#  define WINVER 0x0600
+#endif
+
+#undef _NC_CHECK_MINTTY
+#if WINVER >= 0x0600
+#define _NC_CHECK_MINTTY
+#endif
+
+#include <windows.h>
+
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>		/* for struct timeval */
+#endif
+
+#ifdef _NC_MSC
+#include <winsock2.h>		/* for struct timeval */
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <ncurses_dll.h>
+
+#if !HAVE_CLOCK_GETTIME && !HAVE_GETTIMEOFDAY
+#undef HAVE_GETTIMEOFDAY
+#define HAVE_GETTIMEOFDAY 2
+extern NCURSES_EXPORT(int) _nc_gettimeofday(struct timeval *, void *);
+#endif
+
+#undef wcwidth
+#define wcwidth(ucs)  _nc_wcwidth((wchar_t)(ucs))
+extern NCURSES_EXPORT(int)    _nc_wcwidth(wchar_t);
+
+#ifdef EVENTLIST_2nd /* test.priv.h just needs the preceding */
+
+extern NCURSES_EXPORT(void)   _nc_console_size(int* Lines, int* Cols);
+extern NCURSES_EXPORT(HANDLE) _nc_console_handle(int fd);
+extern NCURSES_EXPORT(int)    _nc_console_isatty(int fd);
+extern NCURSES_EXPORT(int)    _nc_console_test(int fd);
+extern NCURSES_EXPORT(int)    _nc_console_read(SCREEN *sp,HANDLE hdl,int *buf);
+extern NCURSES_EXPORT(int)    _nc_console_twait(SCREEN *, HANDLE,int,int,int * EVENTLIST_2nd(_nc_eventlist * evl));
+extern NCURSES_EXPORT(WORD)   _nc_console_MapColor(bool fore, int color);
+extern NCURSES_EXPORT(void)   _nc_console_selectActiveHandle(void);
+extern NCURSES_EXPORT(bool)   _nc_console_get_SBI(void);
+extern NCURSES_EXPORT(void)   _nc_console_set_scrollback(bool normal, CONSOLE_SCREEN_BUFFER_INFO * info);
+extern NCURSES_EXPORT(int)    _nc_console_testmouse(SCREEN *,HANDLE,int EVENTLIST_2nd(_nc_eventlist*));
+extern NCURSES_EXPORT(int)    _nc_console_keyok(int keycode,int flag);
+extern NCURSES_EXPORT(bool)   _nc_console_keyExist(int keycode);
+extern NCURSES_EXPORT(bool)   _nc_console_checkinit(bool initFlag, bool assumeTermInfo);
+extern NCURSES_EXPORT(int)    _nc_console_vt_supported(void);
+
+#ifdef _NC_CHECK_MINTTY
+extern NCURSES_EXPORT(int)    _nc_console_checkmintty(int fd, LPHANDLE pMinTTY);
+#endif
+
+#undef VALID_TERM_ENV
+#define MS_TERMINAL "ms-terminal"
+#define VALID_TERM_ENV(term_env, no_terminal) \
+	(term_env = (NonEmpty(term_env) \
+		      ? term_env \
+		      : (_nc_console_vt_supported() \
+		         ? MS_TERMINAL \
+		         : no_terminal)), \
+	 NonEmpty(term_env))
+
+  /*
+   * Various Console mode definitions
+   */
+
+  /* Flags to enable virtual Terminal processing */
+#define VT_FLAG_OUT ENABLE_VIRTUAL_TERMINAL_PROCESSING
+#define VT_FLAG_IN  ENABLE_VIRTUAL_TERMINAL_INPUT
+
+  /* Default flags for input/output modes */
+#define CONMODE_IN_DEFAULT (ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT | ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT)
+#define CONMODE_OUT_DEFAULT (ENABLE_PROCESSED_OUTPUT | DISABLE_NEWLINE_AUTO_RETURN | ENABLE_LVB_GRID_WORLDWIDE)
+
+  /* Flags to reset from RAW/CBREAK */
+#define CONMODE_NORAW    (ENABLE_PROCESSED_INPUT|ENABLE_LINE_INPUT)
+#define CONMODE_NOCBREAK (ENABLE_LINE_INPUT)
+
+
+#if defined(USE_TERM_DRIVER) && defined(USE_WIN32CON_DRIVER)
+extern NCURSES_EXPORT_VAR(TERM_DRIVER) _nc_WIN_DRIVER;
+#endif
+
+#define CON_NUMPAIRS 64
+typedef struct {
+    BOOL initialized;
+    BOOL buffered;
+    BOOL window_only;
+    BOOL progMode;
+    BOOL isMinTTY;
+    BOOL isTermInfoConsole;
+    HANDLE out;
+    HANDLE inp;
+    HANDLE hdl;
+    HANDLE lastOut;
+    int numButtons;
+    LPDWORD ansi_map;
+    LPDWORD map;
+    LPDWORD rmap;
+    WORD pairs[CON_NUMPAIRS];
+    COORD origin;
+    CHAR_INFO *save_screen;
+    COORD save_size;
+    SMALL_RECT save_region;
+    CONSOLE_SCREEN_BUFFER_INFO SBI;
+    CONSOLE_SCREEN_BUFFER_INFO save_SBI;
+    CONSOLE_CURSOR_INFO save_CI;
+    TTY originalMode;
+} ConsoleInfo;
+
+extern NCURSES_EXPORT_VAR(ConsoleInfo) _nc_CONSOLE;
+#define WINCONSOLE _nc_CONSOLE
+
+#define TypeAlloca(type,count)(type*) _alloca(sizeof(type)*(size_t)(count))
+
+#endif /* EVENTLIST_2nd */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WIN32 || _WIN64 */
+
+#endif /* NC_WIN32_H */
diff --git a/include/ncurses.h b/include/ncurses.h
deleted file mode 120000
index 149de6c..0000000
--- a/include/ncurses.h
+++ /dev/null
@@ -1 +0,0 @@
-curses.h
\ No newline at end of file
diff --git a/include/ncurses_cfg.h b/include/ncurses_cfg.h
deleted file mode 100644
index 5c8795d..0000000
--- a/include/ncurses_cfg.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/* include/ncurses_cfg.h.  Generated automatically by configure.  */
-/****************************************************************************
- * Copyright (c) 1998-2004,2005 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            *
- * "Software"), to deal in the Software without restriction, including      *
- * without limitation the rights to use, copy, modify, merge, publish,      *
- * distribute, distribute with modifications, sublicense, and/or sell       *
- * copies of the Software, and to permit persons to whom the Software is    *
- * furnished to do so, subject to the following conditions:                 *
- *                                                                          *
- * The above copyright notice and this permission notice shall be included  *
- * in all copies or substantial portions of the Software.                   *
- *                                                                          *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
- * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
- * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
- *                                                                          *
- * Except as contained in this notice, the name(s) of the above copyright   *
- * holders shall not be used in advertising or otherwise to promote the     *
- * sale, use or other dealings in this Software without prior written       *
- * authorization.                                                           *
- ****************************************************************************/
-
-/****************************************************************************
- *  Author: Thomas E. Dickey <dickey@clark.net> 1997                        *
- ****************************************************************************/
-/*
- * $Id: ncurses_cfg.hin,v 1.7 2005/01/02 01:26:58 tom Exp $
- *
- * This is a template-file used to generate the "ncurses_cfg.h" file.
- *
- * Rather than list every definition, the configuration script substitutes the
- * definitions that it finds using 'sed'.  You need a patch (original date
- * 971222) to autoconf 2.12 or 2.13 to do this.
- *
- * See:
- *	http://invisible-island.net/autoconf/
- *	ftp://invisible-island.net/autoconf/
- */
-#ifndef NC_CONFIG_H
-#define NC_CONFIG_H
-
-#define PACKAGE "ncurses"
-#define NCURSES_VERSION "6.0"
-#define NCURSES_PATCHDATE 20150808
-#define SYSTEM_NAME "linux-androideabi"
-#if 0
-void exit (int);
-#endif
-#define HAVE_LONG_FILE_NAMES 1
-#define MIXEDCASE_FILENAMES 1
-#define TERMINFO_DIRS "/system_ext/etc/terminfo"
-#define TERMINFO "/system_ext/etc/terminfo"
-#define PURE_TERMINFO 1
-#define USE_HOME_TERMINFO 1
-#define USE_ROOT_ENVIRON 1
-#define HAVE_REMOVE 1
-#define HAVE_UNLINK 1
-#define HAVE_LINK 1
-#define HAVE_SYMLINK 1
-#define USE_LINKS 1
-#define _FILE_OFFSET_BITS 64
-#define HAVE_FSEEKO 1
-#define HAVE_ASSUME_DEFAULT_COLORS 1
-#define HAVE_CURSES_VERSION 1
-#define HAVE_HAS_KEY 1
-#define HAVE_RESIZETERM 1
-#define HAVE_RESIZE_TERM 1
-#define HAVE_TERM_ENTRY_H 1
-#define HAVE_USE_DEFAULT_COLORS 1
-#define HAVE_USE_SCREEN 1
-#define HAVE_USE_WINDOW 1
-#define HAVE_WRESIZE 1
-#define NCURSES_EXT_FUNCS 1
-#define NCURSES_SP_FUNCS 1
-#define NCURSES_EXT_PUTWIN 1
-#define NCURSES_NO_PADDING 1
-#define STDC_HEADERS 1
-#define HAVE_SYS_TYPES_H 1
-#define HAVE_SYS_STAT_H 1
-#define HAVE_STDLIB_H 1
-#define HAVE_STRING_H 1
-#define HAVE_MEMORY_H 1
-#define HAVE_STRINGS_H 1
-#define HAVE_INTTYPES_H 1
-#define HAVE_STDINT_H 1
-#define HAVE_UNISTD_H 1
-#define SIZEOF_SIGNED_CHAR 1
-#define USE_SIGWINCH 1
-#define USE_ASSUMED_COLOR 1
-#define USE_HASHMAP 1
-#define NCURSES_WRAP_PREFIX "_nc_"
-#define GCC_SCANF 1
-#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var)))
-#define GCC_PRINTF 1
-#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
-#define GCC_UNUSED __attribute__((unused))
-#define GCC_NORETURN __attribute__((noreturn))
-#define HAVE_NC_ALLOC_H 1
-#define HAVE_GETTIMEOFDAY 1
-#define STDC_HEADERS 1
-#define HAVE_DIRENT_H 1
-#define TIME_WITH_SYS_TIME 1
-#define HAVE_REGEX_H_FUNCS 1
-#define HAVE_FCNTL_H 1
-#define HAVE_GETOPT_H 1
-#define HAVE_LIMITS_H 1
-#define HAVE_LOCALE_H 1
-#define HAVE_MATH_H 1
-#define HAVE_POLL_H 1
-#define HAVE_SYS_IOCTL_H 1
-#define HAVE_SYS_PARAM_H 1
-#define HAVE_SYS_POLL_H 1
-#define HAVE_SYS_SELECT_H 1
-#define HAVE_SYS_TIME_H 1
-#define HAVE_SYS_TIMES_H 1
-#define HAVE_TTYENT_H 1
-#define HAVE_UNISTD_H 1
-#define HAVE_WCTYPE_H 1
-#define HAVE_UNISTD_H 1
-#define HAVE_GETOPT_H 1
-#define HAVE_GETOPT_HEADER 1
-#define HAVE_SYS_TIME_SELECT 1
-#define SIG_ATOMIC_T volatile sig_atomic_t
-#define HAVE_GETCWD 1
-#define HAVE_GETEGID 1
-#define HAVE_GETEUID 1
-#define HAVE_GETOPT 1
-#define HAVE_ISSETUGID 1
-#define HAVE_POLL 1
-#define HAVE_PUTENV 1
-#define HAVE_REMOVE 1
-#define HAVE_SELECT 1
-#define HAVE_SETBUF 1
-#define HAVE_SETBUFFER 1
-#define HAVE_SETENV 1
-#define HAVE_SETVBUF 1
-#define HAVE_SIGACTION 1
-#define HAVE_STRDUP 1
-#define HAVE_STRSTR 1
-#define HAVE_TCGETPGRP 1
-#define HAVE_TIMES 1
-#define HAVE_VSNPRINTF 1
-#define HAVE_ISASCII 1
-#define HAVE_TERMIO_H 1
-#define HAVE_TERMIOS_H 1
-#define HAVE_UNISTD_H 1
-#define HAVE_TCGETATTR 1
-#define HAVE_VSSCANF 1
-#define HAVE_MKSTEMP 1
-#define HAVE_SIZECHANGE 1
-#define HAVE_VA_COPY 1
-#define HAVE___VA_COPY 1
-#define HAVE_UNISTD_H 1
-#define HAVE_FORK 1
-#define HAVE_VFORK 1
-#define HAVE_WORKING_VFORK 1
-#define HAVE_WORKING_FORK 1
-#define USE_OPENPTY_HEADER <pty.h>
-#define USE_XTERM_PTY 1
-#define HAVE_SLK_COLOR 1
-#define HAVE_PANEL_H 1
-#define HAVE_LIBPANEL 1
-#define HAVE_MENU_H 1
-#define HAVE_LIBMENU 1
-#define HAVE_FORM_H 1
-#define HAVE_LIBFORM 1
-#define NCURSES_PATHSEP ':'
-#define NCURSES_VERSION_STRING "6.0.20150808"
-#define NCURSES_OSPEED_COMPAT 1
-
-#include <ncurses_def.h>
-
-	/* The C compiler may not treat these properly but C++ has to */
-#ifdef __cplusplus
-#undef const
-#undef inline
-#else
-#if defined(lint) || defined(TRACE)
-#undef inline
-#define inline /* nothing */
-#endif
-#endif
-
-	/* On HP-UX, the C compiler doesn't grok mbstate_t without
-	   -D_XOPEN_SOURCE=500. However, this causes problems on
-	   IRIX. So, we #define mbstate_t to int in configure.in
-	   only for the C compiler if needed. */
-#ifndef __cplusplus
-#ifdef NEED_MBSTATE_T_DEF
-#define mbstate_t int
-#endif
-#endif
-
-#endif /* NC_CONFIG_H */
diff --git a/include/ncurses_cfg.hin b/include/ncurses_cfg.hin
index 3f8a482..8d9ed81 100644
--- a/include/ncurses_cfg.hin
+++ b/include/ncurses_cfg.hin
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998-2004,2005 Free Software Foundation, Inc.              *
+ * Copyright 2020 Thomas E. Dickey                                          *
+ * Copyright 1998-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            *
@@ -27,10 +28,13 @@
  ****************************************************************************/
 
 /****************************************************************************
- *  Author: Thomas E. Dickey <dickey@clark.net> 1997                        *
+ *  Author: Thomas E. Dickey      1997-on                                   *
  ****************************************************************************/
 /*
- * $Id: ncurses_cfg.hin,v 1.7 2005/01/02 01:26:58 tom Exp $
+ * $Id: ncurses_cfg.hin,v 1.13 2020/03/08 12:37:59 tom Exp $
+ *
+ * Both ncurses_cfg.h and ncurses_def.h are internal header-files used when
+ * building ncurses.
  *
  * This is a template-file used to generate the "ncurses_cfg.h" file.
  *
@@ -39,8 +43,8 @@
  * 971222) to autoconf 2.12 or 2.13 to do this.
  *
  * See:
- *	http://invisible-island.net/autoconf/
- *	ftp://invisible-island.net/autoconf/
+ *	https://invisible-island.net/autoconf/
+ *	ftp://ftp.invisible-island.net/autoconf/
  */
 #ifndef NC_CONFIG_H
 #define NC_CONFIG_H
@@ -52,11 +56,6 @@
 #ifdef __cplusplus
 #undef const
 #undef inline
-#else
-#if defined(lint) || defined(TRACE)
-#undef inline
-#define inline /* nothing */
-#endif
 #endif
 
 	/* On HP-UX, the C compiler doesn't grok mbstate_t without
@@ -69,4 +68,7 @@
 #endif
 #endif
 
+/*
+ * vile:cmode
+ */
 #endif /* NC_CONFIG_H */
diff --git a/include/ncurses_def.h b/include/ncurses_def.h
deleted file mode 100644
index e4ced67..0000000
--- a/include/ncurses_def.h
+++ /dev/null
@@ -1,792 +0,0 @@
-/*
- * This file is generated by ./MKncurses_def.sh
- */
-
-#ifndef NC_DEFINE_H
-#define NC_DEFINE_H 1
-
-#ifndef BROKEN_LINKER
-#define BROKEN_LINKER 0
-#endif
-
-#ifndef BSD_TPUTS
-#define BSD_TPUTS 0
-#endif
-
-#ifndef CGETENT_CONST
-#define CGETENT_CONST /* nothing */
-#endif
-
-#ifndef CPP_HAS_PARAM_INIT
-#define CPP_HAS_PARAM_INIT 0
-#endif
-
-#ifndef CURSES_ACS_ARRAY
-#define CURSES_ACS_ARRAY acs_map
-#endif
-
-#ifndef CURSES_WACS_ARRAY
-#define CURSES_WACS_ARRAY _nc_wacs
-#endif
-
-#ifndef DECL_ERRNO
-#define DECL_ERRNO 0
-#endif
-
-#ifndef ETIP_NEEDS_MATH_H
-#define ETIP_NEEDS_MATH_H 0
-#endif
-
-#ifndef GCC_NORETURN
-#define GCC_NORETURN /* nothing */
-#endif
-
-#ifndef GCC_UNUSED
-#define GCC_UNUSED /* nothing */
-#endif
-
-#ifndef HAVE_ASSUME_DEFAULT_COLORS
-#define HAVE_ASSUME_DEFAULT_COLORS 0
-#endif
-
-#ifndef HAVE_BIG_CORE
-#define HAVE_BIG_CORE 0
-#endif
-
-#ifndef HAVE_BSD_CGETENT
-#define HAVE_BSD_CGETENT 0
-#endif
-
-#ifndef HAVE_BSD_SIGNAL_H
-#define HAVE_BSD_SIGNAL_H 0
-#endif
-
-#ifndef HAVE_BTOWC
-#define HAVE_BTOWC 0
-#endif
-
-#ifndef HAVE_BUILTIN_H
-#define HAVE_BUILTIN_H 0
-#endif
-
-#ifndef HAVE_CHGAT
-#define HAVE_CHGAT 1
-#endif
-
-#ifndef HAVE_COLOR_SET
-#define HAVE_COLOR_SET 1
-#endif
-
-#ifndef HAVE_DIRENT_H
-#define HAVE_DIRENT_H 0
-#endif
-
-#ifndef HAVE_ERRNO
-#define HAVE_ERRNO 0
-#endif
-
-#ifndef HAVE_FCNTL_H
-#define HAVE_FCNTL_H 0
-#endif
-
-#ifndef HAVE_FILTER
-#define HAVE_FILTER 1
-#endif
-
-#ifndef HAVE_FORM_H
-#define HAVE_FORM_H 0
-#endif
-
-#ifndef HAVE_GETBEGX
-#define HAVE_GETBEGX 1
-#endif
-
-#ifndef HAVE_GETCURX
-#define HAVE_GETCURX 1
-#endif
-
-#ifndef HAVE_GETCWD
-#define HAVE_GETCWD 0
-#endif
-
-#ifndef HAVE_GETEGID
-#define HAVE_GETEGID 0
-#endif
-
-#ifndef HAVE_GETEUID
-#define HAVE_GETEUID 0
-#endif
-
-#ifndef HAVE_GETMAXX
-#define HAVE_GETMAXX 1
-#endif
-
-#ifndef HAVE_GETNSTR
-#define HAVE_GETNSTR 0
-#endif
-
-#ifndef HAVE_GETOPT_H
-#define HAVE_GETOPT_H 0
-#endif
-
-#ifndef HAVE_GETPARX
-#define HAVE_GETPARX 1
-#endif
-
-#ifndef HAVE_GETTIMEOFDAY
-#define HAVE_GETTIMEOFDAY 0
-#endif
-
-#ifndef HAVE_GETTTYNAM
-#define HAVE_GETTTYNAM 0
-#endif
-
-#ifndef HAVE_GETWIN
-#define HAVE_GETWIN 1
-#endif
-
-#ifndef HAVE_GPM_H
-#define HAVE_GPM_H 0
-#endif
-
-#ifndef HAVE_GPP_BUILTIN_H
-#define HAVE_GPP_BUILTIN_H 0
-#endif
-
-#ifndef HAVE_GXX_BUILTIN_H
-#define HAVE_GXX_BUILTIN_H 0
-#endif
-
-#ifndef HAVE_HAS_KEY
-#define HAVE_HAS_KEY 0
-#endif
-
-#ifndef HAVE_INTTYPES_H
-#define HAVE_INTTYPES_H 0
-#endif
-
-#ifndef HAVE_IOSTREAM
-#define HAVE_IOSTREAM 0
-#endif
-
-#ifndef HAVE_ISASCII
-#define HAVE_ISASCII 0
-#endif
-
-#ifndef HAVE_ISSETUGID
-#define HAVE_ISSETUGID 0
-#endif
-
-#ifndef HAVE_LANGINFO_CODESET
-#define HAVE_LANGINFO_CODESET 0
-#endif
-
-#ifndef HAVE_LIBC_H
-#define HAVE_LIBC_H 0
-#endif
-
-#ifndef HAVE_LIBDBMALLOC
-#define HAVE_LIBDBMALLOC 0
-#endif
-
-#ifndef HAVE_LIBDMALLOC
-#define HAVE_LIBDMALLOC 0
-#endif
-
-#ifndef HAVE_LIBFORM
-#define HAVE_LIBFORM 0
-#endif
-
-#ifndef HAVE_LIBGPM
-#define HAVE_LIBGPM 0
-#endif
-
-#ifndef HAVE_LIBMENU
-#define HAVE_LIBMENU 0
-#endif
-
-#ifndef HAVE_LIBMPATROL
-#define HAVE_LIBMPATROL 0
-#endif
-
-#ifndef HAVE_LIBPANEL
-#define HAVE_LIBPANEL 0
-#endif
-
-#ifndef HAVE_LIMITS_H
-#define HAVE_LIMITS_H 0
-#endif
-
-#ifndef HAVE_LINK
-#define HAVE_LINK 0
-#endif
-
-#ifndef HAVE_LOCALE_H
-#define HAVE_LOCALE_H 0
-#endif
-
-#ifndef HAVE_LONG_FILE_NAMES
-#define HAVE_LONG_FILE_NAMES 0
-#endif
-
-#ifndef HAVE_MATH_H
-#define HAVE_MATH_H 0
-#endif
-
-#ifndef HAVE_MBLEN
-#define HAVE_MBLEN 0
-#endif
-
-#ifndef HAVE_MBRLEN
-#define HAVE_MBRLEN 0
-#endif
-
-#ifndef HAVE_MBRTOWC
-#define HAVE_MBRTOWC 0
-#endif
-
-#ifndef HAVE_MBSRTOWCS
-#define HAVE_MBSRTOWCS 0
-#endif
-
-#ifndef HAVE_MBSTOWCS
-#define HAVE_MBSTOWCS 0
-#endif
-
-#ifndef HAVE_MBTOWC
-#define HAVE_MBTOWC 0
-#endif
-
-#ifndef HAVE_MENU_H
-#define HAVE_MENU_H 0
-#endif
-
-#ifndef HAVE_MKSTEMP
-#define HAVE_MKSTEMP 0
-#endif
-
-#ifndef HAVE_MVVLINE
-#define HAVE_MVVLINE 1
-#endif
-
-#ifndef HAVE_MVWVLINE
-#define HAVE_MVWVLINE 1
-#endif
-
-#ifndef HAVE_NANOSLEEP
-#define HAVE_NANOSLEEP 0
-#endif
-
-#ifndef HAVE_NC_ALLOC_H
-#define HAVE_NC_ALLOC_H 0
-#endif
-
-#ifndef HAVE_PANEL_H
-#define HAVE_PANEL_H 0
-#endif
-
-#ifndef HAVE_POLL
-#define HAVE_POLL 0
-#endif
-
-#ifndef HAVE_POLL_H
-#define HAVE_POLL_H 0
-#endif
-
-#ifndef HAVE_PURIFY
-#define HAVE_PURIFY 0
-#endif
-
-#ifndef HAVE_PUTENV
-#define HAVE_PUTENV 0
-#endif
-
-#ifndef HAVE_PUTWC
-#define HAVE_PUTWC 0
-#endif
-
-#ifndef HAVE_PUTWIN
-#define HAVE_PUTWIN 1
-#endif
-
-#ifndef HAVE_REGEXPR_H_FUNCS
-#define HAVE_REGEXPR_H_FUNCS 0
-#endif
-
-#ifndef HAVE_REGEXP_H_FUNCS
-#define HAVE_REGEXP_H_FUNCS 0
-#endif
-
-#ifndef HAVE_REGEX_H_FUNCS
-#define HAVE_REGEX_H_FUNCS 0
-#endif
-
-#ifndef HAVE_REMOVE
-#define HAVE_REMOVE 0
-#endif
-
-#ifndef HAVE_RESIZETERM
-#define HAVE_RESIZETERM 0
-#endif
-
-#ifndef HAVE_RESIZE_TERM
-#define HAVE_RESIZE_TERM 0
-#endif
-
-#ifndef HAVE_RIPOFFLINE
-#define HAVE_RIPOFFLINE 1
-#endif
-
-#ifndef HAVE_SCR_DUMP
-#define HAVE_SCR_DUMP 1
-#endif
-
-#ifndef HAVE_SELECT
-#define HAVE_SELECT 0
-#endif
-
-#ifndef HAVE_SETBUF
-#define HAVE_SETBUF 0
-#endif
-
-#ifndef HAVE_SETBUFFER
-#define HAVE_SETBUFFER 0
-#endif
-
-#ifndef HAVE_SETENV
-#define HAVE_SETENV 0
-#endif
-
-#ifndef HAVE_SETUPTERM
-#define HAVE_SETUPTERM 1
-#endif
-
-#ifndef HAVE_SETVBUF
-#define HAVE_SETVBUF 0
-#endif
-
-#ifndef HAVE_SGTTY_H
-#define HAVE_SGTTY_H 0
-#endif
-
-#ifndef HAVE_SIGACTION
-#define HAVE_SIGACTION 0
-#endif
-
-#ifndef HAVE_SIGVEC
-#define HAVE_SIGVEC 0
-#endif
-
-#ifndef HAVE_SIZECHANGE
-#define HAVE_SIZECHANGE 0
-#endif
-
-#ifndef HAVE_SLK_COLOR
-#define HAVE_SLK_COLOR 0
-#endif
-
-#ifndef HAVE_SLK_INIT
-#define HAVE_SLK_INIT 1
-#endif
-
-#ifndef HAVE_SNPRINTF
-#define HAVE_SNPRINTF 0
-#endif
-
-#ifndef HAVE_STDINT_H
-#define HAVE_STDINT_H 0
-#endif
-
-#ifndef HAVE_STRDUP
-#define HAVE_STRDUP 0
-#endif
-
-#ifndef HAVE_STRLCAT
-#define HAVE_STRLCAT 0
-#endif
-
-#ifndef HAVE_STRLCPY
-#define HAVE_STRLCPY 0
-#endif
-
-#ifndef HAVE_STRSTR
-#define HAVE_STRSTR 0
-#endif
-
-#ifndef HAVE_SYMLINK
-#define HAVE_SYMLINK 0
-#endif
-
-#ifndef HAVE_SYS_BSDTYPES_H
-#define HAVE_SYS_BSDTYPES_H 0
-#endif
-
-#ifndef HAVE_SYS_IOCTL_H
-#define HAVE_SYS_IOCTL_H 0
-#endif
-
-#ifndef HAVE_SYS_PARAM_H
-#define HAVE_SYS_PARAM_H 0
-#endif
-
-#ifndef HAVE_SYS_POLL_H
-#define HAVE_SYS_POLL_H 0
-#endif
-
-#ifndef HAVE_SYS_SELECT_H
-#define HAVE_SYS_SELECT_H 0
-#endif
-
-#ifndef HAVE_SYS_TERMIO_H
-#define HAVE_SYS_TERMIO_H 0
-#endif
-
-#ifndef HAVE_SYS_TIMES_H
-#define HAVE_SYS_TIMES_H 0
-#endif
-
-#ifndef HAVE_SYS_TIME_H
-#define HAVE_SYS_TIME_H 0
-#endif
-
-#ifndef HAVE_SYS_TIME_SELECT
-#define HAVE_SYS_TIME_SELECT 0
-#endif
-
-#ifndef HAVE_TCGETATTR
-#define HAVE_TCGETATTR 0
-#endif
-
-#ifndef HAVE_TCGETPGRP
-#define HAVE_TCGETPGRP 0
-#endif
-
-#ifndef HAVE_TELL
-#define HAVE_TELL 0
-#endif
-
-#ifndef HAVE_TERMATTRS
-#define HAVE_TERMATTRS 1
-#endif
-
-#ifndef HAVE_TERMIOS_H
-#define HAVE_TERMIOS_H 0
-#endif
-
-#ifndef HAVE_TERMIO_H
-#define HAVE_TERMIO_H 0
-#endif
-
-#ifndef HAVE_TERMNAME
-#define HAVE_TERMNAME 1
-#endif
-
-#ifndef HAVE_TERM_ENTRY_H
-#define HAVE_TERM_ENTRY_H 1
-#endif
-
-#ifndef HAVE_TERM_H
-#define HAVE_TERM_H 1
-#endif
-
-#ifndef HAVE_TGETENT
-#define HAVE_TGETENT 1
-#endif
-
-#ifndef HAVE_TIGETNUM
-#define HAVE_TIGETNUM 1
-#endif
-
-#ifndef HAVE_TIGETSTR
-#define HAVE_TIGETSTR 1
-#endif
-
-#ifndef HAVE_TIMES
-#define HAVE_TIMES 0
-#endif
-
-#ifndef HAVE_TTYENT_H
-#define HAVE_TTYENT_H 0
-#endif
-
-#ifndef HAVE_TYPEAHEAD
-#define HAVE_TYPEAHEAD 1
-#endif
-
-#ifndef HAVE_TYPEINFO
-#define HAVE_TYPEINFO 0
-#endif
-
-#ifndef HAVE_TYPE_ATTR_T
-#define HAVE_TYPE_ATTR_T 0
-#endif
-
-#ifndef HAVE_TYPE_SIGACTION
-#define HAVE_TYPE_SIGACTION 0
-#endif
-
-#ifndef HAVE_UNCTRL_H
-#define HAVE_UNCTRL_H 1
-#endif
-
-#ifndef HAVE_UNISTD_H
-#define HAVE_UNISTD_H 0
-#endif
-
-#ifndef HAVE_UNLINK
-#define HAVE_UNLINK 0
-#endif
-
-#ifndef HAVE_USE_DEFAULT_COLORS
-#define HAVE_USE_DEFAULT_COLORS 0
-#endif
-
-#ifndef HAVE_USE_ENV
-#define HAVE_USE_ENV 1
-#endif
-
-#ifndef HAVE_USE_EXTENDED_NAMES
-#define HAVE_USE_EXTENDED_NAMES 0
-#endif
-
-#ifndef HAVE_USE_SCREEN
-#define HAVE_USE_SCREEN 0
-#endif
-
-#ifndef HAVE_USE_WINDOW
-#define HAVE_USE_WINDOW 0
-#endif
-
-#ifndef HAVE_VFSCANF
-#define HAVE_VFSCANF 0
-#endif
-
-#ifndef HAVE_VIDPUTS
-#define HAVE_VIDPUTS 1
-#endif
-
-#ifndef HAVE_VID_PUTS
-#define HAVE_VID_PUTS 1
-#endif
-
-#ifndef HAVE_VSNPRINTF
-#define HAVE_VSNPRINTF 0
-#endif
-
-#ifndef HAVE_VSSCANF
-#define HAVE_VSSCANF 0
-#endif
-
-#ifndef HAVE_WCSRTOMBS
-#define HAVE_WCSRTOMBS 0
-#endif
-
-#ifndef HAVE_WCSTOMBS
-#define HAVE_WCSTOMBS 0
-#endif
-
-#ifndef HAVE_WCTOB
-#define HAVE_WCTOB 0
-#endif
-
-#ifndef HAVE_WCTOMB
-#define HAVE_WCTOMB 0
-#endif
-
-#ifndef HAVE_WCTYPE_H
-#define HAVE_WCTYPE_H 0
-#endif
-
-#ifndef HAVE_WINSSTR
-#define HAVE_WINSSTR 1
-#endif
-
-#ifndef HAVE_WORKING_POLL
-#define HAVE_WORKING_POLL 0
-#endif
-
-#ifndef HAVE_WRESIZE
-#define HAVE_WRESIZE 0
-#endif
-
-#ifndef HAVE_WSYNCDOWN
-#define HAVE_WSYNCDOWN 1
-#endif
-
-#ifndef HAVE__DOSCAN
-#define HAVE__DOSCAN 0
-#endif
-
-#ifndef MIXEDCASE_FILENAMES
-#define MIXEDCASE_FILENAMES 0
-#endif
-
-#ifndef NCURSES_CHAR_EQ
-#define NCURSES_CHAR_EQ 0
-#endif
-
-#ifndef NCURSES_EXPANDED
-#define NCURSES_EXPANDED 0
-#endif
-
-#ifndef NCURSES_EXT_COLORS
-#define NCURSES_EXT_COLORS 0
-#endif
-
-#ifndef NCURSES_EXT_FUNCS
-#define NCURSES_EXT_FUNCS 0
-#endif
-
-#ifndef NCURSES_EXT_PUTWIN
-#define NCURSES_EXT_PUTWIN 0
-#endif
-
-#ifndef NCURSES_NO_PADDING
-#define NCURSES_NO_PADDING 0
-#endif
-
-#ifndef NCURSES_OSPEED_COMPAT
-#define NCURSES_OSPEED_COMPAT 0
-#endif
-
-#ifndef NCURSES_PATHSEP
-#define NCURSES_PATHSEP ':'
-#endif
-
-#ifndef NCURSES_WIDECHAR
-#define NCURSES_WIDECHAR 0
-#endif
-
-#ifndef NEED_PTEM_H
-#define NEED_PTEM_H 0
-#endif
-
-#ifndef NO_LEAKS
-#define NO_LEAKS 0
-#endif
-
-#ifndef PURE_TERMINFO
-#define PURE_TERMINFO 0
-#endif
-
-#ifndef STDC_HEADERS
-#define STDC_HEADERS 0
-#endif
-
-#ifndef SVR4_ACTION
-#define SVR4_ACTION 0
-#endif
-
-#ifndef SVR4_TERMIO
-#define SVR4_TERMIO 0
-#endif
-
-#ifndef SYSTEM_NAME
-#define SYSTEM_NAME "unknown"
-#endif
-
-#ifndef TERMINFO
-#define TERMINFO "none"
-#endif
-
-#ifndef TERMPATH
-#define TERMPATH "none"
-#endif
-
-#ifndef TIME_WITH_SYS_TIME
-#define TIME_WITH_SYS_TIME 0
-#endif
-
-#ifndef TYPEOF_CHTYPE
-#define TYPEOF_CHTYPE 0
-#endif
-
-#ifndef USE_COLORFGBG
-#define USE_COLORFGBG 0
-#endif
-
-#ifndef USE_GETCAP
-#define USE_GETCAP 0
-#endif
-
-#ifndef USE_GETCAP_CACHE
-#define USE_GETCAP_CACHE 0
-#endif
-
-#ifndef USE_HARD_TABS
-#define USE_HARD_TABS 0
-#endif
-
-#ifndef USE_HASHED_DB
-#define USE_HASHED_DB 0
-#endif
-
-#ifndef USE_HASHMAP
-#define USE_HASHMAP 0
-#endif
-
-#ifndef USE_HOME_TERMINFO
-#define USE_HOME_TERMINFO 0
-#endif
-
-#ifndef USE_LINKS
-#define USE_LINKS 0
-#endif
-
-#ifndef USE_MY_MEMMOVE
-#define USE_MY_MEMMOVE 0
-#endif
-
-#ifndef USE_OK_BCOPY
-#define USE_OK_BCOPY 0
-#endif
-
-#ifndef USE_PTHREADS_EINTR
-#define USE_PTHREADS_EINTR 0
-#endif
-
-#ifndef USE_RCS_IDS
-#define USE_RCS_IDS 0
-#endif
-
-#ifndef USE_REENTRANT
-#define USE_REENTRANT 0
-#endif
-
-#ifndef USE_SAFE_SPRINTF
-#define USE_SAFE_SPRINTF 0
-#endif
-
-#ifndef USE_SCROLL_HINTS
-#define USE_SCROLL_HINTS 0
-#endif
-
-#ifndef USE_SIGWINCH
-#define USE_SIGWINCH 0
-#endif
-
-#ifndef USE_STRING_HACKS
-#define USE_STRING_HACKS 0
-#endif
-
-#ifndef USE_SYMLINKS
-#define USE_SYMLINKS 0
-#endif
-
-#ifndef USE_SYSMOUSE
-#define USE_SYSMOUSE 0
-#endif
-
-#ifndef USE_WEAK_SYMBOLS
-#define USE_WEAK_SYMBOLS 0
-#endif
-
-#ifndef USE_WIDEC_SUPPORT
-#define USE_WIDEC_SUPPORT 0
-#endif
-
-#ifndef USE_XMC_SUPPORT
-#define USE_XMC_SUPPORT 0
-#endif
-
-#endif /* NC_DEFINE_H */
diff --git a/include/ncurses_defs b/include/ncurses_defs
index efaf635..c0da3ad 100644
--- a/include/ncurses_defs
+++ b/include/ncurses_defs
@@ -1,6 +1,7 @@
-# $Id: ncurses_defs,v 1.69 2015/03/27 10:47:31 tom Exp $
+# $Id: ncurses_defs,v 1.110 2024/03/02 20:38:23 tom Exp $
 ##############################################################################
-# Copyright (c) 2000-2014,2015 Free Software Foundation, Inc.                #
+# Copyright 2018-2023,2024 Thomas E. Dickey                                  #
+# Copyright 2000-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 "Software"), #
@@ -41,19 +42,37 @@
 ETIP_NEEDS_MATH_H
 GCC_NORETURN	/* nothing */
 GCC_UNUSED	/* nothing */
+HAVE_ALLOC_PAIR
 HAVE_ASSUME_DEFAULT_COLORS
 HAVE_BIG_CORE
 HAVE_BSD_CGETENT
 HAVE_BSD_SIGNAL_H
-HAVE_BTOWC 
+HAVE_BSD_STRING_H
+HAVE_BTOWC
 HAVE_BUILTIN_H
 HAVE_CHGAT	1
+HAVE_CLOCK_GETTIME
+HAVE_COLOR_CONTENT	1
 HAVE_COLOR_SET	1
+HAVE_CONSISTENT_GETENV
+HAVE_CONSISTENT_MB_LEN_MAX
+HAVE_COPYWIN	1
+HAVE_CURSCR	1
+HAVE_CURSES_DATA_TABSIZE	1
+HAVE_CURSES_DATA_TTYTYPE	1
+HAVE_CURSES_TRACE	1
+HAVE_DELSCREEN	1
+HAVE_DERWIN	1
 HAVE_DIRENT_H
+HAVE_DUPWIN	1
 HAVE_ERRNO
+HAVE_EXIT_CURSES	1
+HAVE_EXIT_TERMINFO	1
 HAVE_FCNTL_H
 HAVE_FILTER	1
 HAVE_FORM_H
+HAVE_FPATHCONF
+HAVE_GETAUXVAL
 HAVE_GETBEGX	1
 HAVE_GETCURX	1
 HAVE_GETCWD
@@ -65,11 +84,14 @@
 HAVE_GETPARX	1
 HAVE_GETTIMEOFDAY
 HAVE_GETTTYNAM
+HAVE_GETUID
 HAVE_GETWIN	1
 HAVE_GPM_H
 HAVE_GPP_BUILTIN_H
 HAVE_GXX_BUILTIN_H
+HAVE_HALFDELAY	1
 HAVE_HAS_KEY
+HAVE_INIT_EXTENDED_COLOR
 HAVE_INTTYPES_H
 HAVE_IOSTREAM
 HAVE_ISASCII
@@ -83,10 +105,13 @@
 HAVE_LIBMENU
 HAVE_LIBMPATROL
 HAVE_LIBPANEL
+HAVE_LIB_PCRE2
 HAVE_LIMITS_H
 HAVE_LINK
+HAVE_LOCALECONV
 HAVE_LOCALE_H
 HAVE_LONG_FILE_NAMES
+HAVE_MATH_FUNCS
 HAVE_MATH_H
 HAVE_MBLEN
 HAVE_MBRLEN
@@ -96,29 +121,39 @@
 HAVE_MBTOWC
 HAVE_MENU_H
 HAVE_MKSTEMP
+HAVE_MVDERWIN	1
 HAVE_MVVLINE	1
+HAVE_MVWIN	1
 HAVE_MVWVLINE	1
 HAVE_NANOSLEEP
+HAVE_NAPMS	1
 HAVE_NC_ALLOC_H
+HAVE_NEWPAD	1
 HAVE_PANEL_H
+HAVE_PATH_TTYS
+HAVE_PCRE2POSIX_H
+HAVE_PCREPOSIX_H
 HAVE_POLL
 HAVE_POLL_H
 HAVE_PURIFY
 HAVE_PUTENV
-HAVE_PUTWC 
+HAVE_PUTWC
 HAVE_PUTWIN	1
 HAVE_REGEXPR_H_FUNCS
 HAVE_REGEXP_H_FUNCS
 HAVE_REGEX_H_FUNCS
 HAVE_REMOVE
+HAVE_RESET_COLOR_PAIRS
 HAVE_RESIZETERM
 HAVE_RESIZE_TERM
+HAVE_RESTARTTERM	1
 HAVE_RIPOFFLINE	1
 HAVE_SCR_DUMP 1
 HAVE_SELECT
 HAVE_SETBUF
 HAVE_SETBUFFER
 HAVE_SETENV
+HAVE_SETFSUID
 HAVE_SETUPTERM	1
 HAVE_SETVBUF
 HAVE_SGTTY_H
@@ -134,7 +169,9 @@
 HAVE_STRLCPY
 HAVE_STRSTR
 HAVE_SYMLINK
+HAVE_SYSCONF
 HAVE_SYS_BSDTYPES_H
+HAVE_SYS_AUXV_H
 HAVE_SYS_IOCTL_H
 HAVE_SYS_PARAM_H
 HAVE_SYS_POLL_H
@@ -147,6 +184,7 @@
 HAVE_TCGETPGRP
 HAVE_TELL
 HAVE_TERMATTRS	1
+HAVE_TERMCAP_H	1
 HAVE_TERMIOS_H
 HAVE_TERMIO_H
 HAVE_TERMNAME	1
@@ -155,18 +193,23 @@
 HAVE_TGETENT	1
 HAVE_TIGETNUM	1
 HAVE_TIGETSTR	1
+HAVE_TIPARM	1
+HAVE_TIPARM_S	1
+HAVE_TISCAN_S	1
 HAVE_TIMES
-HAVE_TTYENT_H
+HAVE_TPUTS_SP
+HAVE_TSEARCH
 HAVE_TYPEAHEAD	1
 HAVE_TYPEINFO
 HAVE_TYPE_ATTR_T
 HAVE_TYPE_SIGACTION
 HAVE_UNCTRL_H	1
+HAVE_UNGET_WCH	1
 HAVE_UNISTD_H
 HAVE_UNLINK
 HAVE_USE_DEFAULT_COLORS
 HAVE_USE_ENV	1
-HAVE_USE_EXTENDED_NAMES
+HAVE_USE_EXTENDED_NAMES	NCURSES_XNAMES
 HAVE_USE_SCREEN
 HAVE_USE_WINDOW
 HAVE_VFSCANF
@@ -174,16 +217,22 @@
 HAVE_VID_PUTS	1
 HAVE_VSNPRINTF
 HAVE_VSSCANF
+HAVE_VW_PRINTW	1
+HAVE_WCHGAT	1
 HAVE_WCSRTOMBS
 HAVE_WCSTOMBS
-HAVE_WCTOB 
+HAVE_WCTOB
 HAVE_WCTOMB
 HAVE_WCTYPE_H
+HAVE_WINSDELLN	1
 HAVE_WINSSTR	1
+HAVE_WMEMCHR
 HAVE_WORKING_POLL
 HAVE_WRESIZE
 HAVE_WSYNCDOWN	1
 HAVE__DOSCAN
+HAVE__TRACEF
+HAVE__NC_TPARM_ANALYZE 1
 MIXEDCASE_FILENAMES
 NCURSES_CHAR_EQ
 NCURSES_EXPANDED
@@ -206,6 +255,7 @@
 TIME_WITH_SYS_TIME
 TYPEOF_CHTYPE
 USE_COLORFGBG
+USE_FOPEN_BIN_R
 USE_GETCAP
 USE_GETCAP_CACHE
 USE_HARD_TABS
diff --git a/include/ncurses_dll.h b/include/ncurses_dll.h
deleted file mode 100644
index 249493f..0000000
--- a/include/ncurses_dll.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/****************************************************************************
- * Copyright (c) 1998-2009,2014 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            *
- * "Software"), to deal in the Software without restriction, including      *
- * without limitation the rights to use, copy, modify, merge, publish,      *
- * distribute, distribute with modifications, sublicense, and/or sell       *
- * copies of the Software, and to permit persons to whom the Software is    *
- * furnished to do so, subject to the following conditions:                 *
- *                                                                          *
- * The above copyright notice and this permission notice shall be included  *
- * in all copies or substantial portions of the Software.                   *
- *                                                                          *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
- * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
- * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
- *                                                                          *
- * Except as contained in this notice, the name(s) of the above copyright   *
- * holders shall not be used in advertising or otherwise to promote the     *
- * sale, use or other dealings in this Software without prior written       *
- * authorization.                                                           *
- ****************************************************************************/
-/* $Id: ncurses_dll.h.in,v 1.9 2014/08/02 21:30:20 tom Exp $ */
-
-#ifndef NCURSES_DLL_H_incl
-#define NCURSES_DLL_H_incl 1
-
-/* 2014-08-02 workaround for broken MinGW compiler.
- * Oddly, only TRACE is mapped to trace - the other -D's are okay.
- * suggest TDM as an alternative.
- */
-#if defined(__MINGW64__)
-#elif defined(__MINGW32__)
-#if (__GNUC__ == 4) && (__GNUC_MINOR__ == 8)
-
-#ifdef trace
-#undef trace
-#define TRACE
-#endif
-
-#endif	/* broken compiler */
-#endif	/* MingW */
-
-/*
- * For reentrant code, we map the various global variables into SCREEN by
- * using functions to access them.
- */
-#define NCURSES_PUBLIC_VAR(name) _nc_##name
-#define NCURSES_WRAPPED_VAR(type,name) extern type NCURSES_PUBLIC_VAR(name)(void)
-
-/* no longer needed on cygwin or mingw, thanks to auto-import       */
-/* but this structure may be useful at some point for an MSVC build */
-/* so, for now unconditionally define the important flags           */
-/* "the right way" for proper static and dll+auto-import behavior   */
-#undef NCURSES_DLL
-#define NCURSES_STATIC
-
-#if defined(__CYGWIN__) || defined(__MINGW32__)
-#  if defined(NCURSES_DLL)
-#    if defined(NCURSES_STATIC)
-#      undef NCURSES_STATIC
-#    endif
-#  endif
-#  undef NCURSES_IMPEXP
-#  undef NCURSES_API
-#  undef NCURSES_EXPORT
-#  undef NCURSES_EXPORT_VAR
-#  if defined(NCURSES_DLL)
-/* building a DLL */
-#    define NCURSES_IMPEXP __declspec(dllexport)
-#  elif defined(NCURSES_STATIC)
-/* building or linking to a static library */
-#    define NCURSES_IMPEXP /* nothing */
-#  else
-/* linking to the DLL */
-#    define NCURSES_IMPEXP __declspec(dllimport)
-#  endif
-#  define NCURSES_API __cdecl
-#  define NCURSES_EXPORT(type) NCURSES_IMPEXP type NCURSES_API
-#  define NCURSES_EXPORT_VAR(type) NCURSES_IMPEXP type
-#endif
-
-/* Take care of non-cygwin platforms */
-#if !defined(NCURSES_IMPEXP)
-#  define NCURSES_IMPEXP /* nothing */
-#endif
-#if !defined(NCURSES_API)
-#  define NCURSES_API /* nothing */
-#endif
-#if !defined(NCURSES_EXPORT)
-#  define NCURSES_EXPORT(type) NCURSES_IMPEXP type NCURSES_API
-#endif
-#if !defined(NCURSES_EXPORT_VAR)
-#  define NCURSES_EXPORT_VAR(type) NCURSES_IMPEXP type
-#endif
-
-#endif /* NCURSES_DLL_H_incl */
diff --git a/include/ncurses_dll.h.in b/include/ncurses_dll.h.in
index 676850c..401d47a 100644
--- a/include/ncurses_dll.h.in
+++ b/include/ncurses_dll.h.in
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998-2009,2014 Free Software Foundation, Inc.              *
+ * Copyright 2018-2020,2023 Thomas E. Dickey                                *
+ * Copyright 2009,2014 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            *
@@ -25,17 +26,30 @@
  * sale, use or other dealings in this Software without prior written       *
  * authorization.                                                           *
  ****************************************************************************/
-/* $Id: ncurses_dll.h.in,v 1.9 2014/08/02 21:30:20 tom Exp $ */
+/* $Id: ncurses_dll.h.in,v 1.18 2023/05/06 20:12:43 tom Exp $ */
 
 #ifndef NCURSES_DLL_H_incl
 #define NCURSES_DLL_H_incl 1
 
+/*
+ * MinGW gcc (unlike MSYS2 and Cygwin) should define _WIN32 and possibly _WIN64.
+ */
+#if defined(__MINGW64__)
+
+#ifndef _WIN64
+#define _WIN64 1
+#endif
+
+#elif defined(__MINGW32__)
+
+#ifndef _WIN32
+#define _WIN32 1
+#endif
+
 /* 2014-08-02 workaround for broken MinGW compiler.
  * Oddly, only TRACE is mapped to trace - the other -D's are okay.
  * suggest TDM as an alternative.
  */
-#if defined(__MINGW64__)
-#elif defined(__MINGW32__)
 #if (__GNUC__ == 4) && (__GNUC_MINOR__ == 8)
 
 #ifdef trace
@@ -44,6 +58,7 @@
 #endif
 
 #endif	/* broken compiler */
+
 #endif	/* MingW */
 
 /*
@@ -51,52 +66,38 @@
  * using functions to access them.
  */
 #define NCURSES_PUBLIC_VAR(name) @NCURSES_WRAP_PREFIX@##name
-#define NCURSES_WRAPPED_VAR(type,name) extern type NCURSES_PUBLIC_VAR(name)(void)
 
-/* no longer needed on cygwin or mingw, thanks to auto-import       */
-/* but this structure may be useful at some point for an MSVC build */
-/* so, for now unconditionally define the important flags           */
-/* "the right way" for proper static and dll+auto-import behavior   */
-#undef NCURSES_DLL
-#define NCURSES_STATIC
-
-#if defined(__CYGWIN__) || defined(__MINGW32__)
-#  if defined(NCURSES_DLL)
-#    if defined(NCURSES_STATIC)
-#      undef NCURSES_STATIC
-#    endif
-#  endif
-#  undef NCURSES_IMPEXP
-#  undef NCURSES_API
-#  undef NCURSES_EXPORT
-#  undef NCURSES_EXPORT_VAR
-#  if defined(NCURSES_DLL)
-/* building a DLL */
-#    define NCURSES_IMPEXP __declspec(dllexport)
-#  elif defined(NCURSES_STATIC)
-/* building or linking to a static library */
-#    define NCURSES_IMPEXP /* nothing */
-#  else
-/* linking to the DLL */
-#    define NCURSES_IMPEXP __declspec(dllimport)
-#  endif
-#  define NCURSES_API __cdecl
-#  define NCURSES_EXPORT(type) NCURSES_IMPEXP type NCURSES_API
-#  define NCURSES_EXPORT_VAR(type) NCURSES_IMPEXP type
+#if defined(BUILDING_NCURSES)
+# define NCURSES_IMPEXP NCURSES_EXPORT_GENERAL_EXPORT
+#else
+# define NCURSES_IMPEXP NCURSES_EXPORT_GENERAL_IMPORT
 #endif
 
-/* Take care of non-cygwin platforms */
-#if !defined(NCURSES_IMPEXP)
-#  define NCURSES_IMPEXP /* nothing */
-#endif
-#if !defined(NCURSES_API)
-#  define NCURSES_API /* nothing */
-#endif
-#if !defined(NCURSES_EXPORT)
-#  define NCURSES_EXPORT(type) NCURSES_IMPEXP type NCURSES_API
-#endif
-#if !defined(NCURSES_EXPORT_VAR)
-#  define NCURSES_EXPORT_VAR(type) NCURSES_IMPEXP type
+#define NCURSES_WRAPPED_VAR(type,name) extern NCURSES_IMPEXP type NCURSES_PUBLIC_VAR(name)(void)
+
+#define NCURSES_EXPORT(type) NCURSES_IMPEXP type NCURSES_API
+#define NCURSES_EXPORT_VAR(type) NCURSES_IMPEXP type
+
+/*
+ * These symbols hide dllimport/dllexport, for compilers which care about it.
+ */
+#if defined(__CYGWIN__) || (defined(_WIN32) || defined(_WIN64))
+# if defined(NCURSES_STATIC)	/* "static" here only implies "not-a-DLL" */
+#   define NCURSES_EXPORT_GENERAL_IMPORT
+#   define NCURSES_EXPORT_GENERAL_EXPORT
+# else
+#   define NCURSES_EXPORT_GENERAL_IMPORT __declspec(dllimport)
+#   define NCURSES_EXPORT_GENERAL_EXPORT __declspec(dllexport)
+# endif
+# define NCURSES_API __cdecl
+#else
+# define NCURSES_EXPORT_GENERAL_IMPORT
+# if (__GNUC__ >= 4) && !defined(__cplusplus)
+#   define NCURSES_EXPORT_GENERAL_EXPORT __attribute__((visibility ("default")))
+# else
+#   define NCURSES_EXPORT_GENERAL_EXPORT
+# endif
+# define NCURSES_API /* FIXME: __attribute__ ((cdecl)) is only available on x86 */
 #endif
 
 #endif /* NCURSES_DLL_H_incl */
diff --git a/include/ncurses_mingw.h b/include/ncurses_mingw.h
index 2bbad76..8b11272 100644
--- a/include/ncurses_mingw.h
+++ b/include/ncurses_mingw.h
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998-2011,2014 Free Software Foundation, Inc.              *
+ * Copyright 2018-2020,2021 Thomas E. Dickey                                *
+ * Copyright 2008-2014,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            *
@@ -27,18 +28,17 @@
  ****************************************************************************/
 
 /****************************************************************************
- * Author: Juergen Pfeifer, 2008-on                                         * 
- *                                                                          *
+ * Author: Juergen Pfeifer, 2008-on                                         *
  ****************************************************************************/
 
-/* $Id: ncurses_mingw.h,v 1.3 2014/05/03 19:40:19 juergen Exp $ */
+/* $Id: ncurses_mingw.h,v 1.7 2021/06/17 21:26:02 tom Exp $ */
 
 /*
  * This is a placeholder up to now and describes what needs to be implemented
  * to support I/O to external terminals with ncurses on the Windows OS.
  */
 
-#if __MINGW32__
+#ifdef _WIN32
 #ifndef _NC_MINGWH
 #define _NC_MINGWH
 
@@ -67,16 +67,16 @@
 };
 
 extern NCURSES_EXPORT(int)  _nc_mingw_tcsetattr(
-    int fd, 
-    int optional_actions, 
+    int fd,
+    int optional_actions,
     const struct termios* arg);
 extern NCURSES_EXPORT(int)  _nc_mingw_tcgetattr(
-    int fd, 
+    int fd,
     struct termios* arg);
 extern NCURSES_EXPORT(int)  _nc_mingw_tcflush(
-    int fd, 
+    int fd,
     int queue);
 extern NCURSES_EXPORT(void) _nc_set_term_driver(void* term);
 
 #endif /* _NC_MINGWH */
-#endif /* __MINGW32__ */
+#endif /* _WIN32 */
diff --git a/include/panel.h b/include/panel.h
deleted file mode 100644
index 6ed2061..0000000
--- a/include/panel.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/****************************************************************************
- * Copyright (c) 1998-2006,2009 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            *
- * "Software"), to deal in the Software without restriction, including      *
- * without limitation the rights to use, copy, modify, merge, publish,      *
- * distribute, distribute with modifications, sublicense, and/or sell       *
- * copies of the Software, and to permit persons to whom the Software is    *
- * furnished to do so, subject to the following conditions:                 *
- *                                                                          *
- * The above copyright notice and this permission notice shall be included  *
- * in all copies or substantial portions of the Software.                   *
- *                                                                          *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
- * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
- * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
- *                                                                          *
- * Except as contained in this notice, the name(s) of the above copyright   *
- * holders shall not be used in advertising or otherwise to promote the     *
- * sale, use or other dealings in this Software without prior written       *
- * authorization.                                                           *
- ****************************************************************************/
-
-/****************************************************************************
- *  Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995                    *
- *     and: Eric S. Raymond <esr@snark.thyrsus.com>                         *
- *     and: Juergen Pfeifer                         1996-1999,2008          *
- ****************************************************************************/
-
-/* $Id: panel.h,v 1.11 2009/04/11 19:50:40 tom Exp $ */
-
-/* panel.h -- interface file for panels library */
-
-#ifndef NCURSES_PANEL_H_incl
-#define NCURSES_PANEL_H_incl 1
-
-#include <curses.h>
-
-typedef struct panel
-{
-  WINDOW *win;
-  struct panel *below;
-  struct panel *above;
-  NCURSES_CONST void *user;
-} PANEL;
-
-#if	defined(__cplusplus)
-extern "C" {
-#endif
-
-extern NCURSES_EXPORT(WINDOW*) panel_window (const PANEL *);
-extern NCURSES_EXPORT(void)    update_panels (void);
-extern NCURSES_EXPORT(int)     hide_panel (PANEL *);
-extern NCURSES_EXPORT(int)     show_panel (PANEL *);
-extern NCURSES_EXPORT(int)     del_panel (PANEL *);
-extern NCURSES_EXPORT(int)     top_panel (PANEL *);
-extern NCURSES_EXPORT(int)     bottom_panel (PANEL *);
-extern NCURSES_EXPORT(PANEL*)  new_panel (WINDOW *);
-extern NCURSES_EXPORT(PANEL*)  panel_above (const PANEL *);
-extern NCURSES_EXPORT(PANEL*)  panel_below (const PANEL *);
-extern NCURSES_EXPORT(int)     set_panel_userptr (PANEL *, NCURSES_CONST void *);
-extern NCURSES_EXPORT(NCURSES_CONST void*) panel_userptr (const PANEL *);
-extern NCURSES_EXPORT(int)     move_panel (PANEL *, int, int);
-extern NCURSES_EXPORT(int)     replace_panel (PANEL *,WINDOW *);
-extern NCURSES_EXPORT(int)     panel_hidden (const PANEL *);
-
-#if NCURSES_SP_FUNCS
-extern NCURSES_EXPORT(PANEL *) ground_panel(SCREEN *);
-extern NCURSES_EXPORT(PANEL *) ceiling_panel(SCREEN *);
-
-extern NCURSES_EXPORT(void)    NCURSES_SP_NAME(update_panels) (SCREEN*);
-#endif
-
-#if	defined(__cplusplus)
-}
-#endif
-
-#endif /* NCURSES_PANEL_H_incl */
-
-/* end of panel.h */
diff --git a/include/parametrized.h b/include/parametrized.h
deleted file mode 100644
index 273e051..0000000
--- a/include/parametrized.h
+++ /dev/null
@@ -1,560 +0,0 @@
-/*
- * parametrized.h --- is a termcap capability parametrized?
- *
- * Note: this file is generated using MKparametrized.sh, do not edit by hand.
- * A value of -1 in the table means suppress both pad and % translations.
- * A value of 0 in the table means do pad but not % translations.
- * A value of 1 in the table means do both pad and % translations.
- */
-
-static short const parametrized[] = {
-0,	/*  cbt  */
-0,	/*  bel  */
-0,	/*  cr  */
-1,	/*  csr  */
-0,	/*  tbc  */
-0,	/*  clear  */
-0,	/*  el  */
-0,	/*  ed  */
-1,	/*  hpa  */
-0,	/*  cmdch  */
-1,	/*  cup  */
-0,	/*  cud1  */
-0,	/*  home  */
-0,	/*  civis  */
-0,	/*  cub1  */
-1,	/*  mrcup  */
-0,	/*  cnorm  */
-0,	/*  cuf1  */
-0,	/*  ll  */
-0,	/*  cuu1  */
-0,	/*  cvvis  */
-0,	/*  dch1  */
-0,	/*  dl1  */
-0,	/*  dsl  */
-0,	/*  hd  */
-0,	/*  smacs  */
-0,	/*  blink  */
-0,	/*  bold  */
-0,	/*  smcup  */
-0,	/*  smdc  */
-0,	/*  dim  */
-0,	/*  smir  */
-0,	/*  invis  */
-0,	/*  prot  */
-0,	/*  rev  */
-0,	/*  smso  */
-0,	/*  smul  */
-1,	/*  ech  */
-0,	/*  rmacs  */
-0,	/*  sgr0  */
-0,	/*  rmcup  */
-0,	/*  rmdc  */
-0,	/*  rmir  */
-0,	/*  rmso  */
-0,	/*  rmul  */
-0,	/*  flash  */
-0,	/*  ff  */
-0,	/*  fsl  */
-0,	/*  is1  */
-0,	/*  is2  */
-0,	/*  is3  */
-0,	/*  if  */
-0,	/*  ich1  */
-0,	/*  il1  */
-0,	/*  ip  */
-0,	/*  kbs  */
-0,	/*  ktbc  */
-0,	/*  kclr  */
-0,	/*  kctab  */
-0,	/*  kdch1  */
-0,	/*  kdl1  */
-0,	/*  kcud1  */
-0,	/*  krmir  */
-0,	/*  kel  */
-0,	/*  ked  */
-0,	/*  kf0  */
-0,	/*  kf1  */
-0,	/*  kf10  */
-0,	/*  kf2  */
-0,	/*  kf3  */
-0,	/*  kf4  */
-0,	/*  kf5  */
-0,	/*  kf6  */
-0,	/*  kf7  */
-0,	/*  kf8  */
-0,	/*  kf9  */
-0,	/*  khome  */
-0,	/*  kich1  */
-0,	/*  kil1  */
-0,	/*  kcub1  */
-0,	/*  kll  */
-0,	/*  knp  */
-0,	/*  kpp  */
-0,	/*  kcuf1  */
-0,	/*  kind  */
-0,	/*  kri  */
-0,	/*  khts  */
-0,	/*  kcuu1  */
-0,	/*  rmkx  */
-0,	/*  smkx  */
-0,	/*  lf0  */
-0,	/*  lf1  */
-0,	/*  lf10  */
-0,	/*  lf2  */
-0,	/*  lf3  */
-0,	/*  lf4  */
-0,	/*  lf5  */
-0,	/*  lf6  */
-0,	/*  lf7  */
-0,	/*  lf8  */
-0,	/*  lf9  */
-0,	/*  rmm  */
-0,	/*  smm  */
-0,	/*  nel  */
-0,	/*  pad  */
-1,	/*  dch  */
-1,	/*  dl  */
-1,	/*  cud  */
-1,	/*  ich  */
-1,	/*  indn  */
-1,	/*  il  */
-1,	/*  cub  */
-1,	/*  cuf  */
-1,	/*  rin  */
-1,	/*  cuu  */
-1,	/*  pfkey  */
-1,	/*  pfloc  */
-1,	/*  pfx  */
-0,	/*  mc0  */
-0,	/*  mc4  */
-0,	/*  mc5  */
-1,	/*  rep  */
-0,	/*  rs1  */
-0,	/*  rs2  */
-0,	/*  rs3  */
-0,	/*  rf  */
-0,	/*  rc  */
-1,	/*  vpa  */
-0,	/*  sc  */
-0,	/*  ind  */
-0,	/*  ri  */
-1,	/*  sgr  */
-0,	/*  hts  */
-1,	/*  wind  */
-0,	/*  ht  */
-1,	/*  tsl  */
-0,	/*  uc  */
-0,	/*  hu  */
-0,	/*  iprog  */
-0,	/*  ka1  */
-0,	/*  ka3  */
-0,	/*  kb2  */
-0,	/*  kc1  */
-0,	/*  kc3  */
-1,	/*  mc5p  */
-0,	/*  rmp  */
--1,	/*  acsc  */
-1,	/*  pln  */
-0,	/*  kcbt  */
-0,	/*  smxon  */
-0,	/*  rmxon  */
-0,	/*  smam  */
-0,	/*  rmam  */
-0,	/*  xonc  */
-0,	/*  xoffc  */
-0,	/*  enacs  */
-0,	/*  smln  */
-0,	/*  rmln  */
-0,	/*  kbeg  */
-0,	/*  kcan  */
-0,	/*  kclo  */
-0,	/*  kcmd  */
-0,	/*  kcpy  */
-0,	/*  kcrt  */
-0,	/*  kend  */
-0,	/*  kent  */
-0,	/*  kext  */
-0,	/*  kfnd  */
-0,	/*  khlp  */
-0,	/*  kmrk  */
-0,	/*  kmsg  */
-0,	/*  kmov  */
-0,	/*  knxt  */
-0,	/*  kopn  */
-0,	/*  kopt  */
-0,	/*  kprv  */
-0,	/*  kprt  */
-0,	/*  krdo  */
-0,	/*  kref  */
-0,	/*  krfr  */
-0,	/*  krpl  */
-0,	/*  krst  */
-0,	/*  kres  */
-0,	/*  ksav  */
-0,	/*  kspd  */
-0,	/*  kund  */
-0,	/*  kBEG  */
-0,	/*  kCAN  */
-0,	/*  kCMD  */
-0,	/*  kCPY  */
-0,	/*  kCRT  */
-0,	/*  kDC  */
-0,	/*  kDL  */
-0,	/*  kslt  */
-0,	/*  kEND  */
-0,	/*  kEOL  */
-0,	/*  kEXT  */
-0,	/*  kFND  */
-1,	/*  kHLP  */
-1,	/*  kHOM  */
-1,	/*  kIC  */
-1,	/*  kLFT  */
-0,	/*  kMSG  */
-0,	/*  kMOV  */
-0,	/*  kNXT  */
-0,	/*  kOPT  */
-0,	/*  kPRV  */
-0,	/*  kPRT  */
-0,	/*  kRDO  */
-0,	/*  kRPL  */
-0,	/*  kRIT  */
-0,	/*  kRES  */
-0,	/*  kSAV  */
-0,	/*  kSPD  */
-0,	/*  kUND  */
-0,	/*  rfi  */
-0,	/*  kf11  */
-0,	/*  kf12  */
-0,	/*  kf13  */
-0,	/*  kf14  */
-0,	/*  kf15  */
-0,	/*  kf16  */
-0,	/*  kf17  */
-0,	/*  kf18  */
-0,	/*  kf19  */
-0,	/*  kf20  */
-0,	/*  kf21  */
-0,	/*  kf22  */
-0,	/*  kf23  */
-0,	/*  kf24  */
-0,	/*  kf25  */
-0,	/*  kf26  */
-0,	/*  kf27  */
-0,	/*  kf28  */
-0,	/*  kf29  */
-0,	/*  kf30  */
-0,	/*  kf31  */
-0,	/*  kf32  */
-0,	/*  kf33  */
-0,	/*  kf34  */
-0,	/*  kf35  */
-0,	/*  kf36  */
-0,	/*  kf37  */
-0,	/*  kf38  */
-0,	/*  kf39  */
-0,	/*  kf40  */
-0,	/*  kf41  */
-0,	/*  kf42  */
-0,	/*  kf43  */
-0,	/*  kf44  */
-0,	/*  kf45  */
-0,	/*  kf46  */
-0,	/*  kf47  */
-0,	/*  kf48  */
-0,	/*  kf49  */
-0,	/*  kf50  */
-0,	/*  kf51  */
-0,	/*  kf52  */
-0,	/*  kf53  */
-0,	/*  kf54  */
-0,	/*  kf55  */
-0,	/*  kf56  */
-0,	/*  kf57  */
-0,	/*  kf58  */
-0,	/*  kf59  */
-0,	/*  kf60  */
-0,	/*  kf61  */
-0,	/*  kf62  */
-0,	/*  kf63  */
-0,	/*  el1  */
-0,	/*  mgc  */
-0,	/*  smgl  */
-0,	/*  smgr  */
--1,	/*  fln  */
-1,	/*  sclk  */
-0,	/*  dclk  */
-0,	/*  rmclk  */
-1,	/*  cwin  */
-1,	/*  wingo  */
-0,	/*  hup  */
-1,	/*  dial  */
-1,	/*  qdial  */
-0,	/*  tone  */
-0,	/*  pulse  */
-0,	/*  hook  */
-0,	/*  pause  */
-0,	/*  wait  */
-1,	/*  u0  */
-1,	/*  u1  */
-1,	/*  u2  */
-1,	/*  u3  */
-1,	/*  u4  */
-1,	/*  u5  */
-1,	/*  u6  */
-1,	/*  u7  */
-1,	/*  u8  */
-1,	/*  u9  */
-0,	/*  op  */
-0,	/*  oc  */
-1,	/*  initc  */
-1,	/*  initp  */
-1,	/*  scp  */
-1,	/*  setf  */
-1,	/*  setb  */
-1,	/*  cpi  */
-1,	/*  lpi  */
-1,	/*  chr  */
-1,	/*  cvr  */
-1,	/*  defc  */
-0,	/*  swidm  */
-0,	/*  sdrfq  */
-0,	/*  sitm  */
-0,	/*  slm  */
-0,	/*  smicm  */
-0,	/*  snlq  */
-0,	/*  snrmq  */
-0,	/*  sshm  */
-0,	/*  ssubm  */
-0,	/*  ssupm  */
-0,	/*  sum  */
-0,	/*  rwidm  */
-0,	/*  ritm  */
-0,	/*  rlm  */
-0,	/*  rmicm  */
-0,	/*  rshm  */
-0,	/*  rsubm  */
-0,	/*  rsupm  */
-0,	/*  rum  */
-0,	/*  mhpa  */
-0,	/*  mcud1  */
-0,	/*  mcub1  */
-0,	/*  mcuf1  */
-1,	/*  mvpa  */
-0,	/*  mcuu1  */
-0,	/*  porder  */
-0,	/*  mcud  */
-0,	/*  mcub  */
-0,	/*  mcuf  */
-0,	/*  mcuu  */
-1,	/*  scs  */
-0,	/*  smgb  */
-1,	/*  smgbp  */
-1,	/*  smglp  */
-1,	/*  smgrp  */
-0,	/*  smgt  */
-1,	/*  smgtp  */
-0,	/*  sbim  */
-1,	/*  scsd  */
-0,	/*  rbim  */
-1,	/*  rcsd  */
-0,	/*  subcs  */
-0,	/*  supcs  */
-0,	/*  docr  */
-0,	/*  zerom  */
-1,	/*  csnm  */
-0,	/*  kmous  */
-0,	/*  minfo  */
-0,	/*  reqmp  */
-1,	/*  getm  */
-1,	/*  setaf  */
-1,	/*  setab  */
-1,	/*  pfxl  */
-0,	/*  devt  */
-0,	/*  csin  */
-0,	/*  s0ds  */
-0,	/*  s1ds  */
-0,	/*  s2ds  */
-0,	/*  s3ds  */
-1,	/*  smglr  */
-1,	/*  smgtb  */
-1,	/*  birep  */
-0,	/*  binel  */
-0,	/*  bicr  */
-1,	/*  colornm  */
-0,	/*  defbi  */
-0,	/*  endbi  */
-1,	/*  setcolor  */
-1,	/*  slines  */
-1,	/*  dispc  */
-0,	/*  smpch  */
-0,	/*  rmpch  */
-0,	/*  smsc  */
-0,	/*  rmsc  */
-0,	/*  pctrm  */
-0,	/*  scesc  */
-0,	/*  scesa  */
-0,	/*  ehhlm  */
-0,	/*  elhlm  */
-0,	/*  elohlm  */
-0,	/*  erhlm  */
-0,	/*  ethlm  */
-0,	/*  evhlm  */
-1,	/*  sgr1  */
-1,	/*  slength  */
-0,	/*  OTi2  */
-0,	/*  OTrs  */
-0,	/*  OTnl  */
-0,	/*  OTbc  */
-0,	/*  OTko  */
-0,	/*  OTma  */
--1,	/*  OTG2  */
--1,	/*  OTG3  */
--1,	/*  OTG1  */
--1,	/*  OTG4  */
--1,	/*  OTGR  */
--1,	/*  OTGL  */
--1,	/*  OTGU  */
--1,	/*  OTGD  */
--1,	/*  OTGH  */
--1,	/*  OTGV  */
--1,	/*  OTGC  */
-0,	/*  meml  */
-0,	/*  memu  */
-1,	/*  pln  */
-0,	/*  smln  */
-0,	/*  rmln  */
-0,	/*  kf11  */
-0,	/*  kf12  */
-0,	/*  kf13  */
-0,	/*  kf14  */
-0,	/*  kf15  */
-0,	/*  kf16  */
-0,	/*  kf17  */
-0,	/*  kf18  */
-0,	/*  kf19  */
-0,	/*  kf20  */
-0,	/*  kf21  */
-0,	/*  kf22  */
-0,	/*  kf23  */
-0,	/*  kf24  */
-0,	/*  kf25  */
-0,	/*  kf26  */
-0,	/*  kf27  */
-0,	/*  kf28  */
-0,	/*  kf29  */
-0,	/*  kf30  */
-0,	/*  kf31  */
-0,	/*  kf32  */
-0,	/*  kf33  */
-0,	/*  kf34  */
-0,	/*  kf35  */
-0,	/*  kf36  */
-0,	/*  kf37  */
-0,	/*  kf38  */
-0,	/*  kf39  */
-0,	/*  kf40  */
-0,	/*  kf41  */
-0,	/*  kf42  */
-0,	/*  kf43  */
-0,	/*  kf44  */
-0,	/*  kf45  */
-0,	/*  kf46  */
-0,	/*  kf47  */
-0,	/*  kf48  */
-0,	/*  kf49  */
-0,	/*  kf50  */
-0,	/*  kf51  */
-0,	/*  kf52  */
-0,	/*  kf53  */
-0,	/*  kf54  */
-0,	/*  kf55  */
-0,	/*  kf56  */
-0,	/*  kf57  */
-0,	/*  kf58  */
-0,	/*  kf59  */
-0,	/*  kf60  */
-0,	/*  kf61  */
-0,	/*  kf62  */
-0,	/*  kf63  */
-0,	/*  box1  */
-0,	/*  box2  */
-0,	/*  batt1  */
-0,	/*  batt2  */
-0,	/*  colb0  */
-0,	/*  colb1  */
-0,	/*  colb2  */
-0,	/*  colb3  */
-0,	/*  colb4  */
-0,	/*  colb5  */
-0,	/*  colb6  */
-0,	/*  colb7  */
-0,	/*  colf0  */
-0,	/*  colf1  */
-0,	/*  colf2  */
-0,	/*  colf3  */
-0,	/*  colf4  */
-0,	/*  colf5  */
-0,	/*  colf6  */
-0,	/*  colf7  */
-0,	/*  font0  */
-0,	/*  font1  */
-0,	/*  font2  */
-0,	/*  font3  */
-0,	/*  font4  */
-0,	/*  font5  */
-0,	/*  font6  */
-0,	/*  font7  */
-0,	/*  kbtab  */
-0,	/*  kdo  */
-0,	/*  kcmd  */
-0,	/*  kcpn  */
-0,	/*  kend  */
-0,	/*  khlp  */
-0,	/*  knl  */
-0,	/*  knpn  */
-0,	/*  kppn  */
-0,	/*  kppn  */
-0,	/*  kquit  */
-0,	/*  ksel  */
-0,	/*  kscl  */
-0,	/*  kscr  */
-0,	/*  ktab  */
-0,	/*  kmpf1  */
-0,	/*  kmpt1  */
-0,	/*  kmpf2  */
-0,	/*  kmpt2  */
-0,	/*  kmpf3  */
-0,	/*  kmpt3  */
-0,	/*  kmpf4  */
-0,	/*  kmpt4  */
-0,	/*  kmpf5  */
-0,	/*  kmpt5  */
-0,	/*  apstr  */
-0,	/*  kmpf6  */
-0,	/*  kmpt6  */
-0,	/*  kmpf7  */
-0,	/*  kmpt7  */
-0,	/*  kmpf8  */
-0,	/*  kmpt8  */
-0,	/*  kmpf9  */
-0,	/*  kmpt9  */
-0,	/*  ksf1  */
-0,	/*  ksf2  */
-0,	/*  ksf3  */
-0,	/*  ksf4  */
-0,	/*  ksf5  */
-0,	/*  ksf6  */
-0,	/*  ksf7  */
-0,	/*  ksf8  */
-0,	/*  ksf9  */
-0,	/*  ksf10  */
-0,	/*  kf11  */
-0,	/*  kf12  */
-0,	/*  kact  */
-0,	/*  topl  */
-0,	/*  btml  */
-0,	/*  rvert  */
-0,	/*  lvert  */
-} /* 548 entries */;
-
diff --git a/include/term.h b/include/term.h
deleted file mode 100644
index f3d5783..0000000
--- a/include/term.h
+++ /dev/null
@@ -1,806 +0,0 @@
-/****************************************************************************
- * Copyright (c) 1998-2011,2013 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            *
- * "Software"), to deal in the Software without restriction, including      *
- * without limitation the rights to use, copy, modify, merge, publish,      *
- * distribute, distribute with modifications, sublicense, and/or sell       *
- * copies of the Software, and to permit persons to whom the Software is    *
- * furnished to do so, subject to the following conditions:                 *
- *                                                                          *
- * The above copyright notice and this permission notice shall be included  *
- * in all copies or substantial portions of the Software.                   *
- *                                                                          *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
- * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
- * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
- *                                                                          *
- * Except as contained in this notice, the name(s) of the above copyright   *
- * holders shall not be used in advertising or otherwise to promote the     *
- * sale, use or other dealings in this Software without prior written       *
- * authorization.                                                           *
- ****************************************************************************/
-
-/****************************************************************************/
-/* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995                */
-/*    and: Eric S. Raymond <esr@snark.thyrsus.com>                          */
-/*    and: Thomas E. Dickey                        1995-on                  */
-/****************************************************************************/
-
-/* $Id: MKterm.h.awk.in,v 1.62 2013/08/17 19:21:56 tom Exp $ */
-
-/*
-**	term.h -- Definition of struct term
-*/
-
-#ifndef NCURSES_TERM_H_incl
-#define NCURSES_TERM_H_incl 1
-
-#undef  NCURSES_VERSION
-#define NCURSES_VERSION "6.0"
-
-#include <ncurses_dll.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Make this file self-contained by providing defaults for the HAVE_TERMIO[S]_H
- * definition (based on the system for which this was configured).
- */
-
-#undef  NCURSES_CONST
-#define NCURSES_CONST const
-
-#undef  NCURSES_SBOOL
-#define NCURSES_SBOOL char
-
-#undef  NCURSES_USE_DATABASE
-#define NCURSES_USE_DATABASE 1
-
-#undef  NCURSES_USE_TERMCAP
-#define NCURSES_USE_TERMCAP 0
-
-#undef  NCURSES_XNAMES
-#define NCURSES_XNAMES 1
-
-/* We will use these symbols to hide differences between
- * termios/termio/sgttyb interfaces.
- */
-#undef  TTY
-#undef  SET_TTY
-#undef  GET_TTY
-
-/* Assume POSIX termio if we have the header and function */
-/* #if HAVE_TERMIOS_H && HAVE_TCGETATTR */
-#if 1 && 1
-
-#undef  TERMIOS
-#define TERMIOS 1
-
-#include <termios.h>
-#define TTY struct termios
-
-#else /* !HAVE_TERMIOS_H */
-
-/* #if HAVE_TERMIO_H */
-#if 1
-
-#undef  TERMIOS
-#define TERMIOS 1
-
-#include <termio.h>
-#define TTY struct termio
-
-#else /* !HAVE_TERMIO_H */
-
-#if __MINGW32__
-#  include <ncurses_mingw.h>
-#  define TTY struct termios
-#else
-#undef TERMIOS
-#include <sgtty.h>
-#include <sys/ioctl.h>
-#define TTY struct sgttyb
-#endif /* MINGW32 */
-#endif /* HAVE_TERMIO_H */
-
-#endif /* HAVE_TERMIOS_H */
-
-#ifdef TERMIOS
-#define GET_TTY(fd, buf) tcgetattr(fd, buf)
-#define SET_TTY(fd, buf) tcsetattr(fd, TCSADRAIN, buf)
-#else
-#define GET_TTY(fd, buf) gtty(fd, buf)
-#define SET_TTY(fd, buf) stty(fd, buf)
-#endif
-
-#define NAMESIZE 256
-
-#define CUR cur_term->type.
-
-#define auto_left_margin               CUR Booleans[0]
-#define auto_right_margin              CUR Booleans[1]
-#define no_esc_ctlc                    CUR Booleans[2]
-#define ceol_standout_glitch           CUR Booleans[3]
-#define eat_newline_glitch             CUR Booleans[4]
-#define erase_overstrike               CUR Booleans[5]
-#define generic_type                   CUR Booleans[6]
-#define hard_copy                      CUR Booleans[7]
-#define has_meta_key                   CUR Booleans[8]
-#define has_status_line                CUR Booleans[9]
-#define insert_null_glitch             CUR Booleans[10]
-#define memory_above                   CUR Booleans[11]
-#define memory_below                   CUR Booleans[12]
-#define move_insert_mode               CUR Booleans[13]
-#define move_standout_mode             CUR Booleans[14]
-#define over_strike                    CUR Booleans[15]
-#define status_line_esc_ok             CUR Booleans[16]
-#define dest_tabs_magic_smso           CUR Booleans[17]
-#define tilde_glitch                   CUR Booleans[18]
-#define transparent_underline          CUR Booleans[19]
-#define xon_xoff                       CUR Booleans[20]
-#define needs_xon_xoff                 CUR Booleans[21]
-#define prtr_silent                    CUR Booleans[22]
-#define hard_cursor                    CUR Booleans[23]
-#define non_rev_rmcup                  CUR Booleans[24]
-#define no_pad_char                    CUR Booleans[25]
-#define non_dest_scroll_region         CUR Booleans[26]
-#define can_change                     CUR Booleans[27]
-#define back_color_erase               CUR Booleans[28]
-#define hue_lightness_saturation       CUR Booleans[29]
-#define col_addr_glitch                CUR Booleans[30]
-#define cr_cancels_micro_mode          CUR Booleans[31]
-#define has_print_wheel                CUR Booleans[32]
-#define row_addr_glitch                CUR Booleans[33]
-#define semi_auto_right_margin         CUR Booleans[34]
-#define cpi_changes_res                CUR Booleans[35]
-#define lpi_changes_res                CUR Booleans[36]
-#define columns                        CUR Numbers[0]
-#define init_tabs                      CUR Numbers[1]
-#define lines                          CUR Numbers[2]
-#define lines_of_memory                CUR Numbers[3]
-#define magic_cookie_glitch            CUR Numbers[4]
-#define padding_baud_rate              CUR Numbers[5]
-#define virtual_terminal               CUR Numbers[6]
-#define width_status_line              CUR Numbers[7]
-#define num_labels                     CUR Numbers[8]
-#define label_height                   CUR Numbers[9]
-#define label_width                    CUR Numbers[10]
-#define max_attributes                 CUR Numbers[11]
-#define maximum_windows                CUR Numbers[12]
-#define max_colors                     CUR Numbers[13]
-#define max_pairs                      CUR Numbers[14]
-#define no_color_video                 CUR Numbers[15]
-#define buffer_capacity                CUR Numbers[16]
-#define dot_vert_spacing               CUR Numbers[17]
-#define dot_horz_spacing               CUR Numbers[18]
-#define max_micro_address              CUR Numbers[19]
-#define max_micro_jump                 CUR Numbers[20]
-#define micro_col_size                 CUR Numbers[21]
-#define micro_line_size                CUR Numbers[22]
-#define number_of_pins                 CUR Numbers[23]
-#define output_res_char                CUR Numbers[24]
-#define output_res_line                CUR Numbers[25]
-#define output_res_horz_inch           CUR Numbers[26]
-#define output_res_vert_inch           CUR Numbers[27]
-#define print_rate                     CUR Numbers[28]
-#define wide_char_size                 CUR Numbers[29]
-#define buttons                        CUR Numbers[30]
-#define bit_image_entwining            CUR Numbers[31]
-#define bit_image_type                 CUR Numbers[32]
-#define back_tab                       CUR Strings[0]
-#define bell                           CUR Strings[1]
-#define carriage_return                CUR Strings[2]
-#define change_scroll_region           CUR Strings[3]
-#define clear_all_tabs                 CUR Strings[4]
-#define clear_screen                   CUR Strings[5]
-#define clr_eol                        CUR Strings[6]
-#define clr_eos                        CUR Strings[7]
-#define column_address                 CUR Strings[8]
-#define command_character              CUR Strings[9]
-#define cursor_address                 CUR Strings[10]
-#define cursor_down                    CUR Strings[11]
-#define cursor_home                    CUR Strings[12]
-#define cursor_invisible               CUR Strings[13]
-#define cursor_left                    CUR Strings[14]
-#define cursor_mem_address             CUR Strings[15]
-#define cursor_normal                  CUR Strings[16]
-#define cursor_right                   CUR Strings[17]
-#define cursor_to_ll                   CUR Strings[18]
-#define cursor_up                      CUR Strings[19]
-#define cursor_visible                 CUR Strings[20]
-#define delete_character               CUR Strings[21]
-#define delete_line                    CUR Strings[22]
-#define dis_status_line                CUR Strings[23]
-#define down_half_line                 CUR Strings[24]
-#define enter_alt_charset_mode         CUR Strings[25]
-#define enter_blink_mode               CUR Strings[26]
-#define enter_bold_mode                CUR Strings[27]
-#define enter_ca_mode                  CUR Strings[28]
-#define enter_delete_mode              CUR Strings[29]
-#define enter_dim_mode                 CUR Strings[30]
-#define enter_insert_mode              CUR Strings[31]
-#define enter_secure_mode              CUR Strings[32]
-#define enter_protected_mode           CUR Strings[33]
-#define enter_reverse_mode             CUR Strings[34]
-#define enter_standout_mode            CUR Strings[35]
-#define enter_underline_mode           CUR Strings[36]
-#define erase_chars                    CUR Strings[37]
-#define exit_alt_charset_mode          CUR Strings[38]
-#define exit_attribute_mode            CUR Strings[39]
-#define exit_ca_mode                   CUR Strings[40]
-#define exit_delete_mode               CUR Strings[41]
-#define exit_insert_mode               CUR Strings[42]
-#define exit_standout_mode             CUR Strings[43]
-#define exit_underline_mode            CUR Strings[44]
-#define flash_screen                   CUR Strings[45]
-#define form_feed                      CUR Strings[46]
-#define from_status_line               CUR Strings[47]
-#define init_1string                   CUR Strings[48]
-#define init_2string                   CUR Strings[49]
-#define init_3string                   CUR Strings[50]
-#define init_file                      CUR Strings[51]
-#define insert_character               CUR Strings[52]
-#define insert_line                    CUR Strings[53]
-#define insert_padding                 CUR Strings[54]
-#define key_backspace                  CUR Strings[55]
-#define key_catab                      CUR Strings[56]
-#define key_clear                      CUR Strings[57]
-#define key_ctab                       CUR Strings[58]
-#define key_dc                         CUR Strings[59]
-#define key_dl                         CUR Strings[60]
-#define key_down                       CUR Strings[61]
-#define key_eic                        CUR Strings[62]
-#define key_eol                        CUR Strings[63]
-#define key_eos                        CUR Strings[64]
-#define key_f0                         CUR Strings[65]
-#define key_f1                         CUR Strings[66]
-#define key_f10                        CUR Strings[67]
-#define key_f2                         CUR Strings[68]
-#define key_f3                         CUR Strings[69]
-#define key_f4                         CUR Strings[70]
-#define key_f5                         CUR Strings[71]
-#define key_f6                         CUR Strings[72]
-#define key_f7                         CUR Strings[73]
-#define key_f8                         CUR Strings[74]
-#define key_f9                         CUR Strings[75]
-#define key_home                       CUR Strings[76]
-#define key_ic                         CUR Strings[77]
-#define key_il                         CUR Strings[78]
-#define key_left                       CUR Strings[79]
-#define key_ll                         CUR Strings[80]
-#define key_npage                      CUR Strings[81]
-#define key_ppage                      CUR Strings[82]
-#define key_right                      CUR Strings[83]
-#define key_sf                         CUR Strings[84]
-#define key_sr                         CUR Strings[85]
-#define key_stab                       CUR Strings[86]
-#define key_up                         CUR Strings[87]
-#define keypad_local                   CUR Strings[88]
-#define keypad_xmit                    CUR Strings[89]
-#define lab_f0                         CUR Strings[90]
-#define lab_f1                         CUR Strings[91]
-#define lab_f10                        CUR Strings[92]
-#define lab_f2                         CUR Strings[93]
-#define lab_f3                         CUR Strings[94]
-#define lab_f4                         CUR Strings[95]
-#define lab_f5                         CUR Strings[96]
-#define lab_f6                         CUR Strings[97]
-#define lab_f7                         CUR Strings[98]
-#define lab_f8                         CUR Strings[99]
-#define lab_f9                         CUR Strings[100]
-#define meta_off                       CUR Strings[101]
-#define meta_on                        CUR Strings[102]
-#define newline                        CUR Strings[103]
-#define pad_char                       CUR Strings[104]
-#define parm_dch                       CUR Strings[105]
-#define parm_delete_line               CUR Strings[106]
-#define parm_down_cursor               CUR Strings[107]
-#define parm_ich                       CUR Strings[108]
-#define parm_index                     CUR Strings[109]
-#define parm_insert_line               CUR Strings[110]
-#define parm_left_cursor               CUR Strings[111]
-#define parm_right_cursor              CUR Strings[112]
-#define parm_rindex                    CUR Strings[113]
-#define parm_up_cursor                 CUR Strings[114]
-#define pkey_key                       CUR Strings[115]
-#define pkey_local                     CUR Strings[116]
-#define pkey_xmit                      CUR Strings[117]
-#define print_screen                   CUR Strings[118]
-#define prtr_off                       CUR Strings[119]
-#define prtr_on                        CUR Strings[120]
-#define repeat_char                    CUR Strings[121]
-#define reset_1string                  CUR Strings[122]
-#define reset_2string                  CUR Strings[123]
-#define reset_3string                  CUR Strings[124]
-#define reset_file                     CUR Strings[125]
-#define restore_cursor                 CUR Strings[126]
-#define row_address                    CUR Strings[127]
-#define save_cursor                    CUR Strings[128]
-#define scroll_forward                 CUR Strings[129]
-#define scroll_reverse                 CUR Strings[130]
-#define set_attributes                 CUR Strings[131]
-#define set_tab                        CUR Strings[132]
-#define set_window                     CUR Strings[133]
-#define tab                            CUR Strings[134]
-#define to_status_line                 CUR Strings[135]
-#define underline_char                 CUR Strings[136]
-#define up_half_line                   CUR Strings[137]
-#define init_prog                      CUR Strings[138]
-#define key_a1                         CUR Strings[139]
-#define key_a3                         CUR Strings[140]
-#define key_b2                         CUR Strings[141]
-#define key_c1                         CUR Strings[142]
-#define key_c3                         CUR Strings[143]
-#define prtr_non                       CUR Strings[144]
-#define char_padding                   CUR Strings[145]
-#define acs_chars                      CUR Strings[146]
-#define plab_norm                      CUR Strings[147]
-#define key_btab                       CUR Strings[148]
-#define enter_xon_mode                 CUR Strings[149]
-#define exit_xon_mode                  CUR Strings[150]
-#define enter_am_mode                  CUR Strings[151]
-#define exit_am_mode                   CUR Strings[152]
-#define xon_character                  CUR Strings[153]
-#define xoff_character                 CUR Strings[154]
-#define ena_acs                        CUR Strings[155]
-#define label_on                       CUR Strings[156]
-#define label_off                      CUR Strings[157]
-#define key_beg                        CUR Strings[158]
-#define key_cancel                     CUR Strings[159]
-#define key_close                      CUR Strings[160]
-#define key_command                    CUR Strings[161]
-#define key_copy                       CUR Strings[162]
-#define key_create                     CUR Strings[163]
-#define key_end                        CUR Strings[164]
-#define key_enter                      CUR Strings[165]
-#define key_exit                       CUR Strings[166]
-#define key_find                       CUR Strings[167]
-#define key_help                       CUR Strings[168]
-#define key_mark                       CUR Strings[169]
-#define key_message                    CUR Strings[170]
-#define key_move                       CUR Strings[171]
-#define key_next                       CUR Strings[172]
-#define key_open                       CUR Strings[173]
-#define key_options                    CUR Strings[174]
-#define key_previous                   CUR Strings[175]
-#define key_print                      CUR Strings[176]
-#define key_redo                       CUR Strings[177]
-#define key_reference                  CUR Strings[178]
-#define key_refresh                    CUR Strings[179]
-#define key_replace                    CUR Strings[180]
-#define key_restart                    CUR Strings[181]
-#define key_resume                     CUR Strings[182]
-#define key_save                       CUR Strings[183]
-#define key_suspend                    CUR Strings[184]
-#define key_undo                       CUR Strings[185]
-#define key_sbeg                       CUR Strings[186]
-#define key_scancel                    CUR Strings[187]
-#define key_scommand                   CUR Strings[188]
-#define key_scopy                      CUR Strings[189]
-#define key_screate                    CUR Strings[190]
-#define key_sdc                        CUR Strings[191]
-#define key_sdl                        CUR Strings[192]
-#define key_select                     CUR Strings[193]
-#define key_send                       CUR Strings[194]
-#define key_seol                       CUR Strings[195]
-#define key_sexit                      CUR Strings[196]
-#define key_sfind                      CUR Strings[197]
-#define key_shelp                      CUR Strings[198]
-#define key_shome                      CUR Strings[199]
-#define key_sic                        CUR Strings[200]
-#define key_sleft                      CUR Strings[201]
-#define key_smessage                   CUR Strings[202]
-#define key_smove                      CUR Strings[203]
-#define key_snext                      CUR Strings[204]
-#define key_soptions                   CUR Strings[205]
-#define key_sprevious                  CUR Strings[206]
-#define key_sprint                     CUR Strings[207]
-#define key_sredo                      CUR Strings[208]
-#define key_sreplace                   CUR Strings[209]
-#define key_sright                     CUR Strings[210]
-#define key_srsume                     CUR Strings[211]
-#define key_ssave                      CUR Strings[212]
-#define key_ssuspend                   CUR Strings[213]
-#define key_sundo                      CUR Strings[214]
-#define req_for_input                  CUR Strings[215]
-#define key_f11                        CUR Strings[216]
-#define key_f12                        CUR Strings[217]
-#define key_f13                        CUR Strings[218]
-#define key_f14                        CUR Strings[219]
-#define key_f15                        CUR Strings[220]
-#define key_f16                        CUR Strings[221]
-#define key_f17                        CUR Strings[222]
-#define key_f18                        CUR Strings[223]
-#define key_f19                        CUR Strings[224]
-#define key_f20                        CUR Strings[225]
-#define key_f21                        CUR Strings[226]
-#define key_f22                        CUR Strings[227]
-#define key_f23                        CUR Strings[228]
-#define key_f24                        CUR Strings[229]
-#define key_f25                        CUR Strings[230]
-#define key_f26                        CUR Strings[231]
-#define key_f27                        CUR Strings[232]
-#define key_f28                        CUR Strings[233]
-#define key_f29                        CUR Strings[234]
-#define key_f30                        CUR Strings[235]
-#define key_f31                        CUR Strings[236]
-#define key_f32                        CUR Strings[237]
-#define key_f33                        CUR Strings[238]
-#define key_f34                        CUR Strings[239]
-#define key_f35                        CUR Strings[240]
-#define key_f36                        CUR Strings[241]
-#define key_f37                        CUR Strings[242]
-#define key_f38                        CUR Strings[243]
-#define key_f39                        CUR Strings[244]
-#define key_f40                        CUR Strings[245]
-#define key_f41                        CUR Strings[246]
-#define key_f42                        CUR Strings[247]
-#define key_f43                        CUR Strings[248]
-#define key_f44                        CUR Strings[249]
-#define key_f45                        CUR Strings[250]
-#define key_f46                        CUR Strings[251]
-#define key_f47                        CUR Strings[252]
-#define key_f48                        CUR Strings[253]
-#define key_f49                        CUR Strings[254]
-#define key_f50                        CUR Strings[255]
-#define key_f51                        CUR Strings[256]
-#define key_f52                        CUR Strings[257]
-#define key_f53                        CUR Strings[258]
-#define key_f54                        CUR Strings[259]
-#define key_f55                        CUR Strings[260]
-#define key_f56                        CUR Strings[261]
-#define key_f57                        CUR Strings[262]
-#define key_f58                        CUR Strings[263]
-#define key_f59                        CUR Strings[264]
-#define key_f60                        CUR Strings[265]
-#define key_f61                        CUR Strings[266]
-#define key_f62                        CUR Strings[267]
-#define key_f63                        CUR Strings[268]
-#define clr_bol                        CUR Strings[269]
-#define clear_margins                  CUR Strings[270]
-#define set_left_margin                CUR Strings[271]
-#define set_right_margin               CUR Strings[272]
-#define label_format                   CUR Strings[273]
-#define set_clock                      CUR Strings[274]
-#define display_clock                  CUR Strings[275]
-#define remove_clock                   CUR Strings[276]
-#define create_window                  CUR Strings[277]
-#define goto_window                    CUR Strings[278]
-#define hangup                         CUR Strings[279]
-#define dial_phone                     CUR Strings[280]
-#define quick_dial                     CUR Strings[281]
-#define tone                           CUR Strings[282]
-#define pulse                          CUR Strings[283]
-#define flash_hook                     CUR Strings[284]
-#define fixed_pause                    CUR Strings[285]
-#define wait_tone                      CUR Strings[286]
-#define user0                          CUR Strings[287]
-#define user1                          CUR Strings[288]
-#define user2                          CUR Strings[289]
-#define user3                          CUR Strings[290]
-#define user4                          CUR Strings[291]
-#define user5                          CUR Strings[292]
-#define user6                          CUR Strings[293]
-#define user7                          CUR Strings[294]
-#define user8                          CUR Strings[295]
-#define user9                          CUR Strings[296]
-#define orig_pair                      CUR Strings[297]
-#define orig_colors                    CUR Strings[298]
-#define initialize_color               CUR Strings[299]
-#define initialize_pair                CUR Strings[300]
-#define set_color_pair                 CUR Strings[301]
-#define set_foreground                 CUR Strings[302]
-#define set_background                 CUR Strings[303]
-#define change_char_pitch              CUR Strings[304]
-#define change_line_pitch              CUR Strings[305]
-#define change_res_horz                CUR Strings[306]
-#define change_res_vert                CUR Strings[307]
-#define define_char                    CUR Strings[308]
-#define enter_doublewide_mode          CUR Strings[309]
-#define enter_draft_quality            CUR Strings[310]
-#define enter_italics_mode             CUR Strings[311]
-#define enter_leftward_mode            CUR Strings[312]
-#define enter_micro_mode               CUR Strings[313]
-#define enter_near_letter_quality      CUR Strings[314]
-#define enter_normal_quality           CUR Strings[315]
-#define enter_shadow_mode              CUR Strings[316]
-#define enter_subscript_mode           CUR Strings[317]
-#define enter_superscript_mode         CUR Strings[318]
-#define enter_upward_mode              CUR Strings[319]
-#define exit_doublewide_mode           CUR Strings[320]
-#define exit_italics_mode              CUR Strings[321]
-#define exit_leftward_mode             CUR Strings[322]
-#define exit_micro_mode                CUR Strings[323]
-#define exit_shadow_mode               CUR Strings[324]
-#define exit_subscript_mode            CUR Strings[325]
-#define exit_superscript_mode          CUR Strings[326]
-#define exit_upward_mode               CUR Strings[327]
-#define micro_column_address           CUR Strings[328]
-#define micro_down                     CUR Strings[329]
-#define micro_left                     CUR Strings[330]
-#define micro_right                    CUR Strings[331]
-#define micro_row_address              CUR Strings[332]
-#define micro_up                       CUR Strings[333]
-#define order_of_pins                  CUR Strings[334]
-#define parm_down_micro                CUR Strings[335]
-#define parm_left_micro                CUR Strings[336]
-#define parm_right_micro               CUR Strings[337]
-#define parm_up_micro                  CUR Strings[338]
-#define select_char_set                CUR Strings[339]
-#define set_bottom_margin              CUR Strings[340]
-#define set_bottom_margin_parm         CUR Strings[341]
-#define set_left_margin_parm           CUR Strings[342]
-#define set_right_margin_parm          CUR Strings[343]
-#define set_top_margin                 CUR Strings[344]
-#define set_top_margin_parm            CUR Strings[345]
-#define start_bit_image                CUR Strings[346]
-#define start_char_set_def             CUR Strings[347]
-#define stop_bit_image                 CUR Strings[348]
-#define stop_char_set_def              CUR Strings[349]
-#define subscript_characters           CUR Strings[350]
-#define superscript_characters         CUR Strings[351]
-#define these_cause_cr                 CUR Strings[352]
-#define zero_motion                    CUR Strings[353]
-#define char_set_names                 CUR Strings[354]
-#define key_mouse                      CUR Strings[355]
-#define mouse_info                     CUR Strings[356]
-#define req_mouse_pos                  CUR Strings[357]
-#define get_mouse                      CUR Strings[358]
-#define set_a_foreground               CUR Strings[359]
-#define set_a_background               CUR Strings[360]
-#define pkey_plab                      CUR Strings[361]
-#define device_type                    CUR Strings[362]
-#define code_set_init                  CUR Strings[363]
-#define set0_des_seq                   CUR Strings[364]
-#define set1_des_seq                   CUR Strings[365]
-#define set2_des_seq                   CUR Strings[366]
-#define set3_des_seq                   CUR Strings[367]
-#define set_lr_margin                  CUR Strings[368]
-#define set_tb_margin                  CUR Strings[369]
-#define bit_image_repeat               CUR Strings[370]
-#define bit_image_newline              CUR Strings[371]
-#define bit_image_carriage_return      CUR Strings[372]
-#define color_names                    CUR Strings[373]
-#define define_bit_image_region        CUR Strings[374]
-#define end_bit_image_region           CUR Strings[375]
-#define set_color_band                 CUR Strings[376]
-#define set_page_length                CUR Strings[377]
-#define display_pc_char                CUR Strings[378]
-#define enter_pc_charset_mode          CUR Strings[379]
-#define exit_pc_charset_mode           CUR Strings[380]
-#define enter_scancode_mode            CUR Strings[381]
-#define exit_scancode_mode             CUR Strings[382]
-#define pc_term_options                CUR Strings[383]
-#define scancode_escape                CUR Strings[384]
-#define alt_scancode_esc               CUR Strings[385]
-#define enter_horizontal_hl_mode       CUR Strings[386]
-#define enter_left_hl_mode             CUR Strings[387]
-#define enter_low_hl_mode              CUR Strings[388]
-#define enter_right_hl_mode            CUR Strings[389]
-#define enter_top_hl_mode              CUR Strings[390]
-#define enter_vertical_hl_mode         CUR Strings[391]
-#define set_a_attributes               CUR Strings[392]
-#define set_pglen_inch                 CUR Strings[393]
-
-#define BOOLWRITE 37
-#define NUMWRITE  33
-#define STRWRITE  394
-
-/* older synonyms for some capabilities */
-#define beehive_glitch	no_esc_ctlc
-#define teleray_glitch	dest_tabs_magic_smso
-#define micro_char_size micro_col_size
-
-#ifdef __INTERNAL_CAPS_VISIBLE
-#define termcap_init2                  CUR Strings[394]
-#define termcap_reset                  CUR Strings[395]
-#define magic_cookie_glitch_ul         CUR Numbers[33]
-#define backspaces_with_bs             CUR Booleans[37]
-#define crt_no_scrolling               CUR Booleans[38]
-#define no_correctly_working_cr        CUR Booleans[39]
-#define carriage_return_delay          CUR Numbers[34]
-#define new_line_delay                 CUR Numbers[35]
-#define linefeed_if_not_lf             CUR Strings[396]
-#define backspace_if_not_bs            CUR Strings[397]
-#define gnu_has_meta_key               CUR Booleans[40]
-#define linefeed_is_newline            CUR Booleans[41]
-#define backspace_delay                CUR Numbers[36]
-#define horizontal_tab_delay           CUR Numbers[37]
-#define number_of_function_keys        CUR Numbers[38]
-#define other_non_function_keys        CUR Strings[398]
-#define arrow_key_map                  CUR Strings[399]
-#define has_hardware_tabs              CUR Booleans[42]
-#define return_does_clr_eol            CUR Booleans[43]
-#define acs_ulcorner                   CUR Strings[400]
-#define acs_llcorner                   CUR Strings[401]
-#define acs_urcorner                   CUR Strings[402]
-#define acs_lrcorner                   CUR Strings[403]
-#define acs_ltee                       CUR Strings[404]
-#define acs_rtee                       CUR Strings[405]
-#define acs_btee                       CUR Strings[406]
-#define acs_ttee                       CUR Strings[407]
-#define acs_hline                      CUR Strings[408]
-#define acs_vline                      CUR Strings[409]
-#define acs_plus                       CUR Strings[410]
-#define memory_lock                    CUR Strings[411]
-#define memory_unlock                  CUR Strings[412]
-#define box_chars_1                    CUR Strings[413]
-#endif /* __INTERNAL_CAPS_VISIBLE */
-
-
-/*
- * Predefined terminfo array sizes
- */
-#define BOOLCOUNT 44
-#define NUMCOUNT  39
-#define STRCOUNT  414
-
-/* used by code for comparing entries */
-#define acs_chars_index	 146
-
-typedef struct termtype {	/* in-core form of terminfo data */
-    char  *term_names;		/* str_table offset of term names */
-    char  *str_table;		/* pointer to string table */
-    NCURSES_SBOOL  *Booleans;	/* array of boolean values */
-    short *Numbers;		/* array of integer values */
-    char  **Strings;		/* array of string offsets */
-
-#if NCURSES_XNAMES
-    char  *ext_str_table;	/* pointer to extended string table */
-    char  **ext_Names;		/* corresponding names */
-
-    unsigned short num_Booleans;/* count total Booleans */
-    unsigned short num_Numbers;	/* count total Numbers */
-    unsigned short num_Strings;	/* count total Strings */
-
-    unsigned short ext_Booleans;/* count extensions to Booleans */
-    unsigned short ext_Numbers;	/* count extensions to Numbers */
-    unsigned short ext_Strings;	/* count extensions to Strings */
-#endif /* NCURSES_XNAMES */
-
-} TERMTYPE;
-
-typedef struct term {		/* describe an actual terminal */
-    TERMTYPE	type;		/* terminal type description */
-    short	Filedes;	/* file description being written to */
-    TTY		Ottyb,		/* original state of the terminal */
-		Nttyb;		/* current state of the terminal */
-    int		_baudrate;	/* used to compute padding */
-    char *      _termname;      /* used for termname() */
-} TERMINAL;
-
-#if 0 && !0
-extern NCURSES_EXPORT_VAR(TERMINAL *) cur_term;
-#elif 0
-NCURSES_WRAPPED_VAR(TERMINAL *, cur_term);
-#define cur_term   NCURSES_PUBLIC_VAR(cur_term())
-#else
-extern NCURSES_EXPORT_VAR(TERMINAL *) cur_term;
-#endif
-
-#if 0 || 0
-NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolnames);
-NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolcodes);
-NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolfnames);
-NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numnames);
-NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numcodes);
-NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numfnames);
-NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strnames);
-NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strcodes);
-NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strfnames);
-
-#define boolnames  NCURSES_PUBLIC_VAR(boolnames())
-#define boolcodes  NCURSES_PUBLIC_VAR(boolcodes())
-#define boolfnames NCURSES_PUBLIC_VAR(boolfnames())
-#define numnames   NCURSES_PUBLIC_VAR(numnames())
-#define numcodes   NCURSES_PUBLIC_VAR(numcodes())
-#define numfnames  NCURSES_PUBLIC_VAR(numfnames())
-#define strnames   NCURSES_PUBLIC_VAR(strnames())
-#define strcodes   NCURSES_PUBLIC_VAR(strcodes())
-#define strfnames  NCURSES_PUBLIC_VAR(strfnames())
-
-#else
-
-extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolnames[];
-extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolcodes[];
-extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolfnames[];
-extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numnames[];
-extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numcodes[];
-extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numfnames[];
-extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strnames[];
-extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strcodes[];
-extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strfnames[];
-
-#endif
-
-/* internals */
-extern NCURSES_EXPORT(int) _nc_set_tty_mode (TTY *buf);
-extern NCURSES_EXPORT(int) _nc_get_tty_mode (TTY *buf);
-extern NCURSES_EXPORT(int) _nc_read_entry (const char * const, char * const, TERMTYPE *const);
-extern NCURSES_EXPORT(int) _nc_read_file_entry (const char *const, TERMTYPE *);
-extern NCURSES_EXPORT(void) _nc_init_termtype (TERMTYPE *const);
-extern NCURSES_EXPORT(int) _nc_read_termtype (TERMTYPE *, char *, int);
-extern NCURSES_EXPORT(char *) _nc_first_name (const char *const);
-extern NCURSES_EXPORT(int) _nc_name_match (const char *const, const char *const, const char *const);
-extern NCURSES_EXPORT(const TERMTYPE *) _nc_fallback (const char *);
-
-/* entry points */
-extern NCURSES_EXPORT(TERMINAL *) set_curterm (TERMINAL *);
-extern NCURSES_EXPORT(int) del_curterm (TERMINAL *);
-
-/* miscellaneous entry points */
-extern NCURSES_EXPORT(int) restartterm (NCURSES_CONST char *, int, int *);
-extern NCURSES_EXPORT(int) setupterm (NCURSES_CONST char *,int,int *);
-
-/* terminfo entry points, also declared in curses.h */
-#if !defined(__NCURSES_H)
-extern NCURSES_EXPORT(char *) tigetstr (NCURSES_CONST char *);
-extern NCURSES_EXPORT_VAR(char) ttytype[];
-extern NCURSES_EXPORT(int) putp (const char *);
-extern NCURSES_EXPORT(int) tigetflag (NCURSES_CONST char *);
-extern NCURSES_EXPORT(int) tigetnum (NCURSES_CONST char *);
-
-#if 1 /* NCURSES_TPARM_VARARGS */
-extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, ...);	/* special */
-#else
-extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, long,long,long,long,long,long,long,long,long);	/* special */
-extern NCURSES_EXPORT(char *) tparm_varargs (NCURSES_CONST char *, ...);	/* special */
-#endif
-
-extern NCURSES_EXPORT(char *) tiparm (const char *, ...);		/* special */
-
-#endif /* __NCURSES_H */
-
-/* termcap database emulation (XPG4 uses const only for 2nd param of tgetent) */
-#if !defined(NCURSES_TERMCAP_H_incl)
-extern NCURSES_EXPORT(char *) tgetstr (NCURSES_CONST char *, char **);
-extern NCURSES_EXPORT(char *) tgoto (const char *, int, int);
-extern NCURSES_EXPORT(int) tgetent (char *, const char *);
-extern NCURSES_EXPORT(int) tgetflag (NCURSES_CONST char *);
-extern NCURSES_EXPORT(int) tgetnum (NCURSES_CONST char *);
-extern NCURSES_EXPORT(int) tputs (const char *, int, int (*)(int));
-#endif /* NCURSES_TERMCAP_H_incl */
-
-/*
- * Include curses.h before term.h to enable these extensions.
- */
-#if defined(NCURSES_SP_FUNCS) && (NCURSES_SP_FUNCS != 0)
-
-extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tigetstr) (SCREEN*, NCURSES_CONST char *);
-extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(putp) (SCREEN*, const char *);
-extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tigetflag) (SCREEN*, NCURSES_CONST char *);
-extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tigetnum) (SCREEN*, NCURSES_CONST char *);
-
-#if 1 /* NCURSES_TPARM_VARARGS */
-extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tparm) (SCREEN*, NCURSES_CONST char *, ...);	/* special */
-#else
-extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tparm) (SCREEN*, NCURSES_CONST char *, long,long,long,long,long,long,long,long,long);	/* special */
-extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tparm_varargs) (SCREEN*, NCURSES_CONST char *, ...);	/* special */
-#endif
-
-/* termcap database emulation (XPG4 uses const only for 2nd param of tgetent) */
-extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tgetstr) (SCREEN*, NCURSES_CONST char *, char **);
-extern NCURSES_EXPORT(char *)  NCURSES_SP_NAME(tgoto) (SCREEN*, const char *, int, int);
-extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tgetent) (SCREEN*, char *, const char *);
-extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tgetflag) (SCREEN*, NCURSES_CONST char *);
-extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tgetnum) (SCREEN*, NCURSES_CONST char *);
-extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(tputs) (SCREEN*, const char *, int, NCURSES_SP_OUTC);
-
-extern NCURSES_EXPORT(TERMINAL *) NCURSES_SP_NAME(set_curterm) (SCREEN*, TERMINAL *);
-extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(del_curterm) (SCREEN*, TERMINAL *);
-
-extern NCURSES_EXPORT(int)     NCURSES_SP_NAME(restartterm) (SCREEN*, NCURSES_CONST char *, int, int *);
-#endif /* NCURSES_SP_FUNCS */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* NCURSES_TERM_H_incl */
diff --git a/include/term_entry.h b/include/term_entry.h
index b12710d..24389ad 100644
--- a/include/term_entry.h
+++ b/include/term_entry.h
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc.              *
+ * Copyright 2018-2022,2023 Thomas E. Dickey                                *
+ * Copyright 1998-2015,2017 Free Software Foundation, Inc.                  *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -32,7 +33,7 @@
  *     and: Thomas E. Dickey                        1998-on                 *
  ****************************************************************************/
 
-/* $Id: term_entry.h,v 1.45 2014/11/01 14:47:00 tom Exp $ */
+/* $Id: term_entry.h,v 1.64 2023/04/22 13:37:14 tom Exp $ */
 
 /*
  *	term_entry.h -- interface to entry-manipulation code
@@ -40,53 +41,18 @@
 
 #ifndef NCURSES_TERM_ENTRY_H_incl
 #define NCURSES_TERM_ENTRY_H_incl 1
+/* *INDENT-OFF* */
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
+#include <curses.h>
 #include <term.h>
 
-    /*
-     * see db_iterator.c - this enumeration lists the places searched for a
-     * terminal description and defines the order in which they are searched.
-     */
-    typedef enum {
-	dbdTIC = 0,		/* special, used by tic when writing entry */
-#if NCURSES_USE_DATABASE
-	dbdEnvOnce,		/* the $TERMINFO environment variable */
-	dbdHome,		/* $HOME/.terminfo */
-	dbdEnvList,		/* the $TERMINFO_DIRS environment variable */
-	dbdCfgList,		/* the compiled-in TERMINFO_DIRS value */
-	dbdCfgOnce,		/* the compiled-in TERMINFO value */
-#endif
-#if NCURSES_USE_TERMCAP
-	dbdEnvOnce2,		/* the $TERMCAP environment variable */
-	dbdEnvList2,		/* the $TERMPATH environment variable */
-	dbdCfgList2,		/* the compiled-in TERMPATH */
-#endif
-	dbdLAST
-    } DBDIRS;
-
-#define MAX_USES	32
-#define MAX_CROSSLINKS	16
-
-    typedef struct entry {
-	TERMTYPE tterm;
-	unsigned nuses;
-	struct {
-	    char *name;
-	    struct entry *link;
-	    long line;
-	} uses[MAX_USES];
-	int ncrosslinks;
-	struct entry *crosslinks[MAX_CROSSLINKS];
-	long cstart, cend;
-	long startline;
-	struct entry *next;
-	struct entry *last;
-    } ENTRY;
-/* *INDENT-OFF* */
+/*
+ * These macros may be used by programs that know about TERMTYPE:
+ */
 #if NCURSES_XNAMES
 #define NUM_BOOLEANS(tp) (tp)->num_Booleans
 #define NUM_NUMBERS(tp)  (tp)->num_Numbers
@@ -106,18 +72,70 @@
 #define for_each_string(n,tp)  for(n = 0; n < NUM_STRINGS(tp);  n++)
 
 #if NCURSES_XNAMES
-#define for_each_ext_boolean(n,tp) for(n = BOOLCOUNT; n < NUM_BOOLEANS(tp); n++)
-#define for_each_ext_number(n,tp)  for(n = NUMCOUNT; n < NUM_NUMBERS(tp);  n++)
-#define for_each_ext_string(n,tp)  for(n = STRCOUNT; n < NUM_STRINGS(tp);  n++)
+#define for_each_ext_boolean(n,tp) for(n = BOOLCOUNT; (int) n < (int) NUM_BOOLEANS(tp); n++)
+#define for_each_ext_number(n,tp)  for(n = NUMCOUNT; (int) n < (int) NUM_NUMBERS(tp);  n++)
+#define for_each_ext_string(n,tp)  for(n = STRCOUNT; (int) n < (int) NUM_STRINGS(tp);  n++)
 #endif
 
 #define ExtBoolname(tp,i,names) EXT_NAMES(tp, i, BOOLCOUNT, (i - (tp->num_Booleans - tp->ext_Booleans)), names)
 #define ExtNumname(tp,i,names)  EXT_NAMES(tp, i, NUMCOUNT, (i - (tp->num_Numbers - tp->ext_Numbers)) + tp->ext_Booleans, names)
 #define ExtStrname(tp,i,names)  EXT_NAMES(tp, i, STRCOUNT, (i - (tp->num_Strings - tp->ext_Strings)) + (tp->ext_Numbers + tp->ext_Booleans), names)
 
+/*
+ * The remaining type-definitions and macros are used only internally by the
+ * ncurses utilities.
+ */
+#ifdef NCURSES_INTERNALS
+
+/*
+ * see db_iterator.c - this enumeration lists the places searched for a
+ * terminal description and defines the order in which they are searched.
+ */
+typedef enum {
+	dbdTIC = 0,		/* special, used by tic when writing entry */
+#if NCURSES_USE_DATABASE
+	dbdEnvOnce,		/* the $TERMINFO environment variable */
+	dbdHome,		/* $HOME/.terminfo */
+	dbdEnvList,		/* the $TERMINFO_DIRS environment variable */
+	dbdCfgList,		/* the compiled-in TERMINFO_DIRS value */
+	dbdCfgOnce,		/* the compiled-in TERMINFO value */
+#endif
+#if NCURSES_USE_TERMCAP
+	dbdEnvOnce2,		/* the $TERMCAP environment variable */
+	dbdEnvList2,		/* the $TERMPATH environment variable */
+	dbdCfgList2,		/* the compiled-in TERMPATH */
+#endif
+	dbdLAST
+} DBDIRS;
+
+#define MAX_USES	32
+#define MAX_CROSSLINKS	16
+
+typedef struct entry ENTRY;
+
+typedef struct {
+	char *name;
+	ENTRY *link;
+	long line;
+} ENTRY_USES;
+
+struct entry {
+	TERMTYPE2 tterm;
+	unsigned nuses;
+	ENTRY_USES uses[MAX_USES];
+	int ncrosslinks;
+	ENTRY *crosslinks[MAX_CROSSLINKS];
+	long cstart;
+	long cend;
+	long startline;
+	ENTRY *next;
+	ENTRY *last;
+};
+
 extern NCURSES_EXPORT_VAR(ENTRY *) _nc_head;
 extern NCURSES_EXPORT_VAR(ENTRY *) _nc_tail;
 #define for_entry_list(qp)	for (qp = _nc_head; qp; qp = qp->next)
+#define for_entry_list2(qp,q0)	for (qp = q0; qp; qp = qp->next)
 
 #define MAX_LINE	132
 
@@ -125,13 +143,16 @@
 
 /*
  * Note that WANTED and PRESENT are not simple inverses!  If a capability
- * has been explicitly cancelled, it's not considered WANTED.
+ * has been explicitly cancelled, it is not considered WANTED.
  */
 #define WANTED(s)	((s) == ABSENT_STRING)
 #define PRESENT(s)	(((s) != ABSENT_STRING) && ((s) != CANCELLED_STRING))
 
 #define ANDMISSING(p,q) \
-		{if (PRESENT(p) && !PRESENT(q)) _nc_warning(#p " but no " #q);}
+		{ \
+		if (PRESENT(p) && !PRESENT(q)) \
+			_nc_warning(#p " but no " #q); \
+		}
 
 #define PAIRED(p,q) \
 		{ \
@@ -141,25 +162,27 @@
 			_nc_warning(#p " but no " #q); \
 		}
 
+/*
+ * These entrypoints are used only by the ncurses utilities such as tic.
+ */
+
 /* alloc_entry.c: elementary allocation code */
 extern NCURSES_EXPORT(ENTRY *) _nc_copy_entry (ENTRY *oldp);
 extern NCURSES_EXPORT(char *) _nc_save_str (const char *const);
-extern NCURSES_EXPORT(void) _nc_init_entry (TERMTYPE *const);
-extern NCURSES_EXPORT(void) _nc_merge_entry (TERMTYPE *const, TERMTYPE *const);
+extern NCURSES_EXPORT(void) _nc_init_entry (ENTRY *const);
+extern NCURSES_EXPORT(void) _nc_merge_entry (ENTRY *const, ENTRY *const);
 extern NCURSES_EXPORT(void) _nc_wrap_entry (ENTRY *const, bool);
 
 /* alloc_ttype.c: elementary allocation code */
-extern NCURSES_EXPORT(void) _nc_align_termtype (TERMTYPE *, TERMTYPE *);
-extern NCURSES_EXPORT(void) _nc_copy_termtype (TERMTYPE *, const TERMTYPE *);
+extern NCURSES_EXPORT(void) _nc_align_termtype (TERMTYPE2 *, TERMTYPE2 *);
 
 /* free_ttype.c: elementary allocation code */
 extern NCURSES_EXPORT(void) _nc_free_termtype (TERMTYPE *);
-
-/* lib_acs.c */
-extern NCURSES_EXPORT(void) _nc_init_acs (void);	/* corresponds to traditional 'init_acs()' */
+extern NCURSES_EXPORT(void) _nc_free_termtype1 (TERMTYPE *);
+extern NCURSES_EXPORT(void) _nc_free_termtype2 (TERMTYPE2 *);
 
 /* lib_termcap.c: trim sgr0 string for termcap users */
-extern NCURSES_EXPORT(char *) _nc_trim_sgr0 (TERMTYPE *);
+extern NCURSES_EXPORT(char *) _nc_trim_sgr0 (TERMTYPE2 *);
 
 /* parse_entry.c: entry-parsing code */
 #if NCURSES_XNAMES
@@ -171,7 +194,8 @@
 
 /* write_entry.c: writing an entry to the file system */
 extern NCURSES_EXPORT(void) _nc_set_writedir (const char *);
-extern NCURSES_EXPORT(void) _nc_write_entry (TERMTYPE *const);
+extern NCURSES_EXPORT(void) _nc_write_entry (TERMTYPE2 *const);
+extern NCURSES_EXPORT(int) _nc_write_object (TERMTYPE2 *, char *, unsigned *, unsigned);
 
 /* comp_parse.c: entry list handling */
 extern NCURSES_EXPORT(void) _nc_read_entry_source (FILE*, char*, int, bool, bool (*)(ENTRY*));
@@ -179,14 +203,18 @@
 extern NCURSES_EXPORT(int) _nc_resolve_uses (bool); /* obs 20040705 */
 extern NCURSES_EXPORT(int) _nc_resolve_uses2 (bool, bool);
 extern NCURSES_EXPORT(void) _nc_free_entries (ENTRY *);
-extern NCURSES_IMPEXP void NCURSES_API (*_nc_check_termtype)(TERMTYPE *); /* obs 20040705 */
-extern NCURSES_IMPEXP void NCURSES_API (*_nc_check_termtype2)(TERMTYPE *, bool);
+extern NCURSES_IMPEXP void (NCURSES_API *_nc_check_termtype)(TERMTYPE *); /* obs 20040705 */
+extern NCURSES_IMPEXP void (NCURSES_API *_nc_check_termtype2)(TERMTYPE2 *, bool);
 
 /* trace_xnames.c */
 extern NCURSES_EXPORT(void) _nc_trace_xnames (TERMTYPE *);
-/* *INDENT-ON* */
+
+#endif /* NCURSES_INTERNALS */
 
 #ifdef __cplusplus
 }
 #endif
-#endif				/* NCURSES_TERM_ENTRY_H_incl */
+
+/* *INDENT-ON* */
+
+#endif /* NCURSES_TERM_ENTRY_H_incl */
diff --git a/include/termcap.h.in b/include/termcap.h.in
index 6adc312..7b7c703 100644
--- a/include/termcap.h.in
+++ b/include/termcap.h.in
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998,2000 Free Software Foundation, Inc.                   *
+ * Copyright 2018-2020,2021 Thomas E. Dickey                                *
+ * Copyright 1998-2000,2001 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            *
@@ -31,7 +32,7 @@
  *     and: Eric S. Raymond <esr@snark.thyrsus.com>                         *
  ****************************************************************************/
 
-/* $Id: termcap.h.in,v 1.16 2001/03/24 21:53:27 tom Exp $ */
+/* $Id: termcap.h.in,v 1.20 2021/06/17 21:26:02 tom Exp $ */
 
 #ifndef NCURSES_TERMCAP_H_incl
 #define NCURSES_TERMCAP_H_incl	1
@@ -48,23 +49,20 @@
 
 #include <sys/types.h>
 
-#undef  NCURSES_CONST 
-#define NCURSES_CONST @NCURSES_CONST@ 
-
-#undef  NCURSES_OSPEED 
-#define NCURSES_OSPEED @NCURSES_OSPEED@ 
+#undef  NCURSES_OSPEED
+#define NCURSES_OSPEED @NCURSES_OSPEED@
 
 extern NCURSES_EXPORT_VAR(char) PC;
 extern NCURSES_EXPORT_VAR(char *) UP;
 extern NCURSES_EXPORT_VAR(char *) BC;
-extern NCURSES_EXPORT_VAR(NCURSES_OSPEED) ospeed; 
+extern NCURSES_EXPORT_VAR(NCURSES_OSPEED) ospeed;
 
 #if !defined(NCURSES_TERM_H_incl)
-extern NCURSES_EXPORT(char *) tgetstr (NCURSES_CONST char *, char **);
+extern NCURSES_EXPORT(char *) tgetstr (const char *, char **);
 extern NCURSES_EXPORT(char *) tgoto (const char *, int, int);
 extern NCURSES_EXPORT(int) tgetent (char *, const char *);
-extern NCURSES_EXPORT(int) tgetflag (NCURSES_CONST char *);
-extern NCURSES_EXPORT(int) tgetnum (NCURSES_CONST char *);
+extern NCURSES_EXPORT(int) tgetflag (const char *);
+extern NCURSES_EXPORT(int) tgetnum (const char *);
 extern NCURSES_EXPORT(int) tputs (const char *, int, int (*)(int));
 #endif
 
diff --git a/include/tic.h b/include/tic.h
index 528a1b7..7569aae 100644
--- a/include/tic.h
+++ b/include/tic.h
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc.              *
+ * Copyright 2018-2022,2023 Thomas E. Dickey                                *
+ * Copyright 1998-2012,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            *
@@ -33,9 +34,8 @@
  ****************************************************************************/
 
 /*
- * $Id: tic.h,v 1.69 2012/03/17 18:22:10 tom Exp $
- *	tic.h - Global variables and structures for the terminfo
- *			compiler.
+ * $Id: tic.h,v 1.87 2023/04/22 13:37:21 tom Exp $
+ *	tic.h - Global variables and structures for the terminfo compiler.
  */
 
 #ifndef __TIC_H
@@ -45,10 +45,12 @@
 extern "C" {
 #endif
 
+#include <ncurses_cfg.h>
+
 #include <curses.h>	/* for the _tracef() prototype, ERR/OK, bool defs */
 
 /*
-** The format of compiled terminfo files is as follows:
+** The format of SVr2 compiled terminfo files is as follows:
 **
 **		Header (12 bytes), containing information given below
 **		Names Section, containing the names of the terminal
@@ -64,6 +66,11 @@
 **		String Table, containing the actual characters of the string
 **				capabilities.
 **
+** In the SVr2 format, "short" means signed 16-bit numbers, which is sometimes
+** inconvenient.  The numbers are signed, to provide for absent and canceled
+** values.  ncurses6.1 introduced an extension to this compiled format, by
+** making the Number Section a list of signed 32-bit integers.
+**
 **	NOTE that all short integers in the file are stored using VAX/PDP-style
 **	byte-order, i.e., least-significant byte first.
 **
@@ -76,6 +83,7 @@
 */
 
 #define MAGIC		0432	/* first two bytes of a compiled entry */
+#define MAGIC2		01036	/* first two bytes of a compiled 32-bit entry */
 
 #undef  BYTE
 #define BYTE(p,n)	(unsigned char)((p)[n])
@@ -84,14 +92,23 @@
 #define IS_NEG2(p)	((BYTE(p,0) == 0376) && (BYTE(p,1) == 0377))
 #define LOW_MSB(p)	(BYTE(p,0) + 256*BYTE(p,1))
 
-#define IS_TIC_MAGIC(p)	(LOW_MSB(p) == MAGIC)
+#define IS_TIC_MAGIC(p)	(LOW_MSB(p) == MAGIC || LOW_MSB(p) == MAGIC2)
+
+#define quick_prefix(s) (!strncmp((s), "b64:", (size_t)4) || !strncmp((s), "hex:", (size_t)4))
 
 /*
  * The "maximum" here is misleading; XSI guarantees minimum values, which a
  * given implementation may exceed.
  */
 #define MAX_NAME_SIZE	512	/* maximum legal name field size (XSI:127) */
-#define MAX_ENTRY_SIZE	4096	/* maximum legal entry size */
+#define MAX_ENTRY_SIZE1	4096	/* maximum legal entry size (SVr2) */
+#define MAX_ENTRY_SIZE2	32768	/* maximum legal entry size (ncurses6.1) */
+
+#if NCURSES_EXT_COLORS && HAVE_INIT_EXTENDED_COLOR
+#define MAX_ENTRY_SIZE MAX_ENTRY_SIZE2
+#else
+#define MAX_ENTRY_SIZE MAX_ENTRY_SIZE1
+#endif
 
 /*
  * The maximum size of individual name or alias is guaranteed in XSI to be at
@@ -118,7 +135,7 @@
 #define DEBUG_LEVEL(n)	((n) << TRACE_SHIFT)
 
 #define set_trace_level(n) \
-	_nc_tracing &= DEBUG_LEVEL(MAX_DEBUG_LEVEL), \
+	_nc_tracing &= TRACE_MAXIMUM, \
 	_nc_tracing |= DEBUG_LEVEL(n)
 
 #ifdef TRACE
@@ -127,11 +144,6 @@
 #define DEBUG(n, a)	/*nothing*/
 #endif
 
-extern NCURSES_EXPORT_VAR(unsigned) _nc_tracing;
-extern NCURSES_EXPORT(void) _nc_tracef (char *, ...) GCC_PRINTFLIKE(1,2);
-extern NCURSES_EXPORT(const char *) _nc_visbuf (const char *);
-extern NCURSES_EXPORT(const char *) _nc_visbuf2 (int, const char *);
-
 /*
  * These are the types of tokens returned by the scanner.  The first
  * three are also used in the hash table of capability names.  The scanner
@@ -148,49 +160,33 @@
 
 #define NO_PUSHBACK	-1	/* used in pushtype to indicate no pushback */
 
-	/*
-	 *	The global structure in which the specific parts of a
-	 *	scanned token are returned.
-	 *
-	 */
+/*
+ * The global structure in which the specific parts of a
+ * scanned token are returned.
+ */
 
 struct token
 {
-	char	*tk_name;		/* name of capability */
+	char	*tk_name;	/* name of capability */
 	int	tk_valnumber;	/* value of capability (if a number) */
 	char	*tk_valstring;	/* value of capability (if a string) */
 };
 
-extern NCURSES_EXPORT_VAR(struct token)	_nc_curr_token;
-
-	/*
-	 * Offsets to string capabilities, with the corresponding functionkey
-	 * codes.
-	 */
+/*
+ * Offsets to string capabilities, with the corresponding functionkey codes.
+ */
 struct tinfo_fkeys {
 	unsigned offset;
 	chtype code;
 	};
 
-#if	BROKEN_LINKER
-
-#define	_nc_tinfo_fkeys	_nc_tinfo_fkeysf()
-extern NCURSES_EXPORT(const struct tinfo_fkeys *) _nc_tinfo_fkeysf (void);
-
-#else
-
-extern NCURSES_EXPORT_VAR(const struct tinfo_fkeys) _nc_tinfo_fkeys[];
-
-#endif
-
 typedef short HashValue;
 
-	/*
-	 * The file comp_captab.c contains an array of these structures, one
-	 * per possible capability.  These are indexed by a hash table array of
-	 * pointers to the same structures for use by the parser.
-	 */
-
+/*
+ * The file comp_captab.c contains an array of these structures, one per
+ * possible capability.  These are indexed by a hash table array of pointers to
+ * the same structures for use by the parser.
+ */
 struct name_table_entry
 {
 	const char *nte_name;	/* name to hash on */
@@ -199,10 +195,9 @@
 	HashValue nte_link;	/* index in table of next hash, or -1 */
 };
 
-	/*
-	 * Use this structure to hide differences between terminfo and termcap
-	 * tables.
-	 */
+/*
+ * Use this structure to hide differences between terminfo and termcap tables.
+ */
 typedef struct {
 	unsigned table_size;
 	const HashValue *table_data;
@@ -217,14 +212,24 @@
 	const char	*source;
 };
 
-extern NCURSES_EXPORT(const struct name_table_entry *) _nc_get_table (bool);
-extern NCURSES_EXPORT(const HashData *) _nc_get_hash_info (bool);
-extern NCURSES_EXPORT(const HashValue *) _nc_get_hash_table (bool);
-extern NCURSES_EXPORT(const struct alias *) _nc_get_alias_table (bool);
-
 #define NOTFOUND	((struct name_table_entry *) 0)
 
 /*
+ * The file comp_userdefs.c contains an array of these structures, one per
+ * possible capability.  These are indexed by a hash table array of pointers to
+ * the same structures for use by the parser.
+ */
+struct user_table_entry
+{
+	const char *ute_name;	/* name to hash on */
+	int	ute_type;	/* mask (BOOLEAN, NUMBER, STRING) */
+	unsigned ute_argc;	/* number of parameters */
+	unsigned ute_args;	/* bit-mask for string parameters */
+	HashValue ute_index;	/* index of associated variable in its array */
+	HashValue ute_link;	/* index in table of next hash, or -1 */
+};
+
+/*
  * The casts are required for correct sign-propagation with systems such as
  * AIX, IRIX64, Solaris which default to unsigned characters.  The C standard
  * leaves this detail unspecified.
@@ -256,6 +261,10 @@
 
 #ifdef NCURSES_TERM_ENTRY_H_incl
 
+/*
+ * These entrypoints are used only by the ncurses utilities such as tic.
+ */
+#ifdef NCURSES_INTERNALS
 /* access.c */
 extern NCURSES_EXPORT(unsigned) _nc_pathlast (const char *);
 extern NCURSES_EXPORT(bool) _nc_is_abs_path (const char *);
@@ -264,17 +273,21 @@
 extern NCURSES_EXPORT(char *) _nc_basename (char *);
 extern NCURSES_EXPORT(char *) _nc_rootname (char *);
 
+/* comp_captab.c */
+extern NCURSES_EXPORT(const struct name_table_entry *) _nc_get_table (bool);
+extern NCURSES_EXPORT(const HashData *) _nc_get_hash_info (bool);
+extern NCURSES_EXPORT(const struct alias *) _nc_get_alias_table (bool);
+
 /* comp_hash.c: name lookup */
-extern NCURSES_EXPORT(struct name_table_entry const *) _nc_find_entry
-	(const char *, const HashValue *);
 extern NCURSES_EXPORT(struct name_table_entry const *) _nc_find_type_entry
 	(const char *, int, bool);
+extern NCURSES_EXPORT(struct user_table_entry const *) _nc_find_user_entry
+	(const char *);
 
 /* comp_scan.c: lexical analysis */
 extern NCURSES_EXPORT(int)  _nc_get_token (bool);
 extern NCURSES_EXPORT(void) _nc_panic_mode (char);
 extern NCURSES_EXPORT(void) _nc_push_token (int);
-extern NCURSES_EXPORT(void) _nc_reset_input (FILE *, char *);
 extern NCURSES_EXPORT_VAR(int) _nc_curr_col;
 extern NCURSES_EXPORT_VAR(int) _nc_curr_line;
 extern NCURSES_EXPORT_VAR(int) _nc_syntax;
@@ -288,19 +301,20 @@
 
 /* comp_error.c: warning & abort messages */
 extern NCURSES_EXPORT(const char *) _nc_get_source (void);
-extern NCURSES_EXPORT(void) _nc_err_abort (const char *const,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
+extern GCC_NORETURN NCURSES_EXPORT(void) _nc_err_abort (const char *const,...) GCC_PRINTFLIKE(1,2);
 extern NCURSES_EXPORT(void) _nc_get_type (char *name);
 extern NCURSES_EXPORT(void) _nc_set_source (const char *const);
 extern NCURSES_EXPORT(void) _nc_set_type (const char *const);
-extern NCURSES_EXPORT(void) _nc_syserr_abort (const char *const,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
+extern GCC_NORETURN NCURSES_EXPORT(void) _nc_syserr_abort (const char *const,...) GCC_PRINTFLIKE(1,2);
 extern NCURSES_EXPORT(void) _nc_warning (const char *const,...) GCC_PRINTFLIKE(1,2);
 extern NCURSES_EXPORT_VAR(bool) _nc_suppress_warnings;
 
-/* comp_expand.c: expand string into readable form */
-extern NCURSES_EXPORT(char *) _nc_tic_expand (const char *, bool, int);
+/* comp_scan.c */
+extern NCURSES_EXPORT_VAR(struct token)	_nc_curr_token;
 
-/* comp_scan.c: decode string from readable form */
-extern NCURSES_EXPORT(int) _nc_trans_string (char *, char *);
+/* comp_userdefs.c */
+NCURSES_EXPORT(const struct user_table_entry *) _nc_get_userdefs_table (void);
+NCURSES_EXPORT(const HashData *) _nc_get_hash_user (void);
 
 /* captoinfo.c: capability conversion */
 extern NCURSES_EXPORT(char *) _nc_captoinfo (const char *, const char *, int const);
@@ -309,15 +323,37 @@
 /* home_terminfo.c */
 extern NCURSES_EXPORT(char *) _nc_home_terminfo (void);
 
+/* init_keytry.c */
+#if	BROKEN_LINKER
+#define	_nc_tinfo_fkeys	_nc_tinfo_fkeysf()
+extern NCURSES_EXPORT(const struct tinfo_fkeys *) _nc_tinfo_fkeysf (void);
+#else
+extern NCURSES_EXPORT_VAR(const struct tinfo_fkeys) _nc_tinfo_fkeys[];
+#endif
+
 /* lib_tparm.c */
 #define NUM_PARM 9
 
 extern NCURSES_EXPORT_VAR(int) _nc_tparm_err;
 
-extern NCURSES_EXPORT(int) _nc_tparm_analyze(const char *, char **, int *);
+extern NCURSES_EXPORT(int) _nc_tparm_analyze(TERMINAL *, const char *, char **, int *);
+extern NCURSES_EXPORT(void) _nc_reset_tparm(TERMINAL *);
+
+/* lib_trace.c */
+extern NCURSES_EXPORT_VAR(unsigned) _nc_tracing;
+extern NCURSES_EXPORT(const char *) _nc_visbuf (const char *);
+extern NCURSES_EXPORT(const char *) _nc_visbuf2 (int, const char *);
 
 /* lib_tputs.c */
-extern NCURSES_EXPORT_VAR(int) _nc_nulls_sent;		/* Add one for every null sent */
+extern NCURSES_EXPORT_VAR(int) _nc_nulls_sent;	/* Add one for every null sent */
+
+/* comp_expand.c: expand string into readable form */
+extern NCURSES_EXPORT(char *) _nc_tic_expand (const char *, bool, int);
+
+/* comp_hash.c: name lookup */
+extern NCURSES_EXPORT(struct name_table_entry const *) _nc_find_entry
+	(const char *, const HashValue *);
+extern NCURSES_EXPORT(const HashValue *) _nc_get_hash_table (bool);
 
 /* comp_main.c: compiler main */
 extern const char * _nc_progname;
@@ -331,6 +367,8 @@
 /* write_entry.c */
 extern NCURSES_EXPORT(int) _nc_tic_written (void);
 
+#endif /* NCURSES_INTERNALS */
+
 #endif /* NCURSES_TERM_ENTRY_H_incl */
 
 #ifdef __cplusplus
diff --git a/include/unctrl.h.in b/include/unctrl.h.in
index e08bc81..f76f443 100644
--- a/include/unctrl.h.in
+++ b/include/unctrl.h.in
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc.              *
+ * Copyright 2020 Thomas E. Dickey                                          *
+ * Copyright 1998-2001,2009 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            *
@@ -39,7 +40,7 @@
  * as ^?. Printable characters are displayed as is.
  */
 
-/* $Id: unctrl.h.in,v 1.11 2009/04/18 21:00:52 tom Exp $ */
+/* $Id: unctrl.h.in,v 1.12 2020/02/02 23:34:34 tom Exp $ */
 
 #ifndef NCURSES_UNCTRL_H_incl
 #define NCURSES_UNCTRL_H_incl	1
diff --git a/include/termcap.h b/include/win32_curses.h
similarity index 64%
rename from include/termcap.h
rename to include/win32_curses.h
index 909c708..0c807a0 100644
--- a/include/termcap.h
+++ b/include/win32_curses.h
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998,2000 Free Software Foundation, Inc.                   *
+ * Copyright 2018-2020,2021 Thomas E. Dickey                                *
+ * Copyright 2008-2014,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            *
@@ -27,49 +28,48 @@
  ****************************************************************************/
 
 /****************************************************************************
- *  Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995               *
- *     and: Eric S. Raymond <esr@snark.thyrsus.com>                         *
+ * Author: Juergen Pfeifer, 2008-on                                         *
  ****************************************************************************/
 
-/* $Id: termcap.h.in,v 1.16 2001/03/24 21:53:27 tom Exp $ */
+/* $Id: win32_curses.h,v 1.3 2021/06/17 21:26:02 tom Exp $ */
 
-#ifndef NCURSES_TERMCAP_H_incl
-#define NCURSES_TERMCAP_H_incl	1
+/*
+ * This is the interface we use on Windows to mimic the control of the settings
+ * of what acts like the classic TTY - the Windows Console.
+ */
 
-#undef  NCURSES_VERSION
-#define NCURSES_VERSION "6.0"
+#if (defined(_WIN32) || defined(_WIN64))
+#ifndef _NC_WIN32_CURSES_H
+#define _NC_WIN32_CURSES_H 1
 
-#include <ncurses_dll.h>
-
-#ifdef __cplusplus
-extern "C"
+struct winconmode
 {
-#endif /* __cplusplus */
+  unsigned long dwFlagIn;
+  unsigned long dwFlagOut;
+};
 
-#include <sys/types.h>
+extern NCURSES_EXPORT(void*) _nc_console_fd2handle(int fd);
+extern NCURSES_EXPORT(int)   _nc_console_setmode(void* handle, const struct winconmode* arg);
+extern NCURSES_EXPORT(int)   _nc_console_getmode(void* handle, struct winconmode* arg);
+extern NCURSES_EXPORT(int)   _nc_console_flush(void* handle);
 
-#undef  NCURSES_CONST 
-#define NCURSES_CONST const 
+/*
+  A few definitions of Unix functions we need to emulate
+*/
+#define SIGHUP  1
+#define SIGKILL 9
 
-#undef  NCURSES_OSPEED 
-#define NCURSES_OSPEED short 
+#undef  getlogin
+#define getlogin() getenv("USERNAME")
 
-extern NCURSES_EXPORT_VAR(char) PC;
-extern NCURSES_EXPORT_VAR(char *) UP;
-extern NCURSES_EXPORT_VAR(char *) BC;
-extern NCURSES_EXPORT_VAR(NCURSES_OSPEED) ospeed; 
+#undef  ttyname
+#define ttyname(fd) NULL
 
-#if !defined(NCURSES_TERM_H_incl)
-extern NCURSES_EXPORT(char *) tgetstr (NCURSES_CONST char *, char **);
-extern NCURSES_EXPORT(char *) tgoto (const char *, int, int);
-extern NCURSES_EXPORT(int) tgetent (char *, const char *);
-extern NCURSES_EXPORT(int) tgetflag (NCURSES_CONST char *);
-extern NCURSES_EXPORT(int) tgetnum (NCURSES_CONST char *);
-extern NCURSES_EXPORT(int) tputs (const char *, int, int (*)(int));
-#endif
+#undef sleep
+#define sleep(n) Sleep((n) * 1000)
 
-#ifdef __cplusplus
-}
-#endif
+#undef gettimeofday
+#define gettimeofday(tv,tz) _nc_gettimeofday(tv,tz)
 
-#endif /* NCURSES_TERMCAP_H_incl */
+#endif /* _NC_WIN32_CURSES_H */
+#endif /* _WIN32||_WIN64 */
