X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=include%2FMKkey_defs.sh;fp=include%2FMKkey_defs.sh;h=655078b924cfcf13d3f655e92aa73cff4971abec;hp=0000000000000000000000000000000000000000;hb=46722468f47c2b77b3987729b4bcf2321cccfd01;hpb=c633e5103a29a38532cf1925257b91cea33fd090 diff --git a/include/MKkey_defs.sh b/include/MKkey_defs.sh new file mode 100755 index 00000000..655078b9 --- /dev/null +++ b/include/MKkey_defs.sh @@ -0,0 +1,178 @@ +#! /bin/sh +# $Id: MKkey_defs.sh,v 1.10 2002/09/28 23:32:16 tom Exp $ +############################################################################## +# Copyright (c) 2001,2002 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 +else + # SunOS (and SVr4, marked as obsolete but still recognized) + sed -e 's/[ ]\+/ /g' < $DATA |sort -n +5 >$data +fi + +# add keys that we generate automatically: +cat >>$data <$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