diff options
Diffstat (limited to 'games/wargus/extract-warcraft2')
-rw-r--r-- | games/wargus/extract-warcraft2 | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/games/wargus/extract-warcraft2 b/games/wargus/extract-warcraft2 new file mode 100644 index 0000000000..6ede653d18 --- /dev/null +++ b/games/wargus/extract-warcraft2 @@ -0,0 +1,129 @@ +#!/bin/sh + +DEFAULTDEST="/usr/share/games/stratagus/wargus" + +SOURCE="$1" +DEST="${2:-$DEFAULTDEST}" +WARTOOL="${WARTOOL:-wartool}" + +SELF="$( basename "$0" )" +if [ -z "$SOURCE" ]; then + cat <<EOF +$SELF - extract game data files from Warcraft II + +Usage: $SELF [source] <dest> + +source is one of: + +- A block device node or symlink to one (e.g. /dev/cdrom). The + device must contain a Warcraft II CD-ROM. + +- An ISO image of the Warcraft II CD-ROM. + +- A directory containing an installed copy of Warcraft II. + +- A zip, rar, 7z, or tar.(gz|xz|bz2) archive containing either the + contents of the Warcraft II CD-ROM or an installed copy of the game + (but NOT an archive containing an ISO image). + +By "Warcraft II", we mean the original DOS version (or the expansion +pack for the DOS version), *not* the Battle.net edition. The expansion +is probably preferable (has more maps), but either one will work. + +Filename case inside archives is ignored. + +dest is the optional directory to output extracted data to. If not +given, $DEFAULTDEST is used. + +Since this script wants to do things like mount CDs and write to +/usr/share, it generally needs to be run as root. + +For extracting 7z or rar archives, you will need p7zip or unrar. + +This script was written by B. Watson for the SlackBuilds.org +project and is released under the terms of the WTFPL. See +http://www.wtfpl.net/txt/copying/ for details. +EOF + exit 0 +fi + +# try to figure out what $SOURCE is. It can be the CD-ROM, an ISO +# image, an installed directory, or a zip/rar/7z/tar/etc archive +# of an installed dir or the contents of the CD. + +# NOT supported: archives containing the .iso image. + +SOURCE=$( readlink -q -n -f "$SOURCE" ) +TYPE=$( file "$SOURCE" ) + +SRCDIR=$( mktemp -d -t extract-warcraft2.XXXXXX ) + +case "$TYPE" in + *directory*) rm -rf "$SRCDIR" ; SRCDIR="$SOURCE" ; KEEPSRC="yes" ;; + + *block*special*) + mount "$SOURCE" "$SRCDIR" + MOUNTED="$SRCDIR" + ROPT="-r" + ;; + + *ISO*9660*data*) + mount -o loop "$SOURCE" "$SRCDIR" + MOUNTED="$SRCDIR" + ;; + + *7-zip*) + ( cd "$SRCDIR" && 7za x "$SOURCE" ) + ;; + + *RAR*arch*) + ( cd "$SRCDIR" && unrar x "$SOURCE" ) + ;; + + *Zip*arch*) + ( cd "$SRCDIR" && unzip "$SOURCE" ) + ;; + + *gzip*|*bzip2*|*XZ*) + ( cd "$SRCDIR" && tar xvf "$SOURCE" ) + ;; + + *) + echo "Can't figure out what '$SOURCE' is, aborting" 1>&2 + exit 1 + ;; +esac + +# now find the data dir, if it exists +DATADIR="$SRCDIR" +for i in data DATA Data; do + if [ -d "$SRCDIR/$i" ]; then + DATADIR="$SRCDIR/$i" + fi +done + +# sanity check the data dir we think we found +for i in REZDAT rezdat Rezdat; do + if [ -e "$DATADIR/$i.war" ] || + [ -e "$DATADIR/$i.WAR" ] || + [ -e "$DATADIR/$i.War" ] + then + FOUND=yes + fi +done + +if [ "$FOUND" != "yes" ]; then + echo "Can't find rezdat.war in $DATADIR, aborting" 1>&2 && + exit 1 +fi + +mkdir -p $DEST +"$WARTOOL" -m -v $ROPT "$DATADIR" "$DEST" + +if [ "$MOUNTED" != "" ]; then + umount "$MOUNTED" +fi + +if [ "$KEEPSRC" != "yes" ]; then + rm -rf "$SRCDIR" +fi |