xref: /freebsd/contrib/ncurses/man/MKterminfo.sh (revision 555c9cae)
10e3d5408SPeter Wemm#!/bin/sh
2555c9caeSRuslan Ermilov# $Id: MKterminfo.sh,v 1.18 2020/02/02 23:34:34 tom Exp $
3555c9caeSRuslan Ermilov#
4555c9caeSRuslan Ermilov# MKterminfo.sh -- generate terminfo.5 from Caps tabular data
5555c9caeSRuslan Ermilov#
60e3d5408SPeter Wemm#***************************************************************************
7555c9caeSRuslan Ermilov# Copyright 2018-2019,2020 Thomas E. Dickey                                *
80e3d5408SPeter Wemm# Copyright 1998-2003,2017 Free Software Foundation, Inc.                  *
90e3d5408SPeter Wemm#                                                                          *
100e3d5408SPeter Wemm# Permission is hereby granted, free of charge, to any person obtaining a  *
110e3d5408SPeter Wemm# copy of this software and associated documentation files (the            *
120e3d5408SPeter Wemm# "Software"), to deal in the Software without restriction, including      *
130e3d5408SPeter Wemm# without limitation the rights to use, copy, modify, merge, publish,      *
140e3d5408SPeter Wemm# distribute, distribute with modifications, sublicense, and/or sell       *
150e3d5408SPeter Wemm# copies of the Software, and to permit persons to whom the Software is    *
160e3d5408SPeter Wemm# furnished to do so, subject to the following conditions:                 *
170e3d5408SPeter Wemm#                                                                          *
180e3d5408SPeter Wemm# The above copyright notice and this permission notice shall be included  *
190e3d5408SPeter Wemm# in all copies or substantial portions of the Software.                   *
200e3d5408SPeter Wemm#                                                                          *
210e3d5408SPeter Wemm# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
220e3d5408SPeter Wemm# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
230e3d5408SPeter Wemm# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
240e3d5408SPeter Wemm# IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
250e3d5408SPeter Wemm# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
260e3d5408SPeter Wemm# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
270e3d5408SPeter Wemm# THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
280e3d5408SPeter Wemm#                                                                          *
290e3d5408SPeter Wemm# Except as contained in this notice, the name(s) of the above copyright   *
300e3d5408SPeter Wemm# holders shall not be used in advertising or otherwise to promote the     *
310e3d5408SPeter Wemm# sale, use or other dealings in this Software without prior written       *
320e3d5408SPeter Wemm# authorization.                                                           *
330e3d5408SPeter Wemm#***************************************************************************
340e3d5408SPeter Wemm#
350e3d5408SPeter Wemm# This script takes terminfo.head and terminfo.tail and splices in between
360e3d5408SPeter Wemm# them a table derived from the Caps data file.  Besides avoiding having
370e3d5408SPeter Wemm# the docs fall out of sync with the table, this also lets us set up tbl
380e3d5408SPeter Wemm# commands for better formatting of the table.
390e3d5408SPeter Wemm#
400e3d5408SPeter Wemm# NOTE: The s in this script really are control characters.  It translates
410e3d5408SPeter Wemm#  to \n because I couldn't get used to inserting linefeeds directly.  There
420e3d5408SPeter Wemm# had better be no s in the table source text.
4315589c42SPeter Wemm#
44555c9caeSRuslan Ermilov# keep the order independent of locale:
45555c9caeSRuslan Ermilovif test "${LANGUAGE+set}"    = set; then LANGUAGE=C;    export LANGUAGE;    fi
46555c9caeSRuslan Ermilovif test "${LANG+set}"        = set; then LANG=C;        export LANG;        fi
47555c9caeSRuslan Ermilovif test "${LC_ALL+set}"      = set; then LC_ALL=C;      export LC_ALL;      fi
48555c9caeSRuslan Ermilovif test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
49555c9caeSRuslan Ermilovif test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
50555c9caeSRuslan Ermilovif test "${LC_COLLATE+set}"  = set; then LC_COLLATE=C;  export LC_COLLATE;  fi
5115589c42SPeter Wemm
520e3d5408SPeter Wemm#
530e3d5408SPeter Wemmhead=$1
540e3d5408SPeter Wemmshift 1
550e3d5408SPeter Wemmcaps=
560e3d5408SPeter Wemmwhile test $# -gt 1
570e3d5408SPeter Wemmdo
580e3d5408SPeter Wemm	caps="$caps $1"
590e3d5408SPeter Wemm	shift 1
600e3d5408SPeter Wemmdone
610e3d5408SPeter Wemmtail=$1
620e3d5408SPeter Wemmcat <<EOF
630e3d5408SPeter Wemm'\\" t
640e3d5408SPeter Wemm.\\" DO NOT EDIT THIS FILE BY HAND!
650e3d5408SPeter Wemm.\\" It is generated from terminfo.head, $caps, and terminfo.tail.
660e3d5408SPeter Wemm.\\"
670e3d5408SPeter Wemm.\\" Note: this must be run through tbl before nroff.
680e3d5408SPeter Wemm.\\" The magic cookie on the first line triggers this under some man programs.
690e3d5408SPeter WemmEOF
700e3d5408SPeter Wemmcat $head
710e3d5408SPeter Wemm
72555c9caeSRuslan Ermilovtemp=temp$$
730e3d5408SPeter Wemmsorted=sorted$$
74555c9caeSRuslan Ermilovunsorted=unsorted$$
750e3d5408SPeter Wemmtrap "code=\$?; rm -f $sorted $temp $unsorted; exit \$code" EXIT HUP INT QUIT TERM
76555c9caeSRuslan Ermilovrm -f $sorted $temp $unsorted
770e3d5408SPeter Wemm
780e3d5408SPeter Wemmcat $caps | sed -n "\
790e3d5408SPeter Wemm/%%-STOP-HERE-%%/q
800e3d5408SPeter Wemm/^#%center/s, expand,,
810e3d5408SPeter Wemm/^#%lw25/s, lw6 , lw7 ,
820e3d5408SPeter Wemm/^#%/s/#%//p
830e3d5408SPeter Wemm/^#/d
840e3d5408SPeter Wemms/[	][	]*/	/g
850e3d5408SPeter Wemms/$/T}/
860e3d5408SPeter Wemms/	[A-Z0-9_()\-][A-Z0-9_()\-]*	[0-9\-][0-9\-]*	[Y\-][B\-][C\-][G\-][EK\-]\**	/	T{/
8739f2269fSPeter Wemms/	bool	/	/p
880e3d5408SPeter Wemms/	num	/	/p
890e3d5408SPeter Wemms/	str	/	/p
900e3d5408SPeter Wemm" |sed -e 's/^$/../' | tr "\134" "\006" >$unsorted
910e3d5408SPeter Wemm
920e3d5408SPeter Wemmrm -f $sorted
930e3d5408SPeter Wemmrm -f $temp
940e3d5408SPeter Wemmsaved=no
950e3d5408SPeter Wemmwhile true
960e3d5408SPeter Wemmdo
970e3d5408SPeter Wemm	data=
980e3d5408SPeter Wemm	read data
990e3d5408SPeter Wemm	test -z "$data" && break
1000e3d5408SPeter Wemm	case "$data" in #(vi
1010e3d5408SPeter Wemm	**) #(vi
1020e3d5408SPeter Wemm		echo "$data" >>$temp
1030e3d5408SPeter Wemm		saved=yes
1040e3d5408SPeter Wemm		;;
1050e3d5408SPeter Wemm	*)
1060e3d5408SPeter Wemm		if test $saved = yes ; then
1070e3d5408SPeter Wemm			saved=no
1080e3d5408SPeter Wemm			sort $temp >>$sorted
1090e3d5408SPeter Wemm			rm -f $temp
1100e3d5408SPeter Wemm		fi
111		echo "$data" >>$sorted
112		;;
113	esac
114done <$unsorted
115test $saved = yes && sort $temp >>$sorted
116
117sed -e 's/^\.\.$//' $sorted | tr "\005\006" "\012\134"
118
119sed	-e '/^center expand;/s, expand,,' \
120	-e '/^\.TS/,/^\\/s, lw[1-9][0-9]*\., l.,' \
121	$tail
122