1fdd4e1e0SJan Lentfer#! /bin/sh 2*32bb5217SDaniel Fojt# $Id: MKkey_defs.sh,v 1.19 2020/02/02 23:34:34 tom Exp $ 3fdd4e1e0SJan Lentfer############################################################################## 4*32bb5217SDaniel Fojt# Copyright 2019,2020 Thomas E. Dickey # 5*32bb5217SDaniel Fojt# Copyright 2001-2013,2017 Free Software Foundation, Inc. # 6fdd4e1e0SJan Lentfer# # 7fdd4e1e0SJan Lentfer# Permission is hereby granted, free of charge, to any person obtaining a # 8fdd4e1e0SJan Lentfer# copy of this software and associated documentation files (the "Software"), # 9fdd4e1e0SJan Lentfer# to deal in the Software without restriction, including without limitation # 10fdd4e1e0SJan Lentfer# the rights to use, copy, modify, merge, publish, distribute, distribute # 11fdd4e1e0SJan Lentfer# with modifications, sublicense, and/or sell copies of the Software, and to # 12fdd4e1e0SJan Lentfer# permit persons to whom the Software is furnished to do so, subject to the # 13fdd4e1e0SJan Lentfer# following conditions: # 14fdd4e1e0SJan Lentfer# # 15fdd4e1e0SJan Lentfer# The above copyright notice and this permission notice shall be included in # 16fdd4e1e0SJan Lentfer# all copies or substantial portions of the Software. # 17fdd4e1e0SJan Lentfer# # 18fdd4e1e0SJan Lentfer# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # 19fdd4e1e0SJan Lentfer# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # 20fdd4e1e0SJan Lentfer# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # 21fdd4e1e0SJan Lentfer# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # 22fdd4e1e0SJan Lentfer# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # 23fdd4e1e0SJan Lentfer# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # 24fdd4e1e0SJan Lentfer# DEALINGS IN THE SOFTWARE. # 25fdd4e1e0SJan Lentfer# # 26fdd4e1e0SJan Lentfer# Except as contained in this notice, the name(s) of the above copyright # 27fdd4e1e0SJan Lentfer# holders shall not be used in advertising or otherwise to promote the sale, # 28fdd4e1e0SJan Lentfer# use or other dealings in this Software without prior written # 29fdd4e1e0SJan Lentfer# authorization. # 30fdd4e1e0SJan Lentfer############################################################################## 31fdd4e1e0SJan Lentfer# 32fdd4e1e0SJan Lentfer# MKkey_defs.sh -- generate function-key definitions for curses.h 33fdd4e1e0SJan Lentfer# 34fdd4e1e0SJan Lentfer# Author: Thomas E. Dickey 2001 35fdd4e1e0SJan Lentfer# 36fdd4e1e0SJan Lentfer# Extract function-key definitions from the Caps file 37fdd4e1e0SJan Lentfer# 38fdd4e1e0SJan Lentfer: ${AWK-awk} 39*32bb5217SDaniel Fojt 40*32bb5217SDaniel Fojttest $# = 0 && set Caps 41fdd4e1e0SJan Lentfer 42fdd4e1e0SJan Lentferdata=data$$ 43fdd4e1e0SJan Lentferpass1=pass1_$$ 44fdd4e1e0SJan Lentferpass2=pass2_$$ 45fdd4e1e0SJan Lentferpass3=pass3_$$ 46fdd4e1e0SJan Lentferpass4=pass4_$$ 47*32bb5217SDaniel Fojttrap 'rm -f $data pass[1234]_$$' EXIT INT QUIT TERM HUP 48fdd4e1e0SJan Lentfer 49fdd4e1e0SJan Lentfer# change repeated tabs (used for readability) to single tabs (needed to make 50fdd4e1e0SJan Lentfer# awk see the right field alignment of the corresponding columns): 51*32bb5217SDaniel Fojtif sort -k 6 "$@" >$data 2>/dev/null 52fdd4e1e0SJan Lentferthen 53fdd4e1e0SJan Lentfer # POSIX 54*32bb5217SDaniel Fojt sed -e 's/[ ][ ]*/ /g' "$@" |sort -n -k 6 >$data 55*32bb5217SDaniel Fojtelif sort -n +5 "$@" >$data 2>/dev/null 56fdd4e1e0SJan Lentferthen 57fdd4e1e0SJan Lentfer # SunOS (and SVr4, marked as obsolete but still recognized) 58*32bb5217SDaniel Fojt sed -e 's/[ ][ ]*/ /g' "$@" |sort -n +5 >$data 59fdd4e1e0SJan Lentferelse 60fdd4e1e0SJan Lentfer echo "Your sort utility is broken. Please install one that works." >&2 61fdd4e1e0SJan Lentfer exit 1 62fdd4e1e0SJan Lentferfi 63fdd4e1e0SJan Lentfer 64fdd4e1e0SJan Lentfer# add keys that we generate automatically: 65fdd4e1e0SJan Lentfercat >>$data <<EOF 66fdd4e1e0SJan Lentferkey_resize kr1 str R1 KEY_RESIZE + ----- Terminal resize event 67fdd4e1e0SJan Lentferkey_event kv1 str V1 KEY_EVENT + ----- We were interrupted by an event 68fdd4e1e0SJan LentferEOF 69fdd4e1e0SJan Lentfer 703468e90cSJohn MarinoTHIS=./`basename $0` 713468e90cSJohn Marino 72fdd4e1e0SJan Lentfercat <<EOF 73fdd4e1e0SJan Lentfer/* 74*32bb5217SDaniel Fojt * These definitions were generated by $THIS $* 75fdd4e1e0SJan Lentfer */ 76fdd4e1e0SJan LentferEOF 77fdd4e1e0SJan Lentfer 78fdd4e1e0SJan Lentfer# KEY_RESET 79fdd4e1e0SJan Lentfermaxkey=345 80fdd4e1e0SJan Lentfer 81fdd4e1e0SJan Lentferfor pass in 1 2 3 4 82fdd4e1e0SJan Lentferdo 83fdd4e1e0SJan Lentfer 84fdd4e1e0SJan Lentferoutput=pass${pass}_$$ 85fdd4e1e0SJan Lentfer 86fdd4e1e0SJan Lentfer${AWK-awk} >$output <$data ' 87fdd4e1e0SJan Lentferfunction print_cols(text,cols) { 88fdd4e1e0SJan Lentfer printf "%s", text 89fdd4e1e0SJan Lentfer len = length(text); 90fdd4e1e0SJan Lentfer while (len < cols) { 91fdd4e1e0SJan Lentfer printf " " 92fdd4e1e0SJan Lentfer len += 8; 93fdd4e1e0SJan Lentfer } 94fdd4e1e0SJan Lentfer} 95fdd4e1e0SJan Lentferfunction decode(keycode) { 96fdd4e1e0SJan Lentfer result = 0; 97fdd4e1e0SJan Lentfer if (substr(keycode, 1, 2) == "0x") { 98fdd4e1e0SJan Lentfer digits="0123456789abcdef"; 99fdd4e1e0SJan Lentfer } else if (substr(keycode, 1, 1) == "0") { 100fdd4e1e0SJan Lentfer digits="01234567"; 101fdd4e1e0SJan Lentfer } else { 102fdd4e1e0SJan Lentfer digits="0123456789"; 103fdd4e1e0SJan Lentfer } 104fdd4e1e0SJan Lentfer while (length(keycode) != 0) { 105fdd4e1e0SJan Lentfer digit=substr(keycode, 1, 1); 106fdd4e1e0SJan Lentfer keycode=substr(keycode, 2); 107fdd4e1e0SJan Lentfer result = result * length(digits) + index(digits, digit) - 1; 108fdd4e1e0SJan Lentfer } 109fdd4e1e0SJan Lentfer return result; 110fdd4e1e0SJan Lentfer} 111fdd4e1e0SJan Lentfer 112fdd4e1e0SJan LentferBEGIN { 113fdd4e1e0SJan Lentfer maxkey='$maxkey'; 114fdd4e1e0SJan Lentfer pass='$pass'; 115fdd4e1e0SJan Lentfer key_max=1; 116fdd4e1e0SJan Lentfer bits=1; 117fdd4e1e0SJan Lentfer while (key_max < maxkey) { 118fdd4e1e0SJan Lentfer bits = bits + 1; 119fdd4e1e0SJan Lentfer key_max = (key_max * 2) + 1; 120fdd4e1e0SJan Lentfer } 121fdd4e1e0SJan Lentfer octal_fmt = sprintf ("%%0%do", (bits + 2) / 3 + 1); 122fdd4e1e0SJan Lentfer} 123fdd4e1e0SJan Lentfer 124fdd4e1e0SJan Lentfer/^$/ {next;} 125fdd4e1e0SJan Lentfer/^#/ {next;} 126fdd4e1e0SJan Lentfer/^capalias/ {next;} 127fdd4e1e0SJan Lentfer/^infoalias/ {next;} 128*32bb5217SDaniel Fojt/^used_by/ {next;} 129*32bb5217SDaniel Fojt/^userdef/ {next;} 130fdd4e1e0SJan Lentfer 131fdd4e1e0SJan Lentfer$5 != "-" && $6 != "-" { 132fdd4e1e0SJan Lentfer if ($6 == "+") { 133fdd4e1e0SJan Lentfer if (pass == 1 || pass == 2) 134fdd4e1e0SJan Lentfer next; 135fdd4e1e0SJan Lentfer thiskey=maxkey + 1; 136fdd4e1e0SJan Lentfer } else { 137fdd4e1e0SJan Lentfer if (pass == 3) 138fdd4e1e0SJan Lentfer next; 139fdd4e1e0SJan Lentfer thiskey=decode($6); 140fdd4e1e0SJan Lentfer } 141fdd4e1e0SJan Lentfer if (thiskey > maxkey) 142fdd4e1e0SJan Lentfer maxkey = thiskey; 143fdd4e1e0SJan Lentfer if (pass == 2 || pass == 3) { 144fdd4e1e0SJan Lentfer showkey=sprintf(octal_fmt, thiskey); 145fdd4e1e0SJan Lentfer if ($5 == "KEY_F(0)" ) { 146fdd4e1e0SJan Lentfer printf "#define " 147fdd4e1e0SJan Lentfer print_cols("KEY_F0", 16); 148fdd4e1e0SJan Lentfer print_cols(showkey, 16); 149fdd4e1e0SJan Lentfer print "/* Function keys. Space for 64 */"; 150fdd4e1e0SJan Lentfer printf "#define " 151fdd4e1e0SJan Lentfer print_cols("KEY_F(n)", 16); 152fdd4e1e0SJan Lentfer print_cols("(KEY_F0+(n))", 16); 153fdd4e1e0SJan Lentfer print "/* Value of function key n */" 154fdd4e1e0SJan Lentfer } else { 155fdd4e1e0SJan Lentfer printf "#define " 156fdd4e1e0SJan Lentfer print_cols($5, 16); 157fdd4e1e0SJan Lentfer print_cols(showkey, 16); 158fdd4e1e0SJan Lentfer printf "/*" 159fdd4e1e0SJan Lentfer for (i = 8; i <= NF; i++) 160fdd4e1e0SJan Lentfer printf " %s", $i 161fdd4e1e0SJan Lentfer print " */" 162fdd4e1e0SJan Lentfer } 163fdd4e1e0SJan Lentfer } 164fdd4e1e0SJan Lentfer } 165fdd4e1e0SJan LentferEND { 166fdd4e1e0SJan Lentfer if (pass == 1) { 167fdd4e1e0SJan Lentfer print maxkey; 168fdd4e1e0SJan Lentfer } else if (pass == 4) { 169fdd4e1e0SJan Lentfer print ""; 170fdd4e1e0SJan Lentfer printf "#define "; 171fdd4e1e0SJan Lentfer print_cols("KEY_MAX", 16); 172fdd4e1e0SJan Lentfer result = sprintf (octal_fmt, key_max); 173fdd4e1e0SJan Lentfer print_cols(result, 16); 174fdd4e1e0SJan Lentfer printf "/* Maximum key value is "; 175fdd4e1e0SJan Lentfer printf octal_fmt, maxkey; 176fdd4e1e0SJan Lentfer print " */"; 177fdd4e1e0SJan Lentfer } 178fdd4e1e0SJan Lentfer } 179fdd4e1e0SJan Lentfer' 180fdd4e1e0SJan Lentferif test $pass = 1 ; then 181fdd4e1e0SJan Lentfer maxkey=`cat $pass1` 182fdd4e1e0SJan Lentferfi 183fdd4e1e0SJan Lentfer 184fdd4e1e0SJan Lentferdone 185fdd4e1e0SJan Lentfer 186fdd4e1e0SJan Lentfercat $pass2 187fdd4e1e0SJan Lentfercat $pass3 188fdd4e1e0SJan Lentfercat $pass4 189