#!/bin/sh
#
# The UNIX System V simulator version 1.0
#
# Written during a wasted night by: Sandro Sigala <ssigala@globalnet.it>
#
# Want a hint? Try username: root, password: root
#

trap shutdownproc 1 2 13 15

shutdownproc() {
	echo ""
	echo "Shutting down system..."
	echo ""
	echo "The system is halted."
	exit 0
}

bootmsg() {
echo "Booting the UNIX System..."

sleep 2

echo ""
echo "total real memory   = 8388608"
echo "total available mem = 7122944"
echo ""
echo "AT&T UNIX System V/386 Release 4.0 Version 2.0"
echo ""
echo "Copyright (c) 1984,1986,1987,1988,1989,1990 AT&T"
echo "Copyright (c) 1987,1988 Microsoft Corp."
echo "All Rights Reserved"

sleep 1

echo ""
echo "Wangtek PC-36/EV-811 cartridge tape controller was found at address 00000300H."

sleep 1

echo "PC586 v2.7 Copyright(c) 1987,1988,1989 Intel Corp., All Rights Reserved"
echo "PC586 board 0 was found, Ethernet Address: 00:00:1c:00:02:f0"
echo "Node: `hostname`"
echo "The system is coming up. Please wait."

sleep 2

echo "System V Streams TCP Release 1.0"
echo "(c) 1983,1984,1985,1986,1987,1988,1989,1990 AT&T"
echo "(c) 1986,1987,1988,1989,1990 Sun Microsystems"
echo "(c) 1987,1988,1989,1990 Lachman Associates, Inc. (LAI)"
echo "    All Rights Reserved"

sleep 1

echo "Print services started"

sleep 1

echo "The system is ready."

sleep 1
}

motd() {
echo ""
echo "UNIX System V/386 Release 4.0"
echo "System `hostname`"
echo "Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T"
echo "Copyright (c) 1987, 1988 Microsoft Corp."
echo "All Rights Reserved"
sleep 1
echo ""
echo "The `hostname` system will be down for software installation"
echo "from 6:00 to 7:00 PM tonight.   -joe"
sleep 1
if [ -n "$mail" ]; then
echo ""
echo "You have new mail."
echo ""
fi
}

login() {
echo "Welcome to the AT&T 386 UNIX System"
echo "System name: `hostname`"
echo ""

while :; do
	echo -n "Console Login: "
	read user
	if [ -n "$user" ]; then
		echo -n "Password: "
		read pass
		sleep 1
		if [ "$user" = "root" -a "$pass" = "root" ]; then
			break
		else
			echo "Login incorrect"
		fi
	fi
done
}

aout="";core=""
mail="1";

rootshell() {
qcwd="/root"
while :; do
	echo -n "`hostname -s`:"
	if [ "$qcwd" = "/root" ]; then
		echo -n "~"
	else
		echo -n "$qcwd"
	fi
	echo -n "# "
	read lcmd
	i=0
	par1="";par2="";par3="";par4="";
	for a in $lcmd; do
		i=`expr $i + 1`
		if [ "$i" = "1" ]; then cmd="$a"; fi
		if [ "$i" = "2" ]; then par1="$a"; fi
		if [ "$i" = "3" ]; then par2="$a"; fi
		if [ "$i" = "4" ]; then par3="$a"; fi
		if [ "$i" = "5" ]; then par4="$a"; fi
	done

	case "$cmd" in
# -- a.out -------------------------------------------------------------------
	a.out)
		if [ "$qcwd" = "/root" ]; then
			case "$aout" in
			foo)
				echo "Hello world"
				;;
			bar)
				echo "Segmentation fault (core dumped)"
				core="1"
				;;
			*)
				echo "sh: command not found: a.out"
				;;
			esac
		else
			echo "sh: command not found: a.out"
		fi
		;;
# -- cc ----------------------------------------------------------------------
	cc)
		if [ "$qcwd" = "/root" ]; then
			case "$par1" in
				foo.c)
					aout=foo
					;;
				bar.c)
					aout=bar
					;;
				*)
					echo "cc: $par1: cannot open"
					;;
			esac
		fi
		;;
# -- rm ----------------------------------------------------------------------
	rm)
		if [ "$qcwd" = "/root" ]; then
			case "$par1" in
				a.out)
					if [ -n "$aout" ]; then
						aout=""
					else
					echo "rm: $par1: Permission denied"
					fi
					;;
				core)
					if [ -n "$core" ]; then
						core=""
					else
					echo "rm: $par1: Permission denied"
					fi
					;;
				*)
					echo "rm: $par1: Permission denied"
					;;
			esac
		fi
		;;
# -- ls | dir ----------------------------------------------------------------
	ls|dir)
		if [ -n "$par1" ]; then
			d="$par1"
			case $par1 in
			/|/bin|/root)
				d="$par1"
				;;
			.)
				d="$qcwd"
				;;
			*)
				case $qcwd in
				/)
					case $par1 in
					..)
						d="/"
						;;
					bin)
						d="/bin"
						;;
					root)
						d="/root"
						;;
					esac
					;;
				/bin)
					case $par1 in
					..)
						d="/"
						;;
					esac
					;;
				/root)
					case $par1 in
					..)
						d="/"
						;;
					esac
					;;
				esac
			esac
		else
			d="$qcwd"
		fi

		case $d in
		/root)
			if [ -n "$aout" ]; then
				echo -n "a.out*  "
			fi
			echo -n "README  bar.c  "
			if [ -n "$core" ]; then
				echo -n "core  "
			fi
			echo "foo.c"
			;;
		/)
			echo "bin/  etc/  home/  lib/  root/  usr/  var/  vmunix  vmunix.old"
			;;
		/bin)
			echo "cat*  chmod*  csh*  ed*  expr*  mkdir*  ln*  ls*  pwd*  rmdir*  sh*  core"
			;;
		*)
			echo "ls: $d: Permission denied"
		esac
		;;
# -- cd ----------------------------------------------------------------------
	cd)
		if [ -z "$par1" ]; then
			qcwd="/root"
		else
			case $qcwd in
			/root)
				case $par1 in
				.|/root)
					;;
				..|/)
					qcwd="/"
					;;
				/bin)
					qcwd="/bin"
					;;
				*)
					echo "cd: $par1: Permission denied"
					;;
				esac
				;;
			/)
				case $par1 in
				.|/|..)
					;;
				root|/root)
					qcwd="/root"
					;;
				bin|/bin)
					qcwd="/bin"
					;;
				*)
					echo "cd: $par1: Permission denied"
					;;
				esac
				;;
			/bin)
				case $par1 in
				.|/bin)
					;;
				..|/)
					qcwd="/"
					;;
				/root)
					qcwd="/root"
					;;
				*)
					echo "cd: $par1: Permission denied"
					;;
				esac
				;;
			esac
		fi
		;;
# -- cat ---------------------------------------------------------------------
	cat)
		if [ -z "$par1" ]; then
			echo "usage: cat filename ..."
		else
			case $qcwd in
			/root)
				case $par1 in
				README)
					echo "You should find two sources in your home directory.  Try compiling both!"
					;;
				foo.c)
					echo "main(){printf(\"Hello world\n\");}"
					;;
				bar.c)
					echo "main(){int *p; *p = 'x';}"
					;;
				*)
					echo "cat: $par1: cannot open"
					;;
				esac
				;;
			/)
				echo "cat: $par1: cannot open"
				;;
			/bin)
				case $par1 in
				core)
					echo "Core dumped by emacs version 0.3"
					;;
				*)
					echo "cat: $par1: cannot open"
					;;
				esac
				;;
			esac
		fi
		;;
# -- who | w -----------------------------------------------------------------
	who|w)
		echo "USER     TTY  FROM                LOGIN@  IDLE WHAT"
		echo "root     1    -                   7:57PM     - w"
		echo "joe      p3   ucbvax.berkeley.edu 3:04AM   12d vi hello.c"
		;;
# -- exit | logout | bye -----------------------------------------------------
	exit|logout|bye)
		break
		;;
# -- sh ----------------------------------------------------------------------
	sh)
		;;
# -- mail --------------------------------------------------------------------
	mail)
		if [ -z "$mail" ]; then
			echo "No mail for root"
		else
			echo "From joe Tue Jan 01:00:02 1997"
			echo "Date: Tue,  1 Jan 1970 01:00:02 +000 (GMT)"
			echo "From: Joe Doe <joe@`hostname`>"
			echo "Subject: Hello new sysadmin!"
			echo ""
			echo "Welcome to the `hostname` system!"
			echo "Take a look around, and... good luck!"
			echo ""
			echo "		-joe"
			mail=""
		fi
		;;
	*)
		echo "sh: command not found: $cmd"
		;;
	esac
done
}

if [ "$1" != "-noboot" ]; then
	clear
	bootmsg
fi

while :; do
	login
	motd
	rootshell
done

