xref: /freebsd/contrib/ncurses/progs/MKtermsort.sh (revision 21817992b3314c908ab50f0bb88d2ee750b9c4ac)
10e3d5408SPeter Wemm#!/bin/sh
2*21817992SBaptiste Daroussin# $Id: MKtermsort.sh,v 1.17 2022/02/05 20:39:41 tom Exp $
30e3d5408SPeter Wemm#
40e3d5408SPeter Wemm# MKtermsort.sh -- generate indirection vectors for the various sort methods
50e3d5408SPeter Wemm#
64a1a9510SRong-En Fan##############################################################################
7*21817992SBaptiste Daroussin# Copyright 2020-2021,2022 Thomas E. Dickey                                  #
8e1865124SBaptiste Daroussin# Copyright 1998-2015,2017 Free Software Foundation, Inc.                    #
94a1a9510SRong-En Fan#                                                                            #
104a1a9510SRong-En Fan# Permission is hereby granted, free of charge, to any person obtaining a    #
114a1a9510SRong-En Fan# copy of this software and associated documentation files (the "Software"), #
124a1a9510SRong-En Fan# to deal in the Software without restriction, including without limitation  #
134a1a9510SRong-En Fan# the rights to use, copy, modify, merge, publish, distribute, distribute    #
144a1a9510SRong-En Fan# with modifications, sublicense, and/or sell copies of the Software, and to #
154a1a9510SRong-En Fan# permit persons to whom the Software is furnished to do so, subject to the  #
164a1a9510SRong-En Fan# following conditions:                                                      #
174a1a9510SRong-En Fan#                                                                            #
184a1a9510SRong-En Fan# The above copyright notice and this permission notice shall be included in #
194a1a9510SRong-En Fan# all copies or substantial portions of the Software.                        #
204a1a9510SRong-En Fan#                                                                            #
214a1a9510SRong-En Fan# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
224a1a9510SRong-En Fan# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   #
234a1a9510SRong-En Fan# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL    #
244a1a9510SRong-En Fan# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER      #
254a1a9510SRong-En Fan# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING    #
264a1a9510SRong-En Fan# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER        #
274a1a9510SRong-En Fan# DEALINGS IN THE SOFTWARE.                                                  #
284a1a9510SRong-En Fan#                                                                            #
294a1a9510SRong-En Fan# Except as contained in this notice, the name(s) of the above copyright     #
304a1a9510SRong-En Fan# holders shall not be used in advertising or otherwise to promote the sale, #
314a1a9510SRong-En Fan# use or other dealings in this Software without prior written               #
324a1a9510SRong-En Fan# authorization.                                                             #
334a1a9510SRong-En Fan##############################################################################
344a1a9510SRong-En Fan#
350e3d5408SPeter Wemm# The output of this script is C source for nine arrays that list three sort
360e3d5408SPeter Wemm# orders for each of the three different classes of terminfo capabilities.
370e3d5408SPeter Wemm#
3815589c42SPeter Wemm# keep the order independent of locale:
394a1a9510SRong-En Fanif test "${LANGUAGE+set}"    = set; then LANGUAGE=C;    export LANGUAGE;    fi
404a1a9510SRong-En Fanif test "${LANG+set}"        = set; then LANG=C;        export LANG;        fi
414a1a9510SRong-En Fanif test "${LC_ALL+set}"      = set; then LC_ALL=C;      export LC_ALL;      fi
424a1a9510SRong-En Fanif test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
434a1a9510SRong-En Fanif test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
444a1a9510SRong-En Fanif test "${LC_COLLATE+set}"  = set; then LC_COLLATE=C;  export LC_COLLATE;  fi
4515589c42SPeter Wemm#
460e3d5408SPeter WemmAWK=${1-awk}
470e3d5408SPeter WemmDATA=${2-../include/Caps}
480e3d5408SPeter Wemm
4939f2269fSPeter Wemmdata=data$$
50*21817992SBaptiste Daroussintrap 'rm -f $data; exit 1' 1 2 3 15
51*21817992SBaptiste Daroussinsed -e 's/[	][	]*/	/g' < "$DATA" >$data
5239f2269fSPeter WemmDATA=$data
5339f2269fSPeter Wemm
54*21817992SBaptiste Daroussincat <<EOF
55*21817992SBaptiste Daroussin/*
56*21817992SBaptiste Daroussin * termsort.h --- sort order arrays for use by infocmp.
57*21817992SBaptiste Daroussin *
58*21817992SBaptiste Daroussin * Note: this file is generated using MKtermsort.sh, do not edit by hand.
59*21817992SBaptiste Daroussin */
60*21817992SBaptiste Daroussin#ifndef _TERMSORT_H
61*21817992SBaptiste Daroussin#define _TERMSORT_H 1
62*21817992SBaptiste Daroussin#include <curses.h>
63*21817992SBaptiste Daroussin
64*21817992SBaptiste Daroussin#ifndef DUMP_ENTRY_H
65*21817992SBaptiste Daroussintypedef unsigned PredType;
66*21817992SBaptiste Daroussintypedef unsigned PredIdx;
67*21817992SBaptiste Daroussin#endif
68*21817992SBaptiste Daroussin
69*21817992SBaptiste DaroussinEOF
700e3d5408SPeter Wemm
715d08fb1fSRong-En Fanecho "static const PredIdx bool_terminfo_sort[] = {";
720e3d5408SPeter Wemm$AWK <$DATA '
730e3d5408SPeter WemmBEGIN           {i = 0;}
740e3d5408SPeter Wemm/^#/            {next;}
750e3d5408SPeter Wemm$3 == "bool"    {printf("%s\t%d\n", $2, i++);}
760e3d5408SPeter Wemm' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}';
770e3d5408SPeter Wemmecho "};";
780e3d5408SPeter Wemmecho "";
790e3d5408SPeter Wemm
805d08fb1fSRong-En Fanecho "static const PredIdx num_terminfo_sort[] = {";
810e3d5408SPeter Wemm$AWK <$DATA '
820e3d5408SPeter WemmBEGIN           {i = 0;}
830e3d5408SPeter Wemm/^#/            {next;}
840e3d5408SPeter Wemm$3 == "num"     {printf("%s\t%d\n", $2, i++);}
850e3d5408SPeter Wemm' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}';
860e3d5408SPeter Wemmecho "};";
870e3d5408SPeter Wemmecho "";
880e3d5408SPeter Wemm
895d08fb1fSRong-En Fanecho "static const PredIdx str_terminfo_sort[] = {";
900e3d5408SPeter Wemm$AWK <$DATA '
910e3d5408SPeter WemmBEGIN           {i = 0;}
920e3d5408SPeter Wemm/^#/            {next;}
930e3d5408SPeter Wemm$3 == "str"     {printf("%s\t%d\n", $2, i++);}
940e3d5408SPeter Wemm' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}';
950e3d5408SPeter Wemmecho "};";
960e3d5408SPeter Wemmecho "";
970e3d5408SPeter Wemm
985d08fb1fSRong-En Fanecho "static const PredIdx bool_variable_sort[] = {";
990e3d5408SPeter Wemm$AWK <$DATA '
1000e3d5408SPeter WemmBEGIN           {i = 0;}
1010e3d5408SPeter Wemm/^#/            {next;}
1020e3d5408SPeter Wemm$3 == "bool"    {printf("%s\t%d\n", $1, i++);}
1030e3d5408SPeter Wemm' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}';
1040e3d5408SPeter Wemmecho "};";
1050e3d5408SPeter Wemmecho "";
1060e3d5408SPeter Wemm
1075d08fb1fSRong-En Fanecho "static const PredIdx num_variable_sort[] = {";
1080e3d5408SPeter Wemm$AWK <$DATA '
1090e3d5408SPeter WemmBEGIN           {i = 0;}
1100e3d5408SPeter Wemm/^#/            {next;}
1110e3d5408SPeter Wemm$3 == "num"     {printf("%s\t%d\n", $1, i++);}
1120e3d5408SPeter Wemm' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}';
1130e3d5408SPeter Wemmecho "};";
1140e3d5408SPeter Wemmecho "";
1150e3d5408SPeter Wemm
1165d08fb1fSRong-En Fanecho "static const PredIdx str_variable_sort[] = {";
1170e3d5408SPeter Wemm$AWK <$DATA '
1180e3d5408SPeter WemmBEGIN           {i = 0;}
1190e3d5408SPeter Wemm/^#/            {next;}
1200e3d5408SPeter Wemm$3 == "str"     {printf("%s\t%d\n", $1, i++);}
1210e3d5408SPeter Wemm' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}';
1220e3d5408SPeter Wemmecho "};";
1230e3d5408SPeter Wemmecho "";
1240e3d5408SPeter Wemm
1255d08fb1fSRong-En Fanecho "static const PredIdx bool_termcap_sort[] = {";
1260e3d5408SPeter Wemm$AWK <$DATA '
1270e3d5408SPeter WemmBEGIN           {i = 0;}
1280e3d5408SPeter Wemm/^#/            {next;}
1290e3d5408SPeter Wemm$3 == "bool"    {printf("%s\t%d\n", $4, i++);}
1300e3d5408SPeter Wemm' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}';
1310e3d5408SPeter Wemmecho "};";
1320e3d5408SPeter Wemmecho "";
1330e3d5408SPeter Wemm
1345d08fb1fSRong-En Fanecho "static const PredIdx num_termcap_sort[] = {";
1350e3d5408SPeter Wemm$AWK <$DATA '
1360e3d5408SPeter WemmBEGIN           {i = 0;}
1370e3d5408SPeter Wemm/^#/            {next;}
1380e3d5408SPeter Wemm$3 == "num"     {printf("%s\t%d\n", $4, i++);}
1390e3d5408SPeter Wemm' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}';
1400e3d5408SPeter Wemmecho "};";
1410e3d5408SPeter Wemmecho "";
1420e3d5408SPeter Wemm
1435d08fb1fSRong-En Fanecho "static const PredIdx str_termcap_sort[] = {";
1440e3d5408SPeter Wemm$AWK <$DATA '
1450e3d5408SPeter WemmBEGIN           {i = 0;}
1460e3d5408SPeter Wemm/^#/            {next;}
1470e3d5408SPeter Wemm$3 == "str"     {printf("%s\t%d\n", $4, i++);}
1480e3d5408SPeter Wemm' | sort | $AWK '{print "\t", $2, ",\t/* ", $1, " */";}';
1490e3d5408SPeter Wemmecho "};";
1500e3d5408SPeter Wemmecho "";
1510e3d5408SPeter Wemm
15215589c42SPeter Wemmecho "static const bool bool_from_termcap[] = {";
1530e3d5408SPeter Wemm$AWK <$DATA '
154aae38d10SBaptiste DaroussinBEGIN { count = 0; valid = 0; }
155aae38d10SBaptiste Daroussin$3 == "bool" && substr($7, 1, 1) == "-"       {print "\tFALSE,\t/* ", $2, " */"; count++; }
156aae38d10SBaptiste Daroussin$3 == "bool" && substr($7, 1, 1) == "Y"       {print "\tTRUE,\t/* ", $2, " */"; valid = count++; }
157aae38d10SBaptiste DaroussinEND { printf "#define OK_bool_from_termcap %d\n", valid; }
1580e3d5408SPeter Wemm'
1590e3d5408SPeter Wemmecho "};";
1600e3d5408SPeter Wemmecho "";
1610e3d5408SPeter Wemm
16215589c42SPeter Wemmecho "static const bool num_from_termcap[] = {";
1630e3d5408SPeter Wemm$AWK <$DATA '
164aae38d10SBaptiste DaroussinBEGIN { count = 0; valid = 0; }
165aae38d10SBaptiste Daroussin$3 == "num" && substr($7, 1, 1) == "-"        {print "\tFALSE,\t/* ", $2, " */"; count++; }
166aae38d10SBaptiste Daroussin$3 == "num" && substr($7, 1, 1) == "Y"        {print "\tTRUE,\t/* ", $2, " */"; valid = count++; }
167aae38d10SBaptiste DaroussinEND { printf "#define OK_num_from_termcap %d\n", valid; }
1680e3d5408SPeter Wemm'
1690e3d5408SPeter Wemmecho "};";
1700e3d5408SPeter Wemmecho "";
1710e3d5408SPeter Wemm
17215589c42SPeter Wemmecho "static const bool str_from_termcap[] = {";
1730e3d5408SPeter Wemm$AWK <$DATA '
174aae38d10SBaptiste DaroussinBEGIN { count = 0; valid = 0; }
175aae38d10SBaptiste Daroussin$3 == "str" && substr($7, 1, 1) == "-"        {print "\tFALSE,\t/* ", $2, " */"; count++; }
176aae38d10SBaptiste Daroussin$3 == "str" && substr($7, 1, 1) == "Y"        {print "\tTRUE,\t/* ", $2, " */"; valid = count++; }
177aae38d10SBaptiste DaroussinEND { printf "#define OK_str_from_termcap %d\n", valid; }
1780e3d5408SPeter Wemm'
179*21817992SBaptiste Daroussin
180*21817992SBaptiste Daroussincat <<EOF
181*21817992SBaptiste Daroussin};
182*21817992SBaptiste Daroussin
183*21817992SBaptiste Daroussin#endif /* _TERMSORT_H */
184*21817992SBaptiste DaroussinEOF
18539f2269fSPeter Wemm
18639f2269fSPeter Wemmrm -f $data
187