Annotation of src/usr.bin/tic/capconvert, Revision 1.1
1.1 ! nicm 1: #!/bin/sh
! 2: ##############################################################################
! 3: # Copyright 2019-2021,2022 Thomas E. Dickey #
! 4: # Copyright 1998-2011,2017 Free Software Foundation, Inc. #
! 5: # #
! 6: # Permission is hereby granted, free of charge, to any person obtaining a #
! 7: # copy of this software and associated documentation files (the "Software"), #
! 8: # to deal in the Software without restriction, including without limitation #
! 9: # the rights to use, copy, modify, merge, publish, distribute, distribute #
! 10: # with modifications, sublicense, and/or sell copies of the Software, and to #
! 11: # permit persons to whom the Software is furnished to do so, subject to the #
! 12: # following conditions: #
! 13: # #
! 14: # The above copyright notice and this permission notice shall be included in #
! 15: # all copies or substantial portions of the Software. #
! 16: # #
! 17: # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
! 18: # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
! 19: # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
! 20: # THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
! 21: # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
! 22: # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
! 23: # DEALINGS IN THE SOFTWARE. #
! 24: # #
! 25: # Except as contained in this notice, the name(s) of the above copyright #
! 26: # holders shall not be used in advertising or otherwise to promote the sale, #
! 27: # use or other dealings in this Software without prior written #
! 28: # authorization. #
! 29: ##############################################################################
! 30: # $Id: capconvert,v 1.12 2022/07/16 21:00:27 tom Exp $
! 31: #
! 32: # capconvert -- automated conversion from termcap to terminfo
! 33: #
! 34:
! 35: echo "This script tries to automatically set you up so that your applications"
! 36: echo "that now use termcap can use terminfo and the ncurses library."
! 37: echo ""
! 38:
! 39: # Note, except for telling if we're running under xterm we don't use TERM at
! 40: # all. This is because BSD users not infrequently have multiple termtypes
! 41: # selected by conditionals in tset -- unless they're xterm users, in which
! 42: # case they're on a workstation and probably don't.
! 43:
! 44: # Check to make sure TERMINFO is not already defined
! 45: if test -n "$TERMINFO"
! 46: then
! 47: echo "TERMINFO is already defined in your environment. This means"
! 48: echo "you already have a local terminfo tree, so you do not need any"
! 49: echo "conversion."
! 50: if test ! -d "$TERMINFO" ; then
! 51: echo "Caution: TERMINFO does not point to a directory!"
! 52: fi
! 53: exit;
! 54: fi
! 55:
! 56: # Check to see if terminfo is present in one of the standard locations.
! 57: terminfo=no
! 58: for p in $TERMINFO \
! 59: /usr/lib/terminfo \
! 60: /usr/share/lib/terminfo \
! 61: /usr/share/terminfo \
! 62: /usr/local/lib/terminfo \
! 63: /usr/local/share/terminfo
! 64: do
! 65: if test -d "$p" ; then
! 66: terminfo=yes
! 67: break
! 68: fi
! 69: done
! 70:
! 71: if test $terminfo = yes
! 72: then
! 73: echo "Your system already has a system-wide terminfo tree."
! 74: echo ""
! 75: if test -z "$TERMCAP"
! 76: then
! 77: echo "You have no TERMCAP variable set, so we are done."
! 78: # Assumes the terminfo master covers all canned terminal types
! 79: exit;
! 80: fi
! 81: case $TERM in
! 82: xterm | xterm-*)
! 83: echo "You are running xterm, which usually sets TERMCAP itself."
! 84: echo "We can ignore this, because terminfo knows about xterm."
! 85: echo "So you will just use the system-wide terminfo tree."
! 86: exit
! 87: ;;
! 88: *)
! 89: echo "We will have to make a local one for you anyway, to capture the effect"
! 90: echo "of your TERMCAP variable."
! 91: ;;
! 92: esac
! 93: else
! 94: echo "No system-wide terminfo tree. We will make you a local one."
! 95: fi
! 96: echo "";
! 97:
! 98: # Check if test -x works (it is not portable, but useful)
! 99: OPT="-x"
! 100: TMP=test$$; touch $TMP && chmod 755 $TMP
! 101: if test $OPT $TMP ; then
! 102: chmod 644 $TMP
! 103: test $OPT $TMP && OPT="-f"
! 104: else
! 105: OPT="-f"
! 106: fi
! 107: rm -f $TMP
! 108:
! 109: # First step -- go find tic
! 110: TIC=
! 111: IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:"
! 112: for x in $PATH .
! 113: do
! 114: if test "$OPT" "$x"/tic
! 115: then
! 116: TIC=$x/tic
! 117: break
! 118: fi
! 119: done
! 120: IFS="$save_ifs"
! 121:
! 122: if test -n "$TIC"
! 123: then
! 124: echo "I see tic at $TIC."
! 125: case $TIC in # (vi
! 126: ./tic)
! 127: if test $OPT ../misc/shlib ; then
! 128: TIC="../misc/shlib $TIC"
! 129: fi
! 130: ;;
! 131: esac
! 132: else
! 133: echo "You do not have tic installed anywhere I can see, please fix that."
! 134: exit;
! 135: fi
! 136: echo "";
! 137:
! 138: # We have tic. Either there's no system terminfo tree or there is one but
! 139: # the user has a TERMCAP variable that may modify a stock description.
! 140: #
! 141:
! 142: # Make the user a terminfo directory
! 143: if test -d "$HOME"/.terminfo
! 144: then
! 145: echo "It appears you already have a private terminfo directory"
! 146: echo "at $HOME/.terminfo; this seems odd, because TERMINFO"
! 147: echo "is not defined. I am not going to second-guess this -- if you"
! 148: echo "really want me to try auto-configuring for you, remove or"
! 149: echo "rename $HOME/terminfo and run me again."
! 150: exit;
! 151: else
! 152: echo "I am creating your private terminfo directory at $HOME/.terminfo"
! 153: mkdir "$HOME"/.terminfo
! 154: # Ensure that that's where tic's compilation results.
! 155: # This isn't strictly necessary with a 1.9.7 or later tic.
! 156: TERMINFO="$HOME/.terminfo"; export TERMINFO
! 157: fi
! 158: echo "";
! 159:
! 160: # Find a terminfo source to work from
! 161: if test -f ../misc/terminfo.src
! 162: then
! 163: echo "I see the terminfo master source is handy; I will use that."
! 164: master=../misc/terminfo.src
! 165: else
! 166: # Ooops...looks like we're running from somewhere other than the
! 167: # progs directory of an ncurses source tree.
! 168: master=`find "$HOME" -name "*terminfo.src" -print`
! 169: mcount=`find "$HOME" -name "*terminfo.src" | wc -l`
! 170: case $mcount in
! 171: 0)
! 172: echo "I can not find a terminfo source file anywhere under your home directory."
! 173: echo "There should be a file called terminfo.src somewhere in your"
! 174: echo "ncurses distribution; please put it in your home directotry"
! 175: echo "and run me again (it does not have to live there permanently)."
! 176: exit;
! 177: ;;
! 178: 1)
! 179: echo "I see a file called $master."
! 180: echo "I am going to assume this is the terminfo source included with"
! 181: echo "the ncurses distribution. If this assumption is wrong, please"
! 182: echo "interrupt me now! OK to continue?"
! 183: read answer;
! 184: ;;
! 185: 2)
! 186: echo "I see more than one possible terminfo source. Here they are:"
! 187: echo "$master" | sed "/^/s// /";
! 188: while :
! 189: do
! 190: echo "Please tell me which one to use:"
! 191: read master;
! 192: if test -f "$master"
! 193: then
! 194: break
! 195: else
! 196: echo "That file does not exist. Try again?";
! 197: fi
! 198: done
! 199: ;;
! 200: esac
! 201: fi
! 202: echo "";
! 203:
! 204: # Now that we have a master, compile it into the local tree
! 205: echo "OK, now I will make your private terminfo tree. This may take a bit..."
! 206: #
! 207: # Kluge alert: we compile terminfo.src in two pieces because a lot of machines
! 208: # with < 16MB RAM choke on tic's core-hog habits.
! 209: trap 'rm -f tsplit$$.*; exit 1' 1 2 3 15
! 210: trap 'rm -f tsplit$$.*' 0
! 211: sed -n "$master" \
! 212: -e '1,/SPLIT HERE/w 'tsplit$$.01 \
! 213: -e '/SPLIT HERE/,$w 'tsplit$$.02 \
! 214: 2>/dev/null
! 215: for x in tsplit$$.*; do eval $TIC "$x"; done
! 216: rm tsplit$$.*
! 217: trap EXIT INT QUIT TERM HUP
! 218: #
! 219: echo "You now have a private tree under $HOME/.terminfo;"
! 220: echo "the ncurses library will automatically read from it,"
! 221: echo "and ncurses tic will automatically compile entries to it."
! 222:
! 223: # We're done unless user has a .termcap file or equivalent named by TERMCAP
! 224: if test -z "$TERMCAP"
! 225: then
! 226: echo "You have no TERMCAP set, so we are done."
! 227: fi
! 228:
! 229: # OK, here comes the nasty case...user has a TERMCAP. Instead of
! 230: # trying to follow all the convolutions of the relationship between
! 231: # TERM and TERMCAP (partly because it is too painful, and partly because
! 232: # we don't actually know what TERM will be nor even if it always has
! 233: # the same value for this user) we do the following three steps...
! 234:
! 235: if test -f "$HOME"/.termcap
! 236: then
! 237: echo "I see you have a \$HOME/.termcap file. I will compile that."
! 238: eval $TIC "$HOME"/.termcap
! 239: echo "Done."
! 240: echo "Note that editing $HOME/.termcap will no longer change the data curses sees."
! 241: elif test -f "$TERMCAP"
! 242: then
! 243: echo "Your TERMCAP names the file $TERMCAP. I will compile that."
! 244: eval $TIC "$TERMCAP"
! 245: echo "Done."
! 246: echo "Note that editing $TERMCAP will no longer change the data curses sees."
! 247: else
! 248: echo "Your TERMCAP value appears to be an entry in termcap format."
! 249: echo "I will compile it."
! 250: echo "$TERMCAP" >myterm$$
! 251: eval $TIC myterm$$
! 252: rm myterm$$
! 253: echo "Done."
! 254: echo "Note that editing TERMCAP will no longer change the data curses sees."
! 255: fi
! 256: echo "To do that, decompile the terminal description you want with infocmp(1),"
! 257: echo "edit to taste, and recompile using tic(1)."
! 258:
! 259: # capconvert ends here
! 260: