#!/bin/ksh

#
# Script for creating a Solaris bootable CD-ROM
#
# Assumes that you have installed cdrecord in your path or /opt/schily/bin.
#
# Assumes that you have installed sunfdisk in your path (or /opt/schily/bin).
#
# All partitions (cdrom.s*) should be "whole" (i.e., do not remove
# the first 512 bytes of the cdrom.s0 image that you create).
#
# Written by Eric Negaard (EJN@Negaard.Net) 1999-06-25.
#

PATH=/opt/schily/bin:$PATH ; export PATH

DBG=
while getopts dh c ; do
    case "$c" in
      d)  DBG=true ;;
      h)  echo "Usage: burn [-d]" ; exit 0 ;;
      \?) echo "Usage: burn [-d]" ; exit 1 ;;
    esac
done

# Check all of the partition sizes to make sure they're multiples of 2048 bytes

tsize=0

for part in 0 1 2 3 4 5 ; do
    f=cdrom.s$part
    bytes=`wc -c "$f"`
    if [ -z "$bytes" ]; then
	echo "ERROR: $f: Unable to determine file size" >&2
	exit 1
    fi
    sz=`echo "" | nawk -v bytes="$bytes" 'END {printf ("%d\n", bytes / 2048);}'`
    rem=`echo "" | nawk -v bytes="$bytes" 'END {printf ("%d\n", bytes % 2048);}'`
    if [ 0 -ne "$rem" ]; then
	echo "ERROR: $f: Not a multiple of 2k bytes ($sz*2048+$rem)" >&2
	exit 1
    fi

    echo "($f: $sz*2K)"

    # Calculate data size in Kbytes
    datasz=`expr $sz \* 2`

    # Fdisk partitions are 1-based instead of 0-based
    fdiskpart=`expr $part + 1`

    # Calculate partition size in Kbytes
    partsz=`sunfdisk -s cdrom.vtoc:$fdiskpart 2>/dev/null`
    if [ -z "$partsz" ]; then
	echo "ERROR: $f: Unable to determine partition size from cdrom.vtoc" >&2
	exit 1
    fi

    if [ "$datasz" -gt "$partsz" ]; then
	echo "ERROR: $f: Data size ($datasz) > partition size ($partsz)" >&1
	exit 1
    elif [ "$datasz" -ne "$partsz" ]; then
	echo "WARNING: $f: Data size ($datasz) != partition size ($partsz)."
	pad=`expr $partsz - $datasz`
	eval "pad_s$part=\"<(dd if=/dev/zero bs=1k count=$pad)\""
	echo "         PAD with $pad Kbytes"
    else
	echo "(data size matches partition size [$datasz/$partsz])"
	eval "pad_s$part=\"\""
    fi
    tsize=`expr $tsize + $partsz`
done

cmd="cat cdrom.vtoc <(dd if=cdrom.s0 bs=1b skip=1 count=3) <(dd if=cdrom.s0 bs=2k skip=1) $pad_s0 cdrom.s1 $pad_s1 cdrom.s2 $pad_s2 cdrom.s3 $pad_s3 cdrom.s4 $pad_s4 cdrom.s5 $pad_s5 | cdrecord -v dev=1,6,0 speed=4 fs=8m tsize=${tsize}k -"

echo ""

echo "Performing: $cmd"

[ -n "$DBG" ] && exit 0

eval "$cmd"
