| #!/bin/sh | |
| ############################################################################## | |
| # Copyright (c) 1998,2006 Free Software Foundation, Inc. # | |
| # # | |
| # Permission is hereby granted, free of charge, to any person obtaining a # | |
| # copy of this software and associated documentation files (the "Software"), # | |
| # to deal in the Software without restriction, including without limitation # | |
| # the rights to use, copy, modify, merge, publish, distribute, distribute # | |
| # with modifications, sublicense, and/or sell copies of the Software, and to # | |
| # permit persons to whom the Software is furnished to do so, subject to the # | |
| # following conditions: # | |
| # # | |
| # The above copyright notice and this permission notice shall be included in # | |
| # all copies or substantial portions of the Software. # | |
| # # | |
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # | |
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # | |
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # | |
| # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # | |
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # | |
| # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # | |
| # DEALINGS IN THE SOFTWARE. # | |
| # # | |
| # Except as contained in this notice, the name(s) of the above copyright # | |
| # holders shall not be used in advertising or otherwise to promote the sale, # | |
| # use or other dealings in this Software without prior written # | |
| # authorization. # | |
| ############################################################################## | |
| # $Id: capconvert,v 1.4 2006/04/22 21:46:17 tom Exp $ | |
| # | |
| # capconvert -- automated conversion from termcap to terminfo | |
| # | |
| echo "This script tries to automatically set you up so that your applications" | |
| echo "that now use termcap can use terminfo and the ncurses library." | |
| echo "" | |
| # Note, except for telling if we're running under xterm we don't use TERM at | |
| # all. This is because BSD users not infrequently have multiple termtypes | |
| # selected by conditionals in tset -- unless they're xterm users, in which | |
| # case they're on a workstation and probably don't. | |
| # Check to make sure TERMINFO is not already defined | |
| if test -n "$TERMINFO" | |
| then | |
| echo "TERMINFO is already defined in your environment. This means" | |
| echo "you already have a local terminfo tree, so you do not need any" | |
| echo "conversion." | |
| if test ! -d $TERMINFO ; then | |
| echo "Caution: TERMINFO does not point to a directory!" | |
| fi | |
| exit; | |
| fi | |
| # Check to see if terminfo is present in one of the standard locations. | |
| terminfo=no | |
| for p in $TERMINFO \ | |
| /usr/lib/terminfo \ | |
| /usr/share/lib/terminfo \ | |
| /usr/share/terminfo \ | |
| /usr/local/lib/terminfo \ | |
| /usr/local/share/terminfo | |
| do | |
| if test -d $p ; then | |
| terminfo=yes | |
| break | |
| fi | |
| done | |
| if test $terminfo = yes | |
| then | |
| echo "Your system already has a system-wide terminfo tree." | |
| echo "" | |
| if test -z "$TERMCAP" | |
| then | |
| echo "You have no TERMCAP variable set, so we are done." | |
| # Assumes the terminfo master covers all canned terminal types | |
| exit; | |
| fi | |
| if test "$TERM" = "xterm" | |
| then | |
| echo "You are running xterm, which usually sets TERMCAP itself." | |
| echo "We can ignore this, because terminfo knows about xterm." | |
| echo "So you will just use the system-wide terminfo tree." | |
| exit; | |
| else | |
| echo "We will have to make a local one for you anyway, to capture the effect" | |
| echo "of your TERMCAP variable." | |
| fi | |
| else | |
| echo "No system-wide terminfo tree. We will make you a local one." | |
| fi | |
| echo ""; | |
| # Check if test -x works (it's not portable, but useful) | |
| OPT="-x" | |
| TMP=test$$; touch $TMP && chmod 755 $TMP | |
| if test $OPT $TMP ; then | |
| chmod 644 $TMP | |
| test $OPT $TMP && OPT="-f" | |
| else | |
| OPT="-f" | |
| fi | |
| rm -f $TMP | |
| # First step -- go find tic | |
| TIC= | |
| IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" | |
| for x in $PATH . | |
| do | |
| if test $OPT $x/tic | |
| then | |
| TIC=$x/tic | |
| break | |
| fi | |
| done | |
| IFS="$ac_save_ifs" | |
| if test -n "$TIC" | |
| then | |
| echo "I see tic at $TIC." | |
| case $TIC in # (vi | |
| ./tic) | |
| if test $OPT ../misc/shlib ; then | |
| TIC="../misc/shlib $TIC" | |
| fi | |
| ;; | |
| esac | |
| else | |
| echo "You do not have tic installed anywhere I can see, please fix that." | |
| exit; | |
| fi | |
| echo ""; | |
| # We have tic. Either there's no system terminfo tree or there is one but | |
| # the user has a TERMCAP variable that may modify a stock description. | |
| # | |
| # Make the user a terminfo directory | |
| if test -d $HOME/.terminfo | |
| then | |
| echo "It appears you already have a private terminfo directory" | |
| echo "at $HOME/.terminfo; this seems odd, because TERMINFO" | |
| echo "is not defined. I am not going to second-guess this -- if you" | |
| echo "really want me to try auto-configuring for you, remove or" | |
| echo "rename $HOME/terminfo and run me again." | |
| exit; | |
| else | |
| echo "I am creating your private terminfo directory at $HOME/.terminfo" | |
| mkdir $HOME/.terminfo | |
| # Ensure that that's where tic's compilation results. | |
| # This isn't strictly necessary with a 1.9.7 or later tic. | |
| TERMINFO="$HOME/.terminfo"; export TERMINFO | |
| fi | |
| echo ""; | |
| # Find a terminfo source to work from | |
| if test -f ../misc/terminfo.src | |
| then | |
| echo "I see the terminfo master source is handy; I will use that." | |
| master=../misc/terminfo.src | |
| else | |
| # Ooops...looks like we're running from somewhere other than the | |
| # progs directory of an ncurses source tree. | |
| master=`find $HOME -name "*terminfo.src" -print` | |
| mcount=`echo $master | wc -l` | |
| case $mcount in | |
| 0) | |
| echo "I can not find a terminfo source file anywhere under your home directory." | |
| echo "There should be a file called terminfo.src somewhere in your" | |
| echo "ncurses distribution; please put it in your home directotry" | |
| echo "and run me again (it does not have to live there permanently)." | |
| exit; | |
| ;; | |
| 1) | |
| echo "I see a file called $master." | |
| echo "I am going to assume this is the terminfo source included with" | |
| echo "the ncurses distribution. If this assumption is wrong, please" | |
| echo "interrupt me now! OK to continue?" | |
| read ans; | |
| ;; | |
| 2) | |
| echo "I see more than one possible terminfo source. Here they are:" | |
| echo $master | sed "/^/s// /"; | |
| while : | |
| do | |
| echo "Please tell me which one to use:" | |
| read master; | |
| if test -f $master | |
| then | |
| break | |
| else | |
| echo "That file does not exist. Try again?"; | |
| fi | |
| done | |
| ;; | |
| esac | |
| fi | |
| echo ""; | |
| # Now that we have a master, compile it into the local tree | |
| echo "OK, now I will make your private terminfo tree. This may take a bit..." | |
| # | |
| # Kluge alert: we compile terminfo.src in two pieces because a lot of machines | |
| # with < 16MB RAM choke on tic's core-hog habits. | |
| trap "rm -f tsplit$$.*" 0 1 2 5 15 | |
| sed -n $master \ | |
| -e '1,/SPLIT HERE/w 'tsplit$$.01 \ | |
| -e '/SPLIT HERE/,$w 'tsplit$$.02 \ | |
| 2>/dev/null | |
| for x in tsplit$$.*; do eval $TIC $x; done | |
| rm tsplit$$.* | |
| trap 0 1 2 5 15 | |
| # | |
| echo "You now have a private tree under $HOME/.terminfo;" | |
| echo "the ncurses library will automatically read from it," | |
| echo "and ncurses tic will automatically compile entries to it." | |
| # We're done unless user has a .termcap file or equivalent named by TERMCAP | |
| if test -z "$TERMCAP" | |
| then | |
| echo "You have no TERMCAP set, so we are done." | |
| fi | |
| # OK, here comes the nasty case...user has a TERMCAP. Instead of | |
| # trying to follow all the convolutions of the relationship between | |
| # TERM and TERMCAP (partly because it's too painful, and partly because | |
| # we don't actually know what TERM will be nor even if it always has | |
| # the same value for this user) we do the following three steps... | |
| if test -f $HOME/.termcap | |
| then | |
| echo 'I see you have a $HOME/.termcap file. I will compile that.' | |
| eval $TIC $HOME/.termcap | |
| echo "Done." | |
| echo "Note that editing $HOME/.termcap will no longer change the data curses sees." | |
| elif test -f "$TERMCAP" | |
| then | |
| echo "Your TERMCAP names the file $TERMCAP. I will compile that." | |
| eval $TIC $TERMCAP | |
| echo "Done." | |
| echo "Note that editing $TERMCAP will no longer change the data curses sees." | |
| else | |
| echo "Your TERMCAP value appears to be an entry in termcap format." | |
| echo "I will compile it." | |
| echo $TERMCAP >myterm$$ | |
| eval $TIC myterm$$ | |
| rm myterm$$ | |
| echo "Done." | |
| echo "Note that editing TERMCAP will no longer change the data curses sees." | |
| fi | |
| echo "To do that, decompile the terminal decription you want with infocmp(1)," | |
| echo "edit to taste, and recompile using tic(1)." | |
| # capconvert ends here | |