#!/bin/sh

set -x

MOUNTDIR=/tmp/a2gs_mount.$$
TMPDISKIMAGE=/tmp/a2gs_diskimage_$$.2mg
TEMPLATEDISKIMAGE=make/system601.2mg

if [ $# -lt 3 ]
then
    echo USAGE: $0 diskimage file directory
    exit 1
fi

DISKIMAGE="$1"
shift

FILE="$1"
shift

DISKIMAGEDEST="$1"
shift
DEST="${MOUNTDIR}/${DISKIMAGEDEST}"

COPYDIRS=$*

cleanupAndExit()
{
    umount "$MOUNTDIR" 2> /dev/null
    rm -f "$TMPDISKIMAGE" 2> /dev/null
    rm -f "$DISKIMAGE" 2> /dev/null
    rmdir "$MOUNTDIR" 2> /dev/null
    exit 1
}

if [ ! -f "$TEMPLATEDISKIMAGE" ]
then
    echo Unable to find the template disk image, $TEMPLATEDISKIMAGE
    cleanupAndExit
fi

cp "$TEMPLATEDISKIMAGE" "$TMPDISKIMAGE"
if [ $? != 0 ]
then
    echo Unable to copy template disk image.
    cleanupAndExit
fi

mkdir "$MOUNTDIR"
if [ $? != 0 ]
then
    echo Unable to create the mount directory.
    cleanupAndExit
fi

profuse -orw "$TMPDISKIMAGE" "$MOUNTDIR"
if [ $? != 0 ]
then
    echo Unable to mount the disk image.
    cleanupAndExit
fi

cp "$FILE" "$DEST"
if [ $? != 0 ]
then
    echo Unable to copy the file to the disk image.
    cleanupAndExit
fi

OLDDIR=`pwd`
for COPYDIR in $COPYDIRS
do
    cd "$COPYDIR"
    if [ $? != 0 ]
    then
        echo Unable to find $COPYDIR
        cleanupAndExit
    fi

    find . -print | while read FILEORDIR
    do
        if [ -d "$FILEORDIR" ]
        then
            mkdir -p "${MOUNTDIR}/$FILEORDIR"
        elif [ -f "$FILEORDIR" ]
        then
            cp "$FILEORDIR" "${MOUNTDIR}/$FILEORDIR"
        fi
    done
    cd "$OLDDIR"
done

umount "$MOUNTDIR"
if [ $? != 0 ]
then
    echo Unable to unmount the disk image.
    cleanupAndExit
fi

cp "$TMPDISKIMAGE" "$DISKIMAGE"
if [ $? != 0 ]
then
    echo Unable to copy the disk image to the destination.
    cleanupAndExit
fi

rm -f "$TMPDISKIMAGE"
rmdir "$MOUNTDIR"
exit 0
