
USAGE="*** Usage ***  $0 [-nomapping] physical_database_path"

if test "$EMPRESSPATH" = "" 
then
	echo "EMPRESSPATH not set"
	exit 1

elif test ! -d $EMPRESSPATH
then
	echo "invalid EMPRESSPATH"
	exit 1
fi

. $EMPRESSPATH/config/options

case $1 in
  -nomapping)	NOMAPPING=true
		shift ;;
  *)		NOMAPPING=false ;;
esac

case "$MSSYS_MULTITASKSHM" in
  "")	;;
  *)	MSDEBUG="noshmem noserver $MSDEBUG"
	export MSDEBUG
	;;
esac

case $MSFEATURE_SHMEM in
 y* | Y* ) 
	case $MSINST_RUNTEST_SHM in
	   y* | Y*) ;;
	   *)
		if test -d $EMPRESSPATH/rdbms/local && \
		   test -d $EMPRESSPATH/rdbms/src_lib
		then
			:
		elif test -f $EMPRESSPATH/bin/empbusybox
		then
			# the chance we are doing cross dev testing.
			:
		else
			exit 0
		fi
		;;
	esac
	;;
 * )	
	exit 0
	;;
esac

case "$1" in
  "")	echo "$USAGE"; exit 1;;
  *)	DB=`$EMPRESSPATH/common/sys_bin/basename $1`;
	case "$DB" in
	  "_db")	KEY=${MSTESTUID}0 ;;
	  "_db1")	KEY=${MSTESTUID}1 ;;
	  "_db2")	KEY=${MSTESTUID}2 ;;
	  "_db3")	KEY=${MSTESTUID}3 ;;
	  "_db4")	KEY=${MSTESTUID}4 ;;
	  "_db5")	KEY=${MSTESTUID}5 ;;
	  "_db6")	KEY=${MSTESTUID}6 ;;
	  "_db7")	KEY=${MSTESTUID}7 ;;
	  "_db8")	KEY=${MSTESTUID}8 ;;
	  "_db9")	KEY=${MSTESTUID}9 ;;
	  *) echo "*** Bug ***  do not recognize test database"; exit 1;;
	esac
esac

CRSHM="$EMPRESSPATH/bin/empadm"
CRSHM_OPT="shmcreate"
MAPSHM="$EMPRESSPATH/bin/empadm"
MAPSHM_OPT="params"
RMSHM="$EMPRESSPATH/bin/empadm"
RMSHM_OPT="shmrmall"

DB=$1
TABZERO="$DB/tabzero"

USRTABLES=TMP_USR$$
SYSTABLES=TMP_SYS$$
USRPARMFILE=TEMP$$
SYSPARMFILE=TMPS$$

USRRELPARTNAME=gb1
USRLCKPARTNAME=lk2

cat <<@ >> $USRPARMFILE
  MSPARAMTABLE
    MSPARTGBUFNAME=$USRRELPARTNAME
  MSPARAMLOCK
    MSPARTLOCKNAME=$USRLCKPARTNAME
  MSPARAMLOCKEND
@

$EMPRESSPATH/bin/empcmd $DB \
 "select tab_name from sys_tables where\
	tab_name smatch 'sys_*'\
	dump" > $SYSTABLES

$EMPRESSPATH/bin/empcmd $DB \
 "select tab_name from sys_tables where\
	tab_name !smatch 'sys_*'\
	dump" > $USRTABLES

echo "Appending to tabzero the Shared Memory Block"

case "$MSSYS_MULTITASKSHM" in
  "")	;;
  *)	case "$MSTESTUID" in
	 "")	A=0;;
	  *)	A=$MSTESTUID;;
	esac
	A=`expr "$A" '*' '10'`
	PORTNO=`expr '8000' '+' "$A"`

	echo "Setting Server port id to $PORTNO"

	ed - $TABZERO <<@
/MSDBSERVERPORTID=/s/=.*/=$PORTNO/
w
@
	;;
esac

cat <<@ >> $TABZERO

MSSHMKEY=${KEY}10
MSSHMPROTECTION=

    MSPARTNAME=lk1
    MSPARTTYPE=LOCK
        MSPARTLOCKMAXPROCESSES=32
        MSPARTLOCKNLOCKS=500
    MSPARTEND

    MSPARTNAME=lk2
    MSPARTTYPE=LOCK
        MSPARTLOCKMAXPROCESSES=32
        MSPARTLOCKNLOCKS=500
    MSPARTEND

MSSHMEND

MSSHMKEY=${KEY}20
MSSHMPROTECTION=

    MSPARTNAME=gb1
    MSPARTTYPE=GBUF
        MSPARTGBUFMAXFILES=100
        MSPARTGBUFBLOCKSIZE=1024
        MSPARTGBUFNBLOCKS=250
    MSPARTEND

MSSHMEND
@

echo "Clearing the lock files"

rm -rf $DB/_lock/*.lck

case $NOMAPPING in
  true) 
	rm -f $USRTABLES $SYSTABLES $USRPARMFILE $SYSPARMFILE
	exit ;;
esac

echo "Creating the Shared Memory Block"

$CRSHM $DB $CRSHM_OPT

echo "Mapping user tables from $DB with parmfile $USRPARMFILE"

while read I
do
	$MAPSHM $DB $MAPSHM_OPT $USRPARMFILE "$I"
done < $USRTABLES

echo "Mapping system tables from $DB"

cat <<@ > $SYSPARMFILE
    MSPARTGBUFNAME=gb1
  MSPARAMLOCK
    MSPARTLOCKNAME=lk1
  MSPARAMLOCKEND
@

while read I
do
	$MAPSHM $DB $MAPSHM_OPT $SYSPARMFILE "$I"
done < $SYSTABLES

echo "Appending the parm information for sys_dictionary to tabzero"
cat <<@ >> $TABZERO

MSDBDICTPARAMS
    MSPARTGBUFNAME=gb1
  MSPARAMLOCK
    MSPARTLOCKNAME=lk1
  MSPARAMLOCKEND
MSDBDICTPARAMSEND
@

rm $USRTABLES $SYSTABLES $USRPARMFILE $SYSPARMFILE

echo "Removing Shared Memory Block"

$RMSHM $DB $RMSHM_OPT
