#! /bin/sh
#
# @(#)kas 1.4 94/03/17
# 
# Author: Charles R. LaBrec, charles.labrec@East.Sun.COM
# Copyright (c) 1994 Sun Microsystems, Inc.
# 	All rights reserved.
#

help() {
	cd $DIR
	echo "$PROG: supported programs are:"
	for i in *; do
		if [ ! -d "$i" -a -x "$i" ]; then
			echo "	$i"
		fi
	done
}	

PROG="`basename $0`"
: ${ADBDIR:=/support/kernel/adb}
CACHE=".kas"
save=

LD_LIBRARY_PATH=
export LD_LIBRARY_PATH

PATH=${PATH}:$ADBDIR/../bin
export PATH

case $# in
0)
	echo "Usage: $PROG [PROG [OPTS]] NUM"
	exit 1
	;;
1)
	NUM="$1"
	APP=
	OPTS=
	;;
*)
	APP="$1"
	shift

	OPTS=
	while [ $# -gt 1 ]; do
		OPTS="${OPTS:+$OPTS }$1"
		shift
	done
	NUM="$1"
	;;
esac

if [ "x$NUM" = "x-" ]; then
	if [ -f /vmunix ]; then
		UNIX=/vmunix
		CORE=/dev/mem
		KARCH=`uname -m`
		KVERS=`uname -r`
	else
		UNIX=/dev/ksyms
		CORE=/dev/mem
		KARCH=`uname -m`
		KVERS=`uname -r`
	fi
elif [ -f "unix.$NUM" ]; then
	UNIX="unix.$NUM"
	CORE="vmcore.$NUM"
	AOFFS=404
	VOFFS=202
	DIR="$ADBDIR/5.2/`uname -m`"
	LD_LIBRARY_PATH="$DIR/lib"
elif [ -f "vmunix.$NUM" ]; then
	UNIX="vmunix.$NUM"
	CORE="vmcore.$NUM"
	AOFFS=5c
	VOFFS=4a
	DIR="$ADBDIR/4.1.3/`uname -m`"
	LD_LIBRARY_PATH="$DIR/lib"
else
	echo "$PROG: no kernel namelist"
	exit 1
fi

if [ ! -r "$CORE" ]; then
	echo "$PROG: no system core file"
	exit 1
fi

if [ x`ls -t $CACHE.$NUM $CORE 2>/dev/null | head -1` = "x$CACHE.$NUM" ]; then
	. ./$CACHE.$NUM
fi

if [ -z "$KARCH" ]; then
	KARCH="`echo \"utsname+$AOFFS?s\" | "$DIR/adb" $UNIX | sed -n 's/^_*utsname.*:[ 	]*//p'`"
	if [ -z "$KARCH" ]; then
		echo "$PROG: cannot determine kernel arch"
		exit 1
	fi
	save=true
fi

if [ -z "$KVERS" ]; then
	KVERS="`echo \"utsname+$VOFFS?s\" | "$DIR/adb" $UNIX | sed -n 's/^_*utsname.*:[ 	]*//p'`"
	if [ -z "$KVERS" ]; then
		echo "$PROG: cannot determine kernel version"
		exit 1
	fi
	save=true
fi

echo "$PROG: arch=$KARCH version=$KVERS"

if [ -n "$save" ]; then
	touch $CACHE.$NUM 2>/dev/null
	if [ -w $CACHE.$NUM ] ; then
		echo "KARCH=\"$KARCH\"" > $CACHE.$NUM
		echo "KVERS=\"$KVERS\"" >> $CACHE.$NUM
	fi
fi

DIR="$ADBDIR/$KVERS/$KARCH"
LD_LIBRARY_PATH="$DIR/lib"

if [ ! -d "$DIR" ]; then
	echo "$PROG: no release directory \"$DIR\""
	exit 1
fi

if [ -z "$APP" ]; then
	exit 0
fi

case "$APP" in 
help)
	;;
*)
	if [ ! -x "$DIR/$APP" ]; then
		echo "$PROG: no executable \"$APP\" for this release"
		exit 1
	fi
	;;
esac

case "$APP" in
	adb)	exec "$DIR/adb" $OPTS -I $DIR/macros -k "$UNIX" "$CORE" ;;
	crash)	exec "$DIR/crash" $OPTS -n "$UNIX" -d "$CORE" ;;
	help)	help ;;
	*)	exec "$DIR/$APP" $OPTS "$UNIX" "$CORE" ;;
esac
