| # int-fiction.sh 1.0 | |
| # (c)2004 Lee Bigelow <ligelowbee@yahoo.com> | |
| # | |
| # A bash script to display a menu of available int-fiction games | |
| # from a directory and pick the right interpreter to play them. Or | |
| # just play play a game passed on the command line with the right interpreter. | |
| # It uses whiptail or dialog to make the menu. | |
| # | |
| # This program is free software; you can redistribute it and/or | |
| # modify it under the terms of the GNU General Public License | |
| # as published by the Free Software Foundation; either version 2 | |
| # of the License, or (at your option) any later version. | |
| # | |
| # This program is distributed in the hope that it will be useful, | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| # GNU General Public License for more details. | |
| # | |
| # You should have received a copy of the GNU General Public License | |
| # along with this program; if not, write to the Free Software | |
| # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA | |
| # or view it online at: http://www.gnu.org/copyleft/gpl.html | |
| IFIC_DIR="$HOME/int-fiction/" | |
| IFSAVE_DIR="$IFIC_DIR/ifsaved/" | |
| ##################### | |
| # This is where the graphic players would go | |
| if [ $DISPLAY ]; then | |
| PLAYERS=" | |
| zoom:[Zz][1-9] | |
| xnitfol:[Zz][1-9] | |
| glulxex:[Uu][Ll][Xx],[Bb][Ll][Bb] | |
| xtads:[Gg][Aa][Mm] | |
| hewx:[Hh][Ee][Xx] | |
| gtkscare:[Tt][Aa][Ff] | |
| " | |
| fi | |
| ##################### | |
| # This is where the console players go | |
| PLAYERS=$PLAYERS" | |
| frotz:[Zz][0-9] | |
| nitfol:[Zz][1-9] | |
| t3run:[Tt]3 | |
| t23run:[Tt]3,[Gg][Aa][Mm] | |
| glulxeterm:[Uu][Ll][Xx],[Bb][Ll][Bb] | |
| he:[hH][eE][xX] | |
| glkarun:[Aa][Cc][Dd] | |
| " | |
| ################## | |
| #Check for passed gamefile or help | |
| if [ "$#" -gt "1" ] || [ x"$@" = x"-h" ]; then | |
| echo "usage: $0 [gamefile]" | |
| echo | |
| echo "If passed a gamefile, it will play it with the apropriate player." | |
| echo "If nothing is passed it will attempt to make a menu of games" | |
| echo "available using whiptail." | |
| exit | |
| fi | |
| ################## | |
| # set game var to first argument passed, if relative make absolute path | |
| if [ -f "$PWD/$1" ]; then | |
| game="$PWD/$1" | |
| else | |
| game="$1" | |
| fi | |
| ##################### | |
| # check the directory where game files are located, if no gamefile passed. | |
| if [ ! "$game" ] && [ ! -d "$IFIC_DIR" ]; then | |
| echo Could not find directory: | |
| echo $IFIC_DIR | |
| echo | |
| echo Please set up such a directory for your int-fiction story files, or | |
| echo edit and change the default directory this script: | |
| echo "$0". | |
| echo | |
| read -p "Press Enter to Exit..." | |
| exit | |
| fi | |
| ##################### | |
| # Set up and change into a save directory | |
| [ ! -d "$IFSAVE_DIR" ] && mkdir "$IFSAVE_DIR" | |
| if [ -d "$IFSAVE_DIR" ]; then | |
| cd $IFSAVE_DIR | |
| else | |
| echo Error could not create IF save directory: | |
| echo $IFSAVE_DIR | |
| echo | |
| echo Please edit this file: $0 | |
| echo to change the defaults | |
| echo | |
| read -p "Press Enter to Exit..." | |
| exit | |
| fi | |
| #################### | |
| # function to playgame with appropriate interp | |
| playgame () | |
| { | |
| game="$1" | |
| echo game $game | |
| gameext="${game##*.}" | |
| interp="" | |
| for player in $PLAYERS | |
| do | |
| exts="${player##*:}" | |
| exts="${exts//,/ }" | |
| for ext in $exts | |
| do | |
| if [[ "$gameext" == $ext ]]; then | |
| interp="$(which ${player%%:*})" | |
| possible=$possible"${player%%:*} " | |
| fi | |
| done | |
| [ "$interp" ] && break | |
| done | |
| if [ "$interp" ]; then | |
| $interp "$game" | |
| else | |
| whiptail --clear --title "Error" --msgbox \ | |
| "Player for file $game not found.... | |
| =================================== | |
| For the game type \"$gameext\" | |
| Install one of the following players: | |
| $possible | |
| Or edit this file \"$0\" | |
| to include a player not listed" 0 0 | |
| fi | |
| } | |
| ################## | |
| # if game passed to script play it | |
| if [ "$game" ]; then | |
| playgame $game | |
| exit | |
| fi | |
| ##################### | |
| # make a list files based on interpreters. | |
| EXTS="" # regex container for all file extensions | |
| for player in $PLAYERS; do | |
| exts="${player##*:}" | |
| exts="${exts//,/\|}" | |
| EXTS=$EXTS"\|"$exts | |
| done | |
| files=$(find $IFIC_DIR -regex ".*\.\($EXTS\)") | |
| if [ -z "$files" ]; then | |
| echo Could not find any int-fiction files in $IFIC_DIR | |
| read -p "Press Enter to Exit..." | |
| exit | |
| fi | |
| ##################################### | |
| #make file name list for whiptail menu and full path lookup | |
| tag=$(echo $'\b') #needed for empty whiptail tag entry | |
| for file in $files; | |
| do | |
| gpaths=$gpaths"$file:$(basename $file) " | |
| gmenu=$gmenu"$(basename $file) $tag\n" | |
| done | |
| gmenu=$(echo -e $gmenu|sort -f) | |
| ####################### | |
| # and now the menu loop | |
| if which whiptail; then | |
| MENUPRG="whiptail" | |
| elif which dialog; then | |
| MENUPRG="dialog" | |
| else | |
| echo Error no menuing program found. | |
| echo I require the program whiptail or dialog | |
| echo in order to make the menu. | |
| echo | |
| echo Press Enter to exit... | |
| read x | |
| exit | |
| fi | |
| tempfile=$(tempfile 2>/dev/null) || tempfile=/tmp/ific$$ | |
| while true | |
| do | |
| $MENUPRG --clear \ | |
| --title "Interactive Fiction Game Selector" \ | |
| --menu "For more games and reviews see | |
| Baf's Guide to Interactive Fiction: | |
| http://www.wurb.com/if/index | |
| Select a Game to Play:" 0 0 0\ | |
| $gmenu 2> $tempfile | |
| game=$(cat $tempfile) | |
| rm -f $tempfile | |
| for gpath in $gpaths; do | |
| if [ "${gpath##*:}" = "$game" ]; then | |
| game="${gpath%%:*}" | |
| break | |
| fi | |
| done | |
| if [ "$game" ]; then | |
| playgame "$game" | |
| else exit | |
| fi | |
| done | |
Xet Storage Details
- Size:
- 5.69 kB
- Xet hash:
- d774b29e2df71f2d26e116365b7e481a3a42792c64aa9ba748a8623d3b5fb326
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.