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