1#!/bin/sh 2# $Id: MKtermsort.sh,v 1.13 2020/02/02 23:34:34 tom Exp $ 3# 4# MKtermsort.sh -- generate indirection vectors for the various sort methods 5# 6############################################################################## 7# Copyright 2020 Thomas E. Dickey # 8# Copyright 1998-2015,2017 Free Software Foundation, Inc. # 9# # 10# Permission is hereby granted, free of charge, to any person obtaining a # 11# copy of this software and associated documentation files (the "Software"), # 12# to deal in the Software without restriction, including without limitation # 13# the rights to use, copy, modify, merge, publish, distribute, distribute # 14# with modifications, sublicense, and/or sell copies of the Software, and to # 15# permit persons to whom the Software is furnished to do so, subject to the # 16# following conditions: # 17# # 18# The above copyright notice and this permission notice shall be included in # 19# all copies or substantial portions of the Software. # 20# # 21# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # 22# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # 23# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # 24# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # 25# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # 26# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # 27# DEALINGS IN THE SOFTWARE. # 28# # 29# Except as contained in this notice, the name(s) of the above copyright # 30# holders shall not be used in advertising or otherwise to promote the sale, # 31# use or other dealings in this Software without prior written # 32# authorization. # 33############################################################################## 34# 35# The output of this script is C source for nine arrays that list three sort 36# orders for each of the three different classes of terminfo capabilities. 37# 38# keep the order independent of locale: 39if test "${LANGUAGE+set}" = set; then LANGUAGE=C; export LANGUAGE; fi 40if test "${LANG+set}" = set; then LANG=C; export LANG; fi 41if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi 42if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi 43if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi 44if test "${LC_COLLATE+set}" = set; then LC_COLLATE=C; export LC_COLLATE; fi 45# 46AWK=${1-awk} 47DATA=${2-../include/Caps} 48 49data=data$$ 50trap 'rm -f $data' 1 2 3 15 51sed -e 's/[ ][ ]*/ /g' < $DATA >$data 52DATA=$data 53 54echo "/*"; 55echo " * termsort.c --- sort order arrays for use by infocmp."; 56echo " *"; 57echo " * Note: this file is generated using MKtermsort.sh, do not edit by hand."; 58echo " */"; 59 60echo "static const PredIdx bool_terminfo_sort[] = {"; 61$AWK <$DATA ' 62BEGIN {i = 0;} 63/^#/ {next;} 64$3 == "bool" {printf("%s\t%d\n", $2, i++);} 65' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}'; 66echo "};"; 67echo ""; 68 69echo "static const PredIdx num_terminfo_sort[] = {"; 70$AWK <$DATA ' 71BEGIN {i = 0;} 72/^#/ {next;} 73$3 == "num" {printf("%s\t%d\n", $2, i++);} 74' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}'; 75echo "};"; 76echo ""; 77 78echo "static const PredIdx str_terminfo_sort[] = {"; 79$AWK <$DATA ' 80BEGIN {i = 0;} 81/^#/ {next;} 82$3 == "str" {printf("%s\t%d\n", $2, i++);} 83' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}'; 84echo "};"; 85echo ""; 86 87echo "static const PredIdx bool_variable_sort[] = {"; 88$AWK <$DATA ' 89BEGIN {i = 0;} 90/^#/ {next;} 91$3 == "bool" {printf("%s\t%d\n", $1, i++);} 92' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}'; 93echo "};"; 94echo ""; 95 96echo "static const PredIdx num_variable_sort[] = {"; 97$AWK <$DATA ' 98BEGIN {i = 0;} 99/^#/ {next;} 100$3 == "num" {printf("%s\t%d\n", $1, i++);} 101' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}'; 102echo "};"; 103echo ""; 104 105echo "static const PredIdx str_variable_sort[] = {"; 106$AWK <$DATA ' 107BEGIN {i = 0;} 108/^#/ {next;} 109$3 == "str" {printf("%s\t%d\n", $1, i++);} 110' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}'; 111echo "};"; 112echo ""; 113 114echo "static const PredIdx bool_termcap_sort[] = {"; 115$AWK <$DATA ' 116BEGIN {i = 0;} 117/^#/ {next;} 118$3 == "bool" {printf("%s\t%d\n", $4, i++);} 119' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}'; 120echo "};"; 121echo ""; 122 123echo "static const PredIdx num_termcap_sort[] = {"; 124$AWK <$DATA ' 125BEGIN {i = 0;} 126/^#/ {next;} 127$3 == "num" {printf("%s\t%d\n", $4, i++);} 128' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}'; 129echo "};"; 130echo ""; 131 132echo "static const PredIdx str_termcap_sort[] = {"; 133$AWK <$DATA ' 134BEGIN {i = 0;} 135/^#/ {next;} 136$3 == "str" {printf("%s\t%d\n", $4, i++);} 137' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}'; 138echo "};"; 139echo ""; 140 141echo "static const bool bool_from_termcap[] = {"; 142$AWK <$DATA ' 143BEGIN { count = 0; valid = 0; } 144$3 == "bool" && substr($7, 1, 1) == "-" {print "\tFALSE,\t/* ", $2, " */"; count++; } 145$3 == "bool" && substr($7, 1, 1) == "Y" {print "\tTRUE,\t/* ", $2, " */"; valid = count++; } 146END { printf "#define OK_bool_from_termcap %d\n", valid; } 147' 148echo "};"; 149echo ""; 150 151echo "static const bool num_from_termcap[] = {"; 152$AWK <$DATA ' 153BEGIN { count = 0; valid = 0; } 154$3 == "num" && substr($7, 1, 1) == "-" {print "\tFALSE,\t/* ", $2, " */"; count++; } 155$3 == "num" && substr($7, 1, 1) == "Y" {print "\tTRUE,\t/* ", $2, " */"; valid = count++; } 156END { printf "#define OK_num_from_termcap %d\n", valid; } 157' 158echo "};"; 159echo ""; 160 161echo "static const bool str_from_termcap[] = {"; 162$AWK <$DATA ' 163BEGIN { count = 0; valid = 0; } 164$3 == "str" && substr($7, 1, 1) == "-" {print "\tFALSE,\t/* ", $2, " */"; count++; } 165$3 == "str" && substr($7, 1, 1) == "Y" {print "\tTRUE,\t/* ", $2, " */"; valid = count++; } 166END { printf "#define OK_str_from_termcap %d\n", valid; } 167' 168echo "};"; 169echo ""; 170 171rm -f $data 172