diff --git a/include/Caps b/include/Caps
new file mode 100644
index 0000000..7c63c7f
--- /dev/null
+++ b/include/Caps
@@ -0,0 +1,1264 @@
+##############################################################################
+# Copyright (c) 1998-2002,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"), #
+# 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>
+#
+# $Id: Caps,v 1.36 2006/05/27 15:33:04 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 
+# 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.
+#
+# This file has three major sections; a standard-capabilities table, two
+# extension-capability tables, and a section of aliases declarations.
+# The first two have the same format, as follows:
+#
+# FILE FORMAT
+#
+# Column 1: terminfo variable name
+# Column 2: terminfo capability name
+# 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
+# Column 7: Lead with `Y' if capability should be emitted in termcap
+#           translations, `-' otherwise
+# Column 8: capability description
+#
+# 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
+# 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
+#	C = used by the 4.4BSD curses library
+#	G = mentioned in the documentation for GNU termcap
+#	E = used by GNU Emacs
+#	K = remove this terminfo capability when translating to standard format
+# The important codes are C and E.  A cap with C or E should be preserved in
+# translation if possible.  The problem is that preserving all such caps may
+# lead to some termcap translations being too long.  The termcap maintainer
+# has a bit of a juggling act to do...potential problem cases are marked with
+# an asterisk (*).
+#
+# The aliases section has the following format:
+#
+# Column 1: either `capalias' or `infoalias'
+# Column 2: name to be aliased
+# Column 3: what name it should translate to.  The name IGNORE means it
+#           should be discarded with a warning message.
+# Column 4: name of the extension set (used for compiler warning messages)
+# Column 5: capability description (usually an associated terminfo variable)
+#
+# HANDLING TERMCAP AND TERMINFO EXTENSIONS
+#
+# There are basically five different ways to handle termcap and terminfo
+# extensions:
+#
+# 1. Don't list the capname here, or list it but comment it out (the latter
+# is preferable; someone might want to handle it in the future).  If you do
+# this, the capability will be treated as unknown and raise a warning from
+# the compiler.
+#
+# 2. Alias it.  This is appropriate if the capability has the same meaning
+# as an already-supported one.  The compiler will handle aliasing, emitting
+# an appropriate informational message whenever an alias fires.
+#
+# 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 the ncurses
+# library what to do with the terminfo data after it's 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
+# get a warning message about it).
+#
+# 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.
+#
+# 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
+# to terminfo with tic -I.  Some very old obsolete BSD caps like :kn: are
+# in this class.  Nothing will ever use them again.
+#
+# More usually, you want the compiler to try to deduce something from the
+# capability value that it can use to translate it into your output format.
+# You'll need to write custom code, probably in postprocess_termcap() or
+# postprocess_terminfo(), to handle the translation.
+#
+# 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 
+# trim those out of the set to be translated to termcap, or various users of
+# the termcap file will become irate.
+#
+# It might look tempting to leave those long init strings out of translations.
+# We can't do it (yet); 4.4BSD tput and tset use them.
+#
+# We retain the sgr capability in translation in spite of the fact that neither
+# 4.4BSD nor GNU Emacs uses it, because (a) some entry naming distinctions are
+# hard to understand without it, and (b) the entries in which it is long tend
+# to be older types that don't use up a lot of string space on function keys.
+# The tic(1) translation code will complain and elide it if it makes a critical
+# difference (there is special code in tic to recognize this situation).
+#
+# Yes, BSD tset(1) uses hpa.  We elide hpa/vpa anyway because the motion
+# optimizer in BSD curses didn't use them.  This omission seems to be the
+# single most effective one, it shortened the resolved length of all thirteen
+# problem entries in the 9.9.0 version of the terminfo master below critical.
+#
+# 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 
+# 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.
+#
+#############################################################################
+#
+# 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
+#%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.
+#%
+#%.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
+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)
+ceol_standout_glitch		xhp	bool	xs	-	-	YBCGE	standout not erased by overwriting (hp)
+eat_newline_glitch		xenl	bool	xn	-	-	YBCGE	newline ignored after 80 cols (concept)
+erase_overstrike		eo	bool	eo	-	-	YBCG-	can erase overstrikes with a blank
+generic_type			gn	bool	gn	-	-	YB-G-	generic line type
+hard_copy			hc	bool	hc	-	-	YBCG-	hardcopy terminal
+has_meta_key			km	bool	km	-	-	YB-GE	Has a meta key (i.e., sets 8th-bit)
+has_status_line			hs	bool	hs	-	-	YB-G-	has extra status line
+insert_null_glitch		in	bool	in	-	-	YBCGE	insert mode distinguishes nulls
+memory_above			da	bool	da	-	-	YBCG-	display may be retained above the screen
+memory_below			db	bool	db	-	-	YB-GE	display may be retained below the screen
+move_insert_mode		mir	bool	mi	-	-	YBCGE	safe to move while in insert mode
+move_standout_mode		msgr	bool	ms	-	-	YBCGE	safe to move while in standout mode
+over_strike			os	bool	os	-	-	YBCG-	terminal can overstrike
+status_line_esc_ok		eslok	bool	es	-	-	YB-G-	escape can be used on the status line
+dest_tabs_magic_smso		xt	bool	xt	-	-	YBCGE	tabs destructive, magic so char (t1061)
+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
+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
+non_rev_rmcup			nrrmc	bool	NR	-	-	-----	smcup does not reverse rmcup
+no_pad_char			npc	bool	NP	-	-	-----	pad character does not exist
+non_dest_scroll_region		ndscr	bool	ND	-	-	-----	scrolling region is non-destructive
+can_change			ccc	bool	cc	-	-	-----	terminal can re-define existing colors
+back_color_erase		bce	bool	ut	-	-	-----	screen erased with background color
+hue_lightness_saturation	hls	bool	hl	-	-	-----	terminal uses only HLS color notation (Tektronix)
+col_addr_glitch			xhpa	bool	YA	-	-	-----	only positive motion for hpa/mhpa caps
+cr_cancels_micro_mode		crxm	bool	YB	-	-	-----	using cr turns off micro mode
+has_print_wheel			daisy	bool	YC	-	-	-----	printer needs operator to change character set
+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
+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
+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
+lines_of_memory			lm	num	lm	-	-	YB-G-	lines of memory if > line. 0 means varies
+magic_cookie_glitch		xmc	num	sg	-	-	YBCGE	number of blank characters left by smso or rmso
+padding_baud_rate		pb	num	pb	-	-	YB-GE	lowest baud rate where padding needed
+virtual_terminal		vt	num	vt	-	-	YB---	virtual terminal number (CB/unix)
+width_status_line		wsl	num	ws	-	-	YB-G-	number of columns in status line
+num_labels			nlab	num	Nl	-	-	-----	number of labels on screen
+label_height			lh	num	lh	-	-	-----	rows in each label
+label_width			lw	num	lw	-	-	-----	columns in each label
+max_attributes			ma	num	ma	-	-	YBC--	maximum combined attributes terminal can handle
+maximum_windows			wnum	num	MW	-	-	-----	maximum number of defineable windows
+# These came in with SVr4's color support
+max_colors			colors	num	Co	-	-	-----	maximum number of colors on screen
+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
+#%.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
+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_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
+output_res_line			orl	num	Yj	-	-	-----	vertical resolution in units per line
+output_res_horz_inch		orhi	num	Yk	-	-	-----	horizontal resolution in units per inch
+output_res_vert_inch		orvi	num	Yl	-	-	-----	vertical resolution in units per inch
+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
+buttons				btns	num	BT	-	-	-----	number of buttons on mouse
+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
+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*)
+change_scroll_region		csr	str	cs	-		-	YBCGE	change region to line #1 to line #2 (P)
+clear_all_tabs			tbc	str	ct	-		-	YB-G-	clear all tab stops (P)
+clear_screen			clear	str	cl	-		-	YBCGE	clear screen and home cursor (P*)
+clr_eol				el	str	ce	-		-	YBCGE	clear to end of line (P)
+clr_eos				ed	str	cd	-		-	YBCGE	clear to end of screen (P*)
+column_address			hpa	str	ch	-		-	-B-GE*	horizontal position #1, absolute (P)
+command_character		cmdch	str	CC	-		-	YB-G-	terminal settable cmd character in prototype !?
+cursor_address			cup	str	cm	-		-	YBCGE	move to row #1 columns #2
+cursor_down			cud1	str	do	-		-	YBCGE	down one line
+cursor_home			home	str	ho	-		-	YBCGE	home cursor (if no cup)
+cursor_invisible		civis	str	vi	-		-	YB-G-	make cursor invisible
+cursor_left			cub1	str	le	-		-	YBCGE	move left one space
+cursor_mem_address		mrcup	str	CM	-		-	YB-G-	memory relative cursor addressing, move to row #1 columns #2
+cursor_normal			cnorm	str	ve	-		-	YBCGE	make cursor appear normal (undo civis/cvvis)
+cursor_right			cuf1	str	nd	-		-	YBCGE	non-destructive space (move right one space)
+cursor_to_ll			ll	str	ll	-		-	YBCGE	last line, first column (if no cup)
+cursor_up			cuu1	str	up	-		-	YBCGE	up one line
+cursor_visible			cvvis	str	vs	-		-	YBCGE	make cursor very visible
+delete_character		dch1	str	dc	-		-	YBCGE	delete character (P*)
+delete_line			dl1	str	dl	-		-	YBCGE	delete line (P*)
+dis_status_line			dsl	str	ds	-		-	YB-G-	disable status line
+down_half_line			hd	str	hd	-		-	YB-G-	half a line down
+enter_alt_charset_mode		smacs	str	as	-		-	YB-G-	start alternate character set (P)
+enter_blink_mode		blink	str	mb	-		-	YB-G-	turn on blinking
+enter_bold_mode			bold	str	md	-		-	YB-G-	turn on bold (extra bright) mode
+enter_ca_mode			smcup	str	ti	-		-	YBCGE	string to start programs using cup
+enter_delete_mode		smdc	str	dm	-		-	YBCGE	enter delete mode
+enter_dim_mode			dim	str	mh	-		-	YB-G-	turn on half-bright mode
+enter_insert_mode		smir	str	im	-		-	YBCGE	enter insert mode
+enter_secure_mode		invis	str	mk	-		-	-B-G-*	turn on blank mode (characters invisible)
+enter_protected_mode		prot	str	mp	-		-	-B-G-*	turn on protected mode
+enter_reverse_mode		rev	str	mr	-		-	YB-G-	turn on reverse video mode
+enter_standout_mode		smso	str	so	-		-	YBCGE	begin standout mode
+enter_underline_mode		smul	str	us	-		-	YBCGE	begin underline mode
+erase_chars			ech	str	ec	-		-	YB-G-	erase #1 characters (P)
+exit_alt_charset_mode		rmacs	str	ae	-		-	YB-G-	end alternate character set (P)
+exit_attribute_mode		sgr0	str	me	-		-	YB-GE	turn off all attributes
+exit_ca_mode			rmcup	str	te	-		-	YBCGE	strings to end programs using cup
+exit_delete_mode		rmdc	str	ed	-		-	YBCGE	end delete mode
+exit_insert_mode		rmir	str	ei	-		-	YBCGE	exit insert mode
+exit_standout_mode		rmso	str	se	-		-	YBCGE	exit standout mode
+exit_underline_mode		rmul	str	ue	-		-	YBCGE	exit underline mode
+flash_screen			flash	str	vb	-		-	YBCGE	visible bell (may not move cursor)
+form_feed			ff	str	ff	-		-	YB-G-	hardcopy terminal page eject (P*)
+from_status_line		fsl	str	fs	-		-	YB-G-	return from status line
+init_1string			is1	str	i1	-		-	YB-G-	initialization string
+init_2string			is2	str	is	-		-	YB-G-	initialization string
+init_3string			is3	str	i3	-		-	YB-G-	initialization string
+init_file			if	str	if	-		-	YB-G-	name of initialization file
+insert_character		ich1	str	ic	-		-	YBCGE	insert character (P)
+insert_line			il1	str	al	-		-	YBCGE	insert line (P*)
+insert_padding			ip	str	ip	-		-	YBCGE	insert padding after inserted character
+key_backspace			kbs	str	kb	KEY_BACKSPACE	0407	YB-G-	backspace key
+key_catab			ktbc	str	ka	KEY_CATAB	0526	-B-G-*	clear-all-tabs key
+key_clear			kclr	str	kC	KEY_CLEAR	0515	-B-G-*	clear-screen or erase key
+key_ctab			kctab	str	kt	KEY_CTAB	0525	-B-G-*	clear-tab key
+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
+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
+key_f0				kf0	str	k0	KEY_F(0)	0410	YBCGE	F0 function key
+key_f1				kf1	str	k1	KEY_F(1)	-	YBCGE	F1 function key
+key_f10				kf10	str	k;	KEY_F(10)	-	----E	F10 function key
+key_f2				kf2	str	k2	KEY_F(2)	-	YBCGE	F2 function key
+key_f3				kf3	str	k3	KEY_F(3)	-	YBCGE	F3 function key
+key_f4				kf4	str	k4	KEY_F(4)	-	YBCGE	F4 function key
+key_f5				kf5	str	k5	KEY_F(5)	-	YBCGE	F5 function key
+key_f6				kf6	str	k6	KEY_F(6)	-	YBCGE	F6 function key
+key_f7				kf7	str	k7	KEY_F(7)	-	YBCGE	F7 function key
+key_f8				kf8	str	k8	KEY_F(8)	-	YBCGE	F8 function key
+key_f9				kf9	str	k9	KEY_F(9)	-	YBCGE	F9 function key
+key_home			khome	str	kh	KEY_HOME	0406	YBCGE	home key
+key_ic				kich1	str	kI	KEY_IC		0513	YB-GE	insert-character key
+key_il				kil1	str	kA	KEY_IL		0511	-B-G-*	insert-line key
+key_left			kcub1	str	kl	KEY_LEFT	0404	YBCGE	left-arrow key
+key_ll				kll	str	kH	KEY_LL		0533	YB-G-	lower-left key (home down)
+key_npage			knp	str	kN	KEY_NPAGE	0522	YB-GE	next-page key
+key_ppage			kpp	str	kP	KEY_PPAGE	0523	YB-GE	previous-page key
+key_right			kcuf1	str	kr	KEY_RIGHT	0405	YBCGE	right-arrow key
+key_sf				kind	str	kF	KEY_SF		0520	-B-G-*	scroll-forward key
+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
+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
+lab_f2				lf2	str	l2	-		-	-B-G-*	label on function key f2 if not f2
+lab_f3				lf3	str	l3	-		-	-B-G-*	label on function key f3 if not f3
+lab_f4				lf4	str	l4	-		-	-B-G-*	label on function key f4 if not f4
+lab_f5				lf5	str	l5	-		-	-B-G-*	label on function key f5 if not f5
+lab_f6				lf6	str	l6	-		-	-B-G-*	label on function key f6 if not f6
+lab_f7				lf7	str	l7	-		-	-B-G-*	label on function key f7 if not f7
+lab_f8				lf8	str	l8	-		-	-B-G-*	label on function key f8 if not f8
+lab_f9				lf9	str	l9	-		-	-B-G-*	label on function key f9 if not f9
+meta_off			rmm	str	mo	-		-	YB-G-*	turn off meta mode
+meta_on				smm	str	mm	-		-	YB-G-*	turn on meta mode (8th-bit on)
+newline				nel	str	nw	-		-	YB-G-*	newline (behave like cr followed by lf)
+pad_char			pad	str	pc	-		-	YBCGE	padding char (instead of null)
+parm_dch			dch	str	DC	-		-	YB-GE	delete #1 characters (P*)
+parm_delete_line		dl	str	DL	-		-	YBCGE	delete #1 lines (P*)
+parm_down_cursor		cud	str	DO	-		-	YBCGE	down #1 lines (P*)
+parm_ich			ich	str	IC	-		-	YB-GE	insert #1 characters (P*)
+parm_index			indn	str	SF	-		-	YBCG-	scroll forward #1 lines (P)
+parm_insert_line		il	str	AL	-		-	YBCGE	insert #1 lines (P*)
+parm_left_cursor		cub	str	LE	-		-	YBCGE	move #1 characters to the left (P)
+parm_right_cursor		cuf	str	RI	-		-	YBCGE	move #1 characters to the right (P*)
+parm_rindex			rin	str	SR	-		-	YBCG-	scroll back #1 lines (P)
+parm_up_cursor			cuu	str	UP	-		-	YBCGE	up #1 lines (P*)
+pkey_key			pfkey	str	pk	-		-	-B---	program function key #1 to type string #2
+pkey_local			pfloc	str	pl	-		-	-B---	program function key #1 to execute string #2
+pkey_xmit			pfx	str	px	-		-	-B---	program function key #1 to transmit string #2
+print_screen			mc0	str	ps	-		-	-B-G-*	print contents of screen
+prtr_off			mc4	str	pf	-		-	-B-G-*	turn off printer
+prtr_on				mc5	str	po	-		-	-B-G-*	turn on printer
+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
+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
+row_address			vpa	str	cv	-		-	-B-GE*	vertical position #1 absolute (P)
+save_cursor			sc	str	sc	-		-	YBCG-	save current cursor position (P)
+scroll_forward			ind	str	sf	-		-	YBCGE	scroll text up (P)
+scroll_reverse			ri	str	sr	-		-	YBCGE	scroll text down (P)
+set_attributes			sgr	str	sa	-		-	YB-G-	define video attributes #1-#9 (PG9)
+set_tab				hts	str	st	-		-	YB-G-	set a tab in every row, current columns
+set_window			wind	str	wi	-		-	-B-GE	current window is lines #1-#2 cols #3-#4
+tab				ht	str	ta	-		-	YBCGE	tab to next 8-space hardware tab stop
+to_status_line			tsl	str	ts	-		-	YB-G-	move to status line, column #1
+underline_char			uc	str	uc	-		-	YBCG-	underline char and move past it
+up_half_line			hu	str	hu	-		-	YB-G-	half a line up
+init_prog			iprog	str	iP	-		-	-B---	path name of program for initialization
+key_a1				ka1	str	K1	KEY_A1		0534	YB-GE	upper left of keypad
+key_a3				ka3	str	K3	KEY_A3		0535	YB-GE	upper right of keypad
+key_b2				kb2	str	K2	KEY_B2		0536	YB-GE	center of keypad
+key_c1				kc1	str	K4	KEY_C1		0537	YB-GE	lower left of keypad
+key_c3				kc3	str	K5	KEY_C3		0540	YB-GE	lower right of keypad
+prtr_non			mc5p	str	pO	-		-	-B-G-*	turn on printer for #1 bytes
+#
+# SVr1 capabilities stop here.	IBM's version of terminfo is the same as
+# SVr4 up to this point, but has a different set afterwards.
+#
+char_padding			rmp	str	rP	-		-	-----	like ip but when in insert mode
+acs_chars			acsc	str	ac	-		-	-----	graphics charset pairs, based on vt100
+plab_norm			pln	str	pn	-		-	-----	program label #1 to show string #2
+key_btab			kcbt	str	kB	KEY_BTAB	0541	-----	back-tab key
+enter_xon_mode			smxon	str	SX	-		-	-----	turn on xon/xoff handshaking
+exit_xon_mode			rmxon	str	RX	-		-	-----	turn off xon/xoff handshaking
+enter_am_mode			smam	str	SA	-		-	-----	turn on automatic margins
+exit_am_mode			rmam	str	RA	-		-	-----	turn off automatic margins
+xon_character			xonc	str	XN	-		-	-----	XON character
+xoff_character			xoffc	str	XF	-		-	-----	XOFF character
+ena_acs				enacs	str	eA	-		-	-----	enable alternate char set
+label_on			smln	str	LO	-		-	-----	turn on soft labels
+label_off			rmln	str	LF	-		-	-----	turn off soft labels
+key_beg				kbeg	str	@1	KEY_BEG		0542	-----	begin key
+key_cancel			kcan	str	@2	KEY_CANCEL	0543	-----	cancel key
+key_close			kclo	str	@3	KEY_CLOSE	0544	-----	close key
+key_command			kcmd	str	@4	KEY_COMMAND	0545	-----	command key
+key_copy			kcpy	str	@5	KEY_COPY	0546	-----	copy key
+key_create			kcrt	str	@6	KEY_CREATE	0547	-----	create key
+key_end				kend	str	@7	KEY_END		0550	-----	end key
+key_enter			kent	str	@8	KEY_ENTER	0527	-----	enter/send key
+key_exit			kext	str	@9	KEY_EXIT	0551	-----	exit key
+key_find			kfnd	str	@0	KEY_FIND	0552	-----	find key
+key_help			khlp	str	%1	KEY_HELP	0553	-----	help key
+key_mark			kmrk	str	%2	KEY_MARK	0554	-----	mark key
+key_message			kmsg	str	%3	KEY_MESSAGE	0555	-----	message key
+key_move			kmov	str	%4	KEY_MOVE	0556	-----	move key
+key_next			knxt	str	%5	KEY_NEXT	0557	-----	next key
+key_open			kopn	str	%6	KEY_OPEN	0560	-----	open key
+key_options			kopt	str	%7	KEY_OPTIONS	0561	-----	options key
+key_previous			kprv	str	%8	KEY_PREVIOUS	0562	-----	previous key
+key_print			kprt	str	%9	KEY_PRINT	0532	-----	print key
+key_redo			krdo	str	%0	KEY_REDO	0563	-----	redo key
+key_reference			kref	str	&1	KEY_REFERENCE	0564	-----	reference key
+key_refresh			krfr	str	&2	KEY_REFRESH	0565	-----	refresh key
+key_replace			krpl	str	&3	KEY_REPLACE	0566	-----	replace key
+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
+key_suspend			kspd	str	&7	KEY_SUSPEND	0627	-----	suspend key
+key_undo			kund	str	&8	KEY_UNDO	0630	-----	undo key
+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
+key_scopy			kCPY	str	*2	KEY_SCOPY	0575	-----	shifted copy key
+key_screate			kCRT	str	*3	KEY_SCREATE	0576	-----	shifted create key
+key_sdc				kDC	str	*4	KEY_SDC		0577	-----	shifted delete-character key
+key_sdl				kDL	str	*5	KEY_SDL		0600	-----	shifted delete-line key
+key_select			kslt	str	*6	KEY_SELECT	0601	-----	select key
+key_send			kEND	str	*7	KEY_SEND	0602	-----	shifted end key
+key_seol			kEOL	str	*8	KEY_SEOL	0603	-----	shifted clear-to-end-of-line key
+key_sexit			kEXT	str	*9	KEY_SEXIT	0604	-----	shifted exit key
+key_sfind			kFND	str	*0	KEY_SFIND	0605	-----	shifted find key
+key_shelp			kHLP	str	#1	KEY_SHELP	0606	-----	shifted help key
+key_shome			kHOM	str	#2	KEY_SHOME	0607	-----	shifted home key
+key_sic				kIC	str	#3	KEY_SIC		0610	-----	shifted insert-character key
+key_sleft			kLFT	str	#4	KEY_SLEFT	0611	-----	shifted left-arrow key
+key_smessage			kMSG	str	%a	KEY_SMESSAGE	0612	-----	shifted message key
+key_smove			kMOV	str	%b	KEY_SMOVE	0613	-----	shifted move key
+key_snext			kNXT	str	%c	KEY_SNEXT	0614	-----	shifted next key
+key_soptions			kOPT	str	%d	KEY_SOPTIONS	0615	-----	shifted options key
+key_sprevious			kPRV	str	%e	KEY_SPREVIOUS	0616	-----	shifted previous key
+key_sprint			kPRT	str	%f	KEY_SPRINT	0617	-----	shifted print key
+key_sredo			kRDO	str	%g	KEY_SREDO	0620	-----	shifted redo key
+key_sreplace			kRPL	str	%h	KEY_SREPLACE	0621	-----	shifted replace key
+key_sright			kRIT	str	%i	KEY_SRIGHT	0622	-----	shifted right-arrow key
+key_srsume			kRES	str	%j	KEY_SRSUME	0623	-----	shifted resume key
+key_ssave			kSAV	str	!1	KEY_SSAVE	0624	-----	shifted save key
+key_ssuspend			kSPD	str	!2	KEY_SSUSPEND	0625	-----	shifted suspend key
+key_sundo			kUND	str	!3	KEY_SUNDO	0626	-----	shifted undo key
+req_for_input			rfi	str	RF	-		-	-----	send next input char (for ptys)
+key_f11				kf11	str	F1	KEY_F(11)	-	----E	F11 function key
+key_f12				kf12	str	F2	KEY_F(12)	-	----E	F12 function key
+key_f13				kf13	str	F3	KEY_F(13)	-	----E	F13 function key
+key_f14				kf14	str	F4	KEY_F(14)	-	----E	F14 function key
+key_f15				kf15	str	F5	KEY_F(15)	-	----E	F15 function key
+key_f16				kf16	str	F6	KEY_F(16)	-	----E	F16 function key
+key_f17				kf17	str	F7	KEY_F(17)	-	----E	F17 function key
+key_f18				kf18	str	F8	KEY_F(18)	-	----E	F18 function key
+key_f19				kf19	str	F9	KEY_F(19)	-	----E	F19 function key
+key_f20				kf20	str	FA	KEY_F(20)	-	----E	F20 function key
+key_f21				kf21	str	FB	KEY_F(21)	-	----E	F21 function key
+key_f22				kf22	str	FC	KEY_F(22)	-	----E	F22 function key
+key_f23				kf23	str	FD	KEY_F(23)	-	----E	F23 function key
+key_f24				kf24	str	FE	KEY_F(24)	-	----E	F24 function key
+key_f25				kf25	str	FF	KEY_F(25)	-	----E	F25 function key
+key_f26				kf26	str	FG	KEY_F(26)	-	----E	F26 function key
+key_f27				kf27	str	FH	KEY_F(27)	-	----E	F27 function key
+key_f28				kf28	str	FI	KEY_F(28)	-	----E	F28 function key
+key_f29				kf29	str	FJ	KEY_F(29)	-	----E	F29 function key
+key_f30				kf30	str	FK	KEY_F(30)	-	----E	F30 function key
+key_f31				kf31	str	FL	KEY_F(31)	-	----E	F31 function key
+key_f32				kf32	str	FM	KEY_F(32)	-	----E	F32 function key
+key_f33				kf33	str	FN	KEY_F(33)	-	----E	F33 function key
+key_f34				kf34	str	FO	KEY_F(34)	-	----E	F34 function key
+key_f35				kf35	str	FP	KEY_F(35)	-	----E	F35 function key
+key_f36				kf36	str	FQ	KEY_F(36)	-	----E	F36 function key
+key_f37				kf37	str	FR	KEY_F(37)	-	----E	F37 function key
+key_f38				kf38	str	FS	KEY_F(38)	-	----E	F38 function key
+key_f39				kf39	str	FT	KEY_F(39)	-	----E	F39 function key
+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
+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
+key_f46				kf46	str	Fa	KEY_F(46)	-	----E	F46 function key
+key_f47				kf47	str	Fb	KEY_F(47)	-	----E	F47 function key
+key_f48				kf48	str	Fc	KEY_F(48)	-	----E	F48 function key
+key_f49				kf49	str	Fd	KEY_F(49)	-	----E	F49 function key
+key_f50				kf50	str	Fe	KEY_F(50)	-	----E	F50 function key
+key_f51				kf51	str	Ff	KEY_F(51)	-	----E	F51 function key
+key_f52				kf52	str	Fg	KEY_F(52)	-	----E	F52 function key
+key_f53				kf53	str	Fh	KEY_F(53)	-	----E	F53 function key
+key_f54				kf54	str	Fi	KEY_F(54)	-	----E	F54 function key
+key_f55				kf55	str	Fj	KEY_F(55)	-	----E	F55 function key
+key_f56				kf56	str	Fk	KEY_F(56)	-	----E	F56 function key
+key_f57				kf57	str	Fl	KEY_F(57)	-	----E	F57 function key
+key_f58				kf58	str	Fm	KEY_F(58)	-	----E	F58 function key
+key_f59				kf59	str	Fn	KEY_F(59)	-	----E	F59 function key
+key_f60				kf60	str	Fo	KEY_F(60)	-	----E	F60 function key
+key_f61				kf61	str	Fp	KEY_F(61)	-	----E	F61 function key
+key_f62				kf62	str	Fq	KEY_F(62)	-	----E	F62 function key
+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_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
+display_clock			dclk	str	DK	-		-	-----	display clock
+remove_clock			rmclk	str	RC	-		-	-----	remove clock
+create_window			cwin	str	CW	-		-	-----	define a window #1 from #2,#3 to #4,#5
+goto_window			wingo	str	WG	-		-	-----	go to window #1
+hangup				hup	str	HU	-		-	-----	hang-up phone
+dial_phone			dial	str	DI	-		-	-----	dial number #1
+quick_dial			qdial	str	QD	-		-	-----	dial number #1 without checking
+tone				tone	str	TO	-		-	-----	select touch tone dialing
+pulse				pulse	str	PU	-		-	-----	select pulse dialing
+flash_hook			hook	str	fh	-		-	-----	flash switch hook
+fixed_pause			pause	str	PA	-		-	-----	pause for 2-3 seconds
+wait_tone			wait	str	WA	-		-	-----	wait for dial-tone
+user0				u0	str	u0	-		-	-----	User string #0
+user1				u1	str	u1	-		-	-----	User string #1
+user2				u2	str	u2	-		-	-----	User string #2
+user3				u3	str	u3	-		-	-----	User string #3
+user4				u4	str	u4	-		-	-----	User string #4
+user5				u5	str	u5	-		-	-----	User string #5
+user6				u6	str	u6	-		-	-----	User string #6
+user7				u7	str	u7	-		-	-----	User string #7
+user8				u8	str	u8	-		-	-----	User string #8
+user9				u9	str	u9	-		-	-----	User string #9
+#
+# SVr4 added these capabilities to support color
+#
+orig_pair			op	str	op	-		-	-----	Set default pair to its original value
+orig_colors			oc	str	oc	-		-	-----	Set all color pairs to the original ones
+initialize_color		initc	str	Ic	-		-	-----	initialize color #1 to (#2,#3,#4)
+initialize_pair			initp	str	Ip	-		-	-----	Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7)
+set_color_pair			scp	str	sp	-		-	-----	Set current color pair to #1
+set_foreground			setf	str	Sf	-		-	-----	Set foreground color #1
+set_background			setb	str	Sb	-		-	-----	Set background color #1
+#
+# SVr4 added these capabilities to support printers
+#
+change_char_pitch		cpi	str	ZA	-		-	-----	Change number of characters per inch to #1
+change_line_pitch		lpi	str	ZB	-		-	-----	Change number of lines per inch to #1
+change_res_horz			chr	str	ZC	-		-	-----	Change horizontal resolution to #1
+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
+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
+enter_micro_mode		smicm	str	ZJ	-		-	-----	Start micro-motion mode
+enter_near_letter_quality	snlq	str	ZK	-		-	-----	Enter NLQ mode
+enter_normal_quality		snrmq	str	ZL	-		-	-----	Enter normal-quality mode
+enter_shadow_mode		sshm	str	ZM	-		-	-----	Enter shadow-print mode
+enter_subscript_mode		ssubm	str	ZN	-		-	-----	Enter subscript mode
+enter_superscript_mode		ssupm	str	ZO	-		-	-----	Enter superscript mode
+enter_upward_mode		sum	str	ZP	-		-	-----	Start upward carriage motion
+exit_doublewide_mode		rwidm	str	ZQ	-		-	-----	End double-wide mode
+exit_italics_mode		ritm	str	ZR	-		-	-----	End italic mode
+exit_leftward_mode		rlm	str	ZS	-		-	-----	End left-motion mode
+exit_micro_mode			rmicm	str	ZT	-		-	-----	End micro-motion mode
+exit_shadow_mode		rshm	str	ZU	-		-	-----	End shadow-print mode
+exit_subscript_mode		rsubm	str	ZV	-		-	-----	End subscript mode
+exit_superscript_mode		rsupm	str	ZW	-		-	-----	End superscript mode
+exit_upward_mode		rum	str	ZX	-		-	-----	End reverse character motion
+micro_column_address		mhpa	str	ZY	-		-	-----	Like column_address in micro mode
+micro_down			mcud1	str	ZZ	-		-	-----	Like cursor_down in micro mode
+micro_left			mcub1	str	Za	-		-	-----	Like cursor_left in micro mode
+micro_right			mcuf1	str	Zb	-		-	-----	Like cursor_right in micro mode
+micro_row_address		mvpa	str	Zc	-		-	-----	Like row_address #1 in micro mode
+micro_up			mcuu1	str	Zd	-		-	-----	Like cursor_up in micro mode
+order_of_pins			porder	str	Ze	-		-	-----	Match software bits to print-head pins
+parm_down_micro			mcud	str	Zf	-		-	-----	Like parm_down_cursor in micro mode
+parm_left_micro			mcub	str	Zg	-		-	-----	Like parm_left_cursor in micro mode
+parm_right_micro		mcuf	str	Zh	-		-	-----	Like parm_right_cursor in micro mode
+parm_up_micro			mcuu	str	Zi	-		-	-----	Like parm_up_cursor in micro mode
+select_char_set			scs	str	Zj	-		-	-----	Select character set, #1
+set_bottom_margin		smgb	str	Zk	-		-	-----	Set bottom margin at current line
+set_bottom_margin_parm		smgbp	str	Zl	-		-	-----	Set bottom margin at line #1 or (if smgtp is not given) #2 lines from bottom
+set_left_margin_parm		smglp	str	Zm	-		-	-----	Set left (right) margin at column #1
+set_right_margin_parm		smgrp	str	Zn	-		-	-----	Set right margin at column #1
+set_top_margin			smgt	str	Zo	-		-	-----	Set top margin at current line
+set_top_margin_parm		smgtp	str	Zp	-		-	-----	Set top (bottom) margin at row #1
+start_bit_image			sbim	str	Zq	-		-	-----	Start printing bit image graphics
+start_char_set_def		scsd	str	Zr	-		-	-----	Start character set definition #1, with #2 characters in the set
+stop_bit_image			rbim	str	Zs	-		-	-----	Stop printing bit image graphics
+stop_char_set_def		rcsd	str	Zt	-		-	-----	End definition of character set #1
+subscript_characters		subcs	str	Zu	-		-	-----	List of subscriptable characters
+superscript_characters		supcs	str	Zv	-		-	-----	List of superscriptable characters
+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
+#%
+#%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
+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
+req_mouse_pos			reqmp	str	RQ	-		-	-----	Request mouse position
+get_mouse			getm	str	Gm	-		-	-----	Curses should get button events, parameter #1 not documented.
+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
+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
+set2_des_seq			s2ds	str	s2	-		-	-----	Shift to codeset 2
+set3_des_seq			s3ds	str	s3	-		-	-----	Shift to codeset 3
+set_lr_margin			smglr	str	ML	-		-	-----	Set both left and right margins to #1, #2.  (ML is not in BSD termcap).
+set_tb_margin			smgtb	str	MT	-		-	-----	Sets both top and bottom margins to #1, #2
+bit_image_repeat		birep	str	Xy	-		-	-----	Repeat bit image cell #1 #2 times
+bit_image_newline		binel	str	Zz	-		-	-----	Move to next row of the bit image
+bit_image_carriage_return	bicr	str	Yv	-		-	-----	Move to beginning of same row
+color_names			colornm	str	Yw	-		-	-----	Give name for color #1
+define_bit_image_region		defbi	str	Yx	-		-	-----	Define rectangualar bit image region
+end_bit_image_region		endbi	str	Yy	-		-	-----	End a bit-image region
+set_color_band		setcolor	str	Yz	-		-	-----	Change to ribbon color #1
+set_page_length			slines	str	YZ	-		-	-----	Set page length to #1 lines
+#
+# SVr4 added these capabilities for direct PC-clone support
+#
+display_pc_char			dispc	str	S1	-		-	-----	Display PC character #1
+enter_pc_charset_mode		smpch	str	S2	-		-	-----	Enter PC character display mode
+exit_pc_charset_mode		rmpch	str	S3	-		-	-----	Exit PC character display mode
+enter_scancode_mode		smsc	str	S4	-		-	-----	Enter PC scancode mode
+exit_scancode_mode		rmsc	str	S5	-		-	-----	Exit PC scancode mode
+pc_term_options			pctrm	str	S6	-		-	-----	PC terminal options
+scancode_escape			scesc	str	S7	-		-	-----	Escape for scancode emulation
+alt_scancode_esc		scesa	str	S8	-		-	-----	Alternate escape for scancode emulation
+#%.TE
+#%.ad
+#%
+#%.in .8i
+#%The XSI Curses standard added these.  They are some post-4.1 
+#%versions of System V curses, e.g., Solaris 2.5 and IRIX 6.x.
+#%The \fBncurses\fR termcap names for them are invented; according to the
+#%XSI Curses standard, they have no termcap names.  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
+set_pglen_inch			slength	str	sL	-		-	-----	YI Set page length to #1 hundredth of an inch
+#%.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
+# also tells the man page table generator not to pass through following lines
+# This means we can have obsolete capabilities and pseudo-capabilities that are
+# recognized for termcap or terminfo compilation, but not output.
+#
+# %%-STOP-HERE-%%
+#
+# Don't move this casually!  In fact, don't move it at all unless you're
+# either doing it to add System V or XPG4 extensions, or have decided you
+# don't care about SVr4 binary compatibility.
+#
+#############################################################################
+#
+# TERMCAP EXTENSION CAPABILITIES
+#
+# The capabilities below are either obsolete or extensions on certain systems.
+# They are not used by SVR4 terminfo.  Some are used by captoinfo to translate
+# termcap sources; the rest are listed for completeness, and in case somebody
+# cares about them enough to hack in code that will translate them into
+# terminfo capabilities.
+#
+# The first part of the list is from Ross Ridge's `mytinfo' package
+# (comp.sources.unix, volume 26); the variable names and terminfo names (as
+# well as the termcap codes) match his list.
+#
+# This group of codes is not marked obsolete in 4.4BSD, but have no direct
+# terminfo equivalents.  The rs capability is specially translated to terminfo
+# r2, and vice versa, if an entry does not already have an r2.  Similarly,
+# i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2).
+# The ug capability is thrown away, but assumed to be whatever sg is if the
+# latter is nonzero and we're dumping in termcap format.
+#
+termcap_init2			OTi2	str	i2	-		-	YB---	secondary initialization string
+termcap_reset			OTrs	str	rs	-		-	YB-G-	terminal reset string
+magic_cookie_glitch_ul		OTug	num	ug	-		-	YBCGE	number of blanks left by ul
+#
+# Obsolete termcap capabilities.  Some are used for termcap translation.  The
+# code uses the 'OT' prefix we put on obsolete capabilities to suppress
+# printing them in terminfo source dumps of compiled entries.
+#
+backspaces_with_bs		OTbs	bool	bs	-		-	YBCGE	uses ^H to move left
+crt_no_scrolling		OTns	bool	ns	-		-	YBCG-	crt cannot scroll
+no_correctly_working_cr		OTnc	bool	nc	-		-	YBCG-	no way to go to start of line
+carriage_return_delay		OTdC	num	dC	-		-	YB-G-	pad needed for CR
+new_line_delay			OTdN	num	dN	-		-	YB-G-	pad needed for LF
+linefeed_if_not_lf		OTnl	str	nl	-		-	YBCGE	use to move down
+backspace_if_not_bs		OTbc	str	bc	-		-	YBCGE	move left, if not ^H
+#
+# GNU termcap library extensions.  The GNU termcap file distributed with
+# Emacs no longer uses these, but MT showed up in pre-9.0 versions of the
+# BSD termcap file.  The name clash with terminfo MT is resolved by type
+# info; MT is converted to km.
+#
+gnu_has_meta_key		OTMT	bool	MT	-		-	----E	has meta key
+# gnu_tab_width			OTtw	num	tw	-		-	----E	tab width in spaces
+#
+# 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 
+#
+# The following comments describe capnames so ancient that I believe no
+# software uses them any longer.  Some of these have to go because they
+# clash with terminfo names in ways that cannot be resolved by type
+# information.
+#
+# These mytinfo codes are not used in the 4.4BSD curses code.  They are
+# marked obsolete in the 4.4BSD manual pages.
+#
+# There is one conflict with terminfo; ma is in both.  This conflict is
+# resolved by type information.
+#
+# The `ko' capability is translated by special code.  It should contain a
+# 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...
+#
+# 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
+# text.  All lines above the cursor's current line become locked in place on
+# the screen.  Then enter data normally.  When the screen fills up, any
+# further data entered forces the first line of unfrozen line text to scroll
+# under the frozen data.  Lines scrolled off the screen are inserted into
+# memory immediately preceding the first frozen line." (from the HP 700/96
+# User's manual).  VT100/ANSI memory lock set is \E[>2h, reset is \E[>2l.
+#
+# Applications that use terminfo are supposed to behave as though xr is
+# always true.
+#
+linefeed_is_newline		OTNL	bool	NL	-		-	YB---	move down with \n
+# even_parity			OTEP	bool	EP	-		-	-B---	terminal requires even parity
+# odd_parity			OTOP	bool	OP	-		-	-B---	terminal requires odd parity
+# half_duplex			OTHD	bool	HD	-		-	-B---	terminal is half-duplex
+# lower_case_only		OTLC	bool	LC	-		-	-B---	terminal has only lower case
+# upper_case_only		OTUC	bool	UC	-		-	-B---	terminal has only upper case
+backspace_delay			OTdB	num	dB	-		-	YB-G-	padding required for ^H
+# form_feed_delay		OTdF	num	dF	-		-	-B-G-	padding required for ^L
+horizontal_tab_delay		OTdT	num	dT	-		-	YB-G-	padding required for ^I
+# 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
+# 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
+# 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.
+#
+# rind_only_at_top		OTxq	bool	xq	-		-	-----	reverse index only works from top line
+#
+# 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. 
+#
+# key_interrupt_char		OTki	str	ki	-		-	-----	string set by interrupt key (?)
+# key_kill_char			OTkk	str	kk	-		-	-----	string set by kill key (?)
+# key_suspend_char		OTkz	str	kz	-		-	-----	string set by suspend key (?)
+# initialization_messy		OTxc	bool	xc	-		-	-----	initialization leaves garbage on the screen (?)
+# ind_at_bottom_does_cr		OTxl	bool	xl	-		-	-----	index does a carriage return
+#
+# Nonstandard capabilities unique to Ross Ridge's `mytinfo' package.
+# SR clashes with a terminfo name; this ambiguity cannot be resolved by a type
+# check.
+#
+# scroll_left			OTsl1	str	Sl	-		-	-----	scroll screen leftward
+# scroll_right			OTsr1	str	Sr	-		-	-----	scroll screen rightward
+# parm_scroll_left		OTsl	str	SL	-		-	-----	scroll screen leftward #1 characters
+# parm_scroll_right		OTsr	str	SR	-		-	-----	scroll screen rightward #1 characters
+#
+# The mytinfo capabilities end here.
+#
+# XENIX extensions:
+#
+# Xenix defined its own set of forms-drawing capabilities:
+#
+# cap	IBM ASCII	description             ACS         	ASCII
+# ---	-----------	--------------------    -------------	------
+# G1	191 \277 M-?	single upper right   	ACS_URCORNER
+# G2	218 \332 M-Z	single upper left	ACS_ULCORNER
+# G3	192 \300 M-@	single lower left	ACS_LLCORNER
+# G4	217 \331 M-Y	single lower right	ACS_LRCORNER
+# G5	187 \273 M-;	double upper right
+# G6	201 \311 M-I	double upper left
+# G7	200 \310 M-H	double lower left
+# G8	188 \274 M-<	double lower right
+# GC	197 \305 M-E	single intersection	ACS_PLUS	_ _
+# GD	194 \302 M-B	single down-tick	ACS_TTEE	 |
+# GH	196 \304 M-D	single horizontal line	ACS_HLINE
+# GL	180 \264 M-4	single left tick	ACS_RTEE	-|
+# GR	195 \303 M-C	single right tick	ACS_LTEE	|-
+# GU	193 \301 M-A	single up tick		ACS_BTEE	_|_
+# GV	179 \263 M-3	single vertical line	ACS_VLINE
+# Gc	206 \316 M-N	double intersection
+# Gd	203 \313 M-K	double down tick
+# Gh	205 \315 M-M	double horizontal line
+# Gl	204 \204 M-L	double left tick
+# Gr	185 \271 M-9	double right tick
+# Gu	202 \312 M-J	double up tick
+# 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 
+# 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.
+# These terminfo names are invented.
+#
+acs_ulcorner			OTG2	str	G2	-		-	-----	single upper left
+acs_llcorner			OTG3	str	G3	-		-	-----	single lower left
+acs_urcorner			OTG1	str	G1	-		-	-----	single upper right
+acs_lrcorner			OTG4	str	G4	-		-	-----	single lower right
+acs_ltee			OTGR	str	GR	-		-	-----	tee pointing right
+acs_rtee			OTGL	str	GL	-		-	-----	tee pointing left
+acs_btee			OTGU	str	GU	-		-	-----	tee pointing up
+acs_ttee			OTGD	str	GD	-		-	-----	tee pointing down
+acs_hline			OTGH	str	GH	-		-	-----	single horizontal line
+acs_vline			OTGV	str	GV	-		-	-----	single vertical line
+acs_plus			OTGC	str	GC	-		-	-----	single intersection
+#
+#############################################################################
+#
+# 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	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.
+#
+#############################################################################
+#
+# The following sets edit modes for GNU EMACS
+# Local Variables:
+# case-fold-search:nil
+# truncate-lines:t
+# End:
diff --git a/include/Caps.aix4 b/include/Caps.aix4
new file mode 100644
index 0000000..75913dc
--- /dev/null
+++ b/include/Caps.aix4
@@ -0,0 +1,1255 @@
+##############################################################################
+# Copyright (c) 2001-2002,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"), #
+# 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
+#
+# $Id: Caps.aix4,v 1.7 2006/05/27 15:33:04 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 
+# 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.
+#
+# This file has three major sections; a standard-capabilities table, two
+# extension-capability tables, and a section of aliases declarations.
+# The first two have the same format, as follows:
+#
+# FILE FORMAT
+#
+# Column 1: terminfo variable name
+# Column 2: terminfo capability name
+# 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
+# Column 7: Lead with `Y' if capability should be emitted in termcap
+#           translations, `-' otherwise
+# Column 8: capability description
+#
+# 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
+# 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
+#	C = used by the 4.4BSD curses library
+#	G = mentioned in the documentation for GNU termcap
+#	E = used by GNU Emacs
+#	K = remove this terminfo capability when translating to standard format
+# The important codes are C and E.  A cap with C or E should be preserved in
+# translation if possible.  The problem is that preserving all such caps may
+# lead to some termcap translations being too long.  The termcap maintainer
+# has a bit of a juggling act to do...potential problem cases are marked with
+# an asterisk (*).
+#
+# The aliases section has the following format:
+#
+# Column 1: either `capalias' or `infoalias'
+# Column 2: name to be aliased
+# Column 3: what name it should translate to.  The name IGNORE means it
+#           should be discarded with a warning message.
+# Column 4: name of the extension set (used for compiler warning messages)
+# Column 5: capability description (usually an associated terminfo variable)
+#
+# HANDLING TERMCAP AND TERMINFO EXTENSIONS
+#
+# There are basically five different ways to handle termcap and terminfo
+# extensions:
+#
+# 1. Don't list the capname here, or list it but comment it out (the latter
+# is preferable; someone might want to handle it in the future).  If you do
+# this, the capability will be treated as unknown and raise a warning from
+# the compiler.
+#
+# 2. Alias it.  This is appropriate if the capability has the same meaning
+# as an already-supported one.  The compiler will handle aliasing, emitting
+# an appropriate informational message whenever an alias fires.
+#
+# 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 the ncurses
+# library what to do with the terminfo data after it's 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
+# get a warning message about it).
+#
+# 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.
+#
+# 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
+# to terminfo with tic -I.  Some very old obsolete BSD caps like :kn: are
+# in this class.  Nothing will ever use them again.
+#
+# More usually, you want the compiler to try to deduce something from the
+# capability value that it can use to translate it into your output format.
+# You'll need to write custom code, probably in postprocess_termcap() or
+# postprocess_terminfo(), to handle the translation.
+#
+# 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 
+# trim those out of the set to be translated to termcap, or various users of
+# the termcap file will become irate.
+#
+# It might look tempting to leave those long init strings out of translations.
+# We can't do it (yet); 4.4BSD tput and tset use them.
+#
+# We retain the sgr capability in translation in spite of the fact that neither
+# 4.4BSD nor GNU Emacs uses it, because (a) some entry naming distinctions are
+# hard to understand without it, and (b) the entries in which it is long tend
+# to be older types that don't use up a lot of string space on function keys.
+# The tic(1) translation code will complain and elide it if it makes a critical
+# difference (there is special code in tic to recognize this situation).
+#
+# Yes, BSD tset(1) uses hpa.  We elide hpa/vpa anyway because the motion
+# optimizer in BSD curses didn't use them.  This omission seems to be the
+# single most effective one, it shortened the resolved length of all thirteen
+# problem entries in the 9.9.0 version of the terminfo master below critical.
+#
+# 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 
+# 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.
+#
+#############################################################################
+#
+# 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
+#%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.
+#%
+#%.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
+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)
+ceol_standout_glitch		xhp	bool	xs	-	-	YBCGE	standout not erased by overwriting (hp)
+eat_newline_glitch		xenl	bool	xn	-	-	YBCGE	newline ignored after 80 cols (concept)
+erase_overstrike		eo	bool	eo	-	-	YBCG-	can erase overstrikes with a blank
+generic_type			gn	bool	gn	-	-	YB-G-	generic line type
+hard_copy			hc	bool	hc	-	-	YBCG-	hardcopy terminal
+has_meta_key			km	bool	km	-	-	YB-GE	Has a meta key (i.e., sets 8th-bit)
+has_status_line			hs	bool	hs	-	-	YB-G-	has extra status line
+insert_null_glitch		in	bool	in	-	-	YBCGE	insert mode distinguishes nulls
+memory_above			da	bool	da	-	-	YBCG-	display may be retained above the screen
+memory_below			db	bool	db	-	-	YB-GE	display may be retained below the screen
+move_insert_mode		mir	bool	mi	-	-	YBCGE	safe to move while in insert mode
+move_standout_mode		msgr	bool	ms	-	-	YBCGE	safe to move while in standout mode
+over_strike			os	bool	os	-	-	YBCG-	terminal can overstrike
+status_line_esc_ok		eslok	bool	es	-	-	YB-G-	escape can be used on the status line
+dest_tabs_magic_smso		xt	bool	xt	-	-	YBCGE	tabs destructive, magic so char (t1061)
+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
+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
+non_rev_rmcup			nrrmc	bool	NR	-	-	-----	smcup does not reverse rmcup
+no_pad_char			npc	bool	NP	-	-	-----	pad character does not exist
+non_dest_scroll_region		ndscr	bool	ND	-	-	-----	scrolling region is non-destructive
+can_change			ccc	bool	cc	-	-	-----	terminal can re-define existing colors
+back_color_erase		bce	bool	ut	-	-	-----	screen erased with background color
+hue_lightness_saturation	hls	bool	hl	-	-	-----	terminal uses only HLS color notation (Tektronix)
+col_addr_glitch			xhpa	bool	YA	-	-	-----	only positive motion for hpa/mhpa caps
+cr_cancels_micro_mode		crxm	bool	YB	-	-	-----	using cr turns off micro mode
+has_print_wheel			daisy	bool	YC	-	-	-----	printer needs operator to change character set
+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
+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
+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
+lines_of_memory			lm	num	lm	-	-	YB-G-	lines of memory if > line. 0 means varies
+magic_cookie_glitch		xmc	num	sg	-	-	YBCGE	number of blank characters left by smso or rmso
+padding_baud_rate		pb	num	pb	-	-	YB-GE	lowest baud rate where padding needed
+virtual_terminal		vt	num	vt	-	-	YB---	virtual terminal number (CB/unix)
+width_status_line		wsl	num	ws	-	-	YB-G-	number of columns in status line
+num_labels			nlab	num	Nl	-	-	-----	number of labels on screen
+label_height			lh	num	lh	-	-	-----	rows in each label
+label_width			lw	num	lw	-	-	-----	columns in each label
+max_attributes			ma	num	ma	-	-	YBC--	maximum combined attributes terminal can handle
+maximum_windows			wnum	num	MW	-	-	-----	maximum number of defineable windows
+# These came in with SVr4's color support
+max_colors			colors	num	Co	-	-	-----	maximum number of colors on screen
+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
+#%.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
+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_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
+output_res_line			orl	num	Yj	-	-	-----	vertical resolution in units per line
+output_res_horz_inch		orhi	num	Yk	-	-	-----	horizontal resolution in units per inch
+output_res_vert_inch		orvi	num	Yl	-	-	-----	vertical resolution in units per inch
+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
+buttons				btns	num	BT	-	-	-----	number of buttons on mouse
+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
+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*)
+change_scroll_region		csr	str	cs	-		-	YBCGE	change region to line #1 to line #2 (P)
+clear_all_tabs			tbc	str	ct	-		-	YB-G-	clear all tab stops (P)
+clear_screen			clear	str	cl	-		-	YBCGE	clear screen and home cursor (P*)
+clr_eol				el	str	ce	-		-	YBCGE	clear to end of line (P)
+clr_eos				ed	str	cd	-		-	YBCGE	clear to end of screen (P*)
+column_address			hpa	str	ch	-		-	-B-GE*	horizontal position #1, absolute (P)
+command_character		cmdch	str	CC	-		-	YB-G-	terminal settable cmd character in prototype !?
+cursor_address			cup	str	cm	-		-	YBCGE	move to row #1 columns #2
+cursor_down			cud1	str	do	-		-	YBCGE	down one line
+cursor_home			home	str	ho	-		-	YBCGE	home cursor (if no cup)
+cursor_invisible		civis	str	vi	-		-	YB-G-	make cursor invisible
+cursor_left			cub1	str	le	-		-	YBCGE	move left one space
+cursor_mem_address		mrcup	str	CM	-		-	YB-G-	memory relative cursor addressing, move to row #1 columns #2
+cursor_normal			cnorm	str	ve	-		-	YBCGE	make cursor appear normal (undo civis/cvvis)
+cursor_right			cuf1	str	nd	-		-	YBCGE	non-destructive space (move right one space)
+cursor_to_ll			ll	str	ll	-		-	YBCGE	last line, first column (if no cup)
+cursor_up			cuu1	str	up	-		-	YBCGE	up one line
+cursor_visible			cvvis	str	vs	-		-	YBCGE	make cursor very visible
+delete_character		dch1	str	dc	-		-	YBCGE	delete character (P*)
+delete_line			dl1	str	dl	-		-	YBCGE	delete line (P*)
+dis_status_line			dsl	str	ds	-		-	YB-G-	disable status line
+down_half_line			hd	str	hd	-		-	YB-G-	half a line down
+enter_alt_charset_mode		smacs	str	as	-		-	YB-G-	start alternate character set (P)
+enter_blink_mode		blink	str	mb	-		-	YB-G-	turn on blinking
+enter_bold_mode			bold	str	md	-		-	YB-G-	turn on bold (extra bright) mode
+enter_ca_mode			smcup	str	ti	-		-	YBCGE	string to start programs using cup
+enter_delete_mode		smdc	str	dm	-		-	YBCGE	enter delete mode
+enter_dim_mode			dim	str	mh	-		-	YB-G-	turn on half-bright mode
+enter_insert_mode		smir	str	im	-		-	YBCGE	enter insert mode
+enter_secure_mode		invis	str	mk	-		-	-B-G-*	turn on blank mode (characters invisible)
+enter_protected_mode		prot	str	mp	-		-	-B-G-*	turn on protected mode
+enter_reverse_mode		rev	str	mr	-		-	YB-G-	turn on reverse video mode
+enter_standout_mode		smso	str	so	-		-	YBCGE	begin standout mode
+enter_underline_mode		smul	str	us	-		-	YBCGE	begin underline mode
+erase_chars			ech	str	ec	-		-	YB-G-	erase #1 characters (P)
+exit_alt_charset_mode		rmacs	str	ae	-		-	YB-G-	end alternate character set (P)
+exit_attribute_mode		sgr0	str	me	-		-	YB-GE	turn off all attributes
+exit_ca_mode			rmcup	str	te	-		-	YBCGE	strings to end programs using cup
+exit_delete_mode		rmdc	str	ed	-		-	YBCGE	end delete mode
+exit_insert_mode		rmir	str	ei	-		-	YBCGE	exit insert mode
+exit_standout_mode		rmso	str	se	-		-	YBCGE	exit standout mode
+exit_underline_mode		rmul	str	ue	-		-	YBCGE	exit underline mode
+flash_screen			flash	str	vb	-		-	YBCGE	visible bell (may not move cursor)
+form_feed			ff	str	ff	-		-	YB-G-	hardcopy terminal page eject (P*)
+from_status_line		fsl	str	fs	-		-	YB-G-	return from status line
+init_1string			is1	str	i1	-		-	YB-G-	initialization string
+init_2string			is2	str	is	-		-	YB-G-	initialization string
+init_3string			is3	str	i3	-		-	YB-G-	initialization string
+init_file			if	str	if	-		-	YB-G-	name of initialization file
+insert_character		ich1	str	ic	-		-	YBCGE	insert character (P)
+insert_line			il1	str	al	-		-	YBCGE	insert line (P*)
+insert_padding			ip	str	ip	-		-	YBCGE	insert padding after inserted character
+key_backspace			kbs	str	kb	KEY_BACKSPACE	0407	YB-G-	backspace key
+key_catab			ktbc	str	ka	KEY_CATAB	0526	-B-G-*	clear-all-tabs key
+key_clear			kclr	str	kC	KEY_CLEAR	0515	-B-G-*	clear-screen or erase key
+key_ctab			kctab	str	kt	KEY_CTAB	0525	-B-G-*	clear-tab key
+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
+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
+key_f0				kf0	str	k0	KEY_F(0)	0410	YBCGE	F0 function key
+key_f1				kf1	str	k1	KEY_F(1)	-	YBCGE	F1 function key
+key_f10				kf10	str	k;	KEY_F(10)	-	----E	F10 function key
+key_f2				kf2	str	k2	KEY_F(2)	-	YBCGE	F2 function key
+key_f3				kf3	str	k3	KEY_F(3)	-	YBCGE	F3 function key
+key_f4				kf4	str	k4	KEY_F(4)	-	YBCGE	F4 function key
+key_f5				kf5	str	k5	KEY_F(5)	-	YBCGE	F5 function key
+key_f6				kf6	str	k6	KEY_F(6)	-	YBCGE	F6 function key
+key_f7				kf7	str	k7	KEY_F(7)	-	YBCGE	F7 function key
+key_f8				kf8	str	k8	KEY_F(8)	-	YBCGE	F8 function key
+key_f9				kf9	str	k9	KEY_F(9)	-	YBCGE	F9 function key
+key_home			khome	str	kh	KEY_HOME	0406	YBCGE	home key
+key_ic				kich1	str	kI	KEY_IC		0513	YB-GE	insert-character key
+key_il				kil1	str	kA	KEY_IL		0511	-B-G-*	insert-line key
+key_left			kcub1	str	kl	KEY_LEFT	0404	YBCGE	left-arrow key
+key_ll				kll	str	kH	KEY_LL		0533	YB-G-	lower-left key (home down)
+key_npage			knp	str	kN	KEY_NPAGE	0522	YB-GE	next-page key
+key_ppage			kpp	str	kP	KEY_PPAGE	0523	YB-GE	previous-page key
+key_right			kcuf1	str	kr	KEY_RIGHT	0405	YBCGE	right-arrow key
+key_sf				kind	str	kF	KEY_SF		0520	-B-G-*	scroll-forward key
+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
+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
+lab_f2				lf2	str	l2	-		-	-B-G-*	label on function key f2 if not f2
+lab_f3				lf3	str	l3	-		-	-B-G-*	label on function key f3 if not f3
+lab_f4				lf4	str	l4	-		-	-B-G-*	label on function key f4 if not f4
+lab_f5				lf5	str	l5	-		-	-B-G-*	label on function key f5 if not f5
+lab_f6				lf6	str	l6	-		-	-B-G-*	label on function key f6 if not f6
+lab_f7				lf7	str	l7	-		-	-B-G-*	label on function key f7 if not f7
+lab_f8				lf8	str	l8	-		-	-B-G-*	label on function key f8 if not f8
+lab_f9				lf9	str	l9	-		-	-B-G-*	label on function key f9 if not f9
+meta_off			rmm	str	mo	-		-	YB-G-*	turn off meta mode
+meta_on				smm	str	mm	-		-	YB-G-*	turn on meta mode (8th-bit on)
+newline				nel	str	nw	-		-	YB-G-*	newline (behave like cr followed by lf)
+pad_char			pad	str	pc	-		-	YBCGE	padding char (instead of null)
+parm_dch			dch	str	DC	-		-	YB-GE	delete #1 characters (P*)
+parm_delete_line		dl	str	DL	-		-	YBCGE	delete #1 lines (P*)
+parm_down_cursor		cud	str	DO	-		-	YBCGE	down #1 lines (P*)
+parm_ich			ich	str	IC	-		-	YB-GE	insert #1 characters (P*)
+parm_index			indn	str	SF	-		-	YBCG-	scroll forward #1 lines (P)
+parm_insert_line		il	str	AL	-		-	YBCGE	insert #1 lines (P*)
+parm_left_cursor		cub	str	LE	-		-	YBCGE	move #1 characters to the left (P)
+parm_right_cursor		cuf	str	RI	-		-	YBCGE	move #1 characters to the right (P*)
+parm_rindex			rin	str	SR	-		-	YBCG-	scroll back #1 lines (P)
+parm_up_cursor			cuu	str	UP	-		-	YBCGE	up #1 lines (P*)
+pkey_key			pfkey	str	pk	-		-	-B---	program function key #1 to type string #2
+pkey_local			pfloc	str	pl	-		-	-B---	program function key #1 to execute string #2
+pkey_xmit			pfx	str	px	-		-	-B---	program function key #1 to transmit string #2
+print_screen			mc0	str	ps	-		-	-B-G-*	print contents of screen
+prtr_off			mc4	str	pf	-		-	-B-G-*	turn off printer
+prtr_on				mc5	str	po	-		-	-B-G-*	turn on printer
+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
+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
+row_address			vpa	str	cv	-		-	-B-GE*	vertical position #1 absolute (P)
+save_cursor			sc	str	sc	-		-	YBCG-	save current cursor position (P)
+scroll_forward			ind	str	sf	-		-	YBCGE	scroll text up (P)
+scroll_reverse			ri	str	sr	-		-	YBCGE	scroll text down (P)
+set_attributes			sgr	str	sa	-		-	YB-G-	define video attributes #1-#9 (PG9)
+set_tab				hts	str	st	-		-	YB-G-	set a tab in every row, current columns
+set_window			wind	str	wi	-		-	-B-GE	current window is lines #1-#2 cols #3-#4
+tab				ht	str	ta	-		-	YBCGE	tab to next 8-space hardware tab stop
+to_status_line			tsl	str	ts	-		-	YB-G-	move to status line, column #1
+underline_char			uc	str	uc	-		-	YBCG-	underline char and move past it
+up_half_line			hu	str	hu	-		-	YB-G-	half a line up
+init_prog			iprog	str	iP	-		-	-B---	path name of program for initialization
+key_a1				ka1	str	K1	KEY_A1		0534	YB-GE	upper left of keypad
+key_a3				ka3	str	K3	KEY_A3		0535	YB-GE	upper right of keypad
+key_b2				kb2	str	K2	KEY_B2		0536	YB-GE	center of keypad
+key_c1				kc1	str	K4	KEY_C1		0537	YB-GE	lower left of keypad
+key_c3				kc3	str	K5	KEY_C3		0540	YB-GE	lower right of keypad
+prtr_non			mc5p	str	pO	-		-	-B-G-*	turn on printer for #1 bytes
+#
+# 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	-		-	----K	select font 0
+font_1				font1	str	f1	-		-	----K	select font 1
+font_2				font2	str	f2	-		-	----K	select font 2
+font_3				font3	str	f3	-		-	----K	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	-		-	----K	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	KEY_END		0550	-----	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_aix			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
+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_out7			kmpt7	str	KS	-		-	----K	special mapped key 7 output
+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_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
+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	S0	-		-	----K	special function key 10
+key_f11				kf11	str	F1	KEY_F(11)	-	----E	F11 function key
+key_f12				kf12	str	F2	KEY_F(12)	-	----E	F12 function key
+key_f13				kf13	str	F3	KEY_F(13)	-	----E	F13 function key
+key_f14				kf14	str	F4	KEY_F(14)	-	----E	F14 function key
+key_f15				kf15	str	F5	KEY_F(15)	-	----E	F15 function key
+key_f16				kf16	str	F6	KEY_F(16)	-	----E	F16 function key
+key_f17				kf17	str	F7	KEY_F(17)	-	----E	F17 function key
+key_f18				kf18	str	F8	KEY_F(18)	-	----E	F18 function key
+key_f19				kf19	str	F9	KEY_F(19)	-	----E	F19 function key
+key_f20				kf20	str	FA	KEY_F(20)	-	----E	F20 function key
+key_f21				kf21	str	FB	KEY_F(21)	-	----E	F21 function key
+key_f22				kf22	str	FC	KEY_F(22)	-	----E	F22 function key
+key_f23				kf23	str	FD	KEY_F(23)	-	----E	F23 function key
+key_f24				kf24	str	FE	KEY_F(24)	-	----E	F24 function key
+key_f25				kf25	str	FF	KEY_F(25)	-	----E	F25 function key
+key_f26				kf26	str	FG	KEY_F(26)	-	----E	F26 function key
+key_f27				kf27	str	FH	KEY_F(27)	-	----E	F27 function key
+key_f28				kf28	str	FI	KEY_F(28)	-	----E	F28 function key
+key_f29				kf29	str	FJ	KEY_F(29)	-	----E	F29 function key
+key_f30				kf30	str	FK	KEY_F(30)	-	----E	F30 function key
+key_f31				kf31	str	FL	KEY_F(31)	-	----E	F31 function key
+key_f32				kf32	str	FM	KEY_F(32)	-	----E	F32 function key
+key_f33				kf33	str	FN	KEY_F(33)	-	----E	F33 function key
+key_f34				kf34	str	FO	KEY_F(34)	-	----E	F34 function key
+key_f35				kf35	str	FP	KEY_F(35)	-	----E	F35 function key
+key_f36				kf36	str	FQ	KEY_F(36)	-	----E	F36 function key
+key_f37				kf37	str	FR	KEY_F(37)	-	----E	F37 function key
+key_f38				kf38	str	FS	KEY_F(38)	-	----E	F38 function key
+key_f39				kf39	str	FT	KEY_F(39)	-	----E	F39 function key
+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
+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
+key_f46				kf46	str	Fa	KEY_F(46)	-	----E	F46 function key
+key_f47				kf47	str	Fb	KEY_F(47)	-	----E	F47 function key
+key_f48				kf48	str	Fc	KEY_F(48)	-	----E	F48 function key
+key_f49				kf49	str	Fd	KEY_F(49)	-	----E	F49 function key
+key_f50				kf50	str	Fe	KEY_F(50)	-	----E	F50 function key
+key_f51				kf51	str	Ff	KEY_F(51)	-	----E	F51 function key
+key_f52				kf52	str	Fg	KEY_F(52)	-	----E	F52 function key
+key_f53				kf53	str	Fh	KEY_F(53)	-	----E	F53 function key
+key_f54				kf54	str	Fi	KEY_F(54)	-	----E	F54 function key
+key_f55				kf55	str	Fj	KEY_F(55)	-	----E	F55 function key
+key_f56				kf56	str	Fk	KEY_F(56)	-	----E	F56 function key
+key_f57				kf57	str	Fl	KEY_F(57)	-	----E	F57 function key
+key_f58				kf58	str	Fm	KEY_F(58)	-	----E	F58 function key
+key_f59				kf59	str	Fn	KEY_F(59)	-	----E	F59 function key
+key_f60				kf60	str	Fo	KEY_F(60)	-	----E	F60 function key
+key_f61				kf61	str	Fp	KEY_F(61)	-	----E	F61 function key
+key_f62				kf62	str	Fq	KEY_F(62)	-	----E	F62 function key
+key_f63				kf63	str	Fr	KEY_F(63)	-	----E	F63 function key
+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
+#
+# SVr4 capabilities resume here.  Note that key_end is in the IBM-extensions.
+#
+char_padding			rmp	str	rP	-		-	-----	like ip but when in insert mode
+acs_chars			acsc	str	ac	-		-	-----	graphics charset pairs, based on vt100
+plab_norm			pln	str	pn	-		-	-----	program label #1 to show string #2
+key_btab			kcbt	str	kB	KEY_BTAB	0541	-----	back-tab key
+enter_xon_mode			smxon	str	SX	-		-	-----	turn on xon/xoff handshaking
+exit_xon_mode			rmxon	str	RX	-		-	-----	turn off xon/xoff handshaking
+enter_am_mode			smam	str	SA	-		-	-----	turn on automatic margins
+exit_am_mode			rmam	str	RA	-		-	-----	turn off automatic margins
+xon_character			xonc	str	XN	-		-	-----	XON character
+xoff_character			xoffc	str	XF	-		-	-----	XOFF character
+ena_acs				enacs	str	eA	-		-	-----	enable alternate char set
+label_on			smln	str	LO	-		-	-----	turn on soft labels
+label_off			rmln	str	LF	-		-	-----	turn off soft labels
+key_beg				kbeg	str	@1	KEY_BEG		0542	-----	begin key
+key_cancel			kcan	str	@2	KEY_CANCEL	0543	-----	cancel key
+key_close			kclo	str	@3	KEY_CLOSE	0544	-----	close key
+#key_command			kcmd	str	@4	KEY_COMMAND	0545	-----	command key
+key_copy			kcpy	str	@5	KEY_COPY	0546	-----	copy key
+key_create			kcrt	str	@6	KEY_CREATE	0547	-----	create key
+#key_end			kend	str	@7	KEY_END		0550	-----	end key
+key_enter			kent	str	@8	KEY_ENTER	0527	-----	enter/send key
+key_exit			kext	str	@9	KEY_EXIT	0551	-----	exit key
+key_find			kfnd	str	@0	KEY_FIND	0552	-----	find key
+#key_help			khlp	str	%1	KEY_HELP	0553	-----	help key
+key_mark			kmrk	str	%2	KEY_MARK	0554	-----	mark key
+key_message			kmsg	str	%3	KEY_MESSAGE	0555	-----	message key
+key_move			kmov	str	%4	KEY_MOVE	0556	-----	move key
+key_next			knxt	str	%5	KEY_NEXT	0557	-----	next key
+key_open			kopn	str	%6	KEY_OPEN	0560	-----	open key
+key_options			kopt	str	%7	KEY_OPTIONS	0561	-----	options key
+key_previous			kprv	str	%8	KEY_PREVIOUS	0562	-----	previous key
+key_print			kprt	str	%9	KEY_PRINT	0532	-----	print key
+key_redo			krdo	str	%0	KEY_REDO	0563	-----	redo key
+key_reference			kref	str	&1	KEY_REFERENCE	0564	-----	reference key
+key_refresh			krfr	str	&2	KEY_REFRESH	0565	-----	refresh key
+key_replace			krpl	str	&3	KEY_REPLACE	0566	-----	replace key
+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
+key_suspend			kspd	str	&7	KEY_SUSPEND	0627	-----	suspend key
+key_undo			kund	str	&8	KEY_UNDO	0630	-----	undo key
+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
+key_scopy			kCPY	str	*2	KEY_SCOPY	0575	-----	shifted copy key
+key_screate			kCRT	str	*3	KEY_SCREATE	0576	-----	shifted create key
+key_sdc				kDC	str	*4	KEY_SDC		0577	-----	shifted delete-character key
+key_sdl				kDL	str	*5	KEY_SDL		0600	-----	shifted delete-line key
+key_select			kslt	str	*6	KEY_SELECT	0601	-----	select key
+key_send			kEND	str	*7	KEY_SEND	0602	-----	shifted end key
+key_seol			kEOL	str	*8	KEY_SEOL	0603	-----	shifted clear-to-end-of-line key
+key_sexit			kEXT	str	*9	KEY_SEXIT	0604	-----	shifted exit key
+key_sfind			kFND	str	*0	KEY_SFIND	0605	-----	shifted find key
+key_shelp			kHLP	str	#1	KEY_SHELP	0606	-----	shifted help key
+key_shome			kHOM	str	#2	KEY_SHOME	0607	-----	shifted home key
+key_sic				kIC	str	#3	KEY_SIC		0610	-----	shifted insert-character key
+key_sleft			kLFT	str	#4	KEY_SLEFT	0611	-----	shifted left-arrow key
+key_smessage			kMSG	str	%a	KEY_SMESSAGE	0612	-----	shifted message key
+key_smove			kMOV	str	%b	KEY_SMOVE	0613	-----	shifted move key
+key_snext			kNXT	str	%c	KEY_SNEXT	0614	-----	shifted next key
+key_soptions			kOPT	str	%d	KEY_SOPTIONS	0615	-----	shifted options key
+key_sprevious			kPRV	str	%e	KEY_SPREVIOUS	0616	-----	shifted previous key
+key_sprint			kPRT	str	%f	KEY_SPRINT	0617	-----	shifted print key
+key_sredo			kRDO	str	%g	KEY_SREDO	0620	-----	shifted redo key
+key_sreplace			kRPL	str	%h	KEY_SREPLACE	0621	-----	shifted replace key
+key_sright			kRIT	str	%i	KEY_SRIGHT	0622	-----	shifted right-arrow key
+key_srsume			kRES	str	%j	KEY_SRSUME	0623	-----	shifted resume key
+key_ssave			kSAV	str	!1	KEY_SSAVE	0624	-----	shifted save key
+key_ssuspend			kSPD	str	!2	KEY_SSUSPEND	0625	-----	shifted suspend key
+key_sundo			kUND	str	!3	KEY_SUNDO	0626	-----	shifted undo key
+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_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
+display_clock			dclk	str	DK	-		-	-----	display clock
+remove_clock			rmclk	str	RC	-		-	-----	remove clock
+create_window			cwin	str	CW	-		-	-----	define a window #1 from #2,#3 to #4,#5
+goto_window			wingo	str	WG	-		-	-----	go to window #1
+hangup				hup	str	HU	-		-	-----	hang-up phone
+dial_phone			dial	str	DI	-		-	-----	dial number #1
+quick_dial			qdial	str	QD	-		-	-----	dial number #1 without checking
+tone				tone	str	TO	-		-	-----	select touch tone dialing
+pulse				pulse	str	PU	-		-	-----	select pulse dialing
+flash_hook			hook	str	fh	-		-	-----	flash switch hook
+fixed_pause			pause	str	PA	-		-	-----	pause for 2-3 seconds
+wait_tone			wait	str	WA	-		-	-----	wait for dial-tone
+user0				u0	str	u0	-		-	-----	User string #0
+user1				u1	str	u1	-		-	-----	User string #1
+user2				u2	str	u2	-		-	-----	User string #2
+user3				u3	str	u3	-		-	-----	User string #3
+user4				u4	str	u4	-		-	-----	User string #4
+user5				u5	str	u5	-		-	-----	User string #5
+user6				u6	str	u6	-		-	-----	User string #6
+user7				u7	str	u7	-		-	-----	User string #7
+user8				u8	str	u8	-		-	-----	User string #8
+user9				u9	str	u9	-		-	-----	User string #9
+#
+# SVr4 added these capabilities to support color
+#
+orig_pair			op	str	op	-		-	-----	Set default pair to its original value
+orig_colors			oc	str	oc	-		-	-----	Set all color pairs to the original ones
+initialize_color		initc	str	Ic	-		-	-----	initialize color #1 to (#2,#3,#4)
+initialize_pair			initp	str	Ip	-		-	-----	Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7)
+set_color_pair			scp	str	sp	-		-	-----	Set current color pair to #1
+set_foreground			setf	str	Sf	-		-	-----	Set foreground color #1
+set_background			setb	str	Sb	-		-	-----	Set background color #1
+#
+# SVr4 added these capabilities to support printers
+#
+change_char_pitch		cpi	str	ZA	-		-	-----	Change number of characters per inch to #1
+change_line_pitch		lpi	str	ZB	-		-	-----	Change number of lines per inch to #1
+change_res_horz			chr	str	ZC	-		-	-----	Change horizontal resolution to #1
+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
+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
+enter_micro_mode		smicm	str	ZJ	-		-	-----	Start micro-motion mode
+enter_near_letter_quality	snlq	str	ZK	-		-	-----	Enter NLQ mode
+enter_normal_quality		snrmq	str	ZL	-		-	-----	Enter normal-quality mode
+enter_shadow_mode		sshm	str	ZM	-		-	-----	Enter shadow-print mode
+enter_subscript_mode		ssubm	str	ZN	-		-	-----	Enter subscript mode
+enter_superscript_mode		ssupm	str	ZO	-		-	-----	Enter superscript mode
+enter_upward_mode		sum	str	ZP	-		-	-----	Start upward carriage motion
+exit_doublewide_mode		rwidm	str	ZQ	-		-	-----	End double-wide mode
+exit_italics_mode		ritm	str	ZR	-		-	-----	End italic mode
+exit_leftward_mode		rlm	str	ZS	-		-	-----	End left-motion mode
+exit_micro_mode			rmicm	str	ZT	-		-	-----	End micro-motion mode
+exit_shadow_mode		rshm	str	ZU	-		-	-----	End shadow-print mode
+exit_subscript_mode		rsubm	str	ZV	-		-	-----	End subscript mode
+exit_superscript_mode		rsupm	str	ZW	-		-	-----	End superscript mode
+exit_upward_mode		rum	str	ZX	-		-	-----	End reverse character motion
+micro_column_address		mhpa	str	ZY	-		-	-----	Like column_address in micro mode
+micro_down			mcud1	str	ZZ	-		-	-----	Like cursor_down in micro mode
+micro_left			mcub1	str	Za	-		-	-----	Like cursor_left in micro mode
+micro_right			mcuf1	str	Zb	-		-	-----	Like cursor_right in micro mode
+micro_row_address		mvpa	str	Zc	-		-	-----	Like row_address #1 in micro mode
+micro_up			mcuu1	str	Zd	-		-	-----	Like cursor_up in micro mode
+order_of_pins			porder	str	Ze	-		-	-----	Match software bits to print-head pins
+parm_down_micro			mcud	str	Zf	-		-	-----	Like parm_down_cursor in micro mode
+parm_left_micro			mcub	str	Zg	-		-	-----	Like parm_left_cursor in micro mode
+parm_right_micro		mcuf	str	Zh	-		-	-----	Like parm_right_cursor in micro mode
+parm_up_micro			mcuu	str	Zi	-		-	-----	Like parm_up_cursor in micro mode
+select_char_set			scs	str	Zj	-		-	-----	Select character set, #1
+set_bottom_margin		smgb	str	Zk	-		-	-----	Set bottom margin at current line
+set_bottom_margin_parm		smgbp	str	Zl	-		-	-----	Set bottom margin at line #1 or (if smgtp is not given) #2 lines from bottom
+set_left_margin_parm		smglp	str	Zm	-		-	-----	Set left (right) margin at column #1
+set_right_margin_parm		smgrp	str	Zn	-		-	-----	Set right margin at column #1
+set_top_margin			smgt	str	Zo	-		-	-----	Set top margin at current line
+set_top_margin_parm		smgtp	str	Zp	-		-	-----	Set top (bottom) margin at row #1
+start_bit_image			sbim	str	Zq	-		-	-----	Start printing bit image graphics
+start_char_set_def		scsd	str	Zr	-		-	-----	Start character set definition #1, with #2 characters in the set
+stop_bit_image			rbim	str	Zs	-		-	-----	Stop printing bit image graphics
+stop_char_set_def		rcsd	str	Zt	-		-	-----	End definition of character set #1
+subscript_characters		subcs	str	Zu	-		-	-----	List of subscriptable characters
+superscript_characters		supcs	str	Zv	-		-	-----	List of superscriptable characters
+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
+#%
+#%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
+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
+req_mouse_pos			reqmp	str	RQ	-		-	-----	Request mouse position
+get_mouse			getm	str	Gm	-		-	-----	Curses should get button events, parameter #1 not documented.
+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
+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
+set2_des_seq			s2ds	str	s2	-		-	-----	Shift to codeset 2
+set3_des_seq			s3ds	str	s3	-		-	-----	Shift to codeset 3
+set_lr_margin			smglr	str	ML	-		-	-----	Set both left and right margins to #1, #2.  (ML is not in BSD termcap).
+set_tb_margin			smgtb	str	MT	-		-	-----	Sets both top and bottom margins to #1, #2
+bit_image_repeat		birep	str	Xy	-		-	-----	Repeat bit image cell #1 #2 times
+bit_image_newline		binel	str	Zz	-		-	-----	Move to next row of the bit image
+bit_image_carriage_return	bicr	str	Yv	-		-	-----	Move to beginning of same row
+color_names			colornm	str	Yw	-		-	-----	Give name for color #1
+define_bit_image_region		defbi	str	Yx	-		-	-----	Define rectangualar bit image region
+end_bit_image_region		endbi	str	Yy	-		-	-----	End a bit-image region
+set_color_band		setcolor	str	Yz	-		-	-----	Change to ribbon color #1
+set_page_length			slines	str	YZ	-		-	-----	Set page length to #1 lines
+#
+# SVr4 added these capabilities for direct PC-clone support
+#
+display_pc_char			dispc	str	S1	-		-	-----	Display PC character #1
+enter_pc_charset_mode		smpch	str	S2	-		-	-----	Enter PC character display mode
+exit_pc_charset_mode		rmpch	str	S3	-		-	-----	Exit PC character display mode
+enter_scancode_mode		smsc	str	S4	-		-	-----	Enter PC scancode mode
+exit_scancode_mode		rmsc	str	S5	-		-	-----	Exit PC scancode mode
+pc_term_options			pctrm	str	S6	-		-	-----	PC terminal options
+scancode_escape			scesc	str	S7	-		-	-----	Escape for scancode emulation
+alt_scancode_esc		scesa	str	S8	-		-	-----	Alternate escape for scancode emulation
+#%.TE
+#%.ad
+#%
+#%.in .8i
+#%The XSI Curses standard added these.  They are some post-4.1 
+#%versions of System V curses, e.g., Solaris 2.5 and IRIX 6.x.
+#%The \fBncurses\fR termcap names for them are invented; according to the
+#%XSI Curses standard, they have no termcap names.  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
+set_pglen_inch			slength	str	sL	-		-	-----	YI Set page length to #1 hundredth of an inch
+#%.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
+# also tells the man page table generator not to pass through following lines
+# This means we can have obsolete capabilities and pseudo-capabilities that are
+# recognized for termcap or terminfo compilation, but not output.
+#
+# %%-STOP-HERE-%%
+#
+# Don't move this casually!  In fact, don't move it at all unless you're
+# either doing it to add System V or XPG4 extensions, or have decided you
+# don't care about SVr4 binary compatibility.
+#
+#############################################################################
+#
+# TERMCAP EXTENSION CAPABILITIES
+#
+# The capabilities below are either obsolete or extensions on certain systems.
+# They are not used by SVR4 terminfo.  Some are used by captoinfo to translate
+# termcap sources; the rest are listed for completeness, and in case somebody
+# cares about them enough to hack in code that will translate them into
+# terminfo capabilities.
+#
+# The first part of the list is from Ross Ridge's `mytinfo' package
+# (comp.sources.unix, volume 26); the variable names and terminfo names (as
+# well as the termcap codes) match his list.
+#
+# This group of codes is not marked obsolete in 4.4BSD, but have no direct
+# terminfo equivalents.  The rs capability is specially translated to terminfo
+# r2, and vice versa, if an entry does not already have an r2.  Similarly,
+# i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2).
+# The ug capability is thrown away, but assumed to be whatever sg is if the
+# latter is nonzero and we're dumping in termcap format.
+#
+termcap_init2			OTi2	str	i2	-		-	YB---	secondary initialization string
+termcap_reset			OTrs	str	rs	-		-	YB-G-	terminal reset string
+magic_cookie_glitch_ul		OTug	num	ug	-		-	YBCGE	number of blanks left by ul
+#
+# Obsolete termcap capabilities.  Some are used for termcap translation.  The
+# code uses the 'OT' prefix we put on obsolete capabilities to suppress
+# printing them in terminfo source dumps of compiled entries.
+#
+backspaces_with_bs		OTbs	bool	bs	-		-	YBCGE	uses ^H to move left
+crt_no_scrolling		OTns	bool	ns	-		-	YBCG-	crt cannot scroll
+no_correctly_working_cr		OTnc	bool	nc	-		-	YBCG-	no way to go to start of line
+carriage_return_delay		OTdC	num	dC	-		-	YB-G-	pad needed for CR
+new_line_delay			OTdN	num	dN	-		-	YB-G-	pad needed for LF
+linefeed_if_not_lf		OTnl	str	nl	-		-	YBCGE	use to move down
+backspace_if_not_bs		OTbc	str	bc	-		-	YBCGE	move left, if not ^H
+#
+# GNU termcap library extensions.  The GNU termcap file distributed with
+# Emacs no longer uses these, but MT showed up in pre-9.0 versions of the
+# BSD termcap file.  The name clash with terminfo MT is resolved by type
+# info; MT is converted to km.
+#
+gnu_has_meta_key		OTMT	bool	MT	-		-	----E	has meta key
+# gnu_tab_width			OTtw	num	tw	-		-	----E	tab width in spaces
+#
+# 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 
+#
+# The following comments describe capnames so ancient that I believe no
+# software uses them any longer.  Some of these have to go because they
+# clash with terminfo names in ways that cannot be resolved by type
+# information.
+#
+# These mytinfo codes are not used in the 4.4BSD curses code.  They are
+# marked obsolete in the 4.4BSD manual pages.
+#
+# There is one conflict with terminfo; ma is in both.  This conflict is
+# resolved by type information.
+#
+# The `ko' capability is translated by special code.  It should contain a
+# 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...
+#
+# 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
+# text.  All lines above the cursor's current line become locked in place on
+# the screen.  Then enter data normally.  When the screen fills up, any
+# further data entered forces the first line of unfrozen line text to scroll
+# under the frozen data.  Lines scrolled off the screen are inserted into
+# memory immediately preceding the first frozen line." (from the HP 700/96
+# User's manual).  VT100/ANSI memory lock set is \E[>2h, reset is \E[>2l.
+#
+# Applications that use terminfo are supposed to behave as though xr is
+# always true.
+#
+linefeed_is_newline		OTNL	bool	NL	-		-	YB---	move down with \n
+# even_parity			OTEP	bool	EP	-		-	-B---	terminal requires even parity
+# odd_parity			OTOP	bool	OP	-		-	-B---	terminal requires odd parity
+# half_duplex			OTHD	bool	HD	-		-	-B---	terminal is half-duplex
+# lower_case_only		OTLC	bool	LC	-		-	-B---	terminal has only lower case
+# upper_case_only		OTUC	bool	UC	-		-	-B---	terminal has only upper case
+backspace_delay			OTdB	num	dB	-		-	YB-G-	padding required for ^H
+# form_feed_delay		OTdF	num	dF	-		-	-B-G-	padding required for ^L
+horizontal_tab_delay		OTdT	num	dT	-		-	YB-G-	padding required for ^I
+# 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
+# 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
+# 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.
+#
+# rind_only_at_top		OTxq	bool	xq	-		-	-----	reverse index only works from top line
+#
+# 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. 
+#
+# key_interrupt_char		OTki	str	ki	-		-	-----	string set by interrupt key (?)
+# key_kill_char			OTkk	str	kk	-		-	-----	string set by kill key (?)
+# key_suspend_char		OTkz	str	kz	-		-	-----	string set by suspend key (?)
+# initialization_messy		OTxc	bool	xc	-		-	-----	initialization leaves garbage on the screen (?)
+# ind_at_bottom_does_cr		OTxl	bool	xl	-		-	-----	index does a carriage return
+#
+# Nonstandard capabilities unique to Ross Ridge's `mytinfo' package.
+# SR clashes with a terminfo name; this ambiguity cannot be resolved by a type
+# check.
+#
+# scroll_left			OTsl1	str	Sl	-		-	-----	scroll screen leftward
+# scroll_right			OTsr1	str	Sr	-		-	-----	scroll screen rightward
+# parm_scroll_left		OTsl	str	SL	-		-	-----	scroll screen leftward #1 characters
+# parm_scroll_right		OTsr	str	SR	-		-	-----	scroll screen rightward #1 characters
+#
+# The mytinfo capabilities end here.
+#
+# XENIX extensions:
+#
+# Xenix defined its own set of forms-drawing capabilities:
+#
+# cap	IBM ASCII	description             ACS         	ASCII
+# ---	-----------	--------------------    -------------	------
+# G1	191 \277 M-?	single upper right   	ACS_URCORNER
+# G2	218 \332 M-Z	single upper left	ACS_ULCORNER
+# G3	192 \300 M-@	single lower left	ACS_LLCORNER
+# G4	217 \331 M-Y	single lower right	ACS_LRCORNER
+# G5	187 \273 M-;	double upper right
+# G6	201 \311 M-I	double upper left
+# G7	200 \310 M-H	double lower left
+# G8	188 \274 M-<	double lower right
+# GC	197 \305 M-E	single intersection	ACS_PLUS	_ _
+# GD	194 \302 M-B	single down-tick	ACS_TTEE	 |
+# GH	196 \304 M-D	single horizontal line	ACS_HLINE
+# GL	180 \264 M-4	single left tick	ACS_RTEE	-|
+# GR	195 \303 M-C	single right tick	ACS_LTEE	|-
+# GU	193 \301 M-A	single up tick		ACS_BTEE	_|_
+# GV	179 \263 M-3	single vertical line	ACS_VLINE
+# Gc	206 \316 M-N	double intersection
+# Gd	203 \313 M-K	double down tick
+# Gh	205 \315 M-M	double horizontal line
+# Gl	204 \204 M-L	double left tick
+# Gr	185 \271 M-9	double right tick
+# Gu	202 \312 M-J	double up tick
+# 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 
+# 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.
+# These terminfo names are invented.
+#
+acs_ulcorner			OTG2	str	G2	-		-	-----	single upper left
+acs_llcorner			OTG3	str	G3	-		-	-----	single lower left
+acs_urcorner			OTG1	str	G1	-		-	-----	single upper right
+acs_lrcorner			OTG4	str	G4	-		-	-----	single lower right
+acs_ltee			OTGR	str	GR	-		-	-----	tee pointing right
+acs_rtee			OTGL	str	GL	-		-	-----	tee pointing left
+acs_btee			OTGU	str	GU	-		-	-----	tee pointing up
+acs_ttee			OTGD	str	GD	-		-	-----	tee pointing down
+acs_hline			OTGH	str	GH	-		-	-----	single horizontal line
+acs_vline			OTGV	str	GV	-		-	-----	single vertical line
+acs_plus			OTGC	str	GC	-		-	-----	single intersection
+#
+#############################################################################
+#
+# 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	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.
+#
+#############################################################################
+#
+# The following sets edit modes for GNU EMACS
+# Local Variables:
+# case-fold-search:nil
+# truncate-lines:t
+# End:
diff --git a/include/Caps.hpux11 b/include/Caps.hpux11
new file mode 100644
index 0000000..b74acdb
--- /dev/null
+++ b/include/Caps.hpux11
@@ -0,0 +1,1278 @@
+##############################################################################
+# Copyright (c) 2002-2003,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"), #
+# 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
+#
+# $Id: Caps.hpux11,v 1.4 2006/05/27 15:33:04 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 
+# 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.
+#
+# This file has three major sections; a standard-capabilities table, two
+# extension-capability tables, and a section of aliases declarations.
+# The first two have the same format, as follows:
+#
+# FILE FORMAT
+#
+# Column 1: terminfo variable name
+# Column 2: terminfo capability name
+# 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
+# Column 7: Lead with `Y' if capability should be emitted in termcap
+#           translations, `-' otherwise
+# Column 8: capability description
+#
+# 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
+# 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
+#	C = used by the 4.4BSD curses library
+#	G = mentioned in the documentation for GNU termcap
+#	E = used by GNU Emacs
+#	K = remove this terminfo capability when translating to standard format
+# The important codes are C and E.  A cap with C or E should be preserved in
+# translation if possible.  The problem is that preserving all such caps may
+# lead to some termcap translations being too long.  The termcap maintainer
+# has a bit of a juggling act to do...potential problem cases are marked with
+# an asterisk (*).
+#
+# The aliases section has the following format:
+#
+# Column 1: either `capalias' or `infoalias'
+# Column 2: name to be aliased
+# Column 3: what name it should translate to.  The name IGNORE means it
+#           should be discarded with a warning message.
+# Column 4: name of the extension set (used for compiler warning messages)
+# Column 5: capability description (usually an associated terminfo variable)
+#
+# HANDLING TERMCAP AND TERMINFO EXTENSIONS
+#
+# There are basically five different ways to handle termcap and terminfo
+# extensions:
+#
+# 1. Don't list the capname here, or list it but comment it out (the latter
+# is preferable; someone might want to handle it in the future).  If you do
+# this, the capability will be treated as unknown and raise a warning from
+# the compiler.
+#
+# 2. Alias it.  This is appropriate if the capability has the same meaning
+# as an already-supported one.  The compiler will handle aliasing, emitting
+# an appropriate informational message whenever an alias fires.
+#
+# 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 the ncurses
+# library what to do with the terminfo data after it's 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
+# get a warning message about it).
+#
+# 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.
+#
+# 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
+# to terminfo with tic -I.  Some very old obsolete BSD caps like :kn: are
+# in this class.  Nothing will ever use them again.
+#
+# More usually, you want the compiler to try to deduce something from the
+# capability value that it can use to translate it into your output format.
+# You'll need to write custom code, probably in postprocess_termcap() or
+# postprocess_terminfo(), to handle the translation.
+#
+# 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 
+# trim those out of the set to be translated to termcap, or various users of
+# the termcap file will become irate.
+#
+# It might look tempting to leave those long init strings out of translations.
+# We can't do it (yet); 4.4BSD tput and tset use them.
+#
+# We retain the sgr capability in translation in spite of the fact that neither
+# 4.4BSD nor GNU Emacs uses it, because (a) some entry naming distinctions are
+# hard to understand without it, and (b) the entries in which it is long tend
+# to be older types that don't use up a lot of string space on function keys.
+# The tic(1) translation code will complain and elide it if it makes a critical
+# difference (there is special code in tic to recognize this situation).
+#
+# Yes, BSD tset(1) uses hpa.  We elide hpa/vpa anyway because the motion
+# optimizer in BSD curses didn't use them.  This omission seems to be the
+# single most effective one, it shortened the resolved length of all thirteen
+# problem entries in the 9.9.0 version of the terminfo master below critical.
+#
+# 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 
+# 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.
+#
+#############################################################################
+#
+# 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
+#%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.
+#%
+#%.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
+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)
+ceol_standout_glitch		xhp	bool	xs	-	-	YBCGE	standout not erased by overwriting (hp)
+eat_newline_glitch		xenl	bool	xn	-	-	YBCGE	newline ignored after 80 cols (concept)
+erase_overstrike		eo	bool	eo	-	-	YBCG-	can erase overstrikes with a blank
+generic_type			gn	bool	gn	-	-	YB-G-	generic line type
+hard_copy			hc	bool	hc	-	-	YBCG-	hardcopy terminal
+has_meta_key			km	bool	km	-	-	YB-GE	Has a meta key (i.e., sets 8th-bit)
+has_status_line			hs	bool	hs	-	-	YB-G-	has extra status line
+insert_null_glitch		in	bool	in	-	-	YBCGE	insert mode distinguishes nulls
+memory_above			da	bool	da	-	-	YBCG-	display may be retained above the screen
+memory_below			db	bool	db	-	-	YB-GE	display may be retained below the screen
+move_insert_mode		mir	bool	mi	-	-	YBCGE	safe to move while in insert mode
+move_standout_mode		msgr	bool	ms	-	-	YBCGE	safe to move while in standout mode
+over_strike			os	bool	os	-	-	YBCG-	terminal can overstrike
+status_line_esc_ok		eslok	bool	es	-	-	YB-G-	escape can be used on the status line
+dest_tabs_magic_smso		xt	bool	xt	-	-	YBCGE	tabs destructive, magic so char (t1061)
+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)
+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
+non_rev_rmcup			nrrmc	bool	NR	-	-	-----	smcup does not reverse rmcup
+no_pad_char			npc	bool	NP	-	-	-----	pad character does not exist
+non_dest_scroll_region		ndscr	bool	ND	-	-	-----	scrolling region is non-destructive
+can_change			ccc	bool	cc	-	-	-----	terminal can re-define existing colors
+back_color_erase		bce	bool	ut	-	-	-----	screen erased with background color
+hue_lightness_saturation	hls	bool	hl	-	-	-----	terminal uses only HLS color notation (Tektronix)
+col_addr_glitch			xhpa	bool	YA	-	-	-----	only positive motion for hpa/mhpa caps
+cr_cancels_micro_mode		crxm	bool	YB	-	-	-----	using cr turns off micro mode
+has_print_wheel			daisy	bool	YC	-	-	-----	printer needs operator to change character set
+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
+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
+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
+lines_of_memory			lm	num	lm	-	-	YB-G-	lines of memory if > line. 0 means varies
+magic_cookie_glitch		xmc	num	sg	-	-	YBCGE	number of blank characters left by smso or rmso
+padding_baud_rate		pb	num	pb	-	-	YB-GE	lowest baud rate where padding needed
+virtual_terminal		vt	num	vt	-	-	YB---	virtual terminal number (CB/unix)
+width_status_line		wsl	num	ws	-	-	YB-G-	number of columns in status line
+# end numbers for HPUX 9, 10 (non-color curses)
+num_labels			nlab	num	Nl	-	-	-----	number of labels on screen
+label_height			lh	num	lh	-	-	-----	rows in each label
+label_width			lw	num	lw	-	-	-----	columns in each label
+max_attributes			ma	num	ma	-	-	YBC--	maximum combined attributes terminal can handle
+maximum_windows			wnum	num	MW	-	-	-----	maximum number of defineable windows
+# These came in with SVr4's color support
+max_colors			colors	num	Co	-	-	-----	maximum number of colors on screen
+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
+#%.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
+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_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
+output_res_line			orl	num	Yj	-	-	-----	vertical resolution in units per line
+output_res_horz_inch		orhi	num	Yk	-	-	-----	horizontal resolution in units per inch
+output_res_vert_inch		orvi	num	Yl	-	-	-----	vertical resolution in units per inch
+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
+buttons				btns	num	BT	-	-	-----	number of buttons on mouse
+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
+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*)
+change_scroll_region		csr	str	cs	-		-	YBCGE	change region to line #1 to line #2 (P)
+clear_all_tabs			tbc	str	ct	-		-	YB-G-	clear all tab stops (P)
+clear_screen			clear	str	cl	-		-	YBCGE	clear screen and home cursor (P*)
+clr_eol				el	str	ce	-		-	YBCGE	clear to end of line (P)
+clr_eos				ed	str	cd	-		-	YBCGE	clear to end of screen (P*)
+column_address			hpa	str	ch	-		-	-B-GE*	horizontal position #1, absolute (P)
+command_character		cmdch	str	CC	-		-	YB-G-	terminal settable cmd character in prototype !?
+cursor_address			cup	str	cm	-		-	YBCGE	move to row #1 columns #2
+cursor_down			cud1	str	do	-		-	YBCGE	down one line
+cursor_home			home	str	ho	-		-	YBCGE	home cursor (if no cup)
+cursor_invisible		civis	str	vi	-		-	YB-G-	make cursor invisible
+cursor_left			cub1	str	le	-		-	YBCGE	move left one space
+cursor_mem_address		mrcup	str	CM	-		-	YB-G-	memory relative cursor addressing, move to row #1 columns #2
+cursor_normal			cnorm	str	ve	-		-	YBCGE	make cursor appear normal (undo civis/cvvis)
+cursor_right			cuf1	str	nd	-		-	YBCGE	non-destructive space (move right one space)
+cursor_to_ll			ll	str	ll	-		-	YBCGE	last line, first column (if no cup)
+cursor_up			cuu1	str	up	-		-	YBCGE	up one line
+cursor_visible			cvvis	str	vs	-		-	YBCGE	make cursor very visible
+delete_character		dch1	str	dc	-		-	YBCGE	delete character (P*)
+delete_line			dl1	str	dl	-		-	YBCGE	delete line (P*)
+dis_status_line			dsl	str	ds	-		-	YB-G-	disable status line
+down_half_line			hd	str	hd	-		-	YB-G-	half a line down
+enter_alt_charset_mode		smacs	str	as	-		-	YB-G-	start alternate character set (P)
+enter_blink_mode		blink	str	mb	-		-	YB-G-	turn on blinking
+enter_bold_mode			bold	str	md	-		-	YB-G-	turn on bold (extra bright) mode
+enter_ca_mode			smcup	str	ti	-		-	YBCGE	string to start programs using cup
+enter_delete_mode		smdc	str	dm	-		-	YBCGE	enter delete mode
+enter_dim_mode			dim	str	mh	-		-	YB-G-	turn on half-bright mode
+enter_insert_mode		smir	str	im	-		-	YBCGE	enter insert mode
+enter_secure_mode		invis	str	mk	-		-	-B-G-*	turn on blank mode (characters invisible)
+enter_protected_mode		prot	str	mp	-		-	-B-G-*	turn on protected mode
+enter_reverse_mode		rev	str	mr	-		-	YB-G-	turn on reverse video mode
+enter_standout_mode		smso	str	so	-		-	YBCGE	begin standout mode
+enter_underline_mode		smul	str	us	-		-	YBCGE	begin underline mode
+erase_chars			ech	str	ec	-		-	YB-G-	erase #1 characters (P)
+exit_alt_charset_mode		rmacs	str	ae	-		-	YB-G-	end alternate character set (P)
+exit_attribute_mode		sgr0	str	me	-		-	YB-GE	turn off all attributes
+exit_ca_mode			rmcup	str	te	-		-	YBCGE	strings to end programs using cup
+exit_delete_mode		rmdc	str	ed	-		-	YBCGE	end delete mode
+exit_insert_mode		rmir	str	ei	-		-	YBCGE	exit insert mode
+exit_standout_mode		rmso	str	se	-		-	YBCGE	exit standout mode
+exit_underline_mode		rmul	str	ue	-		-	YBCGE	exit underline mode
+flash_screen			flash	str	vb	-		-	YBCGE	visible bell (may not move cursor)
+form_feed			ff	str	ff	-		-	YB-G-	hardcopy terminal page eject (P*)
+from_status_line		fsl	str	fs	-		-	YB-G-	return from status line
+init_1string			is1	str	i1	-		-	YB-G-	initialization string
+init_2string			is2	str	is	-		-	YB-G-	initialization string
+init_3string			is3	str	i3	-		-	YB-G-	initialization string
+init_file			if	str	if	-		-	YB-G-	name of initialization file
+insert_character		ich1	str	ic	-		-	YBCGE	insert character (P)
+insert_line			il1	str	al	-		-	YBCGE	insert line (P*)
+insert_padding			ip	str	ip	-		-	YBCGE	insert padding after inserted character
+key_backspace			kbs	str	kb	KEY_BACKSPACE	0407	YB-G-	backspace key
+key_catab			ktbc	str	ka	KEY_CATAB	0526	-B-G-*	clear-all-tabs key
+key_clear			kclr	str	kC	KEY_CLEAR	0515	-B-G-*	clear-screen or erase key
+key_ctab			kctab	str	kt	KEY_CTAB	0525	-B-G-*	clear-tab key
+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
+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
+key_f0				kf0	str	k0	KEY_F(0)	0410	YBCGE	F0 function key
+key_f1				kf1	str	k1	KEY_F(1)	-	YBCGE	F1 function key
+key_f10				kf10	str	k;	KEY_F(10)	-	----E	F10 function key
+key_f2				kf2	str	k2	KEY_F(2)	-	YBCGE	F2 function key
+key_f3				kf3	str	k3	KEY_F(3)	-	YBCGE	F3 function key
+key_f4				kf4	str	k4	KEY_F(4)	-	YBCGE	F4 function key
+key_f5				kf5	str	k5	KEY_F(5)	-	YBCGE	F5 function key
+key_f6				kf6	str	k6	KEY_F(6)	-	YBCGE	F6 function key
+key_f7				kf7	str	k7	KEY_F(7)	-	YBCGE	F7 function key
+key_f8				kf8	str	k8	KEY_F(8)	-	YBCGE	F8 function key
+key_f9				kf9	str	k9	KEY_F(9)	-	YBCGE	F9 function key
+key_home			khome	str	kh	KEY_HOME	0406	YBCGE	home key
+key_ic				kich1	str	kI	KEY_IC		0513	YB-GE	insert-character key
+key_il				kil1	str	kA	KEY_IL		0511	-B-G-*	insert-line key
+key_left			kcub1	str	kl	KEY_LEFT	0404	YBCGE	left-arrow key
+key_ll				kll	str	kH	KEY_LL		0533	YB-G-	lower-left key (home down)
+key_npage			knp	str	kN	KEY_NPAGE	0522	YB-GE	next-page key
+key_ppage			kpp	str	kP	KEY_PPAGE	0523	YB-GE	previous-page key
+key_right			kcuf1	str	kr	KEY_RIGHT	0405	YBCGE	right-arrow key
+key_sf				kind	str	kF	KEY_SF		0520	-B-G-*	scroll-forward key
+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
+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
+lab_f2				lf2	str	l2	-		-	-B-G-*	label on function key f2 if not f2
+lab_f3				lf3	str	l3	-		-	-B-G-*	label on function key f3 if not f3
+lab_f4				lf4	str	l4	-		-	-B-G-*	label on function key f4 if not f4
+lab_f5				lf5	str	l5	-		-	-B-G-*	label on function key f5 if not f5
+lab_f6				lf6	str	l6	-		-	-B-G-*	label on function key f6 if not f6
+lab_f7				lf7	str	l7	-		-	-B-G-*	label on function key f7 if not f7
+lab_f8				lf8	str	l8	-		-	-B-G-*	label on function key f8 if not f8
+lab_f9				lf9	str	l9	-		-	-B-G-*	label on function key f9 if not f9
+meta_off			rmm	str	mo	-		-	YB-G-*	turn off meta mode
+meta_on				smm	str	mm	-		-	YB-G-*	turn on meta mode (8th-bit on)
+newline				nel	str	nw	-		-	YB-G-*	newline (behave like cr followed by lf)
+pad_char			pad	str	pc	-		-	YBCGE	padding char (instead of null)
+parm_dch			dch	str	DC	-		-	YB-GE	delete #1 characters (P*)
+parm_delete_line		dl	str	DL	-		-	YBCGE	delete #1 lines (P*)
+parm_down_cursor		cud	str	DO	-		-	YBCGE	down #1 lines (P*)
+parm_ich			ich	str	IC	-		-	YB-GE	insert #1 characters (P*)
+parm_index			indn	str	SF	-		-	YBCG-	scroll forward #1 lines (P)
+parm_insert_line		il	str	AL	-		-	YBCGE	insert #1 lines (P*)
+parm_left_cursor		cub	str	LE	-		-	YBCGE	move #1 characters to the left (P)
+parm_right_cursor		cuf	str	RI	-		-	YBCGE	move #1 characters to the right (P*)
+parm_rindex			rin	str	SR	-		-	YBCG-	scroll back #1 lines (P)
+parm_up_cursor			cuu	str	UP	-		-	YBCGE	up #1 lines (P*)
+pkey_key			pfkey	str	pk	-		-	-B---	program function key #1 to type string #2
+pkey_local			pfloc	str	pl	-		-	-B---	program function key #1 to execute string #2
+pkey_xmit			pfx	str	px	-		-	-B---	program function key #1 to transmit string #2
+print_screen			mc0	str	ps	-		-	-B-G-*	print contents of screen
+prtr_off			mc4	str	pf	-		-	-B-G-*	turn off printer
+prtr_on				mc5	str	po	-		-	-B-G-*	turn on printer
+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
+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
+row_address			vpa	str	cv	-		-	-B-GE*	vertical position #1 absolute (P)
+save_cursor			sc	str	sc	-		-	YBCG-	save current cursor position (P)
+scroll_forward			ind	str	sf	-		-	YBCGE	scroll text up (P)
+scroll_reverse			ri	str	sr	-		-	YBCGE	scroll text down (P)
+set_attributes			sgr	str	sa	-		-	YB-G-	define video attributes #1-#9 (PG9)
+set_tab				hts	str	st	-		-	YB-G-	set a tab in every row, current columns
+set_window			wind	str	wi	-		-	-B-GE	current window is lines #1-#2 cols #3-#4
+tab				ht	str	ta	-		-	YBCGE	tab to next 8-space hardware tab stop
+to_status_line			tsl	str	ts	-		-	YB-G-	move to status line, column #1
+underline_char			uc	str	uc	-		-	YBCG-	underline char and move past it
+up_half_line			hu	str	hu	-		-	YB-G-	half a line up
+init_prog			iprog	str	iP	-		-	-B---	path name of program for initialization
+key_a1				ka1	str	K1	KEY_A1		0534	YB-GE	upper left of keypad
+key_a3				ka3	str	K3	KEY_A3		0535	YB-GE	upper right of keypad
+key_b2				kb2	str	K2	KEY_B2		0536	YB-GE	center of keypad
+key_c1				kc1	str	K4	KEY_C1		0537	YB-GE	lower left of keypad
+key_c3				kc3	str	K5	KEY_C3		0540	YB-GE	lower right of keypad
+prtr_non			mc5p	str	pO	-		-	-B-G-*	turn on printer for #1 bytes
+#
+# SVr1 capabilities stop here.	IBM's version of terminfo is the same as
+# SVr4 up to this point, but has a different set afterwards.
+#
+# HPUX defines these if __HP_CURSES_COMPAT is defined:
+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	KEY_F(11)	-	----E	F11 function key
+key_f12				kf12	str	F2	KEY_F(12)	-	----E	F12 function key
+key_f13				kf13	str	F3	KEY_F(13)	-	----E	F13 function key
+key_f14				kf14	str	F4	KEY_F(14)	-	----E	F14 function key
+key_f15				kf15	str	F5	KEY_F(15)	-	----E	F15 function key
+key_f16				kf16	str	F6	KEY_F(16)	-	----E	F16 function key
+key_f17				kf17	str	F7	KEY_F(17)	-	----E	F17 function key
+key_f18				kf18	str	F8	KEY_F(18)	-	----E	F18 function key
+key_f19				kf19	str	F9	KEY_F(19)	-	----E	F19 function key
+key_f20				kf20	str	FA	KEY_F(20)	-	----E	F20 function key
+key_f21				kf21	str	FB	KEY_F(21)	-	----E	F21 function key
+key_f22				kf22	str	FC	KEY_F(22)	-	----E	F22 function key
+key_f23				kf23	str	FD	KEY_F(23)	-	----E	F23 function key
+key_f24				kf24	str	FE	KEY_F(24)	-	----E	F24 function key
+key_f25				kf25	str	FF	KEY_F(25)	-	----E	F25 function key
+key_f26				kf26	str	FG	KEY_F(26)	-	----E	F26 function key
+key_f27				kf27	str	FH	KEY_F(27)	-	----E	F27 function key
+key_f28				kf28	str	FI	KEY_F(28)	-	----E	F28 function key
+key_f29				kf29	str	FJ	KEY_F(29)	-	----E	F29 function key
+key_f30				kf30	str	FK	KEY_F(30)	-	----E	F30 function key
+key_f31				kf31	str	FL	KEY_F(31)	-	----E	F31 function key
+key_f32				kf32	str	FM	KEY_F(32)	-	----E	F32 function key
+key_f33				kf33	str	FN	KEY_F(33)	-	----E	F33 function key
+key_f34				kf34	str	FO	KEY_F(34)	-	----E	F34 function key
+key_f35				kf35	str	FP	KEY_F(35)	-	----E	F35 function key
+key_f36				kf36	str	FQ	KEY_F(36)	-	----E	F36 function key
+key_f37				kf37	str	FR	KEY_F(37)	-	----E	F37 function key
+key_f38				kf38	str	FS	KEY_F(38)	-	----E	F38 function key
+key_f39				kf39	str	FT	KEY_F(39)	-	----E	F39 function key
+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
+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
+key_f46				kf46	str	Fa	KEY_F(46)	-	----E	F46 function key
+key_f47				kf47	str	Fb	KEY_F(47)	-	----E	F47 function key
+key_f48				kf48	str	Fc	KEY_F(48)	-	----E	F48 function key
+key_f49				kf49	str	Fd	KEY_F(49)	-	----E	F49 function key
+key_f50				kf50	str	Fe	KEY_F(50)	-	----E	F50 function key
+key_f51				kf51	str	Ff	KEY_F(51)	-	----E	F51 function key
+key_f52				kf52	str	Fg	KEY_F(52)	-	----E	F52 function key
+key_f53				kf53	str	Fh	KEY_F(53)	-	----E	F53 function key
+key_f54				kf54	str	Fi	KEY_F(54)	-	----E	F54 function key
+key_f55				kf55	str	Fj	KEY_F(55)	-	----E	F55 function key
+key_f56				kf56	str	Fk	KEY_F(56)	-	----E	F56 function key
+key_f57				kf57	str	Fl	KEY_F(57)	-	----E	F57 function key
+key_f58				kf58	str	Fm	KEY_F(58)	-	----E	F58 function key
+key_f59				kf59	str	Fn	KEY_F(59)	-	----E	F59 function key
+key_f60				kf60	str	Fo	KEY_F(60)	-	----E	F60 function key
+key_f61				kf61	str	Fp	KEY_F(61)	-	----E	F61 function key
+key_f62				kf62	str	Fq	KEY_F(62)	-	----E	F62 function key
+key_f63				kf63	str	Fr	KEY_F(63)	-	----E	F63 function key
+# end of strings in HPUX 9
+char_padding			rmp	str	rP	-		-	-----	like ip but when in insert mode
+acs_chars			acsc	str	ac	-		-	-----	graphics charset pairs, based on vt100
+key_btab			kcbt	str	kB	KEY_BTAB	0541	-----	back-tab key
+enter_xon_mode			smxon	str	SX	-		-	-----	turn on xon/xoff handshaking
+exit_xon_mode			rmxon	str	RX	-		-	-----	turn off xon/xoff handshaking
+enter_am_mode			smam	str	SA	-		-	-----	turn on automatic margins
+exit_am_mode			rmam	str	RA	-		-	-----	turn off automatic margins
+xon_character			xonc	str	XN	-		-	-----	XON character
+xoff_character			xoffc	str	XF	-		-	-----	XOFF character
+ena_acs				enacs	str	eA	-		-	-----	enable alternate char set
+key_beg				kbeg	str	@1	KEY_BEG		0542	-----	begin key
+key_cancel			kcan	str	@2	KEY_CANCEL	0543	-----	cancel key
+key_close			kclo	str	@3	KEY_CLOSE	0544	-----	close key
+key_command			kcmd	str	@4	KEY_COMMAND	0545	-----	command key
+key_copy			kcpy	str	@5	KEY_COPY	0546	-----	copy key
+key_create			kcrt	str	@6	KEY_CREATE	0547	-----	create key
+key_end				kend	str	@7	KEY_END		0550	-----	end key
+key_enter			kent	str	@8	KEY_ENTER	0527	-----	enter/send key
+key_exit			kext	str	@9	KEY_EXIT	0551	-----	exit key
+key_find			kfnd	str	@0	KEY_FIND	0552	-----	find key
+key_help			khlp	str	%1	KEY_HELP	0553	-----	help key
+key_mark			kmrk	str	%2	KEY_MARK	0554	-----	mark key
+key_message			kmsg	str	%3	KEY_MESSAGE	0555	-----	message key
+key_move			kmov	str	%4	KEY_MOVE	0556	-----	move key
+key_next			knxt	str	%5	KEY_NEXT	0557	-----	next key
+key_open			kopn	str	%6	KEY_OPEN	0560	-----	open key
+key_options			kopt	str	%7	KEY_OPTIONS	0561	-----	options key
+key_previous			kprv	str	%8	KEY_PREVIOUS	0562	-----	previous key
+key_print			kprt	str	%9	KEY_PRINT	0532	-----	print key
+key_redo			krdo	str	%0	KEY_REDO	0563	-----	redo key
+key_reference			kref	str	&1	KEY_REFERENCE	0564	-----	reference key
+key_refresh			krfr	str	&2	KEY_REFRESH	0565	-----	refresh key
+key_replace			krpl	str	&3	KEY_REPLACE	0566	-----	replace key
+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
+key_suspend			kspd	str	&7	KEY_SUSPEND	0627	-----	suspend key
+key_undo			kund	str	&8	KEY_UNDO	0630	-----	undo key
+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
+key_scopy			kCPY	str	*2	KEY_SCOPY	0575	-----	shifted copy key
+key_screate			kCRT	str	*3	KEY_SCREATE	0576	-----	shifted create key
+key_sdc				kDC	str	*4	KEY_SDC		0577	-----	shifted delete-character key
+key_sdl				kDL	str	*5	KEY_SDL		0600	-----	shifted delete-line key
+key_select			kslt	str	*6	KEY_SELECT	0601	-----	select key
+key_send			kEND	str	*7	KEY_SEND	0602	-----	shifted end key
+key_seol			kEOL	str	*8	KEY_SEOL	0603	-----	shifted clear-to-end-of-line key
+key_sexit			kEXT	str	*9	KEY_SEXIT	0604	-----	shifted exit key
+key_sfind			kFND	str	*0	KEY_SFIND	0605	-----	shifted find key
+key_shelp			kHLP	str	#1	KEY_SHELP	0606	-----	shifted help key
+key_shome			kHOM	str	#2	KEY_SHOME	0607	-----	shifted home key
+key_sic				kIC	str	#3	KEY_SIC		0610	-----	shifted insert-character key
+key_sleft			kLFT	str	#4	KEY_SLEFT	0611	-----	shifted left-arrow key
+key_smessage			kMSG	str	%a	KEY_SMESSAGE	0612	-----	shifted message key
+key_smove			kMOV	str	%b	KEY_SMOVE	0613	-----	shifted move key
+key_snext			kNXT	str	%c	KEY_SNEXT	0614	-----	shifted next key
+key_soptions			kOPT	str	%d	KEY_SOPTIONS	0615	-----	shifted options key
+key_sprevious			kPRV	str	%e	KEY_SPREVIOUS	0616	-----	shifted previous key
+key_sprint			kPRT	str	%f	KEY_SPRINT	0617	-----	shifted print key
+key_sredo			kRDO	str	%g	KEY_SREDO	0620	-----	shifted redo key
+key_sreplace			kRPL	str	%h	KEY_SREPLACE	0621	-----	shifted replace key
+key_sright			kRIT	str	%i	KEY_SRIGHT	0622	-----	shifted right-arrow key
+key_srsume			kRES	str	%j	KEY_SRSUME	0623	-----	shifted resume key
+key_ssave			kSAV	str	!1	KEY_SSAVE	0624	-----	shifted save key
+key_ssuspend			kSPD	str	!2	KEY_SSUSPEND	0625	-----	shifted suspend key
+key_sundo			kUND	str	!3	KEY_SUNDO	0626	-----	shifted undo key
+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_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
+display_clock			dclk	str	DK	-		-	-----	display clock
+remove_clock			rmclk	str	RC	-		-	-----	remove clock
+create_window			cwin	str	CW	-		-	-----	define a window #1 from #2,#3 to #4,#5
+goto_window			wingo	str	WG	-		-	-----	go to window #1
+hangup				hup	str	HU	-		-	-----	hang-up phone
+dial_phone			dial	str	DI	-		-	-----	dial number #1
+quick_dial			qdial	str	QD	-		-	-----	dial number #1 without checking
+tone				tone	str	TO	-		-	-----	select touch tone dialing
+pulse				pulse	str	PU	-		-	-----	select pulse dialing
+flash_hook			hook	str	fh	-		-	-----	flash switch hook
+fixed_pause			pause	str	PA	-		-	-----	pause for 2-3 seconds
+wait_tone			wait	str	WA	-		-	-----	wait for dial-tone
+user0				u0	str	u0	-		-	-----	User string #0
+user1				u1	str	u1	-		-	-----	User string #1
+user2				u2	str	u2	-		-	-----	User string #2
+user3				u3	str	u3	-		-	-----	User string #3
+user4				u4	str	u4	-		-	-----	User string #4
+user5				u5	str	u5	-		-	-----	User string #5
+user6				u6	str	u6	-		-	-----	User string #6
+user7				u7	str	u7	-		-	-----	User string #7
+user8				u8	str	u8	-		-	-----	User string #8
+user9				u9	str	u9	-		-	-----	User string #9
+#
+# SVr4 added these capabilities to support color
+#
+orig_pair			op	str	op	-		-	-----	Set default pair to its original value
+orig_colors			oc	str	oc	-		-	-----	Set all color pairs to the original ones
+initialize_color		initc	str	Ic	-		-	-----	initialize color #1 to (#2,#3,#4)
+initialize_pair			initp	str	Ip	-		-	-----	Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7)
+set_color_pair			scp	str	sp	-		-	-----	Set current color pair to #1
+set_foreground			setf	str	Sf	-		-	-----	Set foreground color #1
+set_background			setb	str	Sb	-		-	-----	Set background color #1
+#
+# SVr4 added these capabilities to support printers
+#
+change_char_pitch		cpi	str	ZA	-		-	-----	Change number of characters per inch to #1
+change_line_pitch		lpi	str	ZB	-		-	-----	Change number of lines per inch to #1
+change_res_horz			chr	str	ZC	-		-	-----	Change horizontal resolution to #1
+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
+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
+enter_micro_mode		smicm	str	ZJ	-		-	-----	Start micro-motion mode
+enter_near_letter_quality	snlq	str	ZK	-		-	-----	Enter NLQ mode
+enter_normal_quality		snrmq	str	ZL	-		-	-----	Enter normal-quality mode
+enter_shadow_mode		sshm	str	ZM	-		-	-----	Enter shadow-print mode
+enter_subscript_mode		ssubm	str	ZN	-		-	-----	Enter subscript mode
+enter_superscript_mode		ssupm	str	ZO	-		-	-----	Enter superscript mode
+enter_upward_mode		sum	str	ZP	-		-	-----	Start upward carriage motion
+exit_doublewide_mode		rwidm	str	ZQ	-		-	-----	End double-wide mode
+exit_italics_mode		ritm	str	ZR	-		-	-----	End italic mode
+exit_leftward_mode		rlm	str	ZS	-		-	-----	End left-motion mode
+exit_micro_mode			rmicm	str	ZT	-		-	-----	End micro-motion mode
+exit_shadow_mode		rshm	str	ZU	-		-	-----	End shadow-print mode
+exit_subscript_mode		rsubm	str	ZV	-		-	-----	End subscript mode
+exit_superscript_mode		rsupm	str	ZW	-		-	-----	End superscript mode
+exit_upward_mode		rum	str	ZX	-		-	-----	End reverse character motion
+micro_column_address		mhpa	str	ZY	-		-	-----	Like column_address in micro mode
+micro_down			mcud1	str	ZZ	-		-	-----	Like cursor_down in micro mode
+micro_left			mcub1	str	Za	-		-	-----	Like cursor_left in micro mode
+micro_right			mcuf1	str	Zb	-		-	-----	Like cursor_right in micro mode
+micro_row_address		mvpa	str	Zc	-		-	-----	Like row_address #1 in micro mode
+micro_up			mcuu1	str	Zd	-		-	-----	Like cursor_up in micro mode
+order_of_pins			porder	str	Ze	-		-	-----	Match software bits to print-head pins
+parm_down_micro			mcud	str	Zf	-		-	-----	Like parm_down_cursor in micro mode
+parm_left_micro			mcub	str	Zg	-		-	-----	Like parm_left_cursor in micro mode
+parm_right_micro		mcuf	str	Zh	-		-	-----	Like parm_right_cursor in micro mode
+parm_up_micro			mcuu	str	Zi	-		-	-----	Like parm_up_cursor in micro mode
+select_char_set			scs	str	Zj	-		-	-----	Select character set, #1
+set_bottom_margin		smgb	str	Zk	-		-	-----	Set bottom margin at current line
+set_bottom_margin_parm		smgbp	str	Zl	-		-	-----	Set bottom margin at line #1 or (if smgtp is not given) #2 lines from bottom
+set_left_margin_parm		smglp	str	Zm	-		-	-----	Set left (right) margin at column #1
+set_right_margin_parm		smgrp	str	Zn	-		-	-----	Set right margin at column #1
+set_top_margin			smgt	str	Zo	-		-	-----	Set top margin at current line
+set_top_margin_parm		smgtp	str	Zp	-		-	-----	Set top (bottom) margin at row #1
+start_bit_image			sbim	str	Zq	-		-	-----	Start printing bit image graphics
+start_char_set_def		scsd	str	Zr	-		-	-----	Start character set definition #1, with #2 characters in the set
+stop_bit_image			rbim	str	Zs	-		-	-----	Stop printing bit image graphics
+stop_char_set_def		rcsd	str	Zt	-		-	-----	End definition of character set #1
+subscript_characters		subcs	str	Zu	-		-	-----	List of subscriptable characters
+superscript_characters		supcs	str	Zv	-		-	-----	List of superscriptable characters
+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
+#%
+#%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
+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
+req_mouse_pos			reqmp	str	RQ	-		-	-----	Request mouse position
+get_mouse			getm	str	Gm	-		-	-----	Curses should get button events, parameter #1 not documented.
+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
+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
+set2_des_seq			s2ds	str	s2	-		-	-----	Shift to codeset 2
+set3_des_seq			s3ds	str	s3	-		-	-----	Shift to codeset 3
+set_lr_margin			smglr	str	ML	-		-	-----	Set both left and right margins to #1, #2.  (ML is not in BSD termcap).
+set_tb_margin			smgtb	str	MT	-		-	-----	Sets both top and bottom margins to #1, #2
+bit_image_repeat		birep	str	Xy	-		-	-----	Repeat bit image cell #1 #2 times
+bit_image_newline		binel	str	Zz	-		-	-----	Move to next row of the bit image
+bit_image_carriage_return	bicr	str	Yv	-		-	-----	Move to beginning of same row
+color_names			colornm	str	Yw	-		-	-----	Give name for color #1
+define_bit_image_region		defbi	str	Yx	-		-	-----	Define rectangualar bit image region
+end_bit_image_region		endbi	str	Yy	-		-	-----	End a bit-image region
+set_color_band		setcolor	str	Yz	-		-	-----	Change to ribbon color #1
+set_page_length			slines	str	YZ	-		-	-----	Set page length to #1 lines
+#
+# SVr4 added these capabilities for direct PC-clone support
+#
+display_pc_char			dispc	str	S1	-		-	-----	Display PC character #1
+enter_pc_charset_mode		smpch	str	S2	-		-	-----	Enter PC character display mode
+exit_pc_charset_mode		rmpch	str	S3	-		-	-----	Exit PC character display mode
+enter_scancode_mode		smsc	str	S4	-		-	-----	Enter PC scancode mode
+exit_scancode_mode		rmsc	str	S5	-		-	-----	Exit PC scancode mode
+pc_term_options			pctrm	str	S6	-		-	-----	PC terminal options
+scancode_escape			scesc	str	S7	-		-	-----	Escape for scancode emulation
+alt_scancode_esc		scesa	str	S8	-		-	-----	Alternate escape for scancode emulation
+#%.TE
+#%.ad
+#%
+#%.in .8i
+#%The XSI Curses standard added these.  They are some post-4.1 
+#%versions of System V curses, e.g., Solaris 2.5 and IRIX 6.x.
+#%The \fBncurses\fR termcap names for them are invented; according to the
+#%XSI Curses standard, they have no termcap names.  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
+set_pglen_inch			slength	str	sL	-		-	-----	YI Set page length to #1 hundredth of an inch
+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
+#%.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
+# also tells the man page table generator not to pass through following lines
+# This means we can have obsolete capabilities and pseudo-capabilities that are
+# recognized for termcap or terminfo compilation, but not output.
+#
+# %%-STOP-HERE-%%
+#
+# Don't move this casually!  In fact, don't move it at all unless you're
+# either doing it to add System V or XPG4 extensions, or have decided you
+# don't care about SVr4 binary compatibility.
+#
+#############################################################################
+#
+# TERMCAP EXTENSION CAPABILITIES
+#
+# The capabilities below are either obsolete or extensions on certain systems.
+# They are not used by SVR4 terminfo.  Some are used by captoinfo to translate
+# termcap sources; the rest are listed for completeness, and in case somebody
+# cares about them enough to hack in code that will translate them into
+# terminfo capabilities.
+#
+# The first part of the list is from Ross Ridge's `mytinfo' package
+# (comp.sources.unix, volume 26); the variable names and terminfo names (as
+# well as the termcap codes) match his list.
+#
+# This group of codes is not marked obsolete in 4.4BSD, but have no direct
+# terminfo equivalents.  The rs capability is specially translated to terminfo
+# r2, and vice versa, if an entry does not already have an r2.  Similarly,
+# i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2).
+# The ug capability is thrown away, but assumed to be whatever sg is if the
+# latter is nonzero and we're dumping in termcap format.
+#
+termcap_init2			OTi2	str	i2	-		-	YB---	secondary initialization string
+termcap_reset			OTrs	str	rs	-		-	YB-G-	terminal reset string
+magic_cookie_glitch_ul		OTug	num	ug	-		-	YBCGE	number of blanks left by ul
+#
+# Obsolete termcap capabilities.  Some are used for termcap translation.  The
+# code uses the 'OT' prefix we put on obsolete capabilities to suppress
+# printing them in terminfo source dumps of compiled entries.
+#
+backspaces_with_bs		OTbs	bool	bs	-		-	YBCGE	uses ^H to move left
+crt_no_scrolling		OTns	bool	ns	-		-	YBCG-	crt cannot scroll
+no_correctly_working_cr		OTnc	bool	nc	-		-	YBCG-	no way to go to start of line
+carriage_return_delay		OTdC	num	dC	-		-	YB-G-	pad needed for CR
+new_line_delay			OTdN	num	dN	-		-	YB-G-	pad needed for LF
+linefeed_if_not_lf		OTnl	str	nl	-		-	YBCGE	use to move down
+backspace_if_not_bs		OTbc	str	bc	-		-	YBCGE	move left, if not ^H
+#
+# GNU termcap library extensions.  The GNU termcap file distributed with
+# Emacs no longer uses these, but MT showed up in pre-9.0 versions of the
+# BSD termcap file.  The name clash with terminfo MT is resolved by type
+# info; MT is converted to km.
+#
+gnu_has_meta_key		OTMT	bool	MT	-		-	----E	has meta key
+# gnu_tab_width			OTtw	num	tw	-		-	----E	tab width in spaces
+#
+# 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 
+#
+# The following comments describe capnames so ancient that I believe no
+# software uses them any longer.  Some of these have to go because they
+# clash with terminfo names in ways that cannot be resolved by type
+# information.
+#
+# These mytinfo codes are not used in the 4.4BSD curses code.  They are
+# marked obsolete in the 4.4BSD manual pages.
+#
+# There is one conflict with terminfo; ma is in both.  This conflict is
+# resolved by type information.
+#
+# The `ko' capability is translated by special code.  It should contain a
+# 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...
+#
+# 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
+# text.  All lines above the cursor's current line become locked in place on
+# the screen.  Then enter data normally.  When the screen fills up, any
+# further data entered forces the first line of unfrozen line text to scroll
+# under the frozen data.  Lines scrolled off the screen are inserted into
+# memory immediately preceding the first frozen line." (from the HP 700/96
+# User's manual).  VT100/ANSI memory lock set is \E[>2h, reset is \E[>2l.
+#
+# Applications that use terminfo are supposed to behave as though xr is
+# always true.
+#
+linefeed_is_newline		OTNL	bool	NL	-		-	YB---	move down with \n
+# even_parity			OTEP	bool	EP	-		-	-B---	terminal requires even parity
+# odd_parity			OTOP	bool	OP	-		-	-B---	terminal requires odd parity
+# half_duplex			OTHD	bool	HD	-		-	-B---	terminal is half-duplex
+# lower_case_only		OTLC	bool	LC	-		-	-B---	terminal has only lower case
+# upper_case_only		OTUC	bool	UC	-		-	-B---	terminal has only upper case
+backspace_delay			OTdB	num	dB	-		-	YB-G-	padding required for ^H
+# form_feed_delay		OTdF	num	dF	-		-	-B-G-	padding required for ^L
+horizontal_tab_delay		OTdT	num	dT	-		-	YB-G-	padding required for ^I
+# 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
+# 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
+# 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.
+#
+# rind_only_at_top		OTxq	bool	xq	-		-	-----	reverse index only works from top line
+#
+# 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. 
+#
+# key_interrupt_char		OTki	str	ki	-		-	-----	string set by interrupt key (?)
+# key_kill_char			OTkk	str	kk	-		-	-----	string set by kill key (?)
+# key_suspend_char		OTkz	str	kz	-		-	-----	string set by suspend key (?)
+# initialization_messy		OTxc	bool	xc	-		-	-----	initialization leaves garbage on the screen (?)
+# ind_at_bottom_does_cr		OTxl	bool	xl	-		-	-----	index does a carriage return
+#
+# Nonstandard capabilities unique to Ross Ridge's `mytinfo' package.
+# SR clashes with a terminfo name; this ambiguity cannot be resolved by a type
+# check.
+#
+# scroll_left			OTsl1	str	Sl	-		-	-----	scroll screen leftward
+# scroll_right			OTsr1	str	Sr	-		-	-----	scroll screen rightward
+# parm_scroll_left		OTsl	str	SL	-		-	-----	scroll screen leftward #1 characters
+# parm_scroll_right		OTsr	str	SR	-		-	-----	scroll screen rightward #1 characters
+#
+# The mytinfo capabilities end here.
+#
+# XENIX extensions:
+#
+# Xenix defined its own set of forms-drawing capabilities:
+#
+# cap	IBM ASCII	description             ACS         	ASCII
+# ---	-----------	--------------------    -------------	------
+# G1	191 \277 M-?	single upper right   	ACS_URCORNER
+# G2	218 \332 M-Z	single upper left	ACS_ULCORNER
+# G3	192 \300 M-@	single lower left	ACS_LLCORNER
+# G4	217 \331 M-Y	single lower right	ACS_LRCORNER
+# G5	187 \273 M-;	double upper right
+# G6	201 \311 M-I	double upper left
+# G7	200 \310 M-H	double lower left
+# G8	188 \274 M-<	double lower right
+# GC	197 \305 M-E	single intersection	ACS_PLUS	_ _
+# GD	194 \302 M-B	single down-tick	ACS_TTEE	 |
+# GH	196 \304 M-D	single horizontal line	ACS_HLINE
+# GL	180 \264 M-4	single left tick	ACS_RTEE	-|
+# GR	195 \303 M-C	single right tick	ACS_LTEE	|-
+# GU	193 \301 M-A	single up tick		ACS_BTEE	_|_
+# GV	179 \263 M-3	single vertical line	ACS_VLINE
+# Gc	206 \316 M-N	double intersection
+# Gd	203 \313 M-K	double down tick
+# Gh	205 \315 M-M	double horizontal line
+# Gl	204 \204 M-L	double left tick
+# Gr	185 \271 M-9	double right tick
+# Gu	202 \312 M-J	double up tick
+# 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 
+# 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.
+# These terminfo names are invented.
+#
+acs_ulcorner			OTG2	str	G2	-		-	-----	single upper left
+acs_llcorner			OTG3	str	G3	-		-	-----	single lower left
+acs_urcorner			OTG1	str	G1	-		-	-----	single upper right
+acs_lrcorner			OTG4	str	G4	-		-	-----	single lower right
+acs_ltee			OTGR	str	GR	-		-	-----	tee pointing right
+acs_rtee			OTGL	str	GL	-		-	-----	tee pointing left
+acs_btee			OTGU	str	GU	-		-	-----	tee pointing up
+acs_ttee			OTGD	str	GD	-		-	-----	tee pointing down
+acs_hline			OTGH	str	GH	-		-	-----	single horizontal line
+acs_vline			OTGV	str	GV	-		-	-----	single vertical line
+acs_plus			OTGC	str	GC	-		-	-----	single intersection
+#
+#############################################################################
+#
+# 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.
+#
+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.
+#
+#############################################################################
+#
+# The following sets edit modes for GNU EMACS
+# Local Variables:
+# case-fold-search:nil
+# truncate-lines:t
+# End:
diff --git a/include/Caps.keys b/include/Caps.keys
new file mode 100644
index 0000000..6841ae5
--- /dev/null
+++ b/include/Caps.keys
@@ -0,0 +1,1354 @@
+##############################################################################
+# Copyright (c) 2001-2002,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"), #
+# 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
+#    and: Ilya Zakharevich
+#
+# $Id: Caps.keys,v 1.3 2006/05/27 15:33:04 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 
+# 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.
+#
+# This file has three major sections; a standard-capabilities table, two
+# extension-capability tables, and a section of aliases declarations.
+# The first two have the same format, as follows:
+#
+# FILE FORMAT
+#
+# Column 1: terminfo variable name
+# Column 2: terminfo capability name
+# 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
+# Column 7: Lead with `Y' if capability should be emitted in termcap
+#           translations, `-' otherwise
+# Column 8: capability description
+#
+# 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
+# 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
+#	C = used by the 4.4BSD curses library
+#	G = mentioned in the documentation for GNU termcap
+#	E = used by GNU Emacs
+#	K = remove this terminfo capability when translating to standard format
+# The important codes are C and E.  A cap with C or E should be preserved in
+# translation if possible.  The problem is that preserving all such caps may
+# lead to some termcap translations being too long.  The termcap maintainer
+# has a bit of a juggling act to do...potential problem cases are marked with
+# an asterisk (*).
+#
+# The aliases section has the following format:
+#
+# Column 1: either `capalias' or `infoalias'
+# Column 2: name to be aliased
+# Column 3: what name it should translate to.  The name IGNORE means it
+#           should be discarded with a warning message.
+# Column 4: name of the extension set (used for compiler warning messages)
+# Column 5: capability description (usually an associated terminfo variable)
+#
+# HANDLING TERMCAP AND TERMINFO EXTENSIONS
+#
+# There are basically five different ways to handle termcap and terminfo
+# extensions:
+#
+# 1. Don't list the capname here, or list it but comment it out (the latter
+# is preferable; someone might want to handle it in the future).  If you do
+# this, the capability will be treated as unknown and raise a warning from
+# the compiler.
+#
+# 2. Alias it.  This is appropriate if the capability has the same meaning
+# as an already-supported one.  The compiler will handle aliasing, emitting
+# an appropriate informational message whenever an alias fires.
+#
+# 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 the ncurses
+# library what to do with the terminfo data after it's 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
+# get a warning message about it).
+#
+# 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.
+#
+# 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
+# to terminfo with tic -I.  Some very old obsolete BSD caps like :kn: are
+# in this class.  Nothing will ever use them again.
+#
+# More usually, you want the compiler to try to deduce something from the
+# capability value that it can use to translate it into your output format.
+# You'll need to write custom code, probably in postprocess_termcap() or
+# postprocess_terminfo(), to handle the translation.
+#
+# 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 
+# trim those out of the set to be translated to termcap, or various users of
+# the termcap file will become irate.
+#
+# It might look tempting to leave those long init strings out of translations.
+# We can't do it (yet); 4.4BSD tput and tset use them.
+#
+# We retain the sgr capability in translation in spite of the fact that neither
+# 4.4BSD nor GNU Emacs uses it, because (a) some entry naming distinctions are
+# hard to understand without it, and (b) the entries in which it is long tend
+# to be older types that don't use up a lot of string space on function keys.
+# The tic(1) translation code will complain and elide it if it makes a critical
+# difference (there is special code in tic to recognize this situation).
+#
+# Yes, BSD tset(1) uses hpa.  We elide hpa/vpa anyway because the motion
+# optimizer in BSD curses didn't use them.  This omission seems to be the
+# single most effective one, it shortened the resolved length of all thirteen
+# problem entries in the 9.9.0 version of the terminfo master below critical.
+#
+# 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 
+# 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.
+#
+#############################################################################
+#
+# 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
+#%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.
+#%
+#%.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
+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)
+ceol_standout_glitch		xhp	bool	xs	-	-	YBCGE	standout not erased by overwriting (hp)
+eat_newline_glitch		xenl	bool	xn	-	-	YBCGE	newline ignored after 80 cols (concept)
+erase_overstrike		eo	bool	eo	-	-	YBCG-	can erase overstrikes with a blank
+generic_type			gn	bool	gn	-	-	YB-G-	generic line type
+hard_copy			hc	bool	hc	-	-	YBCG-	hardcopy terminal
+has_meta_key			km	bool	km	-	-	YB-GE	Has a meta key (i.e., sets 8th-bit)
+has_status_line			hs	bool	hs	-	-	YB-G-	has extra status line
+insert_null_glitch		in	bool	in	-	-	YBCGE	insert mode distinguishes nulls
+memory_above			da	bool	da	-	-	YBCG-	display may be retained above the screen
+memory_below			db	bool	db	-	-	YB-GE	display may be retained below the screen
+move_insert_mode		mir	bool	mi	-	-	YBCGE	safe to move while in insert mode
+move_standout_mode		msgr	bool	ms	-	-	YBCGE	safe to move while in standout mode
+over_strike			os	bool	os	-	-	YBCG-	terminal can overstrike
+status_line_esc_ok		eslok	bool	es	-	-	YB-G-	escape can be used on the status line
+dest_tabs_magic_smso		xt	bool	xt	-	-	YBCGE	tabs destructive, magic so char (t1061)
+tilde_glitch			hz	bool	hz	-	-	YB-GE	can't print ~'s (hazeltine)
+transparent_underline		ul	bool	ul	-	-	YBCGE	underline character overstrikes
+xon_xoff			xon	bool	xo	-	-	YB---	terminal uses xon/xoff handshaking
+needs_xon_xoff			nxon	bool	nx	-	-	-----	padding won't work, xon/xoff required
+prtr_silent			mc5i	bool	5i	-	-	-----	printer won't echo on screen
+hard_cursor			chts	bool	HC	-	-	-----	cursor is hard to see
+non_rev_rmcup			nrrmc	bool	NR	-	-	-----	smcup does not reverse rmcup
+no_pad_char			npc	bool	NP	-	-	-----	pad character does not exist
+non_dest_scroll_region		ndscr	bool	ND	-	-	-----	scrolling region is non-destructive
+can_change			ccc	bool	cc	-	-	-----	terminal can re-define existing colors
+back_color_erase		bce	bool	ut	-	-	-----	screen erased with background color
+hue_lightness_saturation	hls	bool	hl	-	-	-----	terminal uses only HLS color notation (Tektronix)
+col_addr_glitch			xhpa	bool	YA	-	-	-----	only positive motion for hpa/mhpa caps
+cr_cancels_micro_mode		crxm	bool	YB	-	-	-----	using cr turns off micro mode
+has_print_wheel			daisy	bool	YC	-	-	-----	printer needs operator to change character set
+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
+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
+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
+lines_of_memory			lm	num	lm	-	-	YB-G-	lines of memory if > line. 0 means varies
+magic_cookie_glitch		xmc	num	sg	-	-	YBCGE	number of blank characters left by smso or rmso
+padding_baud_rate		pb	num	pb	-	-	YB-GE	lowest baud rate where padding needed
+virtual_terminal		vt	num	vt	-	-	YB---	virtual terminal number (CB/unix)
+width_status_line		wsl	num	ws	-	-	YB-G-	number of columns in status line
+num_labels			nlab	num	Nl	-	-	-----	number of labels on screen
+label_height			lh	num	lh	-	-	-----	rows in each label
+label_width			lw	num	lw	-	-	-----	columns in each label
+max_attributes			ma	num	ma	-	-	YBC--	maximum combined attributes terminal can handle
+maximum_windows			wnum	num	MW	-	-	-----	maximum number of defineable windows
+# These came in with SVr4's color support
+max_colors			colors	num	Co	-	-	-----	maximum number of colors on screen
+max_pairs			pairs	num	pa	-	-	-----	maximum number of color-pairs on the screen
+no_color_video			ncv	num	NC	-	-	-----	video attributes that can't 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
+#%.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
+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_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
+output_res_line			orl	num	Yj	-	-	-----	vertical resolution in units per line
+output_res_horz_inch		orhi	num	Yk	-	-	-----	horizontal resolution in units per inch
+output_res_vert_inch		orvi	num	Yl	-	-	-----	vertical resolution in units per inch
+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
+buttons				btns	num	BT	-	-	-----	number of buttons on mouse
+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
+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*)
+change_scroll_region		csr	str	cs	-		-	YBCGE	change region to line #1 to line #2 (P)
+clear_all_tabs			tbc	str	ct	-		-	YB-G-	clear all tab stops (P)
+clear_screen			clear	str	cl	-		-	YBCGE	clear screen and home cursor (P*)
+clr_eol				el	str	ce	-		-	YBCGE	clear to end of line (P)
+clr_eos				ed	str	cd	-		-	YBCGE	clear to end of screen (P*)
+column_address			hpa	str	ch	-		-	-B-GE*	horizontal position #1, absolute (P)
+command_character		cmdch	str	CC	-		-	YB-G-	terminal settable cmd character in prototype !?
+cursor_address			cup	str	cm	-		-	YBCGE	move to row #1 columns #2
+cursor_down			cud1	str	do	-		-	YBCGE	down one line
+cursor_home			home	str	ho	-		-	YBCGE	home cursor (if no cup)
+cursor_invisible		civis	str	vi	-		-	YB-G-	make cursor invisible
+cursor_left			cub1	str	le	-		-	YBCGE	move left one space
+cursor_mem_address		mrcup	str	CM	-		-	YB-G-	memory relative cursor addressing, move to row #1 columns #2
+cursor_normal			cnorm	str	ve	-		-	YBCGE	make cursor appear normal (undo civis/cvvis)
+cursor_right			cuf1	str	nd	-		-	YBCGE	non-destructive space (move right one space)
+cursor_to_ll			ll	str	ll	-		-	YBCGE	last line, first column (if no cup)
+cursor_up			cuu1	str	up	-		-	YBCGE	up one line
+cursor_visible			cvvis	str	vs	-		-	YBCGE	make cursor very visible
+delete_character		dch1	str	dc	-		-	YBCGE	delete character (P*)
+delete_line			dl1	str	dl	-		-	YBCGE	delete line (P*)
+dis_status_line			dsl	str	ds	-		-	YB-G-	disable status line
+down_half_line			hd	str	hd	-		-	YB-G-	half a line down
+enter_alt_charset_mode		smacs	str	as	-		-	YB-G-	start alternate character set (P)
+enter_blink_mode		blink	str	mb	-		-	YB-G-	turn on blinking
+enter_bold_mode			bold	str	md	-		-	YB-G-	turn on bold (extra bright) mode
+enter_ca_mode			smcup	str	ti	-		-	YBCGE	string to start programs using cup
+enter_delete_mode		smdc	str	dm	-		-	YBCGE	enter delete mode
+enter_dim_mode			dim	str	mh	-		-	YB-G-	turn on half-bright mode
+enter_insert_mode		smir	str	im	-		-	YBCGE	enter insert mode
+enter_secure_mode		invis	str	mk	-		-	-B-G-*	turn on blank mode (characters invisible)
+enter_protected_mode		prot	str	mp	-		-	-B-G-*	turn on protected mode
+enter_reverse_mode		rev	str	mr	-		-	YB-G-	turn on reverse video mode
+enter_standout_mode		smso	str	so	-		-	YBCGE	begin standout mode
+enter_underline_mode		smul	str	us	-		-	YBCGE	begin underline mode
+erase_chars			ech	str	ec	-		-	YB-G-	erase #1 characters (P)
+exit_alt_charset_mode		rmacs	str	ae	-		-	YB-G-	end alternate character set (P)
+exit_attribute_mode		sgr0	str	me	-		-	YB-GE	turn off all attributes
+exit_ca_mode			rmcup	str	te	-		-	YBCGE	strings to end programs using cup
+exit_delete_mode		rmdc	str	ed	-		-	YBCGE	end delete mode
+exit_insert_mode		rmir	str	ei	-		-	YBCGE	exit insert mode
+exit_standout_mode		rmso	str	se	-		-	YBCGE	exit standout mode
+exit_underline_mode		rmul	str	ue	-		-	YBCGE	exit underline mode
+flash_screen			flash	str	vb	-		-	YBCGE	visible bell (may not move cursor)
+form_feed			ff	str	ff	-		-	YB-G-	hardcopy terminal page eject (P*)
+from_status_line		fsl	str	fs	-		-	YB-G-	return from status line
+init_1string			is1	str	i1	-		-	YB-G-	initialization string
+init_2string			is2	str	is	-		-	YB-G-	initialization string
+init_3string			is3	str	i3	-		-	YB-G-	initialization string
+init_file			if	str	if	-		-	YB-G-	name of initialization file
+insert_character		ich1	str	ic	-		-	YBCGE	insert character (P)
+insert_line			il1	str	al	-		-	YBCGE	insert line (P*)
+insert_padding			ip	str	ip	-		-	YBCGE	insert padding after inserted character
+key_backspace			kbs	str	kb	KEY_BACKSPACE	0407	YB-G-	backspace key
+key_catab			ktbc	str	ka	KEY_CATAB	0526	-B-G-*	clear-all-tabs key
+key_clear			kclr	str	kC	KEY_CLEAR	0515	-B-G-*	clear-screen or erase key
+key_ctab			kctab	str	kt	KEY_CTAB	0525	-B-G-*	clear-tab key
+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
+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
+key_f0				kf0	str	k0	KEY_F(0)	0410	YBCGE	F0 function key
+key_f1				kf1	str	k1	KEY_F(1)	-	YBCGE	F1 function key
+key_f10				kf10	str	k;	KEY_F(10)	-	----E	F10 function key
+key_f2				kf2	str	k2	KEY_F(2)	-	YBCGE	F2 function key
+key_f3				kf3	str	k3	KEY_F(3)	-	YBCGE	F3 function key
+key_f4				kf4	str	k4	KEY_F(4)	-	YBCGE	F4 function key
+key_f5				kf5	str	k5	KEY_F(5)	-	YBCGE	F5 function key
+key_f6				kf6	str	k6	KEY_F(6)	-	YBCGE	F6 function key
+key_f7				kf7	str	k7	KEY_F(7)	-	YBCGE	F7 function key
+key_f8				kf8	str	k8	KEY_F(8)	-	YBCGE	F8 function key
+key_f9				kf9	str	k9	KEY_F(9)	-	YBCGE	F9 function key
+key_home			khome	str	kh	KEY_HOME	0406	YBCGE	home key
+key_ic				kich1	str	kI	KEY_IC		0513	YB-GE	insert-character key
+key_il				kil1	str	kA	KEY_IL		0511	-B-G-*	insert-line key
+key_left			kcub1	str	kl	KEY_LEFT	0404	YBCGE	left-arrow key
+key_ll				kll	str	kH	KEY_LL		0533	YB-G-	lower-left key (home down)
+key_npage			knp	str	kN	KEY_NPAGE	0522	YB-GE	next-page key
+key_ppage			kpp	str	kP	KEY_PPAGE	0523	YB-GE	previous-page key
+key_right			kcuf1	str	kr	KEY_RIGHT	0405	YBCGE	right-arrow key
+key_sf				kind	str	kF	KEY_SF		0520	-B-G-*	scroll-forward key
+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
+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
+lab_f2				lf2	str	l2	-		-	-B-G-*	label on function key f2 if not f2
+lab_f3				lf3	str	l3	-		-	-B-G-*	label on function key f3 if not f3
+lab_f4				lf4	str	l4	-		-	-B-G-*	label on function key f4 if not f4
+lab_f5				lf5	str	l5	-		-	-B-G-*	label on function key f5 if not f5
+lab_f6				lf6	str	l6	-		-	-B-G-*	label on function key f6 if not f6
+lab_f7				lf7	str	l7	-		-	-B-G-*	label on function key f7 if not f7
+lab_f8				lf8	str	l8	-		-	-B-G-*	label on function key f8 if not f8
+lab_f9				lf9	str	l9	-		-	-B-G-*	label on function key f9 if not f9
+meta_off			rmm	str	mo	-		-	YB-G-*	turn off meta mode
+meta_on				smm	str	mm	-		-	YB-G-*	turn on meta mode (8th-bit on)
+newline				nel	str	nw	-		-	YB-G-*	newline (behave like cr followed by lf)
+pad_char			pad	str	pc	-		-	YBCGE	padding char (instead of null)
+parm_dch			dch	str	DC	-		-	YB-GE	delete #1 characters (P*)
+parm_delete_line		dl	str	DL	-		-	YBCGE	delete #1 lines (P*)
+parm_down_cursor		cud	str	DO	-		-	YBCGE	down #1 lines (P*)
+parm_ich			ich	str	IC	-		-	YB-GE	insert #1 characters (P*)
+parm_index			indn	str	SF	-		-	YBCG-	scroll forward #1 lines (P)
+parm_insert_line		il	str	AL	-		-	YBCGE	insert #1 lines (P*)
+parm_left_cursor		cub	str	LE	-		-	YBCGE	move #1 characters to the left (P)
+parm_right_cursor		cuf	str	RI	-		-	YBCGE	move #1 characters to the right (P*)
+parm_rindex			rin	str	SR	-		-	YBCG-	scroll back #1 lines (P)
+parm_up_cursor			cuu	str	UP	-		-	YBCGE	up #1 lines (P*)
+pkey_key			pfkey	str	pk	-		-	-B---	program function key #1 to type string #2
+pkey_local			pfloc	str	pl	-		-	-B---	program function key #1 to execute string #2
+pkey_xmit			pfx	str	px	-		-	-B---	program function key #1 to transmit string #2
+print_screen			mc0	str	ps	-		-	-B-G-*	print contents of screen
+prtr_off			mc4	str	pf	-		-	-B-G-*	turn off printer
+prtr_on				mc5	str	po	-		-	-B-G-*	turn on printer
+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
+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
+row_address			vpa	str	cv	-		-	-B-GE*	vertical position #1 absolute (P)
+save_cursor			sc	str	sc	-		-	YBCG-	save current cursor position (P)
+scroll_forward			ind	str	sf	-		-	YBCGE	scroll text up (P)
+scroll_reverse			ri	str	sr	-		-	YBCGE	scroll text down (P)
+set_attributes			sgr	str	sa	-		-	YB-G-	define video attributes #1-#9 (PG9)
+set_tab				hts	str	st	-		-	YB-G-	set a tab in every row, current columns
+set_window			wind	str	wi	-		-	-B-GE	current window is lines #1-#2 cols #3-#4
+tab				ht	str	ta	-		-	YBCGE	tab to next 8-space hardware tab stop
+to_status_line			tsl	str	ts	-		-	YB-G-	move to status line, column #1
+underline_char			uc	str	uc	-		-	YBCG-	underline char and move past it
+up_half_line			hu	str	hu	-		-	YB-G-	half a line up
+init_prog			iprog	str	iP	-		-	-B---	path name of program for initialization
+key_a1				ka1	str	K1	KEY_A1		0534	YB-GE	upper left of keypad
+key_a3				ka3	str	K3	KEY_A3		0535	YB-GE	upper right of keypad
+key_b2				kb2	str	K2	KEY_B2		0536	YB-GE	center of keypad
+key_c1				kc1	str	K4	KEY_C1		0537	YB-GE	lower left of keypad
+key_c3				kc3	str	K5	KEY_C3		0540	YB-GE	lower right of keypad
+prtr_non			mc5p	str	pO	-		-	-B-G-*	turn on printer for #1 bytes
+#
+# SVr1 capabilities stop here.	IBM's version of terminfo is the same as
+# SVr4 up to this point, but has a different set afterwards.
+#
+char_padding			rmp	str	rP	-		-	-----	like ip but when in insert mode
+acs_chars			acsc	str	ac	-		-	-----	graphics charset pairs, based on vt100
+plab_norm			pln	str	pn	-		-	-----	program label #1 to show string #2
+key_btab			kcbt	str	kB	KEY_BTAB	0541	-----	back-tab key
+enter_xon_mode			smxon	str	SX	-		-	-----	turn on xon/xoff handshaking
+exit_xon_mode			rmxon	str	RX	-		-	-----	turn off xon/xoff handshaking
+enter_am_mode			smam	str	SA	-		-	-----	turn on automatic margins
+exit_am_mode			rmam	str	RA	-		-	-----	turn off automatic margins
+xon_character			xonc	str	XN	-		-	-----	XON character
+xoff_character			xoffc	str	XF	-		-	-----	XOFF character
+ena_acs				enacs	str	eA	-		-	-----	enable alternate char set
+label_on			smln	str	LO	-		-	-----	turn on soft labels
+label_off			rmln	str	LF	-		-	-----	turn off soft labels
+key_beg				kbeg	str	@1	KEY_BEG		0542	-----	begin key
+key_cancel			kcan	str	@2	KEY_CANCEL	0543	-----	cancel key
+key_close			kclo	str	@3	KEY_CLOSE	0544	-----	close key
+key_command			kcmd	str	@4	KEY_COMMAND	0545	-----	command key
+key_copy			kcpy	str	@5	KEY_COPY	0546	-----	copy key
+key_create			kcrt	str	@6	KEY_CREATE	0547	-----	create key
+key_end				kend	str	@7	KEY_END		0550	-----	end key
+key_enter			kent	str	@8	KEY_ENTER	0527	-----	enter/send key
+key_exit			kext	str	@9	KEY_EXIT	0551	-----	exit key
+key_find			kfnd	str	@0	KEY_FIND	0552	-----	find key
+key_help			khlp	str	%1	KEY_HELP	0553	-----	help key
+key_mark			kmrk	str	%2	KEY_MARK	0554	-----	mark key
+key_message			kmsg	str	%3	KEY_MESSAGE	0555	-----	message key
+key_move			kmov	str	%4	KEY_MOVE	0556	-----	move key
+key_next			knxt	str	%5	KEY_NEXT	0557	-----	next key
+key_open			kopn	str	%6	KEY_OPEN	0560	-----	open key
+key_options			kopt	str	%7	KEY_OPTIONS	0561	-----	options key
+key_previous			kprv	str	%8	KEY_PREVIOUS	0562	-----	previous key
+key_print			kprt	str	%9	KEY_PRINT	0532	-----	print key
+key_redo			krdo	str	%0	KEY_REDO	0563	-----	redo key
+key_reference			kref	str	&1	KEY_REFERENCE	0564	-----	reference key
+key_refresh			krfr	str	&2	KEY_REFRESH	0565	-----	refresh key
+key_replace			krpl	str	&3	KEY_REPLACE	0566	-----	replace key
+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
+key_suspend			kspd	str	&7	KEY_SUSPEND	0627	-----	suspend key
+key_undo			kund	str	&8	KEY_UNDO	0630	-----	undo key
+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
+key_scopy			kCPY	str	*2	KEY_SCOPY	0575	-----	shifted copy key
+key_screate			kCRT	str	*3	KEY_SCREATE	0576	-----	shifted create key
+key_sdc				kDC	str	*4	KEY_SDC		0577	-----	shifted delete-character key
+key_sdl				kDL	str	*5	KEY_SDL		0600	-----	shifted delete-line key
+key_select			kslt	str	*6	KEY_SELECT	0601	-----	select key
+key_send			kEND	str	*7	KEY_SEND	0602	-----	shifted end key
+key_seol			kEOL	str	*8	KEY_SEOL	0603	-----	shifted clear-to-end-of-line key
+key_sexit			kEXT	str	*9	KEY_SEXIT	0604	-----	shifted exit key
+key_sfind			kFND	str	*0	KEY_SFIND	0605	-----	shifted find key
+key_shelp			kHLP	str	#1	KEY_SHELP	0606	-----	shifted help key
+key_shome			kHOM	str	#2	KEY_SHOME	0607	-----	shifted home key
+key_sic				kIC	str	#3	KEY_SIC		0610	-----	shifted insert-character key
+key_sleft			kLFT	str	#4	KEY_SLEFT	0611	-----	shifted left-arrow key
+key_smessage			kMSG	str	%a	KEY_SMESSAGE	0612	-----	shifted message key
+key_smove			kMOV	str	%b	KEY_SMOVE	0613	-----	shifted move key
+key_snext			kNXT	str	%c	KEY_SNEXT	0614	-----	shifted next key
+key_soptions			kOPT	str	%d	KEY_SOPTIONS	0615	-----	shifted options key
+key_sprevious			kPRV	str	%e	KEY_SPREVIOUS	0616	-----	shifted previous key
+key_sprint			kPRT	str	%f	KEY_SPRINT	0617	-----	shifted print key
+key_sredo			kRDO	str	%g	KEY_SREDO	0620	-----	shifted redo key
+key_sreplace			kRPL	str	%h	KEY_SREPLACE	0621	-----	shifted replace key
+key_sright			kRIT	str	%i	KEY_SRIGHT	0622	-----	shifted right-arrow key
+key_srsume			kRES	str	%j	KEY_SRSUME	0623	-----	shifted resume key
+key_ssave			kSAV	str	!1	KEY_SSAVE	0624	-----	shifted save key
+key_ssuspend			kSPD	str	!2	KEY_SSUSPEND	0625	-----	shifted suspend key
+key_sundo			kUND	str	!3	KEY_SUNDO	0626	-----	shifted undo key
+req_for_input			rfi	str	RF	-		-	-----	send next input char (for ptys)
+key_f11				kf11	str	F1	KEY_F(11)	-	----E	F11 function key
+key_f12				kf12	str	F2	KEY_F(12)	-	----E	F12 function key
+key_f13				kf13	str	F3	KEY_F(13)	-	----E	F13 function key
+key_f14				kf14	str	F4	KEY_F(14)	-	----E	F14 function key
+key_f15				kf15	str	F5	KEY_F(15)	-	----E	F15 function key
+key_f16				kf16	str	F6	KEY_F(16)	-	----E	F16 function key
+key_f17				kf17	str	F7	KEY_F(17)	-	----E	F17 function key
+key_f18				kf18	str	F8	KEY_F(18)	-	----E	F18 function key
+key_f19				kf19	str	F9	KEY_F(19)	-	----E	F19 function key
+key_f20				kf20	str	FA	KEY_F(20)	-	----E	F20 function key
+key_f21				kf21	str	FB	KEY_F(21)	-	----E	F21 function key
+key_f22				kf22	str	FC	KEY_F(22)	-	----E	F22 function key
+key_f23				kf23	str	FD	KEY_F(23)	-	----E	F23 function key
+key_f24				kf24	str	FE	KEY_F(24)	-	----E	F24 function key
+key_f25				kf25	str	FF	KEY_F(25)	-	----E	F25 function key
+key_f26				kf26	str	FG	KEY_F(26)	-	----E	F26 function key
+key_f27				kf27	str	FH	KEY_F(27)	-	----E	F27 function key
+key_f28				kf28	str	FI	KEY_F(28)	-	----E	F28 function key
+key_f29				kf29	str	FJ	KEY_F(29)	-	----E	F29 function key
+key_f30				kf30	str	FK	KEY_F(30)	-	----E	F30 function key
+key_f31				kf31	str	FL	KEY_F(31)	-	----E	F31 function key
+key_f32				kf32	str	FM	KEY_F(32)	-	----E	F32 function key
+key_f33				kf33	str	FN	KEY_F(33)	-	----E	F33 function key
+key_f34				kf34	str	FO	KEY_F(34)	-	----E	F34 function key
+key_f35				kf35	str	FP	KEY_F(35)	-	----E	F35 function key
+key_f36				kf36	str	FQ	KEY_F(36)	-	----E	F36 function key
+key_f37				kf37	str	FR	KEY_F(37)	-	----E	F37 function key
+key_f38				kf38	str	FS	KEY_F(38)	-	----E	F38 function key
+key_f39				kf39	str	FT	KEY_F(39)	-	----E	F39 function key
+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
+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
+key_f46				kf46	str	Fa	KEY_F(46)	-	----E	F46 function key
+key_f47				kf47	str	Fb	KEY_F(47)	-	----E	F47 function key
+key_f48				kf48	str	Fc	KEY_F(48)	-	----E	F48 function key
+key_f49				kf49	str	Fd	KEY_F(49)	-	----E	F49 function key
+key_f50				kf50	str	Fe	KEY_F(50)	-	----E	F50 function key
+key_f51				kf51	str	Ff	KEY_F(51)	-	----E	F51 function key
+key_f52				kf52	str	Fg	KEY_F(52)	-	----E	F52 function key
+key_f53				kf53	str	Fh	KEY_F(53)	-	----E	F53 function key
+key_f54				kf54	str	Fi	KEY_F(54)	-	----E	F54 function key
+key_f55				kf55	str	Fj	KEY_F(55)	-	----E	F55 function key
+key_f56				kf56	str	Fk	KEY_F(56)	-	----E	F56 function key
+key_f57				kf57	str	Fl	KEY_F(57)	-	----E	F57 function key
+key_f58				kf58	str	Fm	KEY_F(58)	-	----E	F58 function key
+key_f59				kf59	str	Fn	KEY_F(59)	-	----E	F59 function key
+key_f60				kf60	str	Fo	KEY_F(60)	-	----E	F60 function key
+key_f61				kf61	str	Fp	KEY_F(61)	-	----E	F61 function key
+key_f62				kf62	str	Fq	KEY_F(62)	-	----E	F62 function key
+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_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
+display_clock			dclk	str	DK	-		-	-----	display clock
+remove_clock			rmclk	str	RC	-		-	-----	remove clock
+create_window			cwin	str	CW	-		-	-----	define a window #1 from #2,#3 to #4,#5
+goto_window			wingo	str	WG	-		-	-----	go to window #1
+hangup				hup	str	HU	-		-	-----	hang-up phone
+dial_phone			dial	str	DI	-		-	-----	dial number #1
+quick_dial			qdial	str	QD	-		-	-----	dial number #1 without checking
+tone				tone	str	TO	-		-	-----	select touch tone dialing
+pulse				pulse	str	PU	-		-	-----	select pulse dialing
+flash_hook			hook	str	fh	-		-	-----	flash switch hook
+fixed_pause			pause	str	PA	-		-	-----	pause for 2-3 seconds
+wait_tone			wait	str	WA	-		-	-----	wait for dial-tone
+user0				u0	str	u0	-		-	-----	User string #0
+user1				u1	str	u1	-		-	-----	User string #1
+user2				u2	str	u2	-		-	-----	User string #2
+user3				u3	str	u3	-		-	-----	User string #3
+user4				u4	str	u4	-		-	-----	User string #4
+user5				u5	str	u5	-		-	-----	User string #5
+user6				u6	str	u6	-		-	-----	User string #6
+user7				u7	str	u7	-		-	-----	User string #7
+user8				u8	str	u8	-		-	-----	User string #8
+user9				u9	str	u9	-		-	-----	User string #9
+#
+# NCurses extensions for keys accessible on most PC consoles
+#
+key_sup				kUP	str	!5	KEY_SUP		+	-----	shifted up-arrow key
+key_sdown			kDOWN	str	!6	KEY_SDOWN	+	-----	shifted down-arrow key
+key_sbackspace			kBS	str	!7	KEY_SBACKSPACE	+	-----	shifted backspace key
+key_c_delete			kcdelete str	!8	KEY_C_DELETE	+	-----	control- delete-character key
+key_c_end			kcend	str	!9	KEY_C_END	+	-----	control- end key
+key_c_home			kchom	str	!0	KEY_C_HOME	+	-----	control- home key
+key_c_insert			kcinsert str	!_	KEY_C_INSERT	+	-----	control- insert-character key
+key_c_left			kclft	str	%k	KEY_C_LEFT	+	-----	control- left-arrow key
+key_c_next			kcnxt	str	%l	KEY_C_NEXT	+	-----	control- next key
+key_c_previous			kcprv	str	%m	KEY_C_PREVIOUS	+	-----	control- previous key
+key_c_print			kcprt	str	%n	KEY_C_PRINT	+	-----	control- print key
+key_c_right			kcrit	str	%o	KEY_C_RIGHT	+	-----	control- right-arrow key
+key_c_backspace			kcbs	str	%p	KEY_C_BACKSPACE	+	-----	control- backspace key
+key_c_up			kcup	str	%q	KEY_C_UP	+	-----	control- up-arrow key
+key_c_down			kcdown	str	%r	KEY_C_DOWN	+	-----	control- down-arrow key
+key_a_delete			kadelete str	%s	KEY_A_DELETE	+	-----	alt- delete-character key
+key_a_end			kaend	str	%t	KEY_A_END	+	-----	alt- end key
+key_a_home			kahom	str	%u	KEY_A_HOME	+	-----	alt- home key
+key_a_insert			kainsert str	%v	KEY_A_INSERT	+	-----	alt- insert-character key
+key_a_left			kalft	str	%w	KEY_A_LEFT	+	-----	alt- left-arrow key
+key_a_next			kanxt	str	%x	KEY_A_NEXT	+	-----	alt- next key
+key_a_previous			kaprv	str	%y	KEY_A_PREVIOUS	+	-----	alt- previous key
+key_a_print			kaprt	str	%z	KEY_A_PRINT	+	-----	alt- print key
+key_a_right			karit	str	%!	KEY_A_RIGHT	+	-----	alt- right-arrow key
+key_a_backspace			kabs	str	%@	KEY_A_BACKSPACE	+	-----	alt- backspace key
+key_a_up			kaup	str	%#	KEY_A_UP	+	-----	alt- up-arrow key
+key_a_down			kadown	str	%$	KEY_A_DOWN	+	-----	alt- down-arrow key
+key_a_a				kaa	str	$a	KEY_A_A		+	-----	alt- a key
+key_a_b				kab	str	$b	KEY_A_B		+	-----	alt- b key
+key_a_c				kac	str	$c	KEY_A_C		+	-----	alt- c key
+key_a_d				kad	str	$d	KEY_A_D		+	-----	alt- d key
+key_a_e				kae	str	$e	KEY_A_E		+	-----	alt- e key
+key_a_f				kaf	str	$f	KEY_A_F		+	-----	alt- f key
+key_a_g				kag	str	$g	KEY_A_G		+	-----	alt- g key
+key_a_h				kah	str	$h	KEY_A_H		+	-----	alt- h key
+key_a_i				kai	str	$i	KEY_A_I		+	-----	alt- i key
+key_a_j				kaj	str	$j	KEY_A_J		+	-----	alt- j key
+key_a_k				kak	str	$k	KEY_A_K		+	-----	alt- k key
+key_a_l				kal	str	$l	KEY_A_L		+	-----	alt- l key
+key_a_m				kam	str	$m	KEY_A_M		+	-----	alt- m key
+key_a_n				kan	str	$n	KEY_A_N		+	-----	alt- n key
+key_a_o				kao	str	$o	KEY_A_O		+	-----	alt- o key
+key_a_p				kap	str	$p	KEY_A_P		+	-----	alt- p key
+key_a_q				kaq	str	$q	KEY_A_Q		+	-----	alt- q key
+key_a_r				kar	str	$r	KEY_A_R		+	-----	alt- r key
+key_a_s				kas	str	$s	KEY_A_S		+	-----	alt- s key
+key_a_t				kat	str	$t	KEY_A_T		+	-----	alt- t key
+key_a_u				kau	str	$u	KEY_A_U		+	-----	alt- u key
+key_a_v				kav	str	$v	KEY_A_V		+	-----	alt- v key
+key_a_w				kaw	str	$w	KEY_A_W		+	-----	alt- w key
+key_a_x				kax	str	$x	KEY_A_X		+	-----	alt- x key
+key_a_y				kay	str	$y	KEY_A_Y		+	-----	alt- y key
+key_a_z				kaz	str	$z	KEY_A_Z		+	-----	alt- z key
+key_a_0				ka_0	str	$0	KEY_A_0		+	-----	alt- 0 key
+key_a_1				ka_1	str	$1	KEY_A_1		+	-----	alt- 1 key
+key_a_2				ka_2	str	$2	KEY_A_2		+	-----	alt- 2 key
+key_a_3				ka_3	str	$3	KEY_A_3		+	-----	alt- 3 key
+key_a_4				ka_4	str	$4	KEY_A_4		+	-----	alt- 4 key
+key_a_5				ka_5	str	$5	KEY_A_5		+	-----	alt- 5 key
+key_a_6				ka_6	str	$6	KEY_A_6		+	-----	alt- 6 key
+key_a_7				ka_7	str	$7	KEY_A_7		+	-----	alt- 7 key
+key_a_8				ka_8	str	$8	KEY_A_8		+	-----	alt- 8 key
+key_a_9				ka_9	str	$9	KEY_A_9		+	-----	alt- 9 key
+key_a_backtick			ka_bt	str	$`	KEY_A_BACKTICK	+	-----	alt- ` key
+key_a_under			ka_und	str	$_	KEY_A_UNDER	+	-----	alt- _ key
+key_a_equals			ka_eq	str	$=	KEY_A_EQUALS	+	-----	alt- = key
+key_a_bar			ka_bsl	str	$|	KEY_A_BAR	+	-----	alt- | key
+key_a_lbracker			ka_lbr	str	$[	KEY_A_LBRACKER	+	-----	alt- [ key
+key_a_rbracker			ka_rbr	str	$]	KEY_A_RBRACKER	+	-----	alt- ] key
+key_a_semi			ka_semi str	$;	KEY_A_SEMI	+	-----	alt- ; key
+key_a_tick			ka_tick str	$'	KEY_A_TICK	+	-----	alt- ' key
+key_a_comma			ka_com	str	$,	KEY_A_COMMA	+	-----	alt- , key
+key_a_dot			ka_dot	str	$.	KEY_A_DOT	+	-----	alt- . key
+key_a_question			ka_sla	str	$?	KEY_A_QUESTION	+	-----	alt- ? key
+key_a_divide			ka_div	str	$/	KEY_A_DIVIDE	+	-----	alt- keypad / key
+key_a_multiply			ka_mul	str	$*	KEY_A_MULTIPLY	+	-----	alt- keypad * key
+key_a_add			ka_add	str	$+	KEY_A_ADD	+	-----	alt- keypad + key
+key_a_subtract			ka_sub	str	$-	KEY_A_SUBTRACT	+	-----	alt- keypad - key
+key_a_kenter			ka_kent str	$<	KEY_A_KENTER	+	-----	alt- keypad enter key
+key_a_enter			ka_ent	str	$>	KEY_A_ENTER	+	-----	alt- enter key
+key_c_at			kcat	str	%%	KEY_C_AT	+	-----	control- @ key
+key_c_divide			kcdiv	str	%/	KEY_C_DIVIDE	+	-----	control- keypad / key
+key_c_multiply			kcmul	str	%*	KEY_C_MULTIPLY	+	-----	control- keypad * key
+key_c_add			kcadd	str	%+	KEY_C_ADD	+	-----	control- keypad + key
+key_c_subtract			kcsub	str	%-	KEY_C_SUBTRACT	+	-----	control- keypad - key
+#
+# SVr4 added these capabilities to support color
+#
+orig_pair			op	str	op	-		-	-----	Set default pair to its original value
+orig_colors			oc	str	oc	-		-	-----	Set all color pairs to the original ones
+initialize_color		initc	str	Ic	-		-	-----	initialize color #1 to (#2,#3,#4)
+initialize_pair			initp	str	Ip	-		-	-----	Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7)
+set_color_pair			scp	str	sp	-		-	-----	Set current color pair to #1
+set_foreground			setf	str	Sf	-		-	-----	Set foreground color #1
+set_background			setb	str	Sb	-		-	-----	Set background color #1
+#
+# SVr4 added these capabilities to support printers
+#
+change_char_pitch		cpi	str	ZA	-		-	-----	Change number of characters per inch to #1
+change_line_pitch		lpi	str	ZB	-		-	-----	Change number of lines per inch to #1
+change_res_horz			chr	str	ZC	-		-	-----	Change horizontal resolution to #1
+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
+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
+enter_micro_mode		smicm	str	ZJ	-		-	-----	Start micro-motion mode
+enter_near_letter_quality	snlq	str	ZK	-		-	-----	Enter NLQ mode
+enter_normal_quality		snrmq	str	ZL	-		-	-----	Enter normal-quality mode
+enter_shadow_mode		sshm	str	ZM	-		-	-----	Enter shadow-print mode
+enter_subscript_mode		ssubm	str	ZN	-		-	-----	Enter subscript mode
+enter_superscript_mode		ssupm	str	ZO	-		-	-----	Enter superscript mode
+enter_upward_mode		sum	str	ZP	-		-	-----	Start upward carriage motion
+exit_doublewide_mode		rwidm	str	ZQ	-		-	-----	End double-wide mode
+exit_italics_mode		ritm	str	ZR	-		-	-----	End italic mode
+exit_leftward_mode		rlm	str	ZS	-		-	-----	End left-motion mode
+exit_micro_mode			rmicm	str	ZT	-		-	-----	End micro-motion mode
+exit_shadow_mode		rshm	str	ZU	-		-	-----	End shadow-print mode
+exit_subscript_mode		rsubm	str	ZV	-		-	-----	End subscript mode
+exit_superscript_mode		rsupm	str	ZW	-		-	-----	End superscript mode
+exit_upward_mode		rum	str	ZX	-		-	-----	End reverse character motion
+micro_column_address		mhpa	str	ZY	-		-	-----	Like column_address in micro mode
+micro_down			mcud1	str	ZZ	-		-	-----	Like cursor_down in micro mode
+micro_left			mcub1	str	Za	-		-	-----	Like cursor_left in micro mode
+micro_right			mcuf1	str	Zb	-		-	-----	Like cursor_right in micro mode
+micro_row_address		mvpa	str	Zc	-		-	-----	Like row_address #1 in micro mode
+micro_up			mcuu1	str	Zd	-		-	-----	Like cursor_up in micro mode
+order_of_pins			porder	str	Ze	-		-	-----	Match software bits to print-head pins
+parm_down_micro			mcud	str	Zf	-		-	-----	Like parm_down_cursor in micro mode
+parm_left_micro			mcub	str	Zg	-		-	-----	Like parm_left_cursor in micro mode
+parm_right_micro		mcuf	str	Zh	-		-	-----	Like parm_right_cursor in micro mode
+parm_up_micro			mcuu	str	Zi	-		-	-----	Like parm_up_cursor in micro mode
+select_char_set			scs	str	Zj	-		-	-----	Select character set, #1
+set_bottom_margin		smgb	str	Zk	-		-	-----	Set bottom margin at current line
+set_bottom_margin_parm		smgbp	str	Zl	-		-	-----	Set bottom margin at line #1 or (if smgtp is not given) #2 lines from bottom
+set_left_margin_parm		smglp	str	Zm	-		-	-----	Set left (right) margin at column #1
+set_right_margin_parm		smgrp	str	Zn	-		-	-----	Set right margin at column #1
+set_top_margin			smgt	str	Zo	-		-	-----	Set top margin at current line
+set_top_margin_parm		smgtp	str	Zp	-		-	-----	Set top (bottom) margin at row #1
+start_bit_image			sbim	str	Zq	-		-	-----	Start printing bit image graphics
+start_char_set_def		scsd	str	Zr	-		-	-----	Start character set definition #1, with #2 characters in the set
+stop_bit_image			rbim	str	Zs	-		-	-----	Stop printing bit image graphics
+stop_char_set_def		rcsd	str	Zt	-		-	-----	End definition of character set #1
+subscript_characters		subcs	str	Zu	-		-	-----	List of subscriptable characters
+superscript_characters		supcs	str	Zv	-		-	-----	List of superscriptable characters
+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
+#%
+#%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
+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
+req_mouse_pos			reqmp	str	RQ	-		-	-----	Request mouse position
+get_mouse			getm	str	Gm	-		-	-----	Curses should get button events, parameter #1 not documented.
+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
+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
+set2_des_seq			s2ds	str	s2	-		-	-----	Shift to codeset 2
+set3_des_seq			s3ds	str	s3	-		-	-----	Shift to codeset 3
+set_lr_margin			smglr	str	ML	-		-	-----	Set both left and right margins to #1, #2.  (ML is not in BSD termcap).
+set_tb_margin			smgtb	str	MT	-		-	-----	Sets both top and bottom margins to #1, #2
+bit_image_repeat		birep	str	Xy	-		-	-----	Repeat bit image cell #1 #2 times
+bit_image_newline		binel	str	Zz	-		-	-----	Move to next row of the bit image
+bit_image_carriage_return	bicr	str	Yv	-		-	-----	Move to beginning of same row
+color_names			colornm	str	Yw	-		-	-----	Give name for color #1
+define_bit_image_region		defbi	str	Yx	-		-	-----	Define rectangualar bit image region
+end_bit_image_region		endbi	str	Yy	-		-	-----	End a bit-image region
+set_color_band		setcolor	str	Yz	-		-	-----	Change to ribbon color #1
+set_page_length			slines	str	YZ	-		-	-----	Set page length to #1 lines
+#
+# SVr4 added these capabilities for direct PC-clone support
+#
+display_pc_char			dispc	str	S1	-		-	-----	Display PC character #1
+enter_pc_charset_mode		smpch	str	S2	-		-	-----	Enter PC character display mode
+exit_pc_charset_mode		rmpch	str	S3	-		-	-----	Exit PC character display mode
+enter_scancode_mode		smsc	str	S4	-		-	-----	Enter PC scancode mode
+exit_scancode_mode		rmsc	str	S5	-		-	-----	Exit PC scancode mode
+pc_term_options			pctrm	str	S6	-		-	-----	PC terminal options
+scancode_escape			scesc	str	S7	-		-	-----	Escape for scancode emulation
+alt_scancode_esc		scesa	str	S8	-		-	-----	Alternate escape for scancode emulation
+#%.TE
+#%.ad
+#%
+#%.in .8i
+#%The XSI Curses standard added these.  They are some post-4.1 
+#%versions of System V curses, e.g., Solaris 2.5 and IRIX 6.x.
+#%The \fBncurses\fR termcap names for them are invented; according to the
+#%XSI Curses standard, they have no termcap names.  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
+set_pglen_inch			slength	str	sL	-		-	-----	YI Set page length to #1 hundredth of an inch
+#%.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
+# also tells the man page table generator not to pass through following lines
+# This means we can have obsolete capabilities and pseudo-capabilities that are
+# recognized for termcap or terminfo compilation, but not output.
+#
+# %%-STOP-HERE-%%
+#
+# Don't move this casually!  In fact, don't move it at all unless you're
+# either doing it to add System V or XPG4 extensions, or have decided you
+# don't care about SVr4 binary compatibility.
+#
+#############################################################################
+#
+# TERMCAP EXTENSION CAPABILITIES
+#
+# The capabilities below are either obsolete or extensions on certain systems.
+# They are not used by SVR4 terminfo.  Some are used by captoinfo to translate
+# termcap sources; the rest are listed for completeness, and in case somebody
+# cares about them enough to hack in code that will translate them into
+# terminfo capabilities.
+#
+# The first part of the list is from Ross Ridge's `mytinfo' package
+# (comp.sources.unix, volume 26); the variable names and terminfo names (as
+# well as the termcap codes) match his list.
+#
+# This group of codes is not marked obsolete in 4.4BSD, but have no direct
+# terminfo equivalents.  The rs capability is specially translated to terminfo
+# r2, and vice versa, if an entry does not already have an r2.  Similarly,
+# i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2).
+# The ug capability is thrown away, but assumed to be whatever sg is if the
+# latter is nonzero and we're dumping in termcap format.
+#
+termcap_init2			OTi2	str	i2	-		-	YB---	secondary initialization string
+termcap_reset			OTrs	str	rs	-		-	YB-G-	terminal reset string
+magic_cookie_glitch_ul		OTug	num	ug	-		-	YBCGE	number of blanks left by ul
+#
+# Obsolete termcap capabilities.  Some are used for termcap translation.  The
+# code uses the 'OT' prefix we put on obsolete capabilities to suppress
+# printing them in terminfo source dumps of compiled entries.
+#
+backspaces_with_bs		OTbs	bool	bs	-		-	YBCGE	uses ^H to move left
+crt_no_scrolling		OTns	bool	ns	-		-	YBCG-	crt cannot scroll
+no_correctly_working_cr		OTnc	bool	nc	-		-	YBCG-	no way to go to start of line
+carriage_return_delay		OTdC	num	dC	-		-	YB-G-	pad needed for CR
+new_line_delay			OTdN	num	dN	-		-	YB-G-	pad needed for LF
+linefeed_if_not_lf		OTnl	str	nl	-		-	YBCGE	use to move down
+backspace_if_not_bs		OTbc	str	bc	-		-	YBCGE	move left, if not ^H
+#
+# GNU termcap library extensions.  The GNU termcap file distributed with
+# Emacs no longer uses these, but MT showed up in pre-9.0 versions of the
+# BSD termcap file.  The name clash with terminfo MT is resolved by type
+# info; MT is converted to km.
+#
+gnu_has_meta_key		OTMT	bool	MT	-		-	----E	has meta key
+# gnu_tab_width			OTtw	num	tw	-		-	----E	tab width in spaces
+#
+# 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 
+#
+# The following comments describe capnames so ancient that I believe no
+# software uses them any longer.  Some of these have to go because they
+# clash with terminfo names in ways that cannot be resolved by type
+# information.
+#
+# These mytinfo codes are not used in the 4.4BSD curses code.  They are
+# marked obsolete in the 4.4BSD manual pages.
+#
+# There is one conflict with terminfo; ma is in both.  This conflict is
+# resolved by type information.
+#
+# The `ko' capability is translated by special code.  It should contain a
+# 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...
+#
+# 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
+# text.  All lines above the cursor's current line become locked in place on
+# the screen.  Then enter data normally.  When the screen fills up, any
+# further data entered forces the first line of unfrozen line text to scroll
+# under the frozen data.  Lines scrolled off the screen are inserted into
+# memory immediately preceding the first frozen line." (from the HP 700/96
+# User's manual).  VT100/ANSI memory lock set is \E[>2h, reset is \E[>2l.
+#
+# Applications that use terminfo are supposed to behave as though xr is
+# always true.
+#
+linefeed_is_newline		OTNL	bool	NL	-		-	YB---	move down with \n
+# even_parity			OTEP	bool	EP	-		-	-B---	terminal requires even parity
+# odd_parity			OTOP	bool	OP	-		-	-B---	terminal requires odd parity
+# half_duplex			OTHD	bool	HD	-		-	-B---	terminal is half-duplex
+# lower_case_only		OTLC	bool	LC	-		-	-B---	terminal has only lower case
+# upper_case_only		OTUC	bool	UC	-		-	-B---	terminal has only upper case
+backspace_delay			OTdB	num	dB	-		-	YB-G-	padding required for ^H
+# form_feed_delay		OTdF	num	dF	-		-	-B-G-	padding required for ^L
+horizontal_tab_delay		OTdT	num	dT	-		-	YB-G-	padding required for ^I
+# 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
+# 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
+# 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.
+#
+# rind_only_at_top		OTxq	bool	xq	-		-	-----	reverse index only works from top line
+#
+# 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. 
+#
+# key_interrupt_char		OTki	str	ki	-		-	-----	string set by interrupt key (?)
+# key_kill_char			OTkk	str	kk	-		-	-----	string set by kill key (?)
+# key_suspend_char		OTkz	str	kz	-		-	-----	string set by suspend key (?)
+# initialization_messy		OTxc	bool	xc	-		-	-----	initialization leaves garbage on the screen (?)
+# ind_at_bottom_does_cr		OTxl	bool	xl	-		-	-----	index does a carriage return
+#
+# Nonstandard capabilities unique to Ross Ridge's `mytinfo' package.
+# SR clashes with a terminfo name; this ambiguity cannot be resolved by a type
+# check.
+#
+# scroll_left			OTsl1	str	Sl	-		-	-----	scroll screen leftward
+# scroll_right			OTsr1	str	Sr	-		-	-----	scroll screen rightward
+# parm_scroll_left		OTsl	str	SL	-		-	-----	scroll screen leftward #1 characters
+# parm_scroll_right		OTsr	str	SR	-		-	-----	scroll screen rightward #1 characters
+#
+# The mytinfo capabilities end here.
+#
+# XENIX extensions:
+#
+# Xenix defined its own set of forms-drawing capabilities:
+#
+# cap	IBM ASCII	description             ACS         	ASCII
+# ---	-----------	--------------------    -------------	------
+# G1	191 \277 M-?	single upper right   	ACS_URCORNER
+# G2	218 \332 M-Z	single upper left	ACS_ULCORNER
+# G3	192 \300 M-@	single lower left	ACS_LLCORNER
+# G4	217 \331 M-Y	single lower right	ACS_LRCORNER
+# G5	187 \273 M-;	double upper right
+# G6	201 \311 M-I	double upper left
+# G7	200 \310 M-H	double lower left
+# G8	188 \274 M-<	double lower right
+# GC	197 \305 M-E	single intersection	ACS_PLUS	_ _
+# GD	194 \302 M-B	single down-tick	ACS_TTEE	 |
+# GH	196 \304 M-D	single horizontal line	ACS_HLINE
+# GL	180 \264 M-4	single left tick	ACS_RTEE	-|
+# GR	195 \303 M-C	single right tick	ACS_LTEE	|-
+# GU	193 \301 M-A	single up tick		ACS_BTEE	_|_
+# GV	179 \263 M-3	single vertical line	ACS_VLINE
+# Gc	206 \316 M-N	double intersection
+# Gd	203 \313 M-K	double down tick
+# Gh	205 \315 M-M	double horizontal line
+# Gl	204 \204 M-L	double left tick
+# Gr	185 \271 M-9	double right tick
+# Gu	202 \312 M-J	double up tick
+# 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 
+# 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.
+# These terminfo names are invented.
+#
+acs_ulcorner			OTG2	str	G2	-		-	-----	single upper left
+acs_llcorner			OTG3	str	G3	-		-	-----	single lower left
+acs_urcorner			OTG1	str	G1	-		-	-----	single upper right
+acs_lrcorner			OTG4	str	G4	-		-	-----	single lower right
+acs_ltee			OTGR	str	GR	-		-	-----	tee pointing right
+acs_rtee			OTGL	str	GL	-		-	-----	tee pointing left
+acs_btee			OTGU	str	GU	-		-	-----	tee pointing up
+acs_ttee			OTGD	str	GD	-		-	-----	tee pointing down
+acs_hline			OTGH	str	GH	-		-	-----	single horizontal line
+acs_vline			OTGV	str	GV	-		-	-----	single vertical line
+acs_plus			OTGC	str	GC	-		-	-----	single intersection
+#
+#############################################################################
+#
+# 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	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.
+#
+#############################################################################
+#
+# The following sets edit modes for GNU EMACS
+# Local Variables:
+# case-fold-search:nil
+# truncate-lines:t
+# End:
diff --git a/include/Caps.osf1r5 b/include/Caps.osf1r5
new file mode 100644
index 0000000..d9ea564
--- /dev/null
+++ b/include/Caps.osf1r5
@@ -0,0 +1,1274 @@
+##############################################################################
+# Copyright (c) 2002,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"), #
+# 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
+#
+# $Id: Caps.osf1r5,v 1.4 2006/05/27 15:33:04 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 
+# 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.
+#
+# This file has three major sections; a standard-capabilities table, two
+# extension-capability tables, and a section of aliases declarations.
+# The first two have the same format, as follows:
+#
+# FILE FORMAT
+#
+# Column 1: terminfo variable name
+# Column 2: terminfo capability name
+# 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
+# Column 7: Lead with `Y' if capability should be emitted in termcap
+#           translations, `-' otherwise
+# Column 8: capability description
+#
+# 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
+# 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
+#	C = used by the 4.4BSD curses library
+#	G = mentioned in the documentation for GNU termcap
+#	E = used by GNU Emacs
+#	K = remove this terminfo capability when translating to standard format
+# The important codes are C and E.  A cap with C or E should be preserved in
+# translation if possible.  The problem is that preserving all such caps may
+# lead to some termcap translations being too long.  The termcap maintainer
+# has a bit of a juggling act to do...potential problem cases are marked with
+# an asterisk (*).
+#
+# The aliases section has the following format:
+#
+# Column 1: either `capalias' or `infoalias'
+# Column 2: name to be aliased
+# Column 3: what name it should translate to.  The name IGNORE means it
+#           should be discarded with a warning message.
+# Column 4: name of the extension set (used for compiler warning messages)
+# Column 5: capability description (usually an associated terminfo variable)
+#
+# HANDLING TERMCAP AND TERMINFO EXTENSIONS
+#
+# There are basically five different ways to handle termcap and terminfo
+# extensions:
+#
+# 1. Don't list the capname here, or list it but comment it out (the latter
+# is preferable; someone might want to handle it in the future).  If you do
+# this, the capability will be treated as unknown and raise a warning from
+# the compiler.
+#
+# 2. Alias it.  This is appropriate if the capability has the same meaning
+# as an already-supported one.  The compiler will handle aliasing, emitting
+# an appropriate informational message whenever an alias fires.
+#
+# 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 the ncurses
+# library what to do with the terminfo data after it's 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
+# get a warning message about it).
+#
+# 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.
+#
+# 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
+# to terminfo with tic -I.  Some very old obsolete BSD caps like :kn: are
+# in this class.  Nothing will ever use them again.
+#
+# More usually, you want the compiler to try to deduce something from the
+# capability value that it can use to translate it into your output format.
+# You'll need to write custom code, probably in postprocess_termcap() or
+# postprocess_terminfo(), to handle the translation.
+#
+# 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 
+# trim those out of the set to be translated to termcap, or various users of
+# the termcap file will become irate.
+#
+# It might look tempting to leave those long init strings out of translations.
+# We can't do it (yet); 4.4BSD tput and tset use them.
+#
+# We retain the sgr capability in translation in spite of the fact that neither
+# 4.4BSD nor GNU Emacs uses it, because (a) some entry naming distinctions are
+# hard to understand without it, and (b) the entries in which it is long tend
+# to be older types that don't use up a lot of string space on function keys.
+# The tic(1) translation code will complain and elide it if it makes a critical
+# difference (there is special code in tic to recognize this situation).
+#
+# Yes, BSD tset(1) uses hpa.  We elide hpa/vpa anyway because the motion
+# optimizer in BSD curses didn't use them.  This omission seems to be the
+# single most effective one, it shortened the resolved length of all thirteen
+# problem entries in the 9.9.0 version of the terminfo master below critical.
+#
+# 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 
+# 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.
+#
+#############################################################################
+#
+# 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
+#%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.
+#%
+#%.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
+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)
+ceol_standout_glitch		xhp	bool	xs	-	-	YBCGE	standout not erased by overwriting (hp)
+eat_newline_glitch		xenl	bool	xn	-	-	YBCGE	newline ignored after 80 cols (concept)
+erase_overstrike		eo	bool	eo	-	-	YBCG-	can erase overstrikes with a blank
+generic_type			gn	bool	gn	-	-	YB-G-	generic line type
+hard_copy			hc	bool	hc	-	-	YBCG-	hardcopy terminal
+has_meta_key			km	bool	km	-	-	YB-GE	Has a meta key (i.e., sets 8th-bit)
+has_status_line			hs	bool	hs	-	-	YB-G-	has extra status line
+insert_null_glitch		in	bool	in	-	-	YBCGE	insert mode distinguishes nulls
+memory_above			da	bool	da	-	-	YBCG-	display may be retained above the screen
+memory_below			db	bool	db	-	-	YB-GE	display may be retained below the screen
+move_insert_mode		mir	bool	mi	-	-	YBCGE	safe to move while in insert mode
+move_standout_mode		msgr	bool	ms	-	-	YBCGE	safe to move while in standout mode
+over_strike			os	bool	os	-	-	YBCG-	terminal can overstrike
+status_line_esc_ok		eslok	bool	es	-	-	YB-G-	escape can be used on the status line
+dest_tabs_magic_smso		xt	bool	xt	-	-	YBCGE	tabs destructive, magic so char (t1061)
+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
+back_color_erase		bce	bool	ut	-	-	-----	screen erased with background color
+can_change			ccc	bool	cc	-	-	-----	terminal can re-define existing colors
+col_addr_glitch			xhpa	bool	YA	-	-	-----	only positive motion for hpa/mhpa caps
+cpi_changes_res			cpix	bool	YF	-	-	-----	changing character pitch changes resolution
+cr_cancels_micro_mode		crxm	bool	YB	-	-	-----	using cr turns off micro mode
+hard_cursor			chts	bool	HC	-	-	-----	cursor is hard to see
+has_print_wheel			daisy	bool	YC	-	-	-----	printer needs operator to change character set
+hue_lightness_saturation	hls	bool	hl	-	-	-----	terminal uses only HLS color notation (Tektronix)
+lpi_changes_res			lpix	bool	YG	-	-	-----	changing line pitch changes resolution
+needs_xon_xoff			nxon	bool	nx	-	-	-----	padding will not work, xon/xoff required
+non_dest_scroll_region		ndscr	bool	ND	-	-	-----	scrolling region is non-destructive
+non_rev_rmcup			nrrmc	bool	NR	-	-	-----	smcup does not reverse rmcup
+no_pad_char			npc	bool	NP	-	-	-----	pad character does not exist
+prtr_silent			mc5i	bool	5i	-	-	-----	printer will not echo on screen
+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
+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
+lines_of_memory			lm	num	lm	-	-	YB-G-	lines of memory if > line. 0 means varies
+magic_cookie_glitch		xmc	num	sg	-	-	YBCGE	number of blank characters left by smso or rmso
+padding_baud_rate		pb	num	pb	-	-	YB-GE	lowest baud rate where padding needed
+virtual_terminal		vt	num	vt	-	-	YB---	virtual terminal number (CB/unix)
+width_status_line		wsl	num	ws	-	-	YB-G-	number of columns in status line
+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
+buffer_capacity			bufsz	num	Ya	-	-	-----	numbers of bytes buffered before printing
+buttons				btns	num	BT	-	-	-----	number of buttons on mouse
+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
+label_height			lh	num	lh	-	-	-----	rows in each label
+label_width			lw	num	lw	-	-	-----	columns in each label
+max_attributes			ma	num	ma	-	-	YBC--	maximum combined attributes terminal can handle
+max_colors			colors	num	Co	-	-	-----	maximum number of colors on screen
+max_micro_address		maddr	num	Yd	-	-	-----	maximum value in micro_..._address
+max_micro_jump			mjump	num	Ye	-	-	-----	maximum value in parm_..._micro
+max_pairs			pairs	num	pa	-	-	-----	maximum number of color-pairs on the screen
+maximum_windows			wnum	num	MW	-	-	-----	maximum number of defineable windows
+micro_col_size			mcs	num	Yf	-	-	-----	character step size when in micro mode
+micro_line_size			mls	num	Yg	-	-	-----	line step size when in micro mode
+no_color_video			ncv	num	NC	-	-	-----	video attributes that can not be used with colors
+number_of_pins			npins	num	Yh	-	-	-----	numbers of pins in print-head
+num_labels			nlab	num	Nl	-	-	-----	number of labels on screen
+output_res_char			orc	num	Yi	-	-	-----	horizontal resolution in units per line
+output_res_line			orl	num	Yj	-	-	-----	vertical resolution in units per line
+output_res_horz_inch		orhi	num	Yk	-	-	-----	horizontal resolution in units per inch
+output_res_vert_inch		orvi	num	Yl	-	-	-----	vertical resolution in units per inch
+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
+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*)
+change_scroll_region		csr	str	cs	-		-	YBCGE	change region to line #1 to line #2 (P)
+clear_all_tabs			tbc	str	ct	-		-	YB-G-	clear all tab stops (P)
+clear_screen			clear	str	cl	-		-	YBCGE	clear screen and home cursor (P*)
+clr_eol				el	str	ce	-		-	YBCGE	clear to end of line (P)
+clr_eos				ed	str	cd	-		-	YBCGE	clear to end of screen (P*)
+column_address			hpa	str	ch	-		-	-B-GE*	horizontal position #1, absolute (P)
+command_character		cmdch	str	CC	-		-	YB-G-	terminal settable cmd character in prototype !?
+cursor_address			cup	str	cm	-		-	YBCGE	move to row #1 columns #2
+cursor_down			cud1	str	do	-		-	YBCGE	down one line
+cursor_home			home	str	ho	-		-	YBCGE	home cursor (if no cup)
+cursor_invisible		civis	str	vi	-		-	YB-G-	make cursor invisible
+cursor_left			cub1	str	le	-		-	YBCGE	move left one space
+cursor_mem_address		mrcup	str	CM	-		-	YB-G-	memory relative cursor addressing, move to row #1 columns #2
+cursor_normal			cnorm	str	ve	-		-	YBCGE	make cursor appear normal (undo civis/cvvis)
+cursor_right			cuf1	str	nd	-		-	YBCGE	non-destructive space (move right one space)
+cursor_to_ll			ll	str	ll	-		-	YBCGE	last line, first column (if no cup)
+cursor_up			cuu1	str	up	-		-	YBCGE	up one line
+cursor_visible			cvvis	str	vs	-		-	YBCGE	make cursor very visible
+delete_character		dch1	str	dc	-		-	YBCGE	delete character (P*)
+delete_line			dl1	str	dl	-		-	YBCGE	delete line (P*)
+dis_status_line			dsl	str	ds	-		-	YB-G-	disable status line
+down_half_line			hd	str	hd	-		-	YB-G-	half a line down
+enter_alt_charset_mode		smacs	str	as	-		-	YB-G-	start alternate character set (P)
+enter_blink_mode		blink	str	mb	-		-	YB-G-	turn on blinking
+enter_bold_mode			bold	str	md	-		-	YB-G-	turn on bold (extra bright) mode
+enter_ca_mode			smcup	str	ti	-		-	YBCGE	string to start programs using cup
+enter_delete_mode		smdc	str	dm	-		-	YBCGE	enter delete mode
+enter_dim_mode			dim	str	mh	-		-	YB-G-	turn on half-bright mode
+enter_insert_mode		smir	str	im	-		-	YBCGE	enter insert mode
+enter_secure_mode		invis	str	mk	-		-	-B-G-*	turn on blank mode (characters invisible)
+enter_protected_mode		prot	str	mp	-		-	-B-G-*	turn on protected mode
+enter_reverse_mode		rev	str	mr	-		-	YB-G-	turn on reverse video mode
+enter_standout_mode		smso	str	so	-		-	YBCGE	begin standout mode
+enter_underline_mode		smul	str	us	-		-	YBCGE	begin underline mode
+erase_chars			ech	str	ec	-		-	YB-G-	erase #1 characters (P)
+exit_alt_charset_mode		rmacs	str	ae	-		-	YB-G-	end alternate character set (P)
+exit_attribute_mode		sgr0	str	me	-		-	YB-GE	turn off all attributes
+exit_ca_mode			rmcup	str	te	-		-	YBCGE	strings to end programs using cup
+exit_delete_mode		rmdc	str	ed	-		-	YBCGE	end delete mode
+exit_insert_mode		rmir	str	ei	-		-	YBCGE	exit insert mode
+exit_standout_mode		rmso	str	se	-		-	YBCGE	exit standout mode
+exit_underline_mode		rmul	str	ue	-		-	YBCGE	exit underline mode
+flash_screen			flash	str	vb	-		-	YBCGE	visible bell (may not move cursor)
+form_feed			ff	str	ff	-		-	YB-G-	hardcopy terminal page eject (P*)
+from_status_line		fsl	str	fs	-		-	YB-G-	return from status line
+init_1string			is1	str	i1	-		-	YB-G-	initialization string
+init_2string			is2	str	is	-		-	YB-G-	initialization string
+init_3string			is3	str	i3	-		-	YB-G-	initialization string
+init_file			if	str	if	-		-	YB-G-	name of initialization file
+insert_character		ich1	str	ic	-		-	YBCGE	insert character (P)
+insert_line			il1	str	al	-		-	YBCGE	insert line (P*)
+insert_padding			ip	str	ip	-		-	YBCGE	insert padding after inserted character
+key_backspace			kbs	str	kb	KEY_BACKSPACE	0407	YB-G-	backspace key
+key_catab			ktbc	str	ka	KEY_CATAB	0526	-B-G-*	clear-all-tabs key
+key_clear			kclr	str	kC	KEY_CLEAR	0515	-B-G-*	clear-screen or erase key
+key_ctab			kctab	str	kt	KEY_CTAB	0525	-B-G-*	clear-tab key
+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
+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
+key_f0				kf0	str	k0	KEY_F(0)	0410	YBCGE	F0 function key
+key_f1				kf1	str	k1	KEY_F(1)	-	YBCGE	F1 function key
+key_f10				kf10	str	k;	KEY_F(10)	-	----E	F10 function key
+key_f2				kf2	str	k2	KEY_F(2)	-	YBCGE	F2 function key
+key_f3				kf3	str	k3	KEY_F(3)	-	YBCGE	F3 function key
+key_f4				kf4	str	k4	KEY_F(4)	-	YBCGE	F4 function key
+key_f5				kf5	str	k5	KEY_F(5)	-	YBCGE	F5 function key
+key_f6				kf6	str	k6	KEY_F(6)	-	YBCGE	F6 function key
+key_f7				kf7	str	k7	KEY_F(7)	-	YBCGE	F7 function key
+key_f8				kf8	str	k8	KEY_F(8)	-	YBCGE	F8 function key
+key_f9				kf9	str	k9	KEY_F(9)	-	YBCGE	F9 function key
+key_home			khome	str	kh	KEY_HOME	0406	YBCGE	home key
+key_ic				kich1	str	kI	KEY_IC		0513	YB-GE	insert-character key
+key_il				kil1	str	kA	KEY_IL		0511	-B-G-*	insert-line key
+key_left			kcub1	str	kl	KEY_LEFT	0404	YBCGE	left-arrow key
+key_ll				kll	str	kH	KEY_LL		0533	YB-G-	lower-left key (home down)
+key_npage			knp	str	kN	KEY_NPAGE	0522	YB-GE	next-page key
+key_ppage			kpp	str	kP	KEY_PPAGE	0523	YB-GE	previous-page key
+key_right			kcuf1	str	kr	KEY_RIGHT	0405	YBCGE	right-arrow key
+key_sf				kind	str	kF	KEY_SF		0520	-B-G-*	scroll-forward key
+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
+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
+lab_f2				lf2	str	l2	-		-	-B-G-*	label on function key f2 if not f2
+lab_f3				lf3	str	l3	-		-	-B-G-*	label on function key f3 if not f3
+lab_f4				lf4	str	l4	-		-	-B-G-*	label on function key f4 if not f4
+lab_f5				lf5	str	l5	-		-	-B-G-*	label on function key f5 if not f5
+lab_f6				lf6	str	l6	-		-	-B-G-*	label on function key f6 if not f6
+lab_f7				lf7	str	l7	-		-	-B-G-*	label on function key f7 if not f7
+lab_f8				lf8	str	l8	-		-	-B-G-*	label on function key f8 if not f8
+lab_f9				lf9	str	l9	-		-	-B-G-*	label on function key f9 if not f9
+meta_off			rmm	str	mo	-		-	YB-G-*	turn off meta mode
+meta_on				smm	str	mm	-		-	YB-G-*	turn on meta mode (8th-bit on)
+newline				nel	str	nw	-		-	YB-G-*	newline (behave like cr followed by lf)
+pad_char			pad	str	pc	-		-	YBCGE	padding char (instead of null)
+parm_dch			dch	str	DC	-		-	YB-GE	delete #1 characters (P*)
+parm_delete_line		dl	str	DL	-		-	YBCGE	delete #1 lines (P*)
+parm_down_cursor		cud	str	DO	-		-	YBCGE	down #1 lines (P*)
+parm_ich			ich	str	IC	-		-	YB-GE	insert #1 characters (P*)
+parm_index			indn	str	SF	-		-	YBCG-	scroll forward #1 lines (P)
+parm_insert_line		il	str	AL	-		-	YBCGE	insert #1 lines (P*)
+parm_left_cursor		cub	str	LE	-		-	YBCGE	move #1 characters to the left (P)
+parm_right_cursor		cuf	str	RI	-		-	YBCGE	move #1 characters to the right (P*)
+parm_rindex			rin	str	SR	-		-	YBCG-	scroll back #1 lines (P)
+parm_up_cursor			cuu	str	UP	-		-	YBCGE	up #1 lines (P*)
+pkey_key			pfkey	str	pk	-		-	-B---	program function key #1 to type string #2
+pkey_local			pfloc	str	pl	-		-	-B---	program function key #1 to execute string #2
+pkey_xmit			pfx	str	px	-		-	-B---	program function key #1 to transmit string #2
+print_screen			mc0	str	ps	-		-	-B-G-*	print contents of screen
+prtr_off			mc4	str	pf	-		-	-B-G-*	turn off printer
+prtr_on				mc5	str	po	-		-	-B-G-*	turn on printer
+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
+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
+row_address			vpa	str	cv	-		-	-B-GE*	vertical position #1 absolute (P)
+save_cursor			sc	str	sc	-		-	YBCG-	save current cursor position (P)
+scroll_forward			ind	str	sf	-		-	YBCGE	scroll text up (P)
+scroll_reverse			ri	str	sr	-		-	YBCGE	scroll text down (P)
+set_attributes			sgr	str	sa	-		-	YB-G-	define video attributes #1-#9 (PG9)
+set_tab				hts	str	st	-		-	YB-G-	set a tab in every row, current columns
+set_window			wind	str	wi	-		-	-B-GE	current window is lines #1-#2 cols #3-#4
+tab				ht	str	ta	-		-	YBCGE	tab to next 8-space hardware tab stop
+to_status_line			tsl	str	ts	-		-	YB-G-	move to status line, column #1
+underline_char			uc	str	uc	-		-	YBCG-	underline char and move past it
+up_half_line			hu	str	hu	-		-	YB-G-	half a line up
+init_prog			iprog	str	iP	-		-	-B---	path name of program for initialization
+key_a1				ka1	str	K1	KEY_A1		0534	YB-GE	upper left of keypad
+key_a3				ka3	str	K3	KEY_A3		0535	YB-GE	upper right of keypad
+key_b2				kb2	str	K2	KEY_B2		0536	YB-GE	center of keypad
+key_c1				kc1	str	K4	KEY_C1		0537	YB-GE	lower left of keypad
+key_c3				kc3	str	K5	KEY_C3		0540	YB-GE	lower right of keypad
+prtr_non			mc5p	str	pO	-		-	-B-G-*	turn on printer for #1 bytes
+#
+# SVr1 capabilities stop here.	IBM's version of terminfo is the same as
+# SVr4 up to this point, but has a different set afterwards.
+#
+# OSF1 differences start here, based on IBM version:
+#
+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	kc	KEY_COMMAND	0545	-----	command key
+key_command_pane		kcpn	str	kW	-		-	----K	command-pane key
+key_end				kend	str	@7	KEY_END		0550	-----	end key
+key_help			khlp	str	%1	KEY_HELP	0553	-----	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			kslt	str	*6	KEY_SELECT	0601	-----	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 are described in
+# the Tru64 manual pages.
+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_out7			kmpt7	str	KS	-		-	----K	special mapped key 7 output
+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_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
+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
+#
+key_f11				kf11	str	F1	KEY_F(11)	-	----E	F11 function key
+key_f12				kf12	str	F2	KEY_F(12)	-	----E	F12 function key
+key_f13				kf13	str	F3	KEY_F(13)	-	----E	F13 function key
+key_f14				kf14	str	F4	KEY_F(14)	-	----E	F14 function key
+key_f15				kf15	str	F5	KEY_F(15)	-	----E	F15 function key
+key_f16				kf16	str	F6	KEY_F(16)	-	----E	F16 function key
+key_f17				kf17	str	F7	KEY_F(17)	-	----E	F17 function key
+key_f18				kf18	str	F8	KEY_F(18)	-	----E	F18 function key
+key_f19				kf19	str	F9	KEY_F(19)	-	----E	F19 function key
+key_f20				kf20	str	FA	KEY_F(20)	-	----E	F20 function key
+key_f21				kf21	str	FB	KEY_F(21)	-	----E	F21 function key
+key_f22				kf22	str	FC	KEY_F(22)	-	----E	F22 function key
+key_f23				kf23	str	FD	KEY_F(23)	-	----E	F23 function key
+key_f24				kf24	str	FE	KEY_F(24)	-	----E	F24 function key
+key_f25				kf25	str	FF	KEY_F(25)	-	----E	F25 function key
+key_f26				kf26	str	FG	KEY_F(26)	-	----E	F26 function key
+key_f27				kf27	str	FH	KEY_F(27)	-	----E	F27 function key
+key_f28				kf28	str	FI	KEY_F(28)	-	----E	F28 function key
+key_f29				kf29	str	FJ	KEY_F(29)	-	----E	F29 function key
+key_f30				kf30	str	FK	KEY_F(30)	-	----E	F30 function key
+key_f31				kf31	str	FL	KEY_F(31)	-	----E	F31 function key
+key_f32				kf32	str	FM	KEY_F(32)	-	----E	F32 function key
+key_f33				kf33	str	FN	KEY_F(33)	-	----E	F33 function key
+key_f34				kf34	str	FO	KEY_F(34)	-	----E	F34 function key
+key_f35				kf35	str	FP	KEY_F(35)	-	----E	F35 function key
+key_f36				kf36	str	FQ	KEY_F(36)	-	----E	F36 function key
+key_action			kact	str	kJ	KEY_ACTION	0541	----K	sent by action key
+acs_chars			acsc	str	ac	-		-	-----	graphics charset pairs, based on vt100
+alt_scancode_esc		scesa	str	S8	-		-	-----	Alternate escape for scancode emulation
+bit_image_repeat		birep	str	Xy	-		-	-----	Repeat bit image cell #1 #2 times
+bit_image_newline		binel	str	Zz	-		-	-----	Move to next row of the bit image
+bit_image_carriage_return	bicr	str	Yv	-		-	-----	Move to beginning of same row
+change_char_pitch		cpi	str	ZA	-		-	-----	Change number of characters per inch to #1
+change_line_pitch		lpi	str	ZB	-		-	-----	Change number of lines per inch to #1
+change_res_horz			chr	str	ZC	-		-	-----	Change horizontal resolution to #1
+change_res_vert			cvr	str	ZD	-		-	-----	Change vertical resolution to #1
+char_padding			rmp	str	rP	-		-	-----	like ip but when in insert mode
+char_set_names			csnm	str	Zy	-		-	-----	Produce #1'th item from list of character set names
+clear_margins			mgc	str	MC	-		-	-----	clear right and left soft margins
+clr_bol				el1	str	cb	-		-	-----	Clear to beginning of line
+code_set_init			csin	str	ci	-		-	-----	Init sequence for multiple codesets
+color_names			colornm	str	Yw	-		-	-----	Give name for color #1
+create_window			cwin	str	CW	-		-	-----	define a window #1 from #2,#3 to #4,#5
+define_bit_image_region		defbi	str	Yx	-		-	-----	Define rectangualar bit image region
+define_char			defc	str	ZE	-		-	-----	Define a character #1, #2 dots wide, descender #3
+device_type			devt	str	dv	-		-	-----	Indicate language/codeset support
+dial_phone			dial	str	DI	-		-	-----	dial number #1
+display_clock			dclk	str	DK	-		-	-----	display clock
+display_pc_char			dispc	str	S1	-		-	-----	Display PC character #1
+ena_acs				enacs	str	eA	-		-	-----	enable alternate char set
+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
+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
+enter_micro_mode		smicm	str	ZJ	-		-	-----	Start micro-motion mode
+enter_near_letter_quality	snlq	str	ZK	-		-	-----	Enter NLQ mode
+enter_normal_quality		snrmq	str	ZL	-		-	-----	Enter normal-quality mode
+enter_pc_charset_mode		smpch	str	S2	-		-	-----	Enter PC character display mode
+enter_scancode_mode		smsc	str	S4	-		-	-----	Enter PC scancode mode
+enter_shadow_mode		sshm	str	ZM	-		-	-----	Enter shadow-print mode
+enter_subscript_mode		ssubm	str	ZN	-		-	-----	Enter subscript mode
+enter_superscript_mode		ssupm	str	ZO	-		-	-----	Enter superscript mode
+enter_upward_mode		sum	str	ZP	-		-	-----	Start upward carriage motion
+enter_xon_mode			smxon	str	SX	-		-	-----	turn on xon/xoff handshaking
+exit_am_mode			rmam	str	RA	-		-	-----	turn off automatic margins
+exit_doublewide_mode		rwidm	str	ZQ	-		-	-----	End double-wide mode
+exit_italics_mode		ritm	str	ZR	-		-	-----	End italic mode
+exit_leftward_mode		rlm	str	ZS	-		-	-----	End left-motion mode
+exit_micro_mode			rmicm	str	ZT	-		-	-----	End micro-motion mode
+exit_pc_charset_mode		rmpch	str	S3	-		-	-----	Exit PC character display mode
+exit_scancode_mode		rmsc	str	S5	-		-	-----	Exit PC scancode mode
+exit_shadow_mode		rshm	str	ZU	-		-	-----	End shadow-print mode
+exit_subscript_mode		rsubm	str	ZV	-		-	-----	End subscript mode
+exit_superscript_mode		rsupm	str	ZW	-		-	-----	End superscript mode
+exit_upward_mode		rum	str	ZX	-		-	-----	End reverse character motion
+exit_xon_mode			rmxon	str	RX	-		-	-----	turn off xon/xoff handshaking
+fixed_pause			pause	str	PA	-		-	-----	pause for 2-3 seconds
+flash_hook			hook	str	fh	-		-	-----	flash switch hook
+get_mouse			getm	str	Gm	-		-	-----	Curses should get button events, parameter #1 not documented.
+goto_window			wingo	str	WG	-		-	-----	go to window #1
+hangup				hup	str	HU	-		-	-----	hang-up phone
+initialize_color		initc	str	Ic	-		-	-----	initialize color #1 to (#2,#3,#4)
+initialize_pair			initp	str	Ip	-		-	-----	Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7)
+key_beg				kbeg	str	@1	KEY_BEG		0542	-----	begin key
+key_btab			kcbt	str	kB	KEY_BTAB	0632	-----	back-tab key
+key_cancel			kcan	str	@2	KEY_CANCEL	0543	-----	cancel key
+key_close			kclo	str	@3	KEY_CLOSE	0544	-----	close key
+key_copy			kcpy	str	@5	KEY_COPY	0546	-----	copy key
+key_create			kcrt	str	@6	KEY_CREATE	0547	-----	create key
+key_enter			kent	str	@8	KEY_ENTER	0527	-----	enter/send key
+key_exit			kext	str	@9	KEY_EXIT	0551	-----	exit key
+key_f37				kf37	str	FR	KEY_F(37)	-	----E	F37 function key
+key_f38				kf38	str	FS	KEY_F(38)	-	----E	F38 function key
+key_f39				kf39	str	FT	KEY_F(39)	-	----E	F39 function key
+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
+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
+key_f46				kf46	str	Fa	KEY_F(46)	-	----E	F46 function key
+key_f47				kf47	str	Fb	KEY_F(47)	-	----E	F47 function key
+key_f48				kf48	str	Fc	KEY_F(48)	-	----E	F48 function key
+key_f49				kf49	str	Fd	KEY_F(49)	-	----E	F49 function key
+key_f50				kf50	str	Fe	KEY_F(50)	-	----E	F50 function key
+key_f51				kf51	str	Ff	KEY_F(51)	-	----E	F51 function key
+key_f52				kf52	str	Fg	KEY_F(52)	-	----E	F52 function key
+key_f53				kf53	str	Fh	KEY_F(53)	-	----E	F53 function key
+key_f54				kf54	str	Fi	KEY_F(54)	-	----E	F54 function key
+key_f55				kf55	str	Fj	KEY_F(55)	-	----E	F55 function key
+key_f56				kf56	str	Fk	KEY_F(56)	-	----E	F56 function key
+key_f57				kf57	str	Fl	KEY_F(57)	-	----E	F57 function key
+key_f58				kf58	str	Fm	KEY_F(58)	-	----E	F58 function key
+key_f59				kf59	str	Fn	KEY_F(59)	-	----E	F59 function key
+key_f60				kf60	str	Fo	KEY_F(60)	-	----E	F60 function key
+key_f61				kf61	str	Fp	KEY_F(61)	-	----E	F61 function key
+key_f62				kf62	str	Fq	KEY_F(62)	-	----E	F62 function key
+key_f63				kf63	str	Fr	KEY_F(63)	-	----E	F63 function key
+key_find			kfnd	str	@0	KEY_FIND	0552	-----	find key
+key_mark			kmrk	str	%2	KEY_MARK	0554	-----	mark key
+key_message			kmsg	str	%3	KEY_MESSAGE	0555	-----	message key
+key_mouse			kmous	str	Km	KEY_MOUSE	0631	-----	Mouse event has occurred
+key_move			kmov	str	%4	KEY_MOVE	0556	-----	move key
+key_next			knxt	str	%5	KEY_NEXT	0557	-----	next key
+key_open			kopn	str	%6	KEY_OPEN	0560	-----	open key
+key_options			kopt	str	%7	KEY_OPTIONS	0561	-----	options key
+key_previous			kprv	str	%8	KEY_PREVIOUS	0562	-----	previous key
+key_print			kprt	str	%9	KEY_PRINT	0532	-----	print key
+key_redo			krdo	str	%0	KEY_REDO	0563	-----	redo key
+key_reference			kref	str	&1	KEY_REFERENCE	0564	-----	reference key
+key_refresh			krfr	str	&2	KEY_REFRESH	0565	-----	refresh key
+key_replace			krpl	str	&3	KEY_REPLACE	0566	-----	replace key
+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
+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
+key_scopy			kCPY	str	*2	KEY_SCOPY	0575	-----	shifted copy key
+key_screate			kCRT	str	*3	KEY_SCREATE	0576	-----	shifted create key
+key_sdc				kDC	str	*4	KEY_SDC		0577	-----	shifted delete-character key
+key_sdl				kDL	str	*5	KEY_SDL		0600	-----	shifted delete-line key
+key_send			kEND	str	*7	KEY_SEND	0602	-----	shifted end key
+key_seol			kEOL	str	*8	KEY_SEOL	0603	-----	shifted clear-to-end-of-line key
+key_sexit			kEXT	str	*9	KEY_SEXIT	0604	-----	shifted exit key
+key_sfind			kFND	str	*0	KEY_SFIND	0605	-----	shifted find key
+key_shelp			kHLP	str	#1	KEY_SHELP	0606	-----	shifted help key
+key_shome			kHOM	str	#2	KEY_SHOME	0607	-----	shifted home key
+key_sic				kIC	str	#3	KEY_SIC		0610	-----	shifted insert-character key
+key_sleft			kLFT	str	#4	KEY_SLEFT	0611	-----	shifted left-arrow key
+key_smessage			kMSG	str	%a	KEY_SMESSAGE	0612	-----	shifted message key
+key_smove			kMOV	str	%b	KEY_SMOVE	0613	-----	shifted move key
+key_snext			kNXT	str	%c	KEY_SNEXT	0614	-----	shifted next key
+key_soptions			kOPT	str	%d	KEY_SOPTIONS	0615	-----	shifted options key
+key_sprevious			kPRV	str	%e	KEY_SPREVIOUS	0616	-----	shifted previous key
+key_sprint			kPRT	str	%f	KEY_SPRINT	0617	-----	shifted print key
+key_sredo			kRDO	str	%g	KEY_SREDO	0620	-----	shifted redo key
+key_sreplace			kRPL	str	%h	KEY_SREPLACE	0621	-----	shifted replace key
+key_sright			kRIT	str	%i	KEY_SRIGHT	0622	-----	shifted right-arrow key
+key_srsume			kRES	str	%j	KEY_SRSUME	0623	-----	shifted resume key
+key_ssave			kSAV	str	!1	KEY_SSAVE	0624	-----	shifted save key
+key_ssuspend			kSPD	str	!2	KEY_SSUSPEND	0625	-----	shifted suspend key
+key_sundo			kUND	str	!3	KEY_SUNDO	0626	-----	shifted undo key
+key_suspend			kspd	str	&7	KEY_SUSPEND	0627	-----	suspend key
+key_undo			kund	str	&8	KEY_UNDO	0630	-----	undo key
+label_format			fln	str	Lf	-		-	-----	label format
+label_off			rmln	str	LF	-		-	-----	turn off soft labels
+label_on			smln	str	LO	-		-	-----	turn on soft labels
+micro_column_address		mhpa	str	ZY	-		-	-----	Like column_address in micro mode
+micro_down			mcud1	str	ZZ	-		-	-----	Like cursor_down in micro mode
+micro_left			mcub1	str	Za	-		-	-----	Like cursor_left in micro mode
+micro_right			mcuf1	str	Zb	-		-	-----	Like cursor_right in micro mode
+micro_row_address		mvpa	str	Zc	-		-	-----	Like row_address #1 in micro mode
+micro_up			mcuu1	str	Zd	-		-	-----	Like cursor_up in micro mode
+mouse_info			minfo	str	Mi	-		-	-----	Mouse status information
+order_of_pins			porder	str	Ze	-		-	-----	Match software bits to print-head pins
+orig_colors			oc	str	oc	-		-	-----	Set all color pairs to the original ones
+orig_pair			op	str	op	-		-	-----	Set default pair to its original value
+parm_down_micro			mcud	str	Zf	-		-	-----	Like parm_down_cursor in micro mode
+parm_left_micro			mcub	str	Zg	-		-	-----	Like parm_left_cursor in micro mode
+parm_right_micro		mcuf	str	Zh	-		-	-----	Like parm_right_cursor in micro mode
+parm_up_micro			mcuu	str	Zi	-		-	-----	Like parm_up_cursor in micro mode
+pc_term_options			pctrm	str	S6	-		-	-----	PC terminal options
+pkey_plab			pfxl	str	xl	-		-	-----	Program function key #1 to type string #2 and show string #3
+plab_norm			pln	str	pn	-		-	-----	program label #1 to show string #2
+pulse				pulse	str	PU	-		-	-----	select pulse dialing
+quick_dial			qdial	str	QD	-		-	-----	dial number #1 without checking
+req_for_input			rfi	str	RF	-		-	-----	send next input char (for ptys)
+req_mouse_pos			reqmp	str	RQ	-		-	-----	Request mouse position
+remove_clock			rmclk	str	RC	-		-	-----	remove clock
+scancode_escape			scesc	str	S7	-		-	-----	Escape for scancode emulation
+select_char_set			scs	str	Zj	-		-	-----	Select character set, #1
+set0_des_seq			s0ds	str	s0	-		-	-----	Shift to codeset 0 (EUC set 0, ASCII)
+set1_des_seq			s1ds	str	s1	-		-	-----	Shift to codeset 1
+set2_des_seq			s2ds	str	s2	-		-	-----	Shift to codeset 2
+set3_des_seq			s3ds	str	s3	-		-	-----	Shift to codeset 3
+set_a_background		setab	str	AB	-		-	-----	Set background color to #1, using ANSI escape
+set_a_foreground		setaf	str	AF	-		-	-----	Set foreground color to #1, using ANSI escape
+set_background			setb	str	Sb	-		-	-----	Set background color #1
+set_bottom_margin		smgb	str	Zk	-		-	-----	Set bottom margin at current line
+set_bottom_margin_parm		smgbp	str	Zl	-		-	-----	Set bottom margin at line #1 or (if smgtp is not given) #2 lines from bottom
+set_clock			sclk	str	SC	-		-	-----	set clock, #1 hrs #2 mins #3 secs
+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_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
+set_right_margin		smgr	str	MR	-		-	-----	set right soft margin at current column
+set_right_margin_parm		smgrp	str	Zn	-		-	-----	Set right margin at column #1
+set_tb_margin			smgtb	str	MT	-		-	-----	Sets both top and bottom margins to #1, #2
+set_top_margin			smgt	str	Zo	-		-	-----	Set top margin at current line
+set_top_margin_parm		smgtp	str	Zp	-		-	-----	Set top (bottom) margin at row #1
+start_bit_image			sbim	str	Zq	-		-	-----	Start printing bit image graphics
+start_char_set_def		scsd	str	Zr	-		-	-----	Start character set definition #1, with #2 characters in the set
+stop_bit_image			rbim	str	Zs	-		-	-----	Stop printing bit image graphics
+stop_char_set_def		rcsd	str	Zt	-		-	-----	End definition of character set #1
+subscript_characters		subcs	str	Zu	-		-	-----	List of subscriptable characters
+superscript_characters		supcs	str	Zv	-		-	-----	List of superscriptable characters
+these_cause_cr			docr	str	Zw	-		-	-----	Printing any of these characters causes CR
+tone				tone	str	TO	-		-	-----	select touch tone dialing
+user0				u0	str	u0	-		-	-----	User string #0
+user1				u1	str	u1	-		-	-----	User string #1
+user2				u2	str	u2	-		-	-----	User string #2
+user3				u3	str	u3	-		-	-----	User string #3
+user4				u4	str	u4	-		-	-----	User string #4
+user5				u5	str	u5	-		-	-----	User string #5
+user6				u6	str	u6	-		-	-----	User string #6
+user7				u7	str	u7	-		-	-----	User string #7
+user8				u8	str	u8	-		-	-----	User string #8
+user9				u9	str	u9	-		-	-----	User string #9
+wait_tone			wait	str	WA	-		-	-----	wait for dial-tone
+xoff_character			xoffc	str	XF	-		-	-----	XOFF character
+xon_character			xonc	str	XN	-		-	-----	XON character
+zero_motion			zerom	str	Zx	-		-	-----	No motion for subsequent character
+set_pglen_inch			slength	str	sL	-		-	-----	YI Set page length to #1 hundredth of an inch
+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
+#
+#
+#
+# %%-STOP-HERE-%%
+#
+# Don't move this casually!  In fact, don't move it at all unless you're
+# either doing it to add System V or XPG4 extensions, or have decided you
+# don't care about SVr4 binary compatibility.
+#
+#############################################################################
+#
+# TERMCAP EXTENSION CAPABILITIES
+#
+# The capabilities below are either obsolete or extensions on certain systems.
+# They are not used by SVR4 terminfo.  Some are used by captoinfo to translate
+# termcap sources; the rest are listed for completeness, and in case somebody
+# cares about them enough to hack in code that will translate them into
+# terminfo capabilities.
+#
+# The first part of the list is from Ross Ridge's `mytinfo' package
+# (comp.sources.unix, volume 26); the variable names and terminfo names (as
+# well as the termcap codes) match his list.
+#
+# This group of codes is not marked obsolete in 4.4BSD, but have no direct
+# terminfo equivalents.  The rs capability is specially translated to terminfo
+# r2, and vice versa, if an entry does not already have an r2.  Similarly,
+# i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2).
+# The ug capability is thrown away, but assumed to be whatever sg is if the
+# latter is nonzero and we're dumping in termcap format.
+#
+termcap_init2			OTi2	str	i2	-		-	YB---	secondary initialization string
+termcap_reset			OTrs	str	rs	-		-	YB-G-	terminal reset string
+magic_cookie_glitch_ul		OTug	num	ug	-		-	YBCGE	number of blanks left by ul
+#
+# Obsolete termcap capabilities.  Some are used for termcap translation.  The
+# code uses the 'OT' prefix we put on obsolete capabilities to suppress
+# printing them in terminfo source dumps of compiled entries.
+#
+backspaces_with_bs		OTbs	bool	bs	-		-	YBCGE	uses ^H to move left
+crt_no_scrolling		OTns	bool	ns	-		-	YBCG-	crt cannot scroll
+no_correctly_working_cr		OTnc	bool	nc	-		-	YBCG-	no way to go to start of line
+carriage_return_delay		OTdC	num	dC	-		-	YB-G-	pad needed for CR
+new_line_delay			OTdN	num	dN	-		-	YB-G-	pad needed for LF
+linefeed_if_not_lf		OTnl	str	nl	-		-	YBCGE	use to move down
+backspace_if_not_bs		OTbc	str	bc	-		-	YBCGE	move left, if not ^H
+#
+# GNU termcap library extensions.  The GNU termcap file distributed with
+# Emacs no longer uses these, but MT showed up in pre-9.0 versions of the
+# BSD termcap file.  The name clash with terminfo MT is resolved by type
+# info; MT is converted to km.
+#
+gnu_has_meta_key		OTMT	bool	MT	-		-	----E	has meta key
+# gnu_tab_width			OTtw	num	tw	-		-	----E	tab width in spaces
+#
+# 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 
+#
+# The following comments describe capnames so ancient that I believe no
+# software uses them any longer.  Some of these have to go because they
+# clash with terminfo names in ways that cannot be resolved by type
+# information.
+#
+# These mytinfo codes are not used in the 4.4BSD curses code.  They are
+# marked obsolete in the 4.4BSD manual pages.
+#
+# There is one conflict with terminfo; ma is in both.  This conflict is
+# resolved by type information.
+#
+# The `ko' capability is translated by special code.  It should contain a
+# 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...
+#
+# 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
+# text.  All lines above the cursor's current line become locked in place on
+# the screen.  Then enter data normally.  When the screen fills up, any
+# further data entered forces the first line of unfrozen line text to scroll
+# under the frozen data.  Lines scrolled off the screen are inserted into
+# memory immediately preceding the first frozen line." (from the HP 700/96
+# User's manual).  VT100/ANSI memory lock set is \E[>2h, reset is \E[>2l.
+#
+# Applications that use terminfo are supposed to behave as though xr is
+# always true.
+#
+linefeed_is_newline		OTNL	bool	NL	-		-	YB---	move down with \n
+# even_parity			OTEP	bool	EP	-		-	-B---	terminal requires even parity
+# odd_parity			OTOP	bool	OP	-		-	-B---	terminal requires odd parity
+# half_duplex			OTHD	bool	HD	-		-	-B---	terminal is half-duplex
+# lower_case_only		OTLC	bool	LC	-		-	-B---	terminal has only lower case
+# upper_case_only		OTUC	bool	UC	-		-	-B---	terminal has only upper case
+backspace_delay			OTdB	num	dB	-		-	YB-G-	padding required for ^H
+# form_feed_delay		OTdF	num	dF	-		-	-B-G-	padding required for ^L
+horizontal_tab_delay		OTdT	num	dT	-		-	YB-G-	padding required for ^I
+# 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
+# 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
+# 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.
+#
+# rind_only_at_top		OTxq	bool	xq	-		-	-----	reverse index only works from top line
+#
+# 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. 
+#
+# key_interrupt_char		OTki	str	ki	-		-	-----	string set by interrupt key (?)
+# key_kill_char			OTkk	str	kk	-		-	-----	string set by kill key (?)
+# key_suspend_char		OTkz	str	kz	-		-	-----	string set by suspend key (?)
+# initialization_messy		OTxc	bool	xc	-		-	-----	initialization leaves garbage on the screen (?)
+# ind_at_bottom_does_cr		OTxl	bool	xl	-		-	-----	index does a carriage return
+#
+# Nonstandard capabilities unique to Ross Ridge's `mytinfo' package.
+# SR clashes with a terminfo name; this ambiguity cannot be resolved by a type
+# check.
+#
+# scroll_left			OTsl1	str	Sl	-		-	-----	scroll screen leftward
+# scroll_right			OTsr1	str	Sr	-		-	-----	scroll screen rightward
+# parm_scroll_left		OTsl	str	SL	-		-	-----	scroll screen leftward #1 characters
+# parm_scroll_right		OTsr	str	SR	-		-	-----	scroll screen rightward #1 characters
+#
+# The mytinfo capabilities end here.
+#
+# XENIX extensions:
+#
+# Xenix defined its own set of forms-drawing capabilities:
+#
+# cap	IBM ASCII	description             ACS         	ASCII
+# ---	-----------	--------------------    -------------	------
+# G1	191 \277 M-?	single upper right   	ACS_URCORNER
+# G2	218 \332 M-Z	single upper left	ACS_ULCORNER
+# G3	192 \300 M-@	single lower left	ACS_LLCORNER
+# G4	217 \331 M-Y	single lower right	ACS_LRCORNER
+# G5	187 \273 M-;	double upper right
+# G6	201 \311 M-I	double upper left
+# G7	200 \310 M-H	double lower left
+# G8	188 \274 M-<	double lower right
+# GC	197 \305 M-E	single intersection	ACS_PLUS	_ _
+# GD	194 \302 M-B	single down-tick	ACS_TTEE	 |
+# GH	196 \304 M-D	single horizontal line	ACS_HLINE
+# GL	180 \264 M-4	single left tick	ACS_RTEE	-|
+# GR	195 \303 M-C	single right tick	ACS_LTEE	|-
+# GU	193 \301 M-A	single up tick		ACS_BTEE	_|_
+# GV	179 \263 M-3	single vertical line	ACS_VLINE
+# Gc	206 \316 M-N	double intersection
+# Gd	203 \313 M-K	double down tick
+# Gh	205 \315 M-M	double horizontal line
+# Gl	204 \204 M-L	double left tick
+# Gr	185 \271 M-9	double right tick
+# Gu	202 \312 M-J	double up tick
+# 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 
+# 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.
+# These terminfo names are invented.
+#
+acs_ulcorner			OTG2	str	G2	-		-	-----	single upper left
+acs_llcorner			OTG3	str	G3	-		-	-----	single lower left
+acs_urcorner			OTG1	str	G1	-		-	-----	single upper right
+acs_lrcorner			OTG4	str	G4	-		-	-----	single lower right
+acs_ltee			OTGR	str	GR	-		-	-----	tee pointing right
+acs_rtee			OTGL	str	GL	-		-	-----	tee pointing left
+acs_btee			OTGU	str	GU	-		-	-----	tee pointing up
+acs_ttee			OTGD	str	GD	-		-	-----	tee pointing down
+acs_hline			OTGH	str	GH	-		-	-----	single horizontal line
+acs_vline			OTGV	str	GV	-		-	-----	single vertical line
+acs_plus			OTGC	str	GC	-		-	-----	single intersection
+#
+#############################################################################
+#
+# 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	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.
+#
+#############################################################################
+#
+# The following sets edit modes for GNU EMACS
+# Local Variables:
+# case-fold-search:nil
+# truncate-lines:t
+# End:
diff --git a/include/Caps.uwin b/include/Caps.uwin
new file mode 100644
index 0000000..450eaeb
--- /dev/null
+++ b/include/Caps.uwin
@@ -0,0 +1,1090 @@
+##############################################################################
+# Copyright (c) 2001-2002,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"), #
+# 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
+#
+# $Id: Caps.uwin,v 1.4 2006/05/27 15:33:04 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 
+# 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.
+#
+# This file has three major sections; a standard-capabilities table, two
+# extension-capability tables, and a section of aliases declarations.
+# The first two have the same format, as follows:
+#
+# FILE FORMAT
+#
+# Column 1: terminfo variable name
+# Column 2: terminfo capability name
+# 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
+# Column 7: Lead with `Y' if capability should be emitted in termcap
+#           translations, `-' otherwise
+# Column 8: capability description
+#
+# 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
+# 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
+#	C = used by the 4.4BSD curses library
+#	G = mentioned in the documentation for GNU termcap
+#	E = used by GNU Emacs
+#	K = remove this terminfo capability when translating to standard format
+# The important codes are C and E.  A cap with C or E should be preserved in
+# translation if possible.  The problem is that preserving all such caps may
+# lead to some termcap translations being too long.  The termcap maintainer
+# has a bit of a juggling act to do...potential problem cases are marked with
+# an asterisk (*).
+#
+# The aliases section has the following format:
+#
+# Column 1: either `capalias' or `infoalias'
+# Column 2: name to be aliased
+# Column 3: what name it should translate to.  The name IGNORE means it
+#           should be discarded with a warning message.
+# Column 4: name of the extension set (used for compiler warning messages)
+# Column 5: capability description (usually an associated terminfo variable)
+#
+# HANDLING TERMCAP AND TERMINFO EXTENSIONS
+#
+# There are basically five different ways to handle termcap and terminfo
+# extensions:
+#
+# 1. Don't list the capname here, or list it but comment it out (the latter
+# is preferable; someone might want to handle it in the future).  If you do
+# this, the capability will be treated as unknown and raise a warning from
+# the compiler.
+#
+# 2. Alias it.  This is appropriate if the capability has the same meaning
+# as an already-supported one.  The compiler will handle aliasing, emitting
+# an appropriate informational message whenever an alias fires.
+#
+# 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 the ncurses
+# library what to do with the terminfo data after it's 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
+# get a warning message about it).
+#
+# 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.
+#
+# 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
+# to terminfo with tic -I.  Some very old obsolete BSD caps like :kn: are
+# in this class.  Nothing will ever use them again.
+#
+# More usually, you want the compiler to try to deduce something from the
+# capability value that it can use to translate it into your output format.
+# You'll need to write custom code, probably in postprocess_termcap() or
+# postprocess_terminfo(), to handle the translation.
+#
+# 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 
+# trim those out of the set to be translated to termcap, or various users of
+# the termcap file will become irate.
+#
+# It might look tempting to leave those long init strings out of translations.
+# We can't do it (yet); 4.4BSD tput and tset use them.
+#
+# We retain the sgr capability in translation in spite of the fact that neither
+# 4.4BSD nor GNU Emacs uses it, because (a) some entry naming distinctions are
+# hard to understand without it, and (b) the entries in which it is long tend
+# to be older types that don't use up a lot of string space on function keys.
+# The tic(1) translation code will complain and elide it if it makes a critical
+# difference (there is special code in tic to recognize this situation).
+#
+# Yes, BSD tset(1) uses hpa.  We elide hpa/vpa anyway because the motion
+# optimizer in BSD curses didn't use them.  This omission seems to be the
+# single most effective one, it shortened the resolved length of all thirteen
+# problem entries in the 9.9.0 version of the terminfo master below critical.
+#
+# 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 
+# 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.
+#
+#############################################################################
+#
+# 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
+#%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.
+#%
+#%.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
+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)
+ceol_standout_glitch		xhp	bool	xs	-	-	YBCGE	standout not erased by overwriting (hp)
+eat_newline_glitch		xenl	bool	xn	-	-	YBCGE	newline ignored after 80 cols (concept)
+erase_overstrike		eo	bool	eo	-	-	YBCG-	can erase overstrikes with a blank
+generic_type			gn	bool	gn	-	-	YB-G-	generic line type
+hard_copy			hc	bool	hc	-	-	YBCG-	hardcopy terminal
+has_meta_key			km	bool	km	-	-	YB-GE	Has a meta key (i.e., sets 8th-bit)
+has_status_line			hs	bool	hs	-	-	YB-G-	has extra status line
+insert_null_glitch		in	bool	in	-	-	YBCGE	insert mode distinguishes nulls
+memory_above			da	bool	da	-	-	YBCG-	display may be retained above the screen
+memory_below			db	bool	db	-	-	YB-GE	display may be retained below the screen
+move_insert_mode		mir	bool	mi	-	-	YBCGE	safe to move while in insert mode
+move_standout_mode		msgr	bool	ms	-	-	YBCGE	safe to move while in standout mode
+over_strike			os	bool	os	-	-	YBCG-	terminal can overstrike
+status_line_esc_ok		eslok	bool	es	-	-	YB-G-	escape can be used on the status line
+dest_tabs_magic_smso		xt	bool	xt	-	-	YBCGE	tabs destructive, magic so char (t1061)
+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
+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
+non_rev_rmcup			nrrmc	bool	NR	-	-	-----	smcup does not reverse rmcup
+no_pad_char			npc	bool	NP	-	-	-----	pad character does not exist
+non_dest_scroll_region		ndscr	bool	ND	-	-	-----	scrolling region is non-destructive
+back_color_erase		bce	bool	ut	-	-	-----	screen erased with background color
+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
+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
+lines_of_memory			lm	num	lm	-	-	YB-G-	lines of memory if > line. 0 means varies
+magic_cookie_glitch		xmc	num	sg	-	-	YBCGE	number of blank characters left by smso or rmso
+padding_baud_rate		pb	num	pb	-	-	YB-GE	lowest baud rate where padding needed
+virtual_terminal		vt	num	vt	-	-	YB---	virtual terminal number (CB/unix)
+width_status_line		wsl	num	ws	-	-	YB-G-	number of columns in status line
+num_labels			nlab	num	Nl	-	-	-----	number of labels on screen
+label_height			lh	num	lh	-	-	-----	rows in each label
+label_width			lw	num	lw	-	-	-----	columns in each label
+buttons				btns	num	BT	-	-	-----	number of buttons on mouse
+#max_attributes			ma	num	ma	-	-	YBC--	maximum combined attributes terminal can handle
+#maximum_windows		wnum	num	MW	-	-	-----	maximum number of defineable windows
+# These came in with SVr4's color support
+max_colors			colors	num	Co	-	-	-----	maximum number of colors on screen
+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
+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*)
+change_scroll_region		csr	str	cs	-		-	YBCGE	change region to line #1 to line #2 (P)
+clear_all_tabs			tbc	str	ct	-		-	YB-G-	clear all tab stops (P)
+clear_screen			clear	str	cl	-		-	YBCGE	clear screen and home cursor (P*)
+clr_eol				el	str	ce	-		-	YBCGE	clear to end of line (P)
+clr_eos				ed	str	cd	-		-	YBCGE	clear to end of screen (P*)
+column_address			hpa	str	ch	-		-	-B-GE*	horizontal position #1, absolute (P)
+command_character		cmdch	str	CC	-		-	YB-G-	terminal settable cmd character in prototype !?
+cursor_address			cup	str	cm	-		-	YBCGE	move to row #1 columns #2
+cursor_down			cud1	str	do	-		-	YBCGE	down one line
+cursor_home			home	str	ho	-		-	YBCGE	home cursor (if no cup)
+cursor_invisible		civis	str	vi	-		-	YB-G-	make cursor invisible
+cursor_left			cub1	str	le	-		-	YBCGE	move left one space
+cursor_mem_address		mrcup	str	CM	-		-	YB-G-	memory relative cursor addressing, move to row #1 columns #2
+cursor_normal			cnorm	str	ve	-		-	YBCGE	make cursor appear normal (undo civis/cvvis)
+cursor_right			cuf1	str	nd	-		-	YBCGE	non-destructive space (move right one space)
+cursor_to_ll			ll	str	ll	-		-	YBCGE	last line, first column (if no cup)
+cursor_up			cuu1	str	up	-		-	YBCGE	up one line
+cursor_visible			cvvis	str	vs	-		-	YBCGE	make cursor very visible
+delete_character		dch1	str	dc	-		-	YBCGE	delete character (P*)
+delete_line			dl1	str	dl	-		-	YBCGE	delete line (P*)
+dis_status_line			dsl	str	ds	-		-	YB-G-	disable status line
+down_half_line			hd	str	hd	-		-	YB-G-	half a line down
+enter_alt_charset_mode		smacs	str	as	-		-	YB-G-	start alternate character set (P)
+enter_blink_mode		blink	str	mb	-		-	YB-G-	turn on blinking
+enter_bold_mode			bold	str	md	-		-	YB-G-	turn on bold (extra bright) mode
+enter_ca_mode			smcup	str	ti	-		-	YBCGE	string to start programs using cup
+enter_delete_mode		smdc	str	dm	-		-	YBCGE	enter delete mode
+enter_dim_mode			dim	str	mh	-		-	YB-G-	turn on half-bright mode
+enter_insert_mode		smir	str	im	-		-	YBCGE	enter insert mode
+enter_secure_mode		invis	str	mk	-		-	-B-G-*	turn on blank mode (characters invisible)
+enter_protected_mode		prot	str	mp	-		-	-B-G-*	turn on protected mode
+enter_reverse_mode		rev	str	mr	-		-	YB-G-	turn on reverse video mode
+enter_standout_mode		smso	str	so	-		-	YBCGE	begin standout mode
+enter_underline_mode		smul	str	us	-		-	YBCGE	begin underline mode
+erase_chars			ech	str	ec	-		-	YB-G-	erase #1 characters (P)
+exit_alt_charset_mode		rmacs	str	ae	-		-	YB-G-	end alternate character set (P)
+exit_attribute_mode		sgr0	str	me	-		-	YB-GE	turn off all attributes
+exit_ca_mode			rmcup	str	te	-		-	YBCGE	strings to end programs using cup
+exit_delete_mode		rmdc	str	ed	-		-	YBCGE	end delete mode
+exit_insert_mode		rmir	str	ei	-		-	YBCGE	exit insert mode
+exit_standout_mode		rmso	str	se	-		-	YBCGE	exit standout mode
+exit_underline_mode		rmul	str	ue	-		-	YBCGE	exit underline mode
+flash_screen			flash	str	vb	-		-	YBCGE	visible bell (may not move cursor)
+form_feed			ff	str	ff	-		-	YB-G-	hardcopy terminal page eject (P*)
+from_status_line		fsl	str	fs	-		-	YB-G-	return from status line
+init_1string			is1	str	i1	-		-	YB-G-	initialization string
+init_2string			is2	str	is	-		-	YB-G-	initialization string
+init_3string			is3	str	i3	-		-	YB-G-	initialization string
+init_file			if	str	if	-		-	YB-G-	name of initialization file
+insert_character		ich1	str	ic	-		-	YBCGE	insert character (P)
+insert_line			il1	str	al	-		-	YBCGE	insert line (P*)
+insert_padding			ip	str	ip	-		-	YBCGE	insert padding after inserted character
+key_backspace			kbs	str	kb	KEY_BACKSPACE	0407	YB-G-	backspace key
+key_catab			ktbc	str	ka	KEY_CATAB	0526	-B-G-*	clear-all-tabs key
+key_clear			kclr	str	kC	KEY_CLEAR	0515	-B-G-*	clear-screen or erase key
+key_ctab			kctab	str	kt	KEY_CTAB	0525	-B-G-*	clear-tab key
+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
+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
+key_f0				kf0	str	k0	KEY_F(0)	0410	YBCGE	F0 function key
+key_f1				kf1	str	k1	KEY_F(1)	-	YBCGE	F1 function key
+key_f10				kf10	str	k;	KEY_F(10)	-	----E	F10 function key
+key_f2				kf2	str	k2	KEY_F(2)	-	YBCGE	F2 function key
+key_f3				kf3	str	k3	KEY_F(3)	-	YBCGE	F3 function key
+key_f4				kf4	str	k4	KEY_F(4)	-	YBCGE	F4 function key
+key_f5				kf5	str	k5	KEY_F(5)	-	YBCGE	F5 function key
+key_f6				kf6	str	k6	KEY_F(6)	-	YBCGE	F6 function key
+key_f7				kf7	str	k7	KEY_F(7)	-	YBCGE	F7 function key
+key_f8				kf8	str	k8	KEY_F(8)	-	YBCGE	F8 function key
+key_f9				kf9	str	k9	KEY_F(9)	-	YBCGE	F9 function key
+key_home			khome	str	kh	KEY_HOME	0406	YBCGE	home key
+key_ic				kich1	str	kI	KEY_IC		0513	YB-GE	insert-character key
+key_il				kil1	str	kA	KEY_IL		0511	-B-G-*	insert-line key
+key_left			kcub1	str	kl	KEY_LEFT	0404	YBCGE	left-arrow key
+key_ll				kll	str	kH	KEY_LL		0533	YB-G-	lower-left key (home down)
+key_npage			knp	str	kN	KEY_NPAGE	0522	YB-GE	next-page key
+key_ppage			kpp	str	kP	KEY_PPAGE	0523	YB-GE	previous-page key
+key_right			kcuf1	str	kr	KEY_RIGHT	0405	YBCGE	right-arrow key
+key_sf				kind	str	kF	KEY_SF		0520	-B-G-*	scroll-forward key
+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
+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
+lab_f2				lf2	str	l2	-		-	-B-G-*	label on function key f2 if not f2
+lab_f3				lf3	str	l3	-		-	-B-G-*	label on function key f3 if not f3
+lab_f4				lf4	str	l4	-		-	-B-G-*	label on function key f4 if not f4
+lab_f5				lf5	str	l5	-		-	-B-G-*	label on function key f5 if not f5
+lab_f6				lf6	str	l6	-		-	-B-G-*	label on function key f6 if not f6
+lab_f7				lf7	str	l7	-		-	-B-G-*	label on function key f7 if not f7
+lab_f8				lf8	str	l8	-		-	-B-G-*	label on function key f8 if not f8
+lab_f9				lf9	str	l9	-		-	-B-G-*	label on function key f9 if not f9
+meta_off			rmm	str	mo	-		-	YB-G-*	turn off meta mode
+meta_on				smm	str	mm	-		-	YB-G-*	turn on meta mode (8th-bit on)
+newline				nel	str	nw	-		-	YB-G-*	newline (behave like cr followed by lf)
+pad_char			pad	str	pc	-		-	YBCGE	padding char (instead of null)
+parm_dch			dch	str	DC	-		-	YB-GE	delete #1 characters (P*)
+parm_delete_line		dl	str	DL	-		-	YBCGE	delete #1 lines (P*)
+parm_down_cursor		cud	str	DO	-		-	YBCGE	down #1 lines (P*)
+parm_ich			ich	str	IC	-		-	YB-GE	insert #1 characters (P*)
+parm_index			indn	str	SF	-		-	YBCG-	scroll forward #1 lines (P)
+parm_insert_line		il	str	AL	-		-	YBCGE	insert #1 lines (P*)
+parm_left_cursor		cub	str	LE	-		-	YBCGE	move #1 characters to the left (P)
+parm_right_cursor		cuf	str	RI	-		-	YBCGE	move #1 characters to the right (P*)
+parm_rindex			rin	str	SR	-		-	YBCG-	scroll back #1 lines (P)
+parm_up_cursor			cuu	str	UP	-		-	YBCGE	up #1 lines (P*)
+pkey_key			pfkey	str	pk	-		-	-B---	program function key #1 to type string #2
+pkey_local			pfloc	str	pl	-		-	-B---	program function key #1 to execute string #2
+pkey_xmit			pfx	str	px	-		-	-B---	program function key #1 to transmit string #2
+print_screen			mc0	str	ps	-		-	-B-G-*	print contents of screen
+prtr_off			mc4	str	pf	-		-	-B-G-*	turn off printer
+prtr_on				mc5	str	po	-		-	-B-G-*	turn on printer
+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
+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
+row_address			vpa	str	cv	-		-	-B-GE*	vertical position #1 absolute (P)
+save_cursor			sc	str	sc	-		-	YBCG-	save current cursor position (P)
+scroll_forward			ind	str	sf	-		-	YBCGE	scroll text up (P)
+scroll_reverse			ri	str	sr	-		-	YBCGE	scroll text down (P)
+set_attributes			sgr	str	sa	-		-	YB-G-	define video attributes #1-#9 (PG9)
+set_tab				hts	str	st	-		-	YB-G-	set a tab in every row, current columns
+set_window			wind	str	wi	-		-	-B-GE	current window is lines #1-#2 cols #3-#4
+tab				ht	str	ta	-		-	YBCGE	tab to next 8-space hardware tab stop
+to_status_line			tsl	str	ts	-		-	YB-G-	move to status line, column #1
+underline_char			uc	str	uc	-		-	YBCG-	underline char and move past it
+up_half_line			hu	str	hu	-		-	YB-G-	half a line up
+init_prog			iprog	str	iP	-		-	-B---	path name of program for initialization
+key_a1				ka1	str	K1	KEY_A1		0534	YB-GE	upper left of keypad
+key_a3				ka3	str	K3	KEY_A3		0535	YB-GE	upper right of keypad
+key_b2				kb2	str	K2	KEY_B2		0536	YB-GE	center of keypad
+key_c1				kc1	str	K4	KEY_C1		0537	YB-GE	lower left of keypad
+key_c3				kc3	str	K5	KEY_C3		0540	YB-GE	lower right of keypad
+prtr_non			mc5p	str	pO	-		-	-B-G-*	turn on printer for #1 bytes
+#
+# SVr1 capabilities stop here.	IBM's version of terminfo is the same as
+# SVr4 up to this point, but has a different set afterwards.
+#
+char_padding			rmp	str	rP	-		-	-----	like ip but when in insert mode
+acs_chars			acsc	str	ac	-		-	-----	graphics charset pairs, based on vt100
+plab_norm			pln	str	pn	-		-	-----	program label #1 to show string #2
+key_btab			kcbt	str	kB	KEY_BTAB	0541	-----	back-tab key
+enter_xon_mode			smxon	str	SX	-		-	-----	turn on xon/xoff handshaking
+exit_xon_mode			rmxon	str	RX	-		-	-----	turn off xon/xoff handshaking
+enter_am_mode			smam	str	SA	-		-	-----	turn on automatic margins
+exit_am_mode			rmam	str	RA	-		-	-----	turn off automatic margins
+xon_character			xonc	str	XN	-		-	-----	XON character
+xoff_character			xoffc	str	XF	-		-	-----	XOFF character
+ena_acs				enacs	str	eA	-		-	-----	enable alternate char set
+label_on			smln	str	LO	-		-	-----	turn on soft labels
+label_off			rmln	str	LF	-		-	-----	turn off soft labels
+key_beg				kbeg	str	@1	KEY_BEG		0542	-----	begin key
+key_cancel			kcan	str	@2	KEY_CANCEL	0543	-----	cancel key
+key_close			kclo	str	@3	KEY_CLOSE	0544	-----	close key
+key_command			kcmd	str	@4	KEY_COMMAND	0545	-----	command key
+key_copy			kcpy	str	@5	KEY_COPY	0546	-----	copy key
+key_create			kcrt	str	@6	KEY_CREATE	0547	-----	create key
+key_end				kend	str	@7	KEY_END		0550	-----	end key
+key_enter			kent	str	@8	KEY_ENTER	0527	-----	enter/send key
+key_exit			kext	str	@9	KEY_EXIT	0551	-----	exit key
+key_find			kfnd	str	@0	KEY_FIND	0552	-----	find key
+key_help			khlp	str	%1	KEY_HELP	0553	-----	help key
+key_mark			kmrk	str	%2	KEY_MARK	0554	-----	mark key
+key_message			kmsg	str	%3	KEY_MESSAGE	0555	-----	message key
+key_move			kmov	str	%4	KEY_MOVE	0556	-----	move key
+key_next			knxt	str	%5	KEY_NEXT	0557	-----	next key
+key_open			kopn	str	%6	KEY_OPEN	0560	-----	open key
+key_options			kopt	str	%7	KEY_OPTIONS	0561	-----	options key
+key_previous			kprv	str	%8	KEY_PREVIOUS	0562	-----	previous key
+key_print			kprt	str	%9	KEY_PRINT	0532	-----	print key
+key_redo			krdo	str	%0	KEY_REDO	0563	-----	redo key
+key_reference			kref	str	&1	KEY_REFERENCE	0564	-----	reference key
+key_refresh			krfr	str	&2	KEY_REFRESH	0565	-----	refresh key
+key_replace			krpl	str	&3	KEY_REPLACE	0566	-----	replace key
+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
+key_suspend			kspd	str	&7	KEY_SUSPEND	0627	-----	suspend key
+key_undo			kund	str	&8	KEY_UNDO	0630	-----	undo key
+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
+key_scopy			kCPY	str	*2	KEY_SCOPY	0575	-----	shifted copy key
+key_screate			kCRT	str	*3	KEY_SCREATE	0576	-----	shifted create key
+key_sdc				kDC	str	*4	KEY_SDC		0577	-----	shifted delete-character key
+key_sdl				kDL	str	*5	KEY_SDL		0600	-----	shifted delete-line key
+key_select			kslt	str	*6	KEY_SELECT	0601	-----	select key
+key_send			kEND	str	*7	KEY_SEND	0602	-----	shifted end key
+key_seol			kEOL	str	*8	KEY_SEOL	0603	-----	shifted clear-to-end-of-line key
+key_sexit			kEXT	str	*9	KEY_SEXIT	0604	-----	shifted exit key
+key_sfind			kFND	str	*0	KEY_SFIND	0605	-----	shifted find key
+key_shelp			kHLP	str	#1	KEY_SHELP	0606	-----	shifted help key
+key_shome			kHOM	str	#2	KEY_SHOME	0607	-----	shifted home key
+key_sic				kIC	str	#3	KEY_SIC		0610	-----	shifted insert-character key
+key_sleft			kLFT	str	#4	KEY_SLEFT	0611	-----	shifted left-arrow key
+key_smessage			kMSG	str	%a	KEY_SMESSAGE	0612	-----	shifted message key
+key_smove			kMOV	str	%b	KEY_SMOVE	0613	-----	shifted move key
+key_snext			kNXT	str	%c	KEY_SNEXT	0614	-----	shifted next key
+key_soptions			kOPT	str	%d	KEY_SOPTIONS	0615	-----	shifted options key
+key_sprevious			kPRV	str	%e	KEY_SPREVIOUS	0616	-----	shifted previous key
+key_sprint			kPRT	str	%f	KEY_SPRINT	0617	-----	shifted print key
+key_sredo			kRDO	str	%g	KEY_SREDO	0620	-----	shifted redo key
+key_sreplace			kRPL	str	%h	KEY_SREPLACE	0621	-----	shifted replace key
+key_sright			kRIT	str	%i	KEY_SRIGHT	0622	-----	shifted right-arrow key
+key_srsume			kRES	str	%j	KEY_SRSUME	0623	-----	shifted resume key
+key_ssave			kSAV	str	!1	KEY_SSAVE	0624	-----	shifted save key
+key_ssuspend			kSPD	str	!2	KEY_SSUSPEND	0625	-----	shifted suspend key
+key_sundo			kUND	str	!3	KEY_SUNDO	0626	-----	shifted undo key
+req_for_input			rfi	str	RF	-		-	-----	send next input char (for ptys)
+key_f11				kf11	str	F1	KEY_F(11)	-	----E	F11 function key
+key_f12				kf12	str	F2	KEY_F(12)	-	----E	F12 function key
+key_f13				kf13	str	F3	KEY_F(13)	-	----E	F13 function key
+key_f14				kf14	str	F4	KEY_F(14)	-	----E	F14 function key
+key_f15				kf15	str	F5	KEY_F(15)	-	----E	F15 function key
+key_f16				kf16	str	F6	KEY_F(16)	-	----E	F16 function key
+key_f17				kf17	str	F7	KEY_F(17)	-	----E	F17 function key
+key_f18				kf18	str	F8	KEY_F(18)	-	----E	F18 function key
+key_f19				kf19	str	F9	KEY_F(19)	-	----E	F19 function key
+key_f20				kf20	str	FA	KEY_F(20)	-	----E	F20 function key
+key_f21				kf21	str	FB	KEY_F(21)	-	----E	F21 function key
+key_f22				kf22	str	FC	KEY_F(22)	-	----E	F22 function key
+key_f23				kf23	str	FD	KEY_F(23)	-	----E	F23 function key
+key_f24				kf24	str	FE	KEY_F(24)	-	----E	F24 function key
+key_f25				kf25	str	FF	KEY_F(25)	-	----E	F25 function key
+key_f26				kf26	str	FG	KEY_F(26)	-	----E	F26 function key
+key_f27				kf27	str	FH	KEY_F(27)	-	----E	F27 function key
+key_f28				kf28	str	FI	KEY_F(28)	-	----E	F28 function key
+key_f29				kf29	str	FJ	KEY_F(29)	-	----E	F29 function key
+key_f30				kf30	str	FK	KEY_F(30)	-	----E	F30 function key
+key_f31				kf31	str	FL	KEY_F(31)	-	----E	F31 function key
+key_f32				kf32	str	FM	KEY_F(32)	-	----E	F32 function key
+key_f33				kf33	str	FN	KEY_F(33)	-	----E	F33 function key
+key_f34				kf34	str	FO	KEY_F(34)	-	----E	F34 function key
+key_f35				kf35	str	FP	KEY_F(35)	-	----E	F35 function key
+key_f36				kf36	str	FQ	KEY_F(36)	-	----E	F36 function key
+key_f37				kf37	str	FR	KEY_F(37)	-	----E	F37 function key
+key_f38				kf38	str	FS	KEY_F(38)	-	----E	F38 function key
+key_f39				kf39	str	FT	KEY_F(39)	-	----E	F39 function key
+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
+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
+key_f46				kf46	str	Fa	KEY_F(46)	-	----E	F46 function key
+key_f47				kf47	str	Fb	KEY_F(47)	-	----E	F47 function key
+key_f48				kf48	str	Fc	KEY_F(48)	-	----E	F48 function key
+key_f49				kf49	str	Fd	KEY_F(49)	-	----E	F49 function key
+key_f50				kf50	str	Fe	KEY_F(50)	-	----E	F50 function key
+key_f51				kf51	str	Ff	KEY_F(51)	-	----E	F51 function key
+key_f52				kf52	str	Fg	KEY_F(52)	-	----E	F52 function key
+key_f53				kf53	str	Fh	KEY_F(53)	-	----E	F53 function key
+key_f54				kf54	str	Fi	KEY_F(54)	-	----E	F54 function key
+key_f55				kf55	str	Fj	KEY_F(55)	-	----E	F55 function key
+key_f56				kf56	str	Fk	KEY_F(56)	-	----E	F56 function key
+key_f57				kf57	str	Fl	KEY_F(57)	-	----E	F57 function key
+key_f58				kf58	str	Fm	KEY_F(58)	-	----E	F58 function key
+key_f59				kf59	str	Fn	KEY_F(59)	-	----E	F59 function key
+key_f60				kf60	str	Fo	KEY_F(60)	-	----E	F60 function key
+key_f61				kf61	str	Fp	KEY_F(61)	-	----E	F61 function key
+key_f62				kf62	str	Fq	KEY_F(62)	-	----E	F62 function key
+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_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
+set0_des_seq			s0ds	str	s0	-		-	-----	Shift to codeset 0 (EUC set 0, ASCII)
+set1_des_seq			s1ds	str	s1	-		-	-----	Shift to codeset 1
+set2_des_seq			s2ds	str	s2	-		-	-----	Shift to codeset 2
+set3_des_seq			s3ds	str	s3	-		-	-----	Shift to codeset 3
+key_mouse			kmous	str	Km	KEY_MOUSE	0631	-----	Mouse event has occurred
+mouse_info			minfo	str	Mi	-		-	-----	Mouse status information
+req_mouse_pos			reqmp	str	RQ	-		-	-----	Request mouse position
+get_mouse			getm	str	Gm	-		-	-----	Curses should get button events, parameter #1 not documented.
+release_mouse			relm	str	Rm	-		-	-----	Curses should release the mouse */
+color_names			colornm	str	Yw	-		-	-----	Give name for color #1
+initialize_color		initc	str	Ic	-		-	-----	initialize color #1 to (#2,#3,#4)
+initialize_pair			initp	str	Ip	-		-	-----	Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7)
+orig_colors			oc	str	oc	-		-	-----	Set all color pairs to the original ones
+orig_pair			op	str	op	-		-	-----	Set default pair to its original value
+set_a_background		setab	str	AB	-		-	-----	Set background color to #1, using ANSI escape
+set_a_foreground		setaf	str	AF	-		-	-----	Set foreground color to #1, using ANSI escape
+set_background			setb	str	Sb	-		-	-----	Set background color #1
+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
+# also tells the man page table generator not to pass through following lines
+# This means we can have obsolete capabilities and pseudo-capabilities that are
+# recognized for termcap or terminfo compilation, but not output.
+#
+# %%-STOP-HERE-%%
+#
+# Don't move this casually!  In fact, don't move it at all unless you're
+# either doing it to add System V or XPG4 extensions, or have decided you
+# don't care about SVr4 binary compatibility.
+#
+#############################################################################
+#
+# TERMCAP EXTENSION CAPABILITIES
+#
+# The capabilities below are either obsolete or extensions on certain systems.
+# They are not used by SVR4 terminfo.  Some are used by captoinfo to translate
+# termcap sources; the rest are listed for completeness, and in case somebody
+# cares about them enough to hack in code that will translate them into
+# terminfo capabilities.
+#
+# The first part of the list is from Ross Ridge's `mytinfo' package
+# (comp.sources.unix, volume 26); the variable names and terminfo names (as
+# well as the termcap codes) match his list.
+#
+# This group of codes is not marked obsolete in 4.4BSD, but have no direct
+# terminfo equivalents.  The rs capability is specially translated to terminfo
+# r2, and vice versa, if an entry does not already have an r2.  Similarly,
+# i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2).
+# The ug capability is thrown away, but assumed to be whatever sg is if the
+# latter is nonzero and we're dumping in termcap format.
+#
+termcap_init2			OTi2	str	i2	-		-	YB---	secondary initialization string
+termcap_reset			OTrs	str	rs	-		-	YB-G-	terminal reset string
+magic_cookie_glitch_ul		OTug	num	ug	-		-	YBCGE	number of blanks left by ul
+#
+# Obsolete termcap capabilities.  Some are used for termcap translation.  The
+# code uses the 'OT' prefix we put on obsolete capabilities to suppress
+# printing them in terminfo source dumps of compiled entries.
+#
+backspaces_with_bs		OTbs	bool	bs	-		-	YBCGE	uses ^H to move left
+crt_no_scrolling		OTns	bool	ns	-		-	YBCG-	crt cannot scroll
+no_correctly_working_cr		OTnc	bool	nc	-		-	YBCG-	no way to go to start of line
+carriage_return_delay		OTdC	num	dC	-		-	YB-G-	pad needed for CR
+new_line_delay			OTdN	num	dN	-		-	YB-G-	pad needed for LF
+linefeed_if_not_lf		OTnl	str	nl	-		-	YBCGE	use to move down
+backspace_if_not_bs		OTbc	str	bc	-		-	YBCGE	move left, if not ^H
+#
+# GNU termcap library extensions.  The GNU termcap file distributed with
+# Emacs no longer uses these, but MT showed up in pre-9.0 versions of the
+# BSD termcap file.  The name clash with terminfo MT is resolved by type
+# info; MT is converted to km.
+#
+gnu_has_meta_key		OTMT	bool	MT	-		-	----E	has meta key
+# gnu_tab_width			OTtw	num	tw	-		-	----E	tab width in spaces
+#
+# 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 
+#
+# The following comments describe capnames so ancient that I believe no
+# software uses them any longer.  Some of these have to go because they
+# clash with terminfo names in ways that cannot be resolved by type
+# information.
+#
+# These mytinfo codes are not used in the 4.4BSD curses code.  They are
+# marked obsolete in the 4.4BSD manual pages.
+#
+# There is one conflict with terminfo; ma is in both.  This conflict is
+# resolved by type information.
+#
+# The `ko' capability is translated by special code.  It should contain a
+# 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...
+#
+# 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
+# text.  All lines above the cursor's current line become locked in place on
+# the screen.  Then enter data normally.  When the screen fills up, any
+# further data entered forces the first line of unfrozen line text to scroll
+# under the frozen data.  Lines scrolled off the screen are inserted into
+# memory immediately preceding the first frozen line." (from the HP 700/96
+# User's manual).  VT100/ANSI memory lock set is \E[>2h, reset is \E[>2l.
+#
+# Applications that use terminfo are supposed to behave as though xr is
+# always true.
+#
+linefeed_is_newline		OTNL	bool	NL	-		-	YB---	move down with \n
+# even_parity			OTEP	bool	EP	-		-	-B---	terminal requires even parity
+# odd_parity			OTOP	bool	OP	-		-	-B---	terminal requires odd parity
+# half_duplex			OTHD	bool	HD	-		-	-B---	terminal is half-duplex
+# lower_case_only		OTLC	bool	LC	-		-	-B---	terminal has only lower case
+# upper_case_only		OTUC	bool	UC	-		-	-B---	terminal has only upper case
+backspace_delay			OTdB	num	dB	-		-	YB-G-	padding required for ^H
+# form_feed_delay		OTdF	num	dF	-		-	-B-G-	padding required for ^L
+horizontal_tab_delay		OTdT	num	dT	-		-	YB-G-	padding required for ^I
+# 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
+# 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
+# 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.
+#
+# rind_only_at_top		OTxq	bool	xq	-		-	-----	reverse index only works from top line
+#
+# 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. 
+#
+# key_interrupt_char		OTki	str	ki	-		-	-----	string set by interrupt key (?)
+# key_kill_char			OTkk	str	kk	-		-	-----	string set by kill key (?)
+# key_suspend_char		OTkz	str	kz	-		-	-----	string set by suspend key (?)
+# initialization_messy		OTxc	bool	xc	-		-	-----	initialization leaves garbage on the screen (?)
+# ind_at_bottom_does_cr		OTxl	bool	xl	-		-	-----	index does a carriage return
+#
+# Nonstandard capabilities unique to Ross Ridge's `mytinfo' package.
+# SR clashes with a terminfo name; this ambiguity cannot be resolved by a type
+# check.
+#
+# scroll_left			OTsl1	str	Sl	-		-	-----	scroll screen leftward
+# scroll_right			OTsr1	str	Sr	-		-	-----	scroll screen rightward
+# parm_scroll_left		OTsl	str	SL	-		-	-----	scroll screen leftward #1 characters
+# parm_scroll_right		OTsr	str	SR	-		-	-----	scroll screen rightward #1 characters
+#
+# The mytinfo capabilities end here.
+#
+# XENIX extensions:
+#
+# Xenix defined its own set of forms-drawing capabilities:
+#
+# cap	IBM ASCII	description             ACS         	ASCII
+# ---	-----------	--------------------    -------------	------
+# G1	191 \277 M-?	single upper right   	ACS_URCORNER
+# G2	218 \332 M-Z	single upper left	ACS_ULCORNER
+# G3	192 \300 M-@	single lower left	ACS_LLCORNER
+# G4	217 \331 M-Y	single lower right	ACS_LRCORNER
+# G5	187 \273 M-;	double upper right
+# G6	201 \311 M-I	double upper left
+# G7	200 \310 M-H	double lower left
+# G8	188 \274 M-<	double lower right
+# GC	197 \305 M-E	single intersection	ACS_PLUS	_ _
+# GD	194 \302 M-B	single down-tick	ACS_TTEE	 |
+# GH	196 \304 M-D	single horizontal line	ACS_HLINE
+# GL	180 \264 M-4	single left tick	ACS_RTEE	-|
+# GR	195 \303 M-C	single right tick	ACS_LTEE	|-
+# GU	193 \301 M-A	single up tick		ACS_BTEE	_|_
+# GV	179 \263 M-3	single vertical line	ACS_VLINE
+# Gc	206 \316 M-N	double intersection
+# Gd	203 \313 M-K	double down tick
+# Gh	205 \315 M-M	double horizontal line
+# Gl	204 \204 M-L	double left tick
+# Gr	185 \271 M-9	double right tick
+# Gu	202 \312 M-J	double up tick
+# 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 
+# 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.
+# These terminfo names are invented.
+#
+acs_ulcorner			OTG2	str	G2	-		-	-----	single upper left
+acs_llcorner			OTG3	str	G3	-		-	-----	single lower left
+acs_urcorner			OTG1	str	G1	-		-	-----	single upper right
+acs_lrcorner			OTG4	str	G4	-		-	-----	single lower right
+acs_ltee			OTGR	str	GR	-		-	-----	tee pointing right
+acs_rtee			OTGL	str	GL	-		-	-----	tee pointing left
+acs_btee			OTGU	str	GU	-		-	-----	tee pointing up
+acs_ttee			OTGD	str	GD	-		-	-----	tee pointing down
+acs_hline			OTGH	str	GH	-		-	-----	single horizontal line
+acs_vline			OTGV	str	GV	-		-	-----	single vertical line
+acs_plus			OTGC	str	GC	-		-	-----	single intersection
+#
+#############################################################################
+#
+# 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	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.
+#
+#############################################################################
+#
+# The following sets edit modes for GNU EMACS
+# Local Variables:
+# case-fold-search:nil
+# truncate-lines:t
+# End:
diff --git a/include/MKhashsize.sh b/include/MKhashsize.sh
new file mode 100755
index 0000000..11b3111
--- /dev/null
+++ b/include/MKhashsize.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+##############################################################################
+# Copyright (c) 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"), #
+# 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: MKhashsize.sh,v 1.7 2006/10/22 00:45:39 tom Exp $
+#
+# MKhashsize.sh --- generate size include for hash functions
+#
+echo "/*"
+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`
+
+echo ""
+echo "#define CAPTABSIZE	${TABSIZE}"
+echo "#define HASHTABSIZE	(${TABSIZE} * 2)"
diff --git a/include/MKkey_defs.sh b/include/MKkey_defs.sh
new file mode 100755
index 0000000..b3cb4f7
--- /dev/null
+++ b/include/MKkey_defs.sh
@@ -0,0 +1,182 @@
+#! /bin/sh
+# $Id: MKkey_defs.sh,v 1.14 2003/12/06 17:10:09 tom Exp $
+##############################################################################
+# Copyright (c) 2001-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.                                                             #
+##############################################################################
+#
+# MKkey_defs.sh -- generate function-key definitions for curses.h
+#
+# Author: Thomas E. Dickey 2001
+#
+# Extract function-key definitions from the Caps file
+#
+: ${AWK-awk}
+DATA=${1-Caps}
+
+data=data$$
+pass1=pass1_$$
+pass2=pass2_$$
+pass3=pass3_$$
+pass4=pass4_$$
+trap 'rm -f $data pass[1234]_$$' 0 1 2 5 15
+
+# 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
+then
+	# POSIX
+	sed -e 's/[	][	]*/	/g' < $DATA |sort -n -k 6 >$data
+elif sort -n +5 $DATA >$data 2>/dev/null
+then
+	# SunOS (and SVr4, marked as obsolete but still recognized)
+	sed -e 's/[	][	]*/	/g' < $DATA |sort -n +5 >$data
+else
+	echo "Your sort utility is broken.  Please install one that works." >&2
+	exit 1
+fi
+
+# 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
+EOF
+
+cat <<EOF
+/*
+ * These definitions were generated by $0 $DATA
+ */
+EOF
+
+# KEY_RESET
+maxkey=345
+
+for pass in 1 2 3 4
+do
+
+output=pass${pass}_$$
+
+${AWK-awk} >$output <$data '
+function print_cols(text,cols) {
+	printf "%s", text
+	len = length(text);
+	while (len < cols) {
+		printf "	"
+		len += 8;
+	}
+}
+function decode(keycode) {
+	result = 0;
+	if (substr(keycode, 1, 2) == "0x") {
+		digits="0123456789abcdef";
+	} else if (substr(keycode, 1, 1) == "0") {
+		digits="01234567";
+	} else {
+		digits="0123456789";
+	}
+	while (length(keycode) != 0) {
+		digit=substr(keycode, 1, 1);
+		keycode=substr(keycode, 2);
+		result = result * length(digits) + index(digits, digit) - 1;
+	}
+	return result;
+}
+
+BEGIN	{
+	maxkey='$maxkey';
+	pass='$pass';
+	key_max=1;
+	bits=1;
+	while (key_max < maxkey) {
+		bits = bits + 1;
+		key_max = (key_max * 2) + 1;
+	}
+	octal_fmt = sprintf ("%%0%do", (bits + 2) / 3 + 1);
+}
+
+/^$/		{next;}
+/^#/		{next;}
+/^capalias/	{next;}
+/^infoalias/	{next;}
+
+$5 != "-" && $6 != "-" {
+		if ($6 == "+") {
+			if (pass == 1 || pass == 2)
+				next;
+			thiskey=maxkey + 1;
+		} else {
+			if (pass == 3)
+				next;
+			thiskey=decode($6);
+		}
+		if (thiskey > maxkey)
+			maxkey = thiskey;
+		if (pass == 2 || pass == 3) {
+			showkey=sprintf(octal_fmt, thiskey);
+			if ($5 == "KEY_F(0)" ) {
+				printf "#define "
+				print_cols("KEY_F0", 16);
+				print_cols(showkey, 16);
+				print "/* Function keys.  Space for 64 */";
+				printf "#define "
+				print_cols("KEY_F(n)", 16);
+				print_cols("(KEY_F0+(n))", 16);
+				print "/* Value of function key n */"
+			} else {
+				printf "#define "
+				print_cols($5, 16);
+				print_cols(showkey, 16);
+				printf "/*"
+				for (i = 8; i <= NF; i++)
+					printf " %s", $i
+				print " */"
+			}
+		}
+	}
+END	{
+		if (pass == 1) {
+			print maxkey;
+		} else if (pass == 4) {
+			print "";
+			printf "#define ";
+			print_cols("KEY_MAX", 16);
+			result = sprintf (octal_fmt, key_max);
+			print_cols(result, 16);
+			printf "/* Maximum key value is ";
+			printf octal_fmt, maxkey;
+			print " */";
+		}
+	}
+'
+if test $pass = 1 ; then
+	maxkey=`cat $pass1`
+fi
+
+done
+
+cat $pass2
+cat $pass3
+cat $pass4
diff --git a/include/MKncurses_def.sh b/include/MKncurses_def.sh
new file mode 100755
index 0000000..4aac865
--- /dev/null
+++ b/include/MKncurses_def.sh
@@ -0,0 +1,80 @@
+#! /bin/sh
+# $Id: MKncurses_def.sh,v 1.2 2003/10/25 16:19:46 tom Exp $
+##############################################################################
+# Copyright (c) 2000 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.                                                             #
+##############################################################################
+#
+# MKncurses_def.sh -- generate fallback definitions for ncurses_cfg.h
+#
+# Author: Thomas E. Dickey 2000
+#
+# Given the choice between constructs such as
+#
+#	#if defined(foo) && foo
+#	#if foo
+#
+# we chose the latter.  It is guaranteed by the language standard, and there
+# appear to be no broken compilers that do not honor that detail.  But some
+# people want to use gcc's -Wundef option (corresponding to one of the less
+# useful features in Watcom's compiler) to check for misspellings.  So we
+# generate a set of fallback definitions to quiet the warnings without making
+# the code ugly.
+#
+DEFS="${1-ncurses_defs}"
+cat <<EOF
+/*
+ * This file is generated by $0
+ */
+
+#ifndef NC_DEFINE_H
+#define NC_DEFINE_H 1
+
+EOF
+
+${AWK-awk} <$DEFS '
+!/^[@#]/ {
+	if ( NF == 1 )
+	{
+		print "#ifndef", $1
+		print "#define", $1, "0"
+		print "#endif"
+		print ""
+	} else if ( NF != 0 ) {
+		print "#ifndef", $1
+		printf "#define"
+		for (n = 1; n <= NF; n++) {
+			printf " %s", $n
+		}
+		print ""
+		print "#endif"
+		print ""
+	}
+}
+END	{
+print "#endif /* NC_DEFINE_H */"
+	}
+'
diff --git a/include/MKparametrized.sh b/include/MKparametrized.sh
new file mode 100755
index 0000000..2825c82
--- /dev/null
+++ b/include/MKparametrized.sh
@@ -0,0 +1,62 @@
+#!/bin/sh
+##############################################################################
+# Copyright (c) 1998-2000,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"), #
+# 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: MKparametrized.sh,v 1.6 2006/04/22 21:36:16 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}"
+cat <<EOF
+/*
+ * 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[] = {
+EOF
+
+# We detect whether % translations should be done by looking for #[0-9] in the
+# description field.  We presently suppress padding translation only for the
+# XENIX acs_* capabilities.  Maybe someday we'll dedicate a flag field for
+# this, that would be cleaner....
+
+${AWK-awk} <$CAPS '
+$3 != "str"	{next;}
+$1 ~ /^acs_/	{print "-1,\t/* ", $2, " */"; count++; next;}
+$0 ~ /#[0-9]/	{print "1,\t/* ", $2, " */"; count++; next;}
+		{print "0,\t/* ", $2, " */"; count++;}
+END		{printf("} /* %d entries */;\n\n", count);}
+'
+
diff --git a/include/MKterm.h.awk.in b/include/MKterm.h.awk.in
new file mode 100644
index 0000000..5fc2052
--- /dev/null
+++ b/include/MKterm.h.awk.in
@@ -0,0 +1,320 @@
+# vile:awkmode
+BEGIN		{
+		    print  "/****************************************************************************"
+		    print  " * Copyright (c) 1998-2007,2008 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.50 2008/05/24 23:13:59 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_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  "/* Add definitions to make termio look like termios."
+		    print  " * But ifdef it, since there are some implementations"
+		    print  " * that try to do this for us in a fake <termio.h>."
+		    print  " */"
+		    print  "#ifndef TCSANOW"
+		    print  "#define TCSANOW TCSETA"
+		    print  "#endif"
+		    print  "#ifndef TCSADRAIN"
+		    print  "#define TCSADRAIN TCSETAW"
+		    print  "#endif"
+		    print  "#ifndef TCSAFLUSH"
+		    print  "#define TCSAFLUSH TCSETAF"
+		    print  "#endif"
+		    print  "#ifndef tcsetattr"
+		    print  "#define tcsetattr(fd, cmd, arg) ioctl(fd, cmd, arg)"
+		    print  "#endif"
+		    print  "#ifndef tcgetattr"
+		    print  "#define tcgetattr(fd, arg) ioctl(fd, TCGETA, arg)"
+		    print  "#endif"
+		    print  "#ifndef cfgetospeed"
+		    print  "#define cfgetospeed(t) ((t)->c_cflag & CBAUD)"
+		    print  "#endif"
+		    print  "#ifndef TCIFLUSH "
+		    print  "#define TCIFLUSH 0"
+		    print  "#endif"
+		    print  "#ifndef TCOFLUSH "
+		    print  "#define TCOFLUSH 1"
+		    print  "#endif"
+		    print  "#ifndef TCIOFLUSH "
+		    print  "#define TCIOFLUSH 2"
+		    print  "#endif"
+		    print  "#ifndef tcflush"
+		    print  "#define tcflush(fd, arg) ioctl(fd, TCFLSH, arg)"
+		    print  "#endif"
+		    print  ""
+		    print  "#else /* !HAVE_TERMIO_H */"
+		    print  ""
+		    print  "#undef TERMIOS"
+		    print  "#include <sgtty.h>"
+		    print  "#include <sys/ioctl.h>"
+		    print  "#define TTY struct sgttyb"
+		    print  ""
+		    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 @BROKEN_LINKER@ || @cf_cv_enable_reentrant@"
+			print  "NCURSES_WRAPPED_VAR(TERMINAL *, cur_term);"
+			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 cur_term   NCURSES_PUBLIC_VAR(cur_term())"
+			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(TERMINAL *) cur_term;"
+			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(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  "#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  "#ifdef __cplusplus"
+			print  "}"
+			print  "#endif"
+			print  ""
+			print  "#endif /* NCURSES_TERM_H_incl */"
+		}
diff --git a/include/Makefile.in b/include/Makefile.in
new file mode 100644
index 0000000..1a48a17
--- /dev/null
+++ b/include/Makefile.in
@@ -0,0 +1,126 @@
+# $Id: Makefile.in,v 1.35 2001/12/08 18:50:06 tom Exp $
+##############################################################################
+# Copyright (c) 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 "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		= @DESTDIR@
+srcdir		= @srcdir@
+prefix		= @prefix@
+exec_prefix	= @exec_prefix@
+includedir	= @includedir@
+
+INSTALL		= @INSTALL@
+INSTALL_DATA	= @INSTALL_DATA@
+
+AWK		= @AWK@
+LN_S		= @LN_S@
+
+VERSION		= @cf_cv_rel_version@
+
+# The "Caps" file specifies the terminfo database format, as well as the list
+# of function keys.
+TERMINFO_CAPS	= $(srcdir)/@TERMINFO_CAPS@
+
+# These files are generated by the configure script
+CONFIG_SRC = \
+	MKterm.h.awk \
+	curses.head \
+	termcap.h \
+	unctrl.h
+
+# These files are generated by this makefile
+AUTO_SRC = \
+	curses.h \
+	hashsize.h \
+	ncurses_def.h \
+	parametrized.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) sh $(srcdir)/MKkey_defs.sh $(TERMINFO_CAPS) >>$@
+	sh -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) > $@
+	sh $(srcdir)/edit_cfg.sh ../include/ncurses_cfg.h $@
+
+hashsize.h: $(TERMINFO_CAPS) $(srcdir)/MKhashsize.sh
+	sh $(srcdir)/MKhashsize.sh $(TERMINFO_CAPS) >$@
+
+ncurses_def.h: $(srcdir)/ncurses_defs $(srcdir)/MKncurses_def.sh
+	AWK=$(AWK) sh $(srcdir)/MKncurses_def.sh $(srcdir)/ncurses_defs >$@
+
+parametrized.h: $(TERMINFO_CAPS) $(srcdir)/MKparametrized.sh
+	AWK=$(AWK) sh $(srcdir)/MKparametrized.sh $(TERMINFO_CAPS) >$@
+
+tags:
+	ctags *.[ch]
+
+@MAKE_UPPER_TAGS@TAGS:
+@MAKE_UPPER_TAGS@	etags *.[ch]
+
+mostlyclean ::
+	-rm -f core tags TAGS *~ *.bak *.i *.ln *.atac trace
+
+clean :: mostlyclean
+	-rm -f $(AUTO_SRC)
+
+distclean :: clean
+	-rm -f Makefile $(CONFIG_SRC)
+
+realclean :: distclean
+
+###############################################################################
+# The remainder of this file is automatically generated during configuration
+###############################################################################
diff --git a/include/capdefaults.c b/include/capdefaults.c
new file mode 100644
index 0000000..33f2fe8
--- /dev/null
+++ b/include/capdefaults.c
@@ -0,0 +1,86 @@
+/****************************************************************************
+ * Copyright (c) 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            *
+ * "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: capdefaults.c,v 1.13 2008/08/04 12:33:42 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
+     * offsets to different structures.  See the file Caps for explanations of
+     * these conversions.
+     *
+     * Note:  This code is the functional inverse of the first part of
+     * postprocess_termcap().
+     */
+{
+    char *sp;
+    short capval;
+
+#define EXTRACT_DELAY(str) \
+    	(short) (sp = strchr(str, '*'), sp ? atoi(sp+1) : 0)
+
+    /* current (4.4BSD) capabilities marked obsolete */
+    if (VALID_STRING(carriage_return)
+	&& (capval = EXTRACT_DELAY(carriage_return)))
+	carriage_return_delay = capval;
+    if (VALID_STRING(newline) && (capval = EXTRACT_DELAY(newline)))
+	new_line_delay = capval;
+
+    /* current (4.4BSD) capabilities not obsolete */
+    if (!VALID_STRING(termcap_init2) && VALID_STRING(init_3string)) {
+	termcap_init2 = init_3string;
+	init_3string = ABSENT_STRING;
+    }
+    if (!VALID_STRING(termcap_reset)
+     && VALID_STRING(reset_2string)
+     && !VALID_STRING(reset_1string)
+     && !VALID_STRING(reset_3string)) {
+	termcap_reset = reset_2string;
+	reset_2string = ABSENT_STRING;
+    }
+    if (magic_cookie_glitch_ul == ABSENT_NUMERIC
+	&& magic_cookie_glitch != ABSENT_NUMERIC
+	&& VALID_STRING(enter_underline_mode))
+	magic_cookie_glitch_ul = magic_cookie_glitch;
+
+    /* totally obsolete capabilities */
+    linefeed_is_newline = (char) (VALID_STRING(newline)
+				  && (strcmp("\n", newline) == 0));
+    if (VALID_STRING(cursor_left)
+	&& (capval = EXTRACT_DELAY(cursor_left)))
+	backspace_delay = capval;
+    if (VALID_STRING(tab) && (capval = EXTRACT_DELAY(tab)))
+	horizontal_tab_delay = capval;
+#undef EXTRACT_DELAY
+}
diff --git a/include/curses.h.in b/include/curses.h.in
new file mode 100644
index 0000000..53da9a5
--- /dev/null
+++ b/include/curses.h.in
@@ -0,0 +1,1231 @@
+/****************************************************************************
+ * Copyright (c) 1998-2007,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            *
+ * "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.187 2008/08/30 20:11:29 tom Exp $ */
+
+#ifndef __NCURSES_H
+#define __NCURSES_H
+
+#define CURSES 1
+#define CURSES_H 1
+
+/* This should be defined for the enhanced functionality to be visible.
+ * However, some of the wide-character (enhanced) functionality is missing.
+ * So we do not define it (yet).
+#define _XOPEN_CURSES 1
+ */
+
+/* These are defined only in curses.h, and are used for conditional compiles */
+#define NCURSES_VERSION_MAJOR @NCURSES_MAJOR@
+#define NCURSES_VERSION_MINOR @NCURSES_MINOR@
+#define NCURSES_VERSION_PATCH @NCURSES_PATCH@
+
+/* This is defined in more than one ncurses header, for identification */
+#undef  NCURSES_VERSION
+#define NCURSES_VERSION "@NCURSES_MAJOR@.@NCURSES_MINOR@"
+
+/*
+ * Identify the mouse encoding version.
+ */
+#define NCURSES_MOUSE_VERSION @NCURSES_MOUSE_VERSION@
+
+/*
+ * Definitions to facilitate DLL's.
+ */
+#include <ncurses_dll.h>
+
+/*
+ * User-definable tweak to disable the include of <stdbool.h>.
+ */
+#ifndef NCURSES_ENABLE_STDBOOL_H
+#define NCURSES_ENABLE_STDBOOL_H @cf_cv_header_stdbool_h@
+#endif
+
+/*
+ * NCURSES_ATTR_T is used to quiet compiler warnings when building ncurses
+ * configured using --disable-macros.
+ */
+#ifdef NCURSES_NOMACROS
+#ifndef NCURSES_ATTR_T
+#define NCURSES_ATTR_T attr_t
+#endif
+#endif /* NCURSES_NOMACROS */
+
+#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 @NCURSES_CONST@
+
+#undef NCURSES_INLINE
+#define NCURSES_INLINE @NCURSES_INLINE@
+
+/*
+ * The internal type used for color values
+ */
+#undef	NCURSES_COLOR_T
+#define	NCURSES_COLOR_T short
+
+/*
+ * Definition used to make WINDOW and similar structs opaque.
+ */
+#ifndef @cf_cv_enable_opaque@
+#define NCURSES_OPAQUE @NCURSES_OPAQUE@
+#endif
+
+/*
+ * The internal type used for window dimensions.
+ */
+#undef	NCURSES_SIZE_T
+#define	NCURSES_SIZE_T @NCURSES_SIZE_T@
+
+/*
+ * Control whether tparm() supports varargs or fixed-parameter list.
+ */
+#undef NCURSES_TPARM_VARARGS
+#define NCURSES_TPARM_VARARGS @NCURSES_TPARM_VARARGS@
+
+/*
+ * 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 @NCURSES_CH_T@
+
+#if @cf_cv_enable_lp64@ && defined(_LP64)
+typedef unsigned chtype;
+typedef unsigned mmask_t;
+#else
+typedef unsigned @cf_cv_typeof_chtype@ chtype;
+typedef unsigned @cf_cv_typeof_mmask_t@ mmask_t;
+#endif
+
+#include <stdio.h>
+#include <unctrl.h>
+#include <stdarg.h>	/* we need va_list */
+#ifdef _XOPEN_SOURCE_EXTENDED
+#include <stddef.h>	/* we want wchar_t */
+#endif /* _XOPEN_SOURCE_EXTENDED */
+
+/* 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 @cf_cv_type_of_bool@ NCURSES_BOOL;
+
+#if @USE_CXX_BOOL@	/* __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
+
+/* 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 @BROKEN_LINKER@ || @cf_cv_enable_reentrant@
+NCURSES_WRAPPED_VAR(chtype*, acs_map);
+#define acs_map (_nc_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 */
+
+#ifdef _XOPEN_SOURCE_EXTENDED
+
+#if @NCURSES_LIBUTF8@
+#ifdef mblen			/* libutf8.h defines it w/o undefining first */
+#undef mblen
+#endif
+#include <libutf8.h>
+#endif
+
+#if @NEED_WCHAR_H@
+#include <wchar.h>		/* ...to get mbstate_t, etc. */
+#endif
+
+#if @NCURSES_WCHAR_T@
+typedef unsigned short wchar_t@NCURSES_OK_WCHAR_T@;
+#endif
+
+#if @NCURSES_WINT_T@
+typedef unsigned int wint_t@NCURSES_OK_WCHAR_T@;
+#endif
+
+#define CCHARW_MAX	5
+typedef struct
+{
+    attr_t	attr;
+    wchar_t	chars[CCHARW_MAX];
+#if @NCURSES_EXT_COLORS@
+#undef NCURSES_EXT_COLORS
+#define NCURSES_EXT_COLORS @NCURSES_PATCH@
+    int		ext_color;	/* color pair, must be more than 16-bits */
+#endif
+}
+cchar_t;
+
+#endif /* _XOPEN_SOURCE_EXTENDED */
+
+#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 */
+
+#ifdef _XOPEN_SOURCE_EXTENDED
+	cchar_t  _bkgrnd;	/* current background char/attribute pair */
+#if @NCURSES_EXT_COLORS@
+	int	_color;		/* current color-pair for non-space character */
+#endif
+#endif
+};
+#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.
+ * 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
+
+/*
+ * 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 *, short *, 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, short, 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, short, 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 (short,short*,short*,short*);	/* implemented */
+extern NCURSES_EXPORT(int) color_set (short,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 (short,short,short,short);	/* implemented */
+extern NCURSES_EXPORT(int) init_pair (short,short,short);		/* 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, short, 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, short, 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 (short,short*,short*);		/* 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,short,void*);	/* implemented */
+extern NCURSES_EXPORT(int) slk_clear (void);				/* implemented */
+extern NCURSES_EXPORT(int) slk_color (short);				/* 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(int) vidattr (chtype);				/* implemented */
+extern NCURSES_EXPORT(int) vidputs (chtype, int (*)(int));		/* 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 *, short *, 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, short, 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, short, 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*,short,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 *, long,long,long,long,long,long,long,long,long);	/* special */
+extern NCURSES_EXPORT(char *) tparm_varargs (NCURSES_CONST char *, ...);	/* special */
+#endif
+
+/*
+ * 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.
+ */
+#ifndef _XOPEN_SOURCE_EXTENDED
+#define vid_attr(a,pair,opts) vidattr(a)
+#endif
+
+/*
+ * These functions are extensions - not in X/Open Curses.
+ */
+#if @NCURSES_EXT_FUNCS@
+#undef  NCURSES_EXT_FUNCS
+#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) assume_default_colors (int, int);
+extern NCURSES_EXPORT(int) define_key (const char *, int);
+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_scrollok (const WINDOW *);	/* generated */
+extern NCURSES_EXPORT(bool) is_syncok (const WINDOW *);		/* generated */
+extern NCURSES_EXPORT(int) wgetscrreg (const WINDOW *, int *, int *); /* generated */
+
+#else
+#define curses_version() NCURSES_VERSION
+#endif
+
+/* attributes */
+
+#define NCURSES_ATTR_SHIFT       8
+#define NCURSES_BITS(mask,shift) ((mask) << ((shift) + NCURSES_ATTR_SHIFT))
+
+#define A_NORMAL	(@cf_cv_1UL@ - @cf_cv_1UL@)
+#define A_ATTRIBUTES	NCURSES_BITS(~(@cf_cv_1UL@ - @cf_cv_1UL@),0)
+#define A_CHARTEXT	(NCURSES_BITS(@cf_cv_1UL@,0) - @cf_cv_1UL@)
+#define A_COLOR		NCURSES_BITS(((@cf_cv_1UL@) << 8) - @cf_cv_1UL@,0)
+#define A_STANDOUT	NCURSES_BITS(@cf_cv_1UL@,8)
+#define A_UNDERLINE	NCURSES_BITS(@cf_cv_1UL@,9)
+#define A_REVERSE	NCURSES_BITS(@cf_cv_1UL@,10)
+#define A_BLINK		NCURSES_BITS(@cf_cv_1UL@,11)
+#define A_DIM		NCURSES_BITS(@cf_cv_1UL@,12)
+#define A_BOLD		NCURSES_BITS(@cf_cv_1UL@,13)
+#define A_ALTCHARSET	NCURSES_BITS(@cf_cv_1UL@,14)
+#define A_INVIS		NCURSES_BITS(@cf_cv_1UL@,15)
+#define A_PROTECT	NCURSES_BITS(@cf_cv_1UL@,16)
+#define A_HORIZONTAL	NCURSES_BITS(@cf_cv_1UL@,17)
+#define A_LEFT		NCURSES_BITS(@cf_cv_1UL@,18)
+#define A_LOW		NCURSES_BITS(@cf_cv_1UL@,19)
+#define A_RIGHT		NCURSES_BITS(@cf_cv_1UL@,20)
+#define A_TOP		NCURSES_BITS(@cf_cv_1UL@,21)
+#define A_VERTICAL	NCURSES_BITS(@cf_cv_1UL@,22)
+
+/*
+ * 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)		((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 defined(_XOPEN_SOURCE_EXTENDED) && @NCURSES_EXT_COLORS@
+#define wattrset(win,at)	((win)->_color = PAIR_NUMBER(at), \
+				 (win)->_attrs = (at))
+#else
+#define wattrset(win,at)	((win)->_attrs = (at))
+#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)->_maxy+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,(((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)->_bkgd)
+#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 defined(_XOPEN_SOURCE_EXTENDED) && @NCURSES_EXT_COLORS@
+#define wattr_set(win,a,p,opts)		((win)->_attrs = ((a) & ~A_COLOR), \
+					 (win)->_color = (p), \
+					 OK)
+#define wattr_get(win,a,p,opts)		((void)((a) != (void *)0 && (*(a) = (win)->_attrs)), \
+					 (void)((p) != (void *)0 && (*(p) = (win)->_color)), \
+					 OK)
+#else
+#define wattr_set(win,a,p,opts)		((win)->_attrs = (((a) & ~A_COLOR) | COLOR_PAIR(p)), OK)
+#define wattr_get(win,a,p,opts)		((void)((a) != (void *)0 && (*(a) = (win)->_attrs)), \
+					 (void)((p) != (void *)0 && (*(p) = PAIR_NUMBER((win)->_attrs))), \
+					 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 !@HAVE_VSSCANF@
+#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 @NCURSES_EXT_FUNCS@
+#if !NCURSES_OPAQUE
+#define is_cleared(win)		((win)->_clear)
+#define is_idcok(win)		((win)->_idcok)
+#define is_idlok(win)		((win)->_idlok)
+#define is_immedok(win)		((win)->_immed)
+#define is_keypad(win)		((win)->_use_keypad)
+#define is_leaveok(win)		((win)->_leaveok)
+#define is_nodelay(win)		((win)->_delay == 0)
+#define is_notimeout(win)	((win)->_notimeout)
+#define is_scrollok(win)	((win)->_scroll)
+#define is_syncok(win)		((win)->_sync)
+#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 @cf_cv_enable_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
new file mode 100644
index 0000000..aef7c37
--- /dev/null
+++ b/include/curses.tail
@@ -0,0 +1,179 @@
+/* $Id: curses.tail,v 1.16 2008/07/05 20:20:38 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(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 */
+
+#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? */
+
+/* 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);
+#ifdef _XOPEN_SOURCE_EXTENDED
+#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
+
+#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.wide b/include/curses.wide
new file mode 100644
index 0000000..0c799e4
--- /dev/null
+++ b/include/curses.wide
@@ -0,0 +1,252 @@
+/* $Id: curses.wide,v 1.34 2007/03/10 17:52:23 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).
+ */
+#ifdef _XOPEN_SOURCE_EXTENDED
+
+extern NCURSES_EXPORT_VAR(cchar_t *) _nc_wacs;
+
+#define NCURSES_WACS(c)	(&_nc_wacs[(unsigned char)c])
+
+#define WACS_BSSB	NCURSES_WACS('l')
+#define WACS_SSBB	NCURSES_WACS('m')
+#define WACS_BBSS	NCURSES_WACS('k')
+#define WACS_SBBS	NCURSES_WACS('j')
+#define WACS_SBSS	NCURSES_WACS('u')
+#define WACS_SSSB	NCURSES_WACS('t')
+#define WACS_SSBS	NCURSES_WACS('v')
+#define WACS_BSSS	NCURSES_WACS('w')
+#define WACS_BSBS	NCURSES_WACS('q')
+#define WACS_SBSB	NCURSES_WACS('x')
+#define WACS_SSSS	NCURSES_WACS('n')
+
+#define WACS_ULCORNER	WACS_BSSB
+#define WACS_LLCORNER	WACS_SSBB
+#define WACS_URCORNER	WACS_BBSS
+#define WACS_LRCORNER	WACS_SBBS
+#define WACS_RTEE	WACS_SBSS
+#define WACS_LTEE	WACS_SSSB
+#define WACS_BTEE	WACS_SSBS
+#define WACS_TTEE	WACS_BSSS
+#define WACS_HLINE	WACS_BSBS
+#define WACS_VLINE	WACS_SBSB
+#define WACS_PLUS	WACS_SSSS
+
+#define WACS_S1		NCURSES_WACS('o') /* scan line 1 */
+#define WACS_S9 	NCURSES_WACS('s') /* scan line 9 */
+#define WACS_DIAMOND	NCURSES_WACS('`') /* diamond */
+#define WACS_CKBOARD	NCURSES_WACS('a') /* checker board */
+#define WACS_DEGREE	NCURSES_WACS('f') /* degree symbol */
+#define WACS_PLMINUS	NCURSES_WACS('g') /* plus/minus */
+#define WACS_BULLET	NCURSES_WACS('~') /* bullet */
+
+	/* Teletype 5410v1 symbols */
+#define WACS_LARROW	NCURSES_WACS(',') /* arrow left */
+#define WACS_RARROW	NCURSES_WACS('+') /* arrow right */
+#define WACS_DARROW	NCURSES_WACS('.') /* arrow down */
+#define WACS_UARROW	NCURSES_WACS('-') /* arrow up */
+#define WACS_BOARD	NCURSES_WACS('h') /* board of squares */
+#define WACS_LANTERN	NCURSES_WACS('i') /* lantern symbol */
+#define WACS_BLOCK	NCURSES_WACS('0') /* solid square block */
+
+	/* ncurses extensions */
+#define WACS_S3		NCURSES_WACS('p') /* scan line 3 */
+#define WACS_S7		NCURSES_WACS('r') /* scan line 7 */
+#define WACS_LEQUAL	NCURSES_WACS('y') /* less/equal */
+#define WACS_GEQUAL	NCURSES_WACS('z') /* greater/equal */
+#define WACS_PI		NCURSES_WACS('{') /* Pi */
+#define WACS_NEQUAL	NCURSES_WACS('|') /* not equal */
+#define WACS_STERLING	NCURSES_WACS('}') /* UK pound sign */
+
+/*
+ * Function prototypes for wide-character operations.
+ *
+ * "generated" comments should include ":WIDEC" to make the corresponding
+ * functions ifdef'd in lib_gen.c
+ *
+ * "implemented" comments do not need this marker.
+ */
+
+extern NCURSES_EXPORT(int) add_wch (const cchar_t *);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) add_wchnstr (const cchar_t *, int);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) add_wchstr (const cchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) addnwstr (const wchar_t *, int);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) addwstr (const wchar_t *);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) bkgrnd (const cchar_t *);			/* generated:WIDEC */
+extern NCURSES_EXPORT(void) bkgrndset (const cchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) border_set (const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*); /* generated:WIDEC */
+extern NCURSES_EXPORT(int) box_set (WINDOW *, const cchar_t *, const cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) echo_wchar (const cchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) erasewchar (wchar_t*);			/* implemented */
+extern NCURSES_EXPORT(int) get_wch (wint_t *);				/* generated:WIDEC */
+extern NCURSES_EXPORT(int) get_wstr (wint_t *);				/* generated:WIDEC */
+extern NCURSES_EXPORT(int) getbkgrnd (cchar_t *);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) getcchar (const cchar_t *, wchar_t*, attr_t*, short*, void*);	/* implemented */
+extern NCURSES_EXPORT(int) getn_wstr (wint_t *, int);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) hline_set (const cchar_t *, int);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) in_wch (cchar_t *);				/* generated:WIDEC */
+extern NCURSES_EXPORT(int) in_wchnstr (cchar_t *, int);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) in_wchstr (cchar_t *);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) innwstr (wchar_t *, int);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) ins_nwstr (const wchar_t *, int);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) ins_wch (const cchar_t *);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) ins_wstr (const wchar_t *);			/* generated:WIDEC */
+extern NCURSES_EXPORT(int) inwstr (wchar_t *);				/* generated:WIDEC */
+extern NCURSES_EXPORT(NCURSES_CONST char*) key_name (wchar_t);		/* implemented */
+extern NCURSES_EXPORT(int) killwchar (wchar_t *);			/* implemented */
+extern NCURSES_EXPORT(int) mvadd_wch (int, int, const cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvadd_wchnstr (int, int, const cchar_t *, int);/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvadd_wchstr (int, int, const cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvaddnwstr (int, int, const wchar_t *, int);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvaddwstr (int, int, const wchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvget_wch (int, int, wint_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvget_wstr (int, int, wint_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvgetn_wstr (int, int, wint_t *, int);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvhline_set (int, int, const cchar_t *, int);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvin_wch (int, int, cchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvin_wchnstr (int, int, cchar_t *, int);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvin_wchstr (int, int, cchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvinnwstr (int, int, wchar_t *, int);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvins_nwstr (int, int, const wchar_t *, int);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvins_wch (int, int, const cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvins_wstr (int, int, const wchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvinwstr (int, int, wchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvvline_set (int, int, const cchar_t *, int);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwadd_wch (WINDOW *, int, int, const cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwadd_wchnstr (WINDOW *, int, int, const cchar_t *, int); /* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwadd_wchstr (WINDOW *, int, int, const cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwaddnwstr (WINDOW *, int, int, const wchar_t *, int);/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwaddwstr (WINDOW *, int, int, const wchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwget_wch (WINDOW *, int, int, wint_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwget_wstr (WINDOW *, int, int, wint_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwgetn_wstr (WINDOW *, int, int, wint_t *, int);/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwhline_set (WINDOW *, int, int, const cchar_t *, int);/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwin_wch (WINDOW *, int, int, cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwin_wchnstr (WINDOW *, int,int, cchar_t *,int);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwin_wchstr (WINDOW *, int, int, cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwinnwstr (WINDOW *, int, int, wchar_t *, int);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwins_nwstr (WINDOW *, int,int, const wchar_t *,int); /* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwins_wch (WINDOW *, int, int, const cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwins_wstr (WINDOW *, int, int, const wchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwinwstr (WINDOW *, int, int, wchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) mvwvline_set (WINDOW *, int,int, const cchar_t *,int); /* generated:WIDEC */
+extern NCURSES_EXPORT(int) pecho_wchar (WINDOW *, const cchar_t *);	/* implemented */
+extern NCURSES_EXPORT(int) setcchar (cchar_t *, const wchar_t *, const attr_t, short, const void *);	/* implemented */
+extern NCURSES_EXPORT(int) slk_wset (int, const wchar_t *, int);	/* implemented */
+extern NCURSES_EXPORT(attr_t) term_attrs (void);			/* implemented */
+extern NCURSES_EXPORT(int) unget_wch (const wchar_t);			/* implemented */
+extern NCURSES_EXPORT(int) vid_attr (attr_t, short, void *);		/* implemented */
+extern NCURSES_EXPORT(int) vid_puts (attr_t, short, void *, int (*)(int)); /* implemented */
+extern NCURSES_EXPORT(int) vline_set (const cchar_t *, int);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) wadd_wch (WINDOW *,const cchar_t *);		/* implemented */
+extern NCURSES_EXPORT(int) wadd_wchnstr (WINDOW *,const cchar_t *,int);	/* implemented */
+extern NCURSES_EXPORT(int) wadd_wchstr (WINDOW *,const cchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) waddnwstr (WINDOW *,const wchar_t *,int);	/* implemented */
+extern NCURSES_EXPORT(int) waddwstr (WINDOW *,const wchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) wbkgrnd (WINDOW *,const cchar_t *);		/* implemented */
+extern NCURSES_EXPORT(void) wbkgrndset (WINDOW *,const cchar_t *);	/* implemented */
+extern NCURSES_EXPORT(int) wborder_set (WINDOW *,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*);	/* implemented */
+extern NCURSES_EXPORT(int) wecho_wchar (WINDOW *, const cchar_t *);	/* implemented */
+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) 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 */
+extern NCURSES_EXPORT(int) win_wchstr (WINDOW *, cchar_t *);		/* generated:WIDEC */
+extern NCURSES_EXPORT(int) winnwstr (WINDOW *, wchar_t *, int);		/* implemented */
+extern NCURSES_EXPORT(int) wins_nwstr (WINDOW *, const wchar_t *, int);	/* implemented */
+extern NCURSES_EXPORT(int) wins_wch (WINDOW *, const cchar_t *);	/* implemented */
+extern NCURSES_EXPORT(int) wins_wstr (WINDOW *, const wchar_t *);	/* generated:WIDEC */
+extern NCURSES_EXPORT(int) winwstr (WINDOW *, wchar_t *);		/* implemented */
+extern NCURSES_EXPORT(wchar_t*) wunctrl (cchar_t *);			/* implemented */
+extern NCURSES_EXPORT(int) wvline_set (WINDOW *, const cchar_t *, int);	/* implemented */
+
+#ifndef NCURSES_NOMACROS
+
+/*
+ * XSI curses macros for XPG4 conformance.
+ */
+#define add_wch(c)			wadd_wch(stdscr,c)
+#define add_wchnstr(str,n)		wadd_wchnstr(stdscr,str,n)
+#define add_wchstr(str)			wadd_wchstr(stdscr,str)
+#define addnwstr(wstr,n)		waddnwstr(stdscr,wstr,n)
+#define addwstr(wstr)			waddwstr(stdscr,wstr)
+#define bkgrnd(c)			wbkgrnd(stdscr,c)
+#define bkgrndset(c)			wbkgrndset(stdscr,c)
+#define border_set(l,r,t,b,tl,tr,bl,br) wborder_set(stdscr,l,r,t,b,tl,tr,bl,br)
+#define box_set(w,v,h)			wborder_set(w,v,v,h,h,0,0,0,0)
+#define echo_wchar(c)			wecho_wchar(stdscr,c)
+#define get_wch(c)			wget_wch(stdscr,c)
+#define get_wstr(t)			wget_wstr(stdscr,t)
+#define getbkgrnd(wch)			wgetbkgrnd(stdscr,wch)
+#define getn_wstr(t,n)			wgetn_wstr(stdscr,t,n)
+#define hline_set(c,n)			whline_set(stdscr,c,n)
+#define in_wch(c)			win_wch(stdscr,c)
+#define in_wchnstr(c,n)			win_wchnstr(stdscr,c,n)
+#define in_wchstr(c)			win_wchstr(stdscr,c)
+#define innwstr(c,n)			winnwstr(stdscr,c,n)
+#define ins_nwstr(t,n)			wins_nwstr(stdscr,t,n)
+#define ins_wch(c)			wins_wch(stdscr,c)
+#define ins_wstr(t)			wins_wstr(stdscr,t)
+#define inwstr(c)			winwstr(stdscr,c)
+#define vline_set(c,n)			wvline_set(stdscr,c,n)
+#define wadd_wchstr(win,str)		wadd_wchnstr(win,str,-1)
+#define waddwstr(win,wstr)		waddnwstr(win,wstr,-1)
+#define wget_wstr(w,t)			wgetn_wstr(w,t,-1)
+#define win_wchstr(w,c)			win_wchnstr(w,c,-1)
+#define wins_wstr(w,t)			wins_nwstr(w,t,-1)
+
+#if !NCURSES_OPAQUE
+#define wgetbkgrnd(win,wch)		(*wch = win->_bkgrnd, OK)
+#endif
+
+#define mvadd_wch(y,x,c)		mvwadd_wch(stdscr,y,x,c)
+#define mvadd_wchnstr(y,x,s,n)		mvwadd_wchnstr(stdscr,y,x,s,n)
+#define mvadd_wchstr(y,x,s)		mvwadd_wchstr(stdscr,y,x,s)
+#define mvaddnwstr(y,x,wstr,n)		mvwaddnwstr(stdscr,y,x,wstr,n)
+#define mvaddwstr(y,x,wstr)		mvwaddwstr(stdscr,y,x,wstr)
+#define mvget_wch(y,x,c)		mvwget_wch(stdscr,y,x,c)
+#define mvget_wstr(y,x,t)		mvwget_wstr(stdscr,y,x,t)
+#define mvgetn_wstr(y,x,t,n)		mvwgetn_wstr(stdscr,y,x,t,n)
+#define mvhline_set(y,x,c,n)		mvwhline_set(stdscr,y,x,c,n)
+#define mvin_wch(y,x,c)			mvwin_wch(stdscr,y,x,c)
+#define mvin_wchnstr(y,x,c,n)		mvwin_wchnstr(stdscr,y,x,c,n)
+#define mvin_wchstr(y,x,c)		mvwin_wchstr(stdscr,y,x,c)
+#define mvinnwstr(y,x,c,n)		mvwinnwstr(stdscr,y,x,c,n)
+#define mvins_nwstr(y,x,t,n)		mvwins_nwstr(stdscr,y,x,t,n)
+#define mvins_wch(y,x,c)		mvwins_wch(stdscr,y,x,c)
+#define mvins_wstr(y,x,t)		mvwins_wstr(stdscr,y,x,t)
+#define mvinwstr(y,x,c)			mvwinwstr(stdscr,y,x,c)
+#define mvvline_set(y,x,c,n)		mvwvline_set(stdscr,y,x,c,n)
+
+#define mvwadd_wch(win,y,x,c)		(wmove(win,y,x) == ERR ? ERR : wadd_wch(win,c))
+#define mvwadd_wchnstr(win,y,x,s,n)	(wmove(win,y,x) == ERR ? ERR : wadd_wchnstr(win,s,n))
+#define mvwadd_wchstr(win,y,x,s)	(wmove(win,y,x) == ERR ? ERR : wadd_wchstr(win,s))
+#define mvwaddnwstr(win,y,x,wstr,n)	(wmove(win,y,x) == ERR ? ERR : waddnwstr(win,wstr,n))
+#define mvwaddwstr(win,y,x,wstr)	(wmove(win,y,x) == ERR ? ERR : waddwstr(win,wstr))
+#define mvwget_wch(win,y,x,c)		(wmove(win,y,x) == ERR ? ERR : wget_wch(win,c))
+#define mvwget_wstr(win,y,x,t)		(wmove(win,y,x) == ERR ? ERR : wget_wstr(win,t))
+#define mvwgetn_wstr(win,y,x,t,n)	(wmove(win,y,x) == ERR ? ERR : wgetn_wstr(win,t,n))
+#define mvwhline_set(win,y,x,c,n)	(wmove(win,y,x) == ERR ? ERR : whline_set(win,c,n))
+#define mvwin_wch(win,y,x,c)		(wmove(win,y,x) == ERR ? ERR : win_wch(win,c))
+#define mvwin_wchnstr(win,y,x,c,n)	(wmove(win,y,x) == ERR ? ERR : win_wchnstr(win,c,n))
+#define mvwin_wchstr(win,y,x,c)		(wmove(win,y,x) == ERR ? ERR : win_wchstr(win,c))
+#define mvwinnwstr(win,y,x,c,n)		(wmove(win,y,x) == ERR ? ERR : winnwstr(win,c,n))
+#define mvwins_nwstr(win,y,x,t,n)	(wmove(win,y,x) == ERR ? ERR : wins_nwstr(win,t,n))
+#define mvwins_wch(win,y,x,c)		(wmove(win,y,x) == ERR ? ERR : wins_wch(win,c))
+#define mvwins_wstr(win,y,x,t)		(wmove(win,y,x) == ERR ? ERR : wins_wstr(win,t))
+#define mvwinwstr(win,y,x,c)		(wmove(win,y,x) == ERR ? ERR : winwstr(win,c))
+#define mvwvline_set(win,y,x,c,n)	(wmove(win,y,x) == ERR ? ERR : wvline_set(win,c,n))
+
+#endif /* NCURSES_NOMACROS */
+
+#if defined(TRACE) || defined(NCURSES_TEST)
+extern NCURSES_EXPORT(const char *) _nc_viswbuf(const wchar_t *);
+extern NCURSES_EXPORT(const char *) _nc_viswibuf(const wint_t *);
+#endif
+
+#endif /* _XOPEN_SOURCE_EXTENDED */
diff --git a/include/edit_cfg.sh b/include/edit_cfg.sh
new file mode 100755
index 0000000..8d64fee
--- /dev/null
+++ b/include/edit_cfg.sh
@@ -0,0 +1,67 @@
+#!/bin/sh
+# $Id: edit_cfg.sh,v 1.12 2001/12/23 00:52:40 tom Exp $
+##############################################################################
+# Copyright (c) 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 "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> 1996,1997,2000
+#
+# Edit the default value of the term.h file based on the autoconf-generated
+# values:
+#
+#	$1 = ncurses_cfg.h
+#	$2 = term.h
+#
+BAK=save$$
+TMP=edit$$
+trap "rm -f $BAK $TMP" 0 1 2 5 15
+for name in \
+	HAVE_TCGETATTR \
+	HAVE_TERMIOS_H \
+	HAVE_TERMIO_H \
+	BROKEN_LINKER
+do
+	mv $2 $BAK
+	if ( grep "[ 	]$name[ 	]" $1 2>&1 >$TMP )
+	then
+		value=1
+	else
+		value=0
+	fi
+	echo '** edit: '$name $value
+	sed \
+		-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)
+	then
+		mv $BAK $2
+	else
+		rm -f $BAK
+	fi
+done
diff --git a/include/hashed_db.h b/include/hashed_db.h
new file mode 100644
index 0000000..4dd3933
--- /dev/null
+++ b/include/hashed_db.h
@@ -0,0 +1,67 @@
+/****************************************************************************
+ * Copyright (c) 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"), 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                        2006                    *
+ ****************************************************************************/
+
+/*
+ * $Id: hashed_db.h,v 1.5 2006/08/19 15:58:34 tom Exp $
+ */
+
+#ifndef HASHED_DB_H
+#define HASHED_DB_H 1
+
+#include <curses.h>
+
+#if USE_HASHED_DB
+
+#include <db.h>
+
+#ifndef DBN_SUFFIX
+#define DBM_SUFFIX ".db"
+#endif
+
+#ifdef DB_VERSION_MAJOR
+#define HASHED_DB_API DB_VERSION_MAJOR
+#else
+#define HASHED_DB_API 1		/* e.g., db 1.8.5 */
+#endif
+
+extern NCURSES_EXPORT(DB *) _nc_db_open(const char * /* path */, bool /* modify */);
+extern NCURSES_EXPORT(bool) _nc_db_have_data(DBT * /* key */, DBT * /* data */, char ** /* buffer */, int * /* size */);
+extern NCURSES_EXPORT(bool) _nc_db_have_index(DBT * /* key */, DBT * /* data */, char ** /* buffer */, int * /* size */);
+extern NCURSES_EXPORT(int) _nc_db_close(DB * /* db */);
+extern NCURSES_EXPORT(int) _nc_db_first(DB * /* db */, DBT * /* key */, DBT * /* data */);
+extern NCURSES_EXPORT(int) _nc_db_next(DB * /* db */, DBT * /* key */, DBT * /* data */);
+extern NCURSES_EXPORT(int) _nc_db_get(DB * /* db */, DBT * /* key */, DBT * /* data */);
+extern NCURSES_EXPORT(int) _nc_db_put(DB * /* db */, DBT * /* key */, DBT * /* data */);
+
+#endif
+
+#endif /* HASHED_DB_H */
diff --git a/include/headers b/include/headers
new file mode 100644
index 0000000..a24bd90
--- /dev/null
+++ b/include/headers
@@ -0,0 +1,42 @@
+# $Id: headers,v 1.9 2007/01/20 19:57:04 Miroslav.Lichvar Exp $
+##############################################################################
+# Copyright (c) 1998-2006,2007 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-on
+#
+term.h
+curses.h
+unctrl.h
+termcap.h
+$(srcdir)/ncurses_dll.h
+@ ticlib
+$(srcdir)/tic.h
+$(srcdir)/term_entry.h
+$(srcdir)/nc_tparm.h
+
+# vile:makemode
diff --git a/include/nc_alloc.h b/include/nc_alloc.h
new file mode 100644
index 0000000..f521bff
--- /dev/null
+++ b/include/nc_alloc.h
@@ -0,0 +1,106 @@
+/****************************************************************************
+ * Copyright (c) 1998-2007,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            *
+ * "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-on                     *
+ ****************************************************************************/
+/* $Id: nc_alloc.h,v 1.16 2008/09/27 22:30:33 tom Exp $ */
+
+#ifndef NC_ALLOC_included
+#define NC_ALLOC_included 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if HAVE_LIBDMALLOC
+#include <string.h>
+#undef strndup		/* workaround for #define in GLIBC 2.7 */
+#include <dmalloc.h>    /* Gray Watson's library */
+#else
+#undef  HAVE_LIBDMALLOC
+#define HAVE_LIBDMALLOC 0
+#endif
+
+#if HAVE_LIBDBMALLOC
+#include <dbmalloc.h>   /* Conor Cahill's library */
+#else
+#undef  HAVE_LIBDBMALLOC
+#define HAVE_LIBDBMALLOC 0
+#endif
+
+#if HAVE_LIBMPATROL
+#include <mpatrol.h>    /* Memory-Patrol library */
+#else
+#undef  HAVE_LIBMPATROL
+#define HAVE_LIBMPATROL 0
+#endif
+
+#ifndef NO_LEAKS
+#define NO_LEAKS 0
+#endif
+
+#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 NCURSES_EXPORT(void) _nc_leaks_tic(void);
+#define ExitProgram(code) _nc_free_and_exit(code)
+#endif
+
+#ifndef HAVE_NC_FREEALL
+#define HAVE_NC_FREEALL 0
+#endif
+
+#ifndef ExitProgram
+#define ExitProgram(code) exit(code)
+#endif
+
+/* doalloc.c */
+extern NCURSES_EXPORT(void *) _nc_doalloc(void *, size_t);
+#if !HAVE_STRDUP
+#define strdup _nc_strdup
+extern NCURSES_EXPORT(char *) _nc_strdup(const char *);
+#endif
+
+/* entries.c */
+extern NCURSES_EXPORT(void) _nc_leaks_tinfo(void);
+
+#define typeMalloc(type,elts) (type *)malloc((elts)*sizeof(type))
+#define typeCalloc(type,elts) (type *)calloc((elts),sizeof(type))
+#define typeRealloc(type,elts,ptr) (type *)_nc_doalloc(ptr, (elts)*sizeof(type))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NC_ALLOC_included */
diff --git a/include/nc_panel.h b/include/nc_panel.h
new file mode 100644
index 0000000..6578577
--- /dev/null
+++ b/include/nc_panel.h
@@ -0,0 +1,69 @@
+/****************************************************************************
+ * Copyright (c) 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            *
+ * "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                        1997                     *
+ *     and: Thomas E. Dickey                                                *
+ ****************************************************************************/
+
+
+/*
+ * $Id: nc_panel.h,v 1.5 2008/08/04 18:26:46 tom Exp $
+ *
+ *	nc_panel.h
+ *
+ *	Headerfile to provide an interface for the panel layer into
+ *      the SCREEN structure of the ncurses core.
+ */
+
+#ifndef NC_PANEL_H
+#define NC_PANEL_H 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct panel; /* Forward Declaration */
+
+struct panelhook {
+  struct panel*   top_panel;
+  struct panel*   bottom_panel;
+  struct panel*   stdscr_pseudo_panel;
+#if NO_LEAKS
+  int (*destroy)(struct panel *);
+#endif
+};
+
+/* Retrieve the panelhook of the current screen */
+extern NCURSES_EXPORT(struct panelhook*) _nc_panelhook (void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NC_PANEL_H */
diff --git a/include/nc_tparm.h b/include/nc_tparm.h
new file mode 100644
index 0000000..d1d769b
--- /dev/null
+++ b/include/nc_tparm.h
@@ -0,0 +1,65 @@
+/****************************************************************************
+ * Copyright (c) 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"), 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                        2006                    *
+ ****************************************************************************/
+
+/* $Id: nc_tparm.h,v 1.4 2006/11/26 00:49:25 tom Exp $ */
+
+/*
+ * Cast parameters past the formatting-string for tparm() to match the
+ * assumption of the varargs code.
+ */
+#define TPARM_ARG long
+#define TPARM_N(n) (TPARM_ARG)(n)
+
+#define TPARM_9(a,b,c,d,e,f,g,h,i,j) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d),TPARM_N(e),TPARM_N(f),TPARM_N(g),TPARM_N(h),TPARM_N(i),TPARM_N(j))
+
+#if NCURSES_TPARM_VARARGS
+#define TPARM_8(a,b,c,d,e,f,g,h,i) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d),TPARM_N(e),TPARM_N(f),TPARM_N(g),TPARM_N(h),TPARM_N(i))
+#define TPARM_7(a,b,c,d,e,f,g,h) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d),TPARM_N(e),TPARM_N(f),TPARM_N(g),TPARM_N(h))
+#define TPARM_6(a,b,c,d,e,f,g) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d),TPARM_N(e),TPARM_N(f),TPARM_N(g))
+#define TPARM_5(a,b,c,d,e,f) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d),TPARM_N(e),TPARM_N(f))
+#define TPARM_4(a,b,c,d,e) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d),TPARM_N(e))
+#define TPARM_3(a,b,c,d) tparm(a,TPARM_N(b),TPARM_N(c),TPARM_N(d))
+#define TPARM_2(a,b,c) tparm(a,TPARM_N(b),TPARM_N(c))
+#define TPARM_1(a,b) tparm(a,TPARM_N(b))
+#define TPARM_0(a) tparm(a)
+#else
+#define TPARM_8(a,b,c,d,e,f,g,h,i) TPARM_9(a,b,c,d,e,f,g,h,i,0)
+#define TPARM_7(a,b,c,d,e,f,g,h) TPARM_8(a,b,c,d,e,f,g,h,0)
+#define TPARM_6(a,b,c,d,e,f,g) TPARM_7(a,b,c,d,e,f,g,0)
+#define TPARM_5(a,b,c,d,e,f) TPARM_6(a,b,c,d,e,f,0)
+#define TPARM_4(a,b,c,d,e) TPARM_5(a,b,c,d,e,0)
+#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
diff --git a/include/ncurses_cfg.hin b/include/ncurses_cfg.hin
new file mode 100644
index 0000000..3f8a482
--- /dev/null
+++ b/include/ncurses_cfg.hin
@@ -0,0 +1,72 @@
+/****************************************************************************
+ * 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
+@DEFS@
+
+#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_defs b/include/ncurses_defs
new file mode 100644
index 0000000..97a377d
--- /dev/null
+++ b/include/ncurses_defs
@@ -0,0 +1,208 @@
+# $Id: ncurses_defs,v 1.40 2008/09/06 15:57:41 tom Exp $
+##############################################################################
+# Copyright (c) 2000-2007,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 "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.                                                             #
+##############################################################################
+#
+# See "MKncurses_def.sh" for an explanation.
+#
+# (hint: don't try to define NDEBUG ;-)
+
+BROKEN_LINKER
+BSD_TPUTS
+CC_HAS_PROTOS
+CPP_HAS_PARAM_INIT
+CURSES_ACS_ARRAY	acs_map
+CURSES_WACS_ARRAY	_nc_wacs
+DECL_ERRNO
+ETIP_NEEDS_MATH_H
+GCC_NORETURN	/* nothing */
+GCC_UNUSED	/* nothing */
+HAVE_BIG_CORE
+HAVE_BSD_CGETENT
+HAVE_BSD_SIGNAL_H
+HAVE_BTOWC 
+HAVE_BUILTIN_H
+HAVE_CHGAT	1
+HAVE_COLOR_SET	1
+HAVE_DIRENT_H
+HAVE_ERRNO
+HAVE_FCNTL_H
+HAVE_FILTER	1
+HAVE_FORM_H
+HAVE_GETBEGX	1
+HAVE_GETCURX	1
+HAVE_GETCWD
+HAVE_GETEGID
+HAVE_GETEUID
+HAVE_GETMAXX	1
+HAVE_GETNSTR
+HAVE_GETOPT_H
+HAVE_GETPARX	1
+HAVE_GETTIMEOFDAY
+HAVE_GETTTYNAM
+HAVE_GETWIN	1
+HAVE_GPM_H
+HAVE_GPP_BUILTIN_H
+HAVE_GXX_BUILTIN_H
+HAVE_HAS_KEY
+HAVE_IOSTREAM
+HAVE_ISASCII
+HAVE_ISSETUGID
+HAVE_LANGINFO_CODESET
+HAVE_LIBC_H
+HAVE_LIBDBMALLOC
+HAVE_LIBDMALLOC
+HAVE_LIBFORM
+HAVE_LIBGPM
+HAVE_LIBMENU
+HAVE_LIBMPATROL
+HAVE_LIBPANEL
+HAVE_LIMITS_H
+HAVE_LINK
+HAVE_LOCALE_H
+HAVE_LONG_FILE_NAMES
+HAVE_MBLEN
+HAVE_MBRLEN
+HAVE_MBRTOWC
+HAVE_MBSRTOWCS
+HAVE_MBSTOWCS
+HAVE_MBTOWC
+HAVE_MENU_H
+HAVE_MKSTEMP
+HAVE_MVVLINE	1
+HAVE_MVWVLINE	1
+HAVE_NANOSLEEP
+HAVE_NC_ALLOC_H
+HAVE_PANEL_H
+HAVE_POLL
+HAVE_POLL_H
+HAVE_PURIFY
+HAVE_PUTWC 
+HAVE_PUTWIN	1
+HAVE_REGEXPR_H_FUNCS
+HAVE_REGEXP_H_FUNCS
+HAVE_REGEX_H_FUNCS
+HAVE_REMOVE
+HAVE_RESIZETERM
+HAVE_RESIZE_TERM
+HAVE_RIPOFFLINE	1
+HAVE_SELECT
+HAVE_SETBUF
+HAVE_SETBUFFER
+HAVE_SETUPTERM	1
+HAVE_SETVBUF
+HAVE_SIGACTION
+HAVE_SIGVEC
+HAVE_SIZECHANGE
+HAVE_SLK_COLOR
+HAVE_SLK_INIT	1
+HAVE_STRDUP
+HAVE_STRSTR
+HAVE_SYMLINK
+HAVE_SYS_BSDTYPES_H
+HAVE_SYS_IOCTL_H
+HAVE_SYS_PARAM_H
+HAVE_SYS_POLL_H
+HAVE_SYS_SELECT_H
+HAVE_SYS_TERMIO_H
+HAVE_SYS_TIMES_H
+HAVE_SYS_TIME_H
+HAVE_SYS_TIME_SELECT
+HAVE_TCGETATTR
+HAVE_TCGETPGRP
+HAVE_TELL
+HAVE_TERMATTRS	1
+HAVE_TERMIOS_H
+HAVE_TERMIO_H
+HAVE_TERMNAME	1
+HAVE_TERM_H	1
+HAVE_TGETENT	1
+HAVE_TIGETNUM	1
+HAVE_TIGETSTR	1
+HAVE_TIMES
+HAVE_TTYENT_H
+HAVE_TYPEAHEAD	1
+HAVE_TYPEINFO
+HAVE_TYPE_ATTR_T
+HAVE_TYPE_SIGACTION
+HAVE_UNISTD_H
+HAVE_UNLINK
+HAVE_USE_DEFAULT_COLORS
+HAVE_VFSCANF
+HAVE_VSNPRINTF
+HAVE_VSSCANF
+HAVE_WCSRTOMBS
+HAVE_WCSTOMBS
+HAVE_WCTOB 
+HAVE_WCTOMB
+HAVE_WCTYPE_H
+HAVE_WINSSTR	1
+HAVE_WORKING_POLL
+HAVE_WRESIZE
+HAVE__DOSCAN
+MIXEDCASE_FILENAMES
+NCURSES_CHAR_EQ
+NCURSES_EXPANDED
+NCURSES_EXT_COLORS
+NCURSES_EXT_FUNCS
+NCURSES_NO_PADDING
+NCURSES_PATHSEP	':'
+NDEBUG
+NEED_PTEM_H
+NO_LEAKS
+PURE_TERMINFO
+RETSIGTYPE
+STDC_HEADERS
+SVR4_ACTION
+SVR4_TERMIO
+SYSTEM_NAME	"unknown"
+TERMINFO	"none"
+TERMPATH	"none"
+TIME_WITH_SYS_TIME
+TYPEOF_CHTYPE
+USE_COLORFGBG
+USE_DATABASE
+USE_GETCAP
+USE_GETCAP_CACHE
+USE_HARD_TABS
+USE_HASHED_DB
+USE_HASHMAP
+USE_HOME_TERMINFO
+USE_LINKS
+USE_MY_MEMMOVE
+USE_OK_BCOPY
+USE_RCS_IDS
+USE_REENTRANT
+USE_SAFE_SPRINTF
+USE_SCROLL_HINTS
+USE_SIGWINCH
+USE_SYMLINKS
+USE_SYSMOUSE
+USE_TERMCAP
+USE_WEAK_SYMBOLS
+USE_WIDEC_SUPPORT
+USE_XMC_SUPPORT
diff --git a/include/ncurses_dll.h b/include/ncurses_dll.h
new file mode 100644
index 0000000..e24feee
--- /dev/null
+++ b/include/ncurses_dll.h
@@ -0,0 +1,86 @@
+/****************************************************************************
+ * Copyright (c) 1998-2006,2007 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,v 1.6 2007/03/10 19:21:49 tom Exp $ */
+
+#ifndef NCURSES_DLL_H_incl
+#define NCURSES_DLL_H_incl 1
+
+/* 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__)
+#  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
+
+/*
+ * 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)
+
+#endif /* NCURSES_DLL_H_incl */
diff --git a/include/term_entry.h b/include/term_entry.h
new file mode 100644
index 0000000..fb87540
--- /dev/null
+++ b/include/term_entry.h
@@ -0,0 +1,168 @@
+/****************************************************************************
+ * Copyright (c) 1998-2005,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            *
+ * "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                        1998-on                 *
+ ****************************************************************************/
+
+/* $Id: term_entry.h,v 1.35 2008/08/16 16:16:03 tom Exp $ */
+
+/*
+ *	term_entry.h -- interface to entry-manipulation code
+ */
+
+#ifndef NCURSES_TERM_ENTRY_H_incl
+#define NCURSES_TERM_ENTRY_H_incl 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <term.h>
+
+#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;
+
+#if NCURSES_XNAMES
+#define NUM_BOOLEANS(tp) (tp)->num_Booleans
+#define NUM_NUMBERS(tp)  (tp)->num_Numbers
+#define NUM_STRINGS(tp)  (tp)->num_Strings
+#define EXT_NAMES(tp,i,limit,index,table) (i >= limit) ? tp->ext_Names[index] : table[i]
+#else
+#define NUM_BOOLEANS(tp) BOOLCOUNT
+#define NUM_NUMBERS(tp)  NUMCOUNT
+#define NUM_STRINGS(tp)  STRCOUNT
+#define EXT_NAMES(tp,i,limit,index,table) table[i]
+#endif
+
+#define NUM_EXT_NAMES(tp) ((tp)->ext_Booleans + (tp)->ext_Numbers + (tp)->ext_Strings)
+
+#define for_each_boolean(n,tp) for(n = 0; n < NUM_BOOLEANS(tp); n++)
+#define for_each_number(n,tp)  for(n = 0; n < NUM_NUMBERS(tp);  n++)
+#define for_each_string(n,tp)  for(n = 0; n < NUM_STRINGS(tp);  n++)
+
+#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)
+
+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 MAX_LINE	132
+
+#define NULLHOOK        (bool(*)(ENTRY *))0
+
+/*
+ * Note that WANTED and PRESENT are not simple inverses!  If a capability
+ * has been explicitly cancelled, it's 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);}
+
+#define PAIRED(p,q) \
+		{ \
+		if (PRESENT(q) && !PRESENT(p)) \
+			_nc_warning(#q " but no " #p); \
+		if (PRESENT(p) && !PRESENT(q)) \
+			_nc_warning(#p " but no " #q); \
+		}
+
+/* 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_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 *, TERMTYPE *);
+
+/* 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()' */
+
+/* lib_termcap.c: trim sgr0 string for termcap users */
+extern NCURSES_EXPORT(char *) _nc_trim_sgr0 (TERMTYPE *);
+
+/* parse_entry.c: entry-parsing code */
+#if NCURSES_XNAMES
+extern NCURSES_EXPORT_VAR(bool) _nc_user_definable;
+extern NCURSES_EXPORT_VAR(bool) _nc_disable_period;
+#endif
+extern NCURSES_EXPORT(int) _nc_parse_entry (ENTRY *, int, bool);
+extern NCURSES_EXPORT(int) _nc_capcmp (const char *, const char *);
+
+/* write_entry.c: writing an entry to the file system */
+extern NCURSES_EXPORT(void) _nc_set_writedir (char *);
+extern NCURSES_EXPORT(void) _nc_write_entry (TERMTYPE *const);
+
+/* comp_parse.c: entry list handling */
+extern NCURSES_EXPORT(void) _nc_read_entry_source (FILE*, char*, int, bool, bool (*)(ENTRY*));
+extern NCURSES_EXPORT(bool) _nc_entry_match (char *, char *);
+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);
+
+/* trace_xnames.c */
+extern NCURSES_EXPORT(void) _nc_trace_xnames (TERMTYPE *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NCURSES_TERM_ENTRY_H_incl */
diff --git a/include/termcap.h.in b/include/termcap.h.in
new file mode 100644
index 0000000..6adc312
--- /dev/null
+++ b/include/termcap.h.in
@@ -0,0 +1,75 @@
+/****************************************************************************
+ * Copyright (c) 1998,2000 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>                         *
+ ****************************************************************************/
+
+/* $Id: termcap.h.in,v 1.16 2001/03/24 21:53:27 tom Exp $ */
+
+#ifndef NCURSES_TERMCAP_H_incl
+#define NCURSES_TERMCAP_H_incl	1
+
+#undef  NCURSES_VERSION
+#define NCURSES_VERSION "@NCURSES_MAJOR@.@NCURSES_MINOR@"
+
+#include <ncurses_dll.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+#include <sys/types.h>
+
+#undef  NCURSES_CONST 
+#define NCURSES_CONST @NCURSES_CONST@ 
+
+#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; 
+
+#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
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NCURSES_TERMCAP_H_incl */
diff --git a/include/tic.h b/include/tic.h
new file mode 100644
index 0000000..4e10399
--- /dev/null
+++ b/include/tic.h
@@ -0,0 +1,332 @@
+/****************************************************************************
+ * Copyright (c) 1998-2006,2007 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: tic.h,v 1.62 2007/08/11 16:12:43 tom Exp $
+ *	tic.h - Global variables and structures for the terminfo
+ *			compiler.
+ */
+
+#ifndef __TIC_H
+#define __TIC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <curses.h>	/* for the _tracef() prototype, ERR/OK, bool defs */
+
+/*
+** The format of compiled terminfo files is as follows:
+**
+**		Header (12 bytes), containing information given below
+**		Names Section, containing the names of the terminal
+**		Boolean Section, containing the values of all of the
+**				boolean capabilities
+**				A null byte may be inserted here to make
+**				sure that the Number Section begins on an
+**				even word boundary.
+**		Number Section, containing the values of all of the numeric
+**				capabilities, each as a short integer
+**		String Section, containing short integer offsets into the
+**				String Table, one per string capability
+**		String Table, containing the actual characters of the string
+**				capabilities.
+**
+**	NOTE that all short integers in the file are stored using VAX/PDP-style
+**	byte-order, i.e., least-significant byte first.
+**
+**	There is no structure definition here because it would only confuse
+**	matters.  Terminfo format is a raw byte layout, not a structure
+**	dump.  If you happen to be on a little-endian machine with 16-bit
+**	shorts that requires no padding between short members in a struct,
+**	then there is a natural C structure that captures the header, but
+**	not very helpfully.
+*/
+
+#define MAGIC		0432	/* first two bytes of a compiled entry */
+
+#undef  BYTE
+#define BYTE(p,n)	(unsigned char)((p)[n])
+
+#define IS_NEG1(p)	((BYTE(p,0) == 0377) && (BYTE(p,1) == 0377))
+#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)
+
+/*
+ * 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 */
+
+/*
+ * The maximum size of individual name or alias is guaranteed in XSI to be at
+ * least 14, since that corresponds to the older filename lengths.  Newer
+ * systems allow longer aliases, though not many terminal descriptions are
+ * written to use them.  The MAX_ALIAS symbol is used for warnings.
+ */
+#if HAVE_LONG_FILE_NAMES
+#define MAX_ALIAS	32	/* smaller than POSIX minimum for PATH_MAX */
+#else
+#define MAX_ALIAS	14	/* SVr3 filename length */
+#endif
+
+/* location of user's personal info directory */
+#define PRIVATE_INFO	"%s/.terminfo"	/* plug getenv("HOME") into %s */
+
+/*
+ * Some traces are designed to be used via tic's verbose option (and similar in
+ * infocmp and toe) rather than the 'trace()' function.  So we use the bits
+ * above the normal trace() parameter as a debug-level.
+ */
+
+#define MAX_DEBUG_LEVEL 15
+#define DEBUG_LEVEL(n)	((n) << TRACE_SHIFT)
+
+#define set_trace_level(n) \
+	_nc_tracing &= DEBUG_LEVEL(MAX_DEBUG_LEVEL), \
+	_nc_tracing |= DEBUG_LEVEL(n)
+
+#ifdef TRACE
+#define DEBUG(n, a)	if (_nc_tracing >= DEBUG_LEVEL(n)) _tracef a
+#else
+#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
+ * returns one of these values after loading the specifics into the global
+ * structure curr_token.
+ */
+
+#define BOOLEAN 0		/* Boolean capability */
+#define NUMBER 1		/* Numeric capability */
+#define STRING 2		/* String-valued capability */
+#define CANCEL 3		/* Capability to be cancelled in following tc's */
+#define NAMES  4		/* The names for a terminal type */
+#define UNDEF  5		/* Undefined */
+
+#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.
+	 *
+	 */
+
+struct token
+{
+	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.
+	 */
+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
+
+	/*
+	 * 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 */
+	int	nte_type;	/* BOOLEAN, NUMBER or STRING */
+	short	nte_index;	/* index of associated variable in its array */
+	short	nte_link;	/* index in table of next hash, or -1 */
+};
+
+struct alias
+{
+	const char	*from;
+	const char	*to;
+	const char	*source;
+};
+
+extern NCURSES_EXPORT(const struct name_table_entry *) _nc_get_table (bool);
+extern NCURSES_EXPORT(const short *) _nc_get_hash_table (bool);
+extern NCURSES_EXPORT(const struct alias *) _nc_get_alias_table (bool);
+
+#define NOTFOUND	((struct name_table_entry *) 0)
+
+/* out-of-band values for representing absent capabilities */
+#define ABSENT_BOOLEAN		((signed char)-1)	/* 255 */
+#define ABSENT_NUMERIC		(-1)
+#define ABSENT_STRING		(char *)0
+
+/* out-of-band values for representing cancels */
+#define CANCELLED_BOOLEAN	((signed char)-2)	/* 254 */
+#define CANCELLED_NUMERIC	(-2)
+#define CANCELLED_STRING	(char *)(-1)
+
+#define VALID_BOOLEAN(s) ((unsigned char)(s) <= 1) /* reject "-1" */
+#define VALID_NUMERIC(s) ((s) >= 0)
+#define VALID_STRING(s)  ((s) != CANCELLED_STRING && (s) != ABSENT_STRING)
+
+/* termcap entries longer than this may break old binaries */
+#define MAX_TERMCAP_LENGTH	1023
+
+/* this is a documented limitation of terminfo */
+#define MAX_TERMINFO_LENGTH	4096
+
+#ifndef TERMINFO
+#define TERMINFO "/usr/share/terminfo"
+#endif
+
+/* access.c */
+extern NCURSES_EXPORT(unsigned) _nc_pathlast (const char *);
+extern NCURSES_EXPORT(bool) _nc_is_abs_path (const char *);
+extern NCURSES_EXPORT(bool) _nc_is_dir_path (const char *);
+extern NCURSES_EXPORT(bool) _nc_is_file_path (const char *);
+extern NCURSES_EXPORT(char *) _nc_basename (char *);
+extern NCURSES_EXPORT(char *) _nc_rootname (char *);
+
+/* comp_hash.c: name lookup */
+extern NCURSES_EXPORT(struct name_table_entry const *) _nc_find_entry
+	(const char *, const short *);
+extern NCURSES_EXPORT(struct name_table_entry const *) _nc_find_type_entry
+	(const char *, int, const struct name_table_entry *);
+
+/* 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;
+extern NCURSES_EXPORT_VAR(long) _nc_comment_end;
+extern NCURSES_EXPORT_VAR(long) _nc_comment_start;
+extern NCURSES_EXPORT_VAR(long) _nc_curr_file_pos;
+extern NCURSES_EXPORT_VAR(long) _nc_start_line;
+#define SYN_TERMINFO	0
+#define SYN_TERMCAP	1
+
+/* 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 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 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: decode string from readable form */
+extern NCURSES_EXPORT(int) _nc_trans_string (char *, char *);
+
+/* captoinfo.c: capability conversion */
+extern NCURSES_EXPORT(char *) _nc_captoinfo (const char *, const char *, int const);
+extern NCURSES_EXPORT(char *) _nc_infotocap (const char *, const char *, int const);
+
+/* home_terminfo.c */
+extern NCURSES_EXPORT(char *) _nc_home_terminfo (void);
+
+/* 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 *);
+
+/* lib_tputs.c */
+extern NCURSES_EXPORT_VAR(int) _nc_nulls_sent;		/* Add one for every null sent */
+
+/* comp_main.c: compiler main */
+extern const char * _nc_progname;
+
+/* db_iterator.c */
+typedef enum {
+    dbdTIC = 0,
+#if USE_DATABASE
+    dbdEnvOnce,
+    dbdHome,
+    dbdEnvList,
+    dbdCfgList,
+    dbdCfgOnce,
+#endif
+#if USE_TERMCAP
+    dbdEnvOnce2,
+    dbdEnvList2,
+    dbdCfgList2,
+#endif
+    dbdLAST
+} DBDIRS;
+
+extern NCURSES_EXPORT(const char *) _nc_next_db(DBDIRS *, int *);
+extern NCURSES_EXPORT(const char *) _nc_tic_dir (const char *);
+extern NCURSES_EXPORT(void) _nc_first_db(DBDIRS *, int *);
+extern NCURSES_EXPORT(void) _nc_last_db(void);
+
+/* write_entry.c */
+extern NCURSES_EXPORT(int) _nc_tic_written (void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TIC_H */
diff --git a/include/unctrl.h.in b/include/unctrl.h.in
new file mode 100644
index 0000000..70d74b7
--- /dev/null
+++ b/include/unctrl.h.in
@@ -0,0 +1,63 @@
+/****************************************************************************
+ * Copyright (c) 1998,2000 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>                         *
+ ****************************************************************************/
+
+/*
+ * 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.
+ */
+
+/* $Id: unctrl.h.in,v 1.10 2001/03/24 21:53:25 tom Exp $ */
+
+#ifndef NCURSES_UNCTRL_H_incl
+#define NCURSES_UNCTRL_H_incl	1
+
+#undef  NCURSES_VERSION
+#define NCURSES_VERSION "@NCURSES_MAJOR@.@NCURSES_MINOR@"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <curses.h>
+
+#undef unctrl
+NCURSES_EXPORT(NCURSES_CONST char *) unctrl (chtype);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NCURSES_UNCTRL_H_incl */
