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