Annotation of hatari/tools/zip2st.sh, revision 1.1

1.1     ! root        1: #!/bin/sh
        !             2: # Script for converting .ZIP archives to Atari .ST disk images
        !             3: # (for the Hatari emulator).
        !             4: 
        !             5: # tools are present?
        !             6: if [ -z "$(which unzip)" ]; then
        !             7:        echo "ERROR: 'unzip' missing."
        !             8:        exit 2
        !             9: fi
        !            10: if [ -z "$(which rename)" ]; then
        !            11:        echo "ERROR: 'rename' script (from 'util-linux' package) missing."
        !            12:        exit 2
        !            13: fi
        !            14: if [ -z "$(which mformat)" ] || [ -z "$(which mcopy)" ]; then
        !            15:        echo "ERROR: 'mformat' or 'mcopy' (from 'mtools' package) missing."
        !            16:        exit 2
        !            17: fi
        !            18: 
        !            19: # one ZIPFILE given?
        !            20: if [ $# -lt 1 ] || [ -z "$1" ] || [ $# -gt 2 ]; then
        !            21:        name=${0##*/}
        !            22:        echo "Convert .ZIP files to .ST disk images."
        !            23:        echo "This script requires the mtools package."
        !            24:        echo
        !            25:        echo "Usage:"
        !            26:        echo " $name srcname.zip [destname.st]"
        !            27:        echo
        !            28:        echo "Example:"
        !            29:        echo " for zip in *.zip; do $name \$zip; done"
        !            30:        echo
        !            31:        echo "ERROR: wrong number of argument(s)."
        !            32:        exit 1
        !            33: fi
        !            34: 
        !            35: ZIPFILE=$1
        !            36: STFILE=$2
        !            37: if [ -z "$STFILE" ]; then
        !            38:        # if no STFILE path given, save it to current dir (remove path)
        !            39:        # and use the ZIPFILE name with the extension removed.
        !            40:        # (done with POSIX shell parameter expansion)
        !            41:        BASENAME=${ZIPFILE##*/}
        !            42:        BASENAME=${BASENAME%.zip}
        !            43:        BASENAME=${BASENAME%.ZIP}
        !            44:        STFILE=$BASENAME.st
        !            45: fi
        !            46: if [ -f "$STFILE" ]; then
        !            47:        echo "ERROR: ST file '$STFILE' already exists, remove it first. Aborting..."
        !            48:        exit 1
        !            49: fi
        !            50: 
        !            51: TEMPDIR=`mktemp -d` || exit 2
        !            52: echo "Converting" $ZIPFILE "->" $TEMPDIR "->" $STFILE
        !            53: 
        !            54: echo
        !            55: step=1
        !            56: echo "$step) Unzipping..."
        !            57: unzip $ZIPFILE -d $TEMPDIR || exit 2
        !            58: 
        !            59: # .zip files created with STZip sometimes have wrong access rights...
        !            60: chmod -R u+rw $TEMPDIR/*
        !            61: 
        !            62: WORKINGDIR=`pwd`
        !            63: 
        !            64: echo
        !            65: step=$(($step+1))
        !            66: echo "$step) Changing file names to upper case..."
        !            67: for i in `find $TEMPDIR/* -depth` ; do
        !            68:        cd `dirname $i`
        !            69:        rename -v 'y/a-z/A-Z/' `basename $i`
        !            70: done
        !            71: 
        !            72: cd $WORKINGDIR
        !            73: 
        !            74: # size of reserved sectors, FATs & root dir + zip content size
        !            75: size=$((24 + $(du -ks $TEMPDIR|awk '{print $1}')))
        !            76: 
        !            77: # find a suitable disk size supported by mformat and Atari ST
        !            78: disksize=0
        !            79: for i in 360 400 720 800 1440 2880; do
        !            80:        if [ $i -gt $size ]; then
        !            81:                disksize=$i
        !            82:                break
        !            83:        fi
        !            84: done
        !            85: 
        !            86: if [ $disksize -gt 0 ]; then
        !            87:        echo
        !            88:        step=$(($step+1))
        !            89:        echo "$step) Creating $disksize KB disk image..."
        !            90:        dd if=/dev/zero of=$STFILE bs=1024 count=$disksize
        !            91:        
        !            92:        echo
        !            93:        step=$(($step+1))
        !            94:        echo "$step) Formating disk image..."
        !            95:        case $disksize in
        !            96:                360) mformat -i $STFILE -t 80 -h 1 -n 9 -a :: ;;
        !            97:                400) mformat -i $STFILE -t 80 -h 1 -n 10 -a :: ;;
        !            98:                800) mformat -i $STFILE -t 80 -h 2 -n 10 -a :: ;;
        !            99:                *) mformat -i $STFILE -f $disksize -a :: ;;
        !           100:        esac
        !           101:        
        !           102:        echo
        !           103:        step=$(($step+1))
        !           104:        echo "$step) Copying data to disk image..."
        !           105:        mcopy -i $STFILE -spmv $TEMPDIR/* ::
        !           106: else
        !           107:        echo "ERROR: zip contents don't fit to a floppy image ($size > 2880 KB)."
        !           108: fi
        !           109: 
        !           110: echo
        !           111: step=$(($step+1))
        !           112: echo "$step) Cleaning up temporary files..."
        !           113: rm -rv $TEMPDIR
        !           114: 
        !           115: echo "Done."

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.