| #!/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 - |