:
#	@(#) ldsysdump.sh 1.5 89/04/15 
#
#
#	      UNIX is a registered trademark of AT&T
#		Portions Copyright 1976-1989 AT&T
#	Portions Copyright 1980-1989 Microsoft Corporation
#    Portions Copyright 1983-1989 The Santa Cruz Operation, Inc
#		      All Rights Reserved

:
#	Copyright (c) 1984, 1986, 1987, 1988 AT&T
#	  All Rights Reserved

#	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
#	The copyright notice above does not evidence any
#	actual or intended publication of such source code.


# load a system memory image dump from tape or floppy to a file

# shell variables used:
#
#       DEV     "f" = floppy; "t" = tape
#
#       IF      input device file used by dd
#       BS      block size used by dd, in 512 byte units
#       COUNT   number of blocks per disk/tape
#
#       NB      number of BS size blocks on tape/disk
#       N       number of BS size blocks of memory to copy


if [ $# -ne 1 ]
then
	echo 'usage: /etc/ldsysdump file'
	exit
fi


TAPE=
while true
do
	echo "Use Floppy Drive 0 (/dev/rfd0) by default.\n"
	echo "Press ENTER to use the default."
	echo "Enter valid Floppy Drive number to use if different than default."
	echo "Enter \"t\" to use tape drive."
	echo "> \c"
	
	read ans
	case $ans in
	""|0)
		FDRIVE=/dev/rfd0
		break
		;;
	1)
		FDRIVE=/dev/rfd1
		[ -w "$FDRIVE" ] && break
		;;
	t)
		TAPE=yes
		break
		;;
	*)
		FDRIVE=/dev/rfd${ans}
		[ -w "$FDRIVE" ] && break
		echo "No such device : $FDRIVE"
	esac
done

if [ ! "$TAPE" ]
then
	while :
	do
		echo '\nEnter type of floppy used to save the image :'
		echo '  1 - double density 360 KB diskettes'
		echo '  2 - quad density 1.2 MB diskettes'
		echo '  3 - double density 720 KB diskettes'
		echo '  4 - high density 1.44 MB diskettes'
		echo '  n - no, QUIT'
		echo '> \c'
		read ans
		case $ans in
		  1 )   IF=${FDRIVE}48ds9	BS=18 NB=40     DEV=f ; break ;;
		  2 )   IF=${FDRIVE}96ds15	BS=30 NB=80     DEV=f ; break ;;
		  3 )   IF=${FDRIVE}96ds9	BS=18 NB=80     DEV=f ; break ;;
		  4 )   IF=${FDRIVE}135ds18	BS=36 NB=80     DEV=f ; break ;;
		  n )   exit ;;
		esac
		echo '???'
	done
else
	while :
	do
		echo '\nEnter type of tape drive :'
		echo '	1 - /dev/rct0'
		echo '	2 - /dev/rctmini'
		echo '	n - no, QUIT'
		echo '> \c'
		read ans
		case $ans in
		  1 )   IF=/dev/rct0     BS=120 NB=10000  DEV=t ;
			tape status /dev/xct0 2>&1 > /dev/null
			if [ "$?" -eq 0 ] 
			then 
				[ -w "$IF" ] && break
			else
				echo "No tape device : $OF"
			fi
			;;
		  2 )   IF=/dev/rctmini  BS=20 NB=2000  DEV=t ;
			tape statue $OF 2>&1 > /dev/null
			if [ "$?" -eq 0 ] 
			then 
				[ -w "$IF" ] && break ;
			else
				echo "No tape device : $OF"
			fi
			;;
		  n )   exit ;;
		esac
	done
fi

# while :
# do
#	echo 'How many megabytes of memory image do you want to load?'
#	echo 'Enter decimal integer or "q" to quit. > \c'
#	read ans
#	case $ans in
#	  q )   exit ;;
#	esac
#	N=`expr \( $ans \* 2048 + $BS - 1 \) / $BS`
#	case $? in
#	  0 )   break;;
#	esac
#	echo '???'
# done

SKIP=0
COUNT=$NB
N=-1
OLIM=`ulimit`

{   while [ $N != 0 ]
    do
	echo 'Insert \c' >&2
	case $DEV in
	  f )   echo 'diskette \c' >&2 ;;
	  t )   echo 'tape cartridge \c' >&2 ;;
	esac
	echo 'and press return to load it, or enter q to quit. > \c' >&2
	read ans
	case $ans in
	  q )   exit ;;
	esac
	echo 'Wait.' >&2
	if [ $N = -1 ]
	then
		N=`/etc/memsize $IF`
		N=`expr \( \( $N + 511 \) / 512 + $BS - 1 \) / $BS`
		ulimit `expr $N \* $BS`
	fi
	if [ $COUNT -gt $N ]
	then
		COUNT=$N
	fi
	echo dd if=$IF bs=${BS}b count=$COUNT >&2
	dd if=$IF bs=${BS}b count=$COUNT
	N=`expr $N - $COUNT`
	SKIP=`expr $SKIP + $COUNT`
    done
} > $1

ulimit $OLIM

echo "System dump copied into $1.  Use crash(1M) to analyze the dump."
