diff --git a/test/tput-initc b/test/tput-initc
new file mode 100755
index 0000000..9d71c4f
--- /dev/null
+++ b/test/tput-initc
@@ -0,0 +1,156 @@
+#!/bin/sh
+##############################################################################
+# Copyright 2020 Thomas E. Dickey                                            #
+# Copyright 2016 Free Software Foundation, Inc.                              #
+#                                                                            #
+# Permission is hereby granted, free of charge, to any person obtaining a    #
+# copy of this software and associated documentation files (the "Software"), #
+# 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: tput-initc,v 1.6 2020/02/02 23:34:34 tom Exp $
+# Some of the ".dat" files in ncurses' test-directory give r/g/b numbers for
+# default palettes of xterm and Linux console.  This script reads the numbers
+# and (assuming the same or compatible terminal) uses tput to (re)initialize
+# the palette using those numbers.
+
+failed() {
+	printf "?? $*\n" >&2
+	exit 1
+}
+
+usage() {
+	cat >&2 <<-EOF
+	usage: $0 [-r] [-s] [palette-data]
+
+	Use this script with a palette data-file to (re)initialize colors with
+	tput.  This script assumes arrangements for 16-, 88- and 256-colors
+	like the xterm 88colors2.pl and 256colors2.pl scripts.
+
+	Options:
+	 -r	reverse palette
+	 -s	reverse system colors (first 16 if more than 16 colors)
+EOF
+	exit 1
+}
+
+opt_r=no
+opt_s=no
+
+while getopts "rs" option "$@"
+do
+	case $option in
+	(r)
+		opt_r=yes
+		;;
+	(s)
+		opt_s=yes
+		;;
+	(*)
+		usage
+		;;
+	esac
+done
+shift $(expr $OPTIND - 1)
+
+if [ $# = 1 ]
+then
+	file=$1
+elif [ $# = 0 ]
+then
+	file=$TERM.dat
+else
+	failed "expected one parameter or none"
+fi
+
+if [ ! -f "$file" ]
+then
+	if [ -f "$file.dat" ]
+	then
+		file="$file.dat"
+	else
+		failed "no such file: $file"
+	fi
+fi
+
+myterm=${file%%.dat}
+colors=$(tput -T $myterm colors 2>/dev/null)
+if [ ${colors:-0} -le 0 ]
+then
+	myterm=${myterm%%-color}
+	colors=$(tput -T $myterm colors 2>/dev/null)
+fi
+if [ ${colors:-0} -le 0 ]
+then
+	failed "terminal $myterm does not support color"
+fi
+
+cat $file |\
+awk	-v opt_r=$opt_r \
+	-v opt_s=$opt_s \
+	-v colors=$colors \
+	-v myterm=$myterm '
+BEGIN {
+	limit = 1000;
+	range = -1;
+	cramp = -1;
+	if ( colors == 88 ) {
+		cramp = 80;
+	} else if ( colors = 256 ) {
+		cramp = 232;
+	}
+}
+function scaled(n) {
+	return (n * 1000)/limit;
+}
+
+/^scale:[0-9]+/{
+	sub("^scale:","",$0);
+	limit = $0;
+}
+
+/^[0-9]+:/{
+	sub(":","",$1);
+	item = $1 + 0;
+	if (range < item) {
+		range = item;
+	}
+	params[$1] = sprintf ("%d %d %d", scaled($2),scaled($3),scaled($4));
+}
+END {
+	for (n = 0; n <= range; ++n) {
+		m = n;
+		if ( opt_r == "yes" ) {
+			if ( colors <= 16 ) {
+				m = range - n;
+			} else if ( ( opt_s == "yes" ) && ( n < 16 ) ) {
+				m = 15 - n;
+			} else if ( n >= cramp ) {
+				m = cramp + colors - 1 - n;
+			} else {
+				m = 16 + cramp - 1 - n;
+			}
+		}
+		printf "tput -T%s initc %d %s\n", myterm, m, params[n];
+	}
+}
+' |sh -
