| #!/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 |
| |