DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T a

⟦65b54dbc9⟧ TextFile

    Length: 12014 (0x2eee)
    Types: TextFile
    Names: »ash.sh«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Ash/ash.sh« 

TextFile

#! /bin/sh
# ex:set sw=2 nosm:
# Location of utility files and programs.
HELP=/usr/local/lib/ash.help
INST=/usr/local/lib/ash.inst
HAS=/usr/local/lib/ash.has
#
# Do you believe in "echo -n foo" or "echo foo\c"?
#E2= "\c"
E1="-n"
#
#  Pager, pick one.
#PAGE=/usr/bin/pg
PAGE=/usr/ucb/more
#
#  Formatter, pick one.
#FMT="pr -t -5"
#FMT=/usr/ucb/fmt
FMT="att pr -t -5"
#
#  Patch hackery; /.attbin for for Pyramids
OPATH=$PATH
PATH=/usr/ucb:/usr/bin:/bin:/.attbin
export PATH

trap 'echo Ouch!' 2 3
cd ${HOME}

# Limbo is where destroyed objects live
LIM=.limbo
mkdir ${LIM} >&- 2>&-

# Make our knapsack.
KNAP=.knapsack
if [ ! -d $KNAP ] ; then
  if mkdir $KNAP >&- 2>&-; then
    echo  "You find a discarded empty knapsack."
  else
    echo "You have no knapsack to carry things in."
    exit 1
  fi
else
  echo "One moment while I peek into your old knapsack."
fi

kn=`echo \`ls -a $KNAP | sed -e '/^\.$/d' -e '/^\.\.$/d'\``

echo ${E1} "Welcome to the Adventure shell!  Do you need instructions?" ${E2}
read X
if [ $X != "no" ] ; then
  $PAGE <$INST
  echo ${E1} "Type a RETURN to continue:" ${E2}
  read X
fi

wiz=false
cha=false
prev=$LIM

while : ; do
  room=`pwd`
  if [ $room != $prev ] ; then
    if [ $room = $HOME ] ; then
      echo ${E1} "You are in your own home.  " ${E2}
    else
      echo ${E1} "You have entered $room.  " ${E2}
    fi

    # Collect contents of room.
    exs= obs= hexs= hobs= f=false
    for I in `ls -a` ; do
      case $I in
	.|..)
	  ;;
	.*)
	  if [ -f $I ] ; then
	    hobs="$hobs $I"
	  elif [ -d $I ] ; then
	    hexs="$hexs $I"
	  else
	    f=true
	  fi
	  ;;
	*)
	  if [ -f $I ] ; then
	    obs="$obs $I"
	  elif [ -d $I ] ; then
	    exs="$exs $I"
	  else
	    f=true
	  fi
	  ;;
      esac
    done

    #  Print report of what we found.
    if [ "$obs" ] ; then
      echo "This room contains:"
      echo $obs | tr ' ' '\012' | ${FMT}
    else
      echo "The room looks empty."
    fi
    if [ "$exs" ] ; then
      echo "There are exits labeled:"
      echo $exs | tr ' ' '\012' | ${FMT}
      echo "as well as a passage overhead."
    else
      echo "There is a passage overhead."
    fi
    if $f ; then
      echo "There are shadowy figures in the corner."
    fi
    prev=$room
  fi

  echo ${E1} "->  " ${E2}
  read verb obj x
  if [ $? != 0 ] ; then
    verb=quit
  fi

  case $verb in
    change)
      if [ "$obj" ] ; then
	if $HAS " $obs $hobs " " $obj " ; then
	  if [ "$x" ] ; then
	    set $x
	  else
	    set ''
	  fi
	  case "$1" in
	    to)
	      if [ "$2" ] ; then
		if [ -f $2 ] ; then
		  echo "You must destroy the $2 first."
		  set ''
		fi
		if [ "$2" ] ; then
		  if mv $obj $2 >&- 2>&- ; then
		    echo "The $obj shimmers and turns i to $2."
		    obs=`echo $2 $obs '' | sed -e "s/ $obj / /" -e 's/ $//'`
		  else
		    echo "You see a cloud of smoke but the $obj is unchanged."
		  fi
		fi
	      else
		echo 'To what?'
	      fi
	      ;;
	    *)
	      echo "Change $obj to what?"
	      ;;
	  esac
	elif $HAS " $kn " " $obj " ; then
	  echo "You must drop it first."
	else
	  echo "I see no $obj here."
	fi
      else
	echo "Change what?"
      fi
      ;;

    clone)
      if [ "$obj" ] ; then
	if $HAS " $obs $hobs " " $obj " ; then
	  if [ ! -r $obj ] ; then
	    echo "The $obj does not wish to be cloned."
	  else
	    if [ "$x" ] ; then
	      set $x
	    else
	      set ''
	    fi
	    case "$1" in
	      as)
		if [ "$2" ] ; then
		  if [ -f $2 ] ; then
		    echo "You must destroy $2 first."
		  elif cp $obj $2 >&- 2>&- ; then
		    echo "Poof!  When the smoke clears, you see the new $2."
		    obs="$obs $2"
		  else
		    echo "You hear a dull thud but no clone appears."
		  fi
		else
		  echo "As what?"
		fi
		;;
	      *)
		echo "Cone $obj as what?"
		;;
	    esac
	  fi
	elif $HAS " $kn " " $obj " ; then
	  echo "You must drop it first."
	else
	  echo "I see no $obj here."
	fi
      else
	echo "Clone what?"
      fi
      ;;

    drop)
      if [ "$obj" ] ; then
	for I in $obj $x ; do
	  if $HAS " $kn " " $I " ; then
	    if [ -w $I ] ; then
	      echo "You must destory $I first."
	    elif mv $HOME/$KNAP/$I $I >&- 2>&- ; then
	      echo "$I: dropped."
	      kn=`echo '' $kn '' | sed -e "s/ $I / /" -e 's/^ //' -e 's/  $//'`
	      obs=`echo $I $obs`
	    else
	      echo "The $I is caught in your knapsack."
	    fi
	  else
	    echo "You're not carrying the $I!"
	  fi
	done
      else
	echo "Drop what?"
      fi
      ;;

    enter|go)
      if [ "$obj" ] ; then
	if [ $obj != up ] ; then
	  if $HAS " $exs $hexs " " $obj " ; then
	    if cd $obj ; then
	      echo "You squeeze through the passage."
	    else
	      echo "An invisible force blocks your way."
	    fi
	  else
	    echo "I see no such pssage."
	  fi
	elif cd .. ; then
	  echo "You struggle upwards."
	else
	  echo "You can't reach that high."
	fi
      else
	echo "Which passage?"
      fi
      ;;

    examine)
      if [ "$obj" ] ; then
	if [ $obj = all ] ; then
	  obj=`echo $obs $exs`
	  x=
	fi
	for I in $obj $x ; do
	  if $HAS " $obs $hobs $exs $hexs " " $I " ; then
	    echo "Upon close inspection of the $I, you see:"
	    if ls -ld $I 2>&- ; then
	      :
	    else
	      echo "-- when you look directly at the $I, it vanishes."
	    fi
	  elif $HAS " $kn " " $I " ; then
	    echo "You must drop it first."
	  else
	    echo "I see no $I here."
	  fi
	done
      else
	echo "Examine what?"
      fi
      ;;

    feed)
      if [ "$obj" ] ; then
	if $HAS " $obs $hobs " " $obj " ; then
	  if [ "$x" ] ; then
	    set $x
	  else
	    set ''
	  fi
	  case "$1" in
	    to)
	      if [ "$2" ] ; then
		shift
		if env PATH=$OPATH $* <$obj 2>&- ; then
		  echo "The $1 monster devours your $obj."
		  if rm -f $obj >&- 2>&1 ; then
		    obs=`echo '' $obs '' |
			      sed -e "s/ $obj / /" -e 's/^ //' -e 's/ $//'`
		  else
		    echo "But he spits it back up."
		  fi
		else
		  echo "The $1 monster holds his nose in disdain."
		fi
	      else
		echo "To what?"
	      fi
	      ;;
	    *)
	      echo "Feed $obj to what?"
	      ;;
	  esac
	elif $HAS " $kn " " $obj " ; then
	  echo "You must drop it first."
	else
	  echo "I see no $obj here."
	fi
      else
	echo "Feed what?"
      fi
      ;;

    get|take)
      if [ "$obj" ] ; then
	if [ $obj = all ] ; then
	  obj="$obs"
	  x=
	fi
	for I in $obj $x ; do
	  if $HAS " $obs $hobs " " $I " ; then
	    if $HAS " $kn " | fgrep " $I " ; then
	      echo "You already have one."
	    elif mv $I $HOME/$KNAP/$I >&- 2>&- ; then
	      echo "$I: taken"
	      kn="$I $kn"
	      obs=`echo '' $obs '' | sed -e "s/ $I / /" -e 's/^ //' -e 's/ $//'`
	    else
	      echo "The $I is too heavy to take."
	    fi
	  else
	    echo "I see no $I here."
	  fi
	done
      else
	echo "Take what?"
      fi
      ;;

    help)
      $PAGE <$HELP
      ;;

    inven|inventory|i)
      if [ "$kn" ] ; then
	echo "Your knapsack contains:"
	echo $kn | tr ' ' '\012' | ${FMT}
      else
	echo "You are poverty-stricken."
      fi
      ;;

    kill|destory)
      if [ "$obj" ] ; then
	if [ $obj = all ] ; then
	  x=
	  obj=
	  echo "To dangerous to $verb them all at once!"
	fi
	for I in $obj $x ; do
	  if $HAS " $obs $hobs " " $I " ; then
	    if mv $I $HOME/$LIM/$I <&- >&- 2>&- ; then
	      if [ $verb = kill ] ; then
		echo "The $I cannot defend itself; it dies."
	      else
		echo "You have destroyed the $I; it vanishes."
	      fi
	    elif [ $verb = kill ] ; then
	      echo "Your feeble blows are no match for the $I."
	    else
	      echo "The $I is indestructible."
	    fi
	  elif $HAS " $kn " " $I " ; then
	    echo "You must drop it first."
	  else
	    echo "I see no $I here."
	  fi
	done
      else
	echo "Kill what?"
      fi
      ;;

    look|l)
      obs=`echo $obs $hobs`
      hobs=
      if [ "$obs" ] ; then
	echo "The room contains:"
	echo $obs | tr ' ' '\012' | ${FMT}
      else
	echo "The room is empty."
      fi
      exs=`echo $exs $hexs`
      hexs=
      if [ "$exs" ] ; then
	echo "There are exits plainly labelled."
	echo $exs | tr ' ' '\012' | ${FMT}
	echo "... and a passage overhead."
      else
	echo "The only exit is directly overhead."
      fi
      ;;

    magic)
      if [ "$obj" = mode ] ; then
	if $cha ; then
	  echo "You had your chance and you blew it."
	else
	  echo ${E1} "Are you a wizard?  " ${E2}
	  read X
	  if [ "$X" = "yes" ] ; then
	    echo "Prove it!  Say the magic word:  "
	    read X
	    if [ "$X" = "armadillo" ] ; then
	      echo "Yes, oh mighty master....  I live to serve."
	      wiz=true
	    else
	      echo "Bah, you are nothing but a charlatan."
	      cha=true
	    fi
	  else
	    echo "I didn't think so."
	  fi
	fi
      else
	echo "Nice try."
      fi
      ;;

    open|read)
      if [ "$obj" ] ; then
	if $HAS " $obs $hobs " " $obj " ; then
	  if [ -r $obj ] ; then
	    if [ -s $obj ] ; then
	      echo "Opening the $obj reveals:"
	      $PAGE <$obj 2>&-
	      if [ $? != 0 ] ; then
		echo "-- oops, you lost the contents!"
	      fi
	    else
	      echo "There is nothing inside the $obj."
	    fi
	  else
	    echo "You do not have the proper tools to open the $obj."
	  fi
	elif $HAS " $kn " " $obj " ; then
	  echo "You must drop it first."
	else
	  echo "I see no $obj here."
	fi
      else
	echo "Open what?"
      fi
      ;;

    quit|exit)
      echo ${E1} "Do you really want to quit now?" ${E2}
      read X
      if [ $X = "yes" ] ; then
	if [ "$kn" ] ; then
	  echo "The contents of your knapsack will still be there next time."
	fi
	rm -rf $HOME/$LIM
	echo "See you later!"
	exit 0
      fi
      ;;

    resurrect)
      if [ "$obj" ] ; then
	for I in $obj $x ; do
	  if $HAS " $obs $hobs " " $I " ; then
	    echo "The $I is already alive and well."
	  elif mv $HOME/$LIM/$I $I <&- >&- 2>&- ; then
	    echo "The $I staggers to its feet"
	    obs=`echo $I $obs`
	  else
	    echo "You see sparks, but no $I appears."
	  fi
	done
      else
	echo "Resurrect what?"
      fi
      ;;

    steal)
      if [ "$obj" ] ; then
	if $HAS " $obs $hobs " " $obj " ; then
	  echo "There is already one here."
	else
	  if [ "$x" ] ; then
	    set $x
	  else
	    set ''
	  fi
	  case "$1" in
	    from)
	      if [ "$2" ] ; then
		if env PATH=$OPATH $* >$obj 2>&- ; then
		  echo "The $1 monster drops the $obj."
		  obs=`echo $obj $obs`
		else
		  echo "The $1 monster runs away as you approach."
		  rm -f $obj >&- 2>&-
		fi
	      else
		echo "From what?"
	      fi
	      ;;
	    *)
	      echo "Steal $obj from what?"
	      ;;
	  esac
	fi
      else
	echo "Steal what?"
      fi
      ;;

    throw|toss)
      if [ "$obj" ] ; then
	if $HAS " $obs $hobs " " $obj " ; then
	  if [ "$x" ] ; then
	    set $x
	  else
	    set ''
	  fi
	  case "$1" in
	    at)
	      case "$2" in
		daemon)
		  if lpr -r $obj ; then
		    echo "The daemon catches the $obj, turns it into paper,"
		    echo "and leaves it in the basket."
		    obs=`echo '' $objs ''
			  | sed -e "s/ $obj / /" -e 's/^ //' -e 's/ $//'`
		  else
		    echo "The daemon is nowhere to be found."
		  fi
		  ;;
		*)
		  echo "At what?"
		  ;;
	      esac
	      ;;
	    *)
	      echo "Throw $obj at what?"
	      ;;
	  esac
	elif $HAS " $kn " " $obj " ; then
	  echo "It is in your knapsack."
	else
	  echo "I see no $obj here."
	fi
      else
	echo "Throw what?"
      fi
      ;;

    u|up)
      if cd .. ; then
	echo "You pull yourself up to a new level."
      else
	echo "You can't reach that high!"
      fi
      ;;

    wake)
      if [ "$obj" ] ; then
	echo "You awaken the $obj monster:"
	env PATH=$OPATH $obj $x
	echo "The monster slithers back into the darkness."
      else
	echo "Wake what?"
      fi
      ;;

    w|where)
      echo "You are in $room."
      ;;

    xyzzy)
      if cd ; then
	echo "A strange feeling comes over you."
      else
	echo "Your spell fizzles out."
      fi
      ;;

    *)
      if [ "$verb" ] ; then
	if $wiz ; then
	  env PATH=$OPATH $verb $obj $x
	else
	  echo "I don't know how to \"$verb\"."
	  echo 'Type "help" for assistance.'
	fi
      fi
      ;;
  esac
done