Listing 1: buildinfo script
#!/bin/sh
#
# buildinfo
#
# Build a new terminfo.src from the binary terminfo files
# present in the /usr/share/lib/terminfo directories. If
# entries are already present, keep them without change. If
# a new entry is found, append it to the source file.
#
# Copyright 1995, by Lawrence S Reznick -- 1995Apr29
usage ()
{
echo "usage: $0 [-hqv] [-d terminfodir] [-o sourcefile]\n"
echo "Update terminfo source file ($TIOUT)"
echo "from $MASTERDIR directory entries.\n"
echo "Options:"
echo "-h\tHelp: See this usage message."
echo "-q\tQuiet: Show no output."
echo "-v\tVerbose: Tell all new & old entries."
echo "-d\tSet terminfo directory to scan."
echo "-o\tSet terminfo source file name to add entries."
}
# Set defaults.
MASTERDIR=/usr/share/lib/terminfo
TIOUT=terminfo.src
# Find out what the user prefers.
# Default (no -v and no -q) shows current terminfo name under
# examination. Scroll its name back if it gets added to the
# source file. Otherwise:
# -v announce names found in the source file (kept).
# -q don't show adding messages.
# -v -q show only kept names.
while getopts "hqvd:o:" OP
do
case $OP in
v) # TRUE = Tell about existing entries
VERBOSE=t
;;
q) # TRUE = Don't tell about add entries
QUIET=t
;;
d) # Use another dir for compiled terminfo entries
MASTERDIR=$OPTARG
;;
o) # Use another source file name for results
TIOUT=$OPTARG
;;
h | \?)
usage
exit 1
;;
esac
done
# Make sure the output file is present without destroying it.
touch $TIOUT
# Make sure all temp files are removed
trap "rm -f *.$$; exit" 0 1 2 3 15
# Collect list of already present terminfo definitions. Definition
# lines begin at the left margin, excluding comments. Any line
# starting with a space or tab can't be a definition line.
LISTFILE=tilist.$$
egrep '^[^ # ]' $TIOUT >$LISTFILE
# Step through each terminfo directory. Assume that most terminfo
# names start with a lowercase letter. Most of the rest start with
# either digits or uppercase letters. Catch whatever remains in
# ASCII order.
for TIDIR in ${MASTERDIR}/[a-z] ${MASTERDIR}/[!a-z]
do
# Check each file in this directory
for TIPATH in $TIDIR/*
do
TIFILE=`basename $TIPATH`
test -n "$QUIET" || echo "$TIFILE\t\t\r\c"
# Some terminfo aliases contain plus signs. These
# conflict with an egrep RE char unless escaped.
# Double backslashes deliver one backslash. Double the
# doubling to deliver a double backslash to TIFILE.
T=`echo "$TIFILE" | sed 's/+/\\\\+/g'`
# Be sure to match only terminfo names. They are always
# followed by a vertical bar. If a bar isn't present, a
# trailing comma at the end of the line signals a single
# name without an alias. Can't put a ? after both
# escaped bars or egrep might match a coincidental word
# in the description phrase.
MATCHSTR="\|?${T}\||^${T},$"
if `egrep "$MATCHSTR" $LISTFILE >/dev/null 2>&1`
then
test -n "$VERBOSE" && echo Kept $TIFILE.
else
# Add new name's definition
infocmp $TIFILE |
tee -a $TIOUT |
egrep '^[^ # ]' >>$LISTFILE
test -n "$QUIET" || echo Added $TIFILE.
fi
done
done
egrep '^[^ # ]' $TIOUT |
sort |
uniq -c |
egrep -v '^ *1 ' >duplist.$$
if [ -s duplist.$$ ]
then
echo "Duplicates found:"
cat duplist.$$
fi
|