Assorted away-tpope updates
[tpope-extra.git] / bin / gamelaunch
1 #!/bin/sh
2 # $Id$
3 # -*- sh -*- vim: ft=sh sw=4 sts=4
4
5 # Launches a game.  Works both on $1 (an argument) and $0 (the actual name
6 # of the script, presumably a symlink).  Takes care of killing troublemaking
7 # games, pausing unclutter, remapping the keyboard, setting an away message,
8 # and anything else that needs to be done.
9
10 basename="`basename $0`"
11
12 if [ "$basename" = gamelaunch ]; then
13     if [ "x$1" = x--name ]; then
14         shift
15         name="$1"
16         shift
17     fi
18     binary="$1"
19     basename="`basename $binary`"
20     shift
21 fi
22
23 pkill -INT  "^$basename-bin\$" && sleep 1
24 pkill -INT  "^ut2004-bin\$" && sleep 1
25 pkill -KILL "^$basename-bin\$"
26 sync
27
28 [ "$DISPLAY" = "127.0.0.1:7.0" ] && DISPLAY=:1.0
29
30 game="${name:-$basename}"
31 if [ -f "$HOME/games/names.txt" ] && grep -i "^$game=" "$HOME/games/names.txt" >/dev/null; then
32     game="`grep "^$game=" "$HOME/games/names.txt"|sed -e 's/^[^=]*=//g'`"
33 elif [ -z "$name" ]; then
34     game="`echo $game|sed -e 's/\(^\|[-_. ]\)\(.\)/ \U\2/g' -e 's/\([a-z]\)\([0-9]\)/\1 \2/' -e 's/ \([EU]\)t\>/ \1T/' -e 's/^ //'`"
35 fi
36
37 for suffix in '_demo' '-demo' 'demo' ''; do
38     [ -x "/usr/bin/$basename$suffix" ] && \
39         binary="/usr/bin/$basename$suffix"
40     [ -x "/usr/games/$basename$suffix" ] && \
41         binary="/usr/games/$basename$suffix"
42     [ -x "/usr/local/bin/$basename$suffix" ] && \
43         binary="/usr/local/bin/$basename$suffix"
44 done
45
46 if [ -z "$binary" ]; then
47     echo "Game not found." >&2
48     exit 1
49 fi
50
51 setxkbmap us
52 xmodmap "$HOME/.Xmodmap" 2>/dev/null || xmodmap "$HOME/.xmodmap"
53 skill -STOP unclutter
54
55 case "$basename" in
56     ut2004|quake3|doom3|et|armyops)
57     xmodmap -e "keysym Super_L = F13"
58     xmodmap -e "keysym Hyper_L = F14"
59     xmodmap -e "keysym Super_R = F15"
60     ;;
61 esac
62
63 activity="`tpope status activity`"
64 if [ -n "$game" ]; then
65     tpope status activity "Playing $game"
66 fi
67
68 if lspci 2>/dev/null|grep 'VT8233/A/8235/8237' >/dev/null; then
69     SDL_DSP_NOSELECT=1
70     export SDL_DSP_NOSELECT
71     sh -c "(sleep 2; amixer sset IEC958 unmute >/dev/null) &"
72 fi
73
74 if lspci 2>/dev/null|grep 'Savage 3D' >/dev/null; then
75     s3="`s3switch|grep 'Devices active:'|sed -e 's/Devices active: *//'`"
76     s3switch TV >/dev/null
77 fi
78
79 on_exit() {
80     [ -z "$sdpid" ] || kill "$sdpid"
81     skill -CONT unclutter
82     setxkbmap us
83     xmodmap "$HOME/.Xmodmap" 2>/dev/null || xmodmap "$HOME/.xmodmap"
84     xset m 3 3
85     [ -z "$s3" ] || s3switch $s3 >/dev/null
86     xvidtune -unlock
87     FvwmCommand "GoToDeskAndPage 0 0 0" >/dev/null 2>&1
88     tpope status activity -c
89 }
90
91 trap on_exit EXIT
92
93 FvwmCommand "GoToDeskAndPage 0 2 2" >/dev/null 2>&1
94 tpope display-manage $binary "$@" # 2>&1