#!c:sksh

#*************************************************************************
# This function stops all running SKsh ARexx servers by passing a 'quit'
# command to their ARexx ports.
#*************************************************************************

   local _servers _server _cmd _fail

   if [ "$1" = '-?' ]
   then
      echo 'Usage:' $(basename $0) '[ name ... ]'
      echo '       (stops all running SKsh ARexx servers)'
      return 1
   fi

   # --- verify that we have a 'rx' ------------------------------------------

   for _cmd in rx waitforport usecount
   do
      if [ -z $(which -s "$_cmd") ]
      then
         echo "ERROR: $_cmd not in search path."
         return 10
      fi
   done

   # --- collect a list of the servers ---------------------------------------

   _servers="$*"
   [ "$#" -eq 0 ] && _servers=$(usecount -r)

   if [ -z "$_servers" ]
   then
      echo "No SKsh ARexx servers are running"
      return 0
   fi

   # --- tell them all to stop -----------------------------------------------

   for _server in $_servers
   do
      if waitforport -immediate "$_server"
      then
         echo "stopping $_server..."
         rx "address $_server 'quit'"
      else
         echo "ERROR: server $_server not running."
      fi
   done

   # --- verify that they have stopped ---------------------------------------

   _fail=FALSE

   for _server in $_servers
   do
      if waitforport -immediate "$_server"
      then
         sleep 1
         if waitforport -immediate "$_server"
         then
            _fail=TRUE
            echo "ERROR: Server $_server not halted."
         fi
      fi
   done

   if [ "$_fail" = 'FALSE' ]
   then
      echo "\nAll listed SKsh ARexx servers stopped."
      _fail=$(usecount -r | wc -ql)
      echo $_fail "servers still running."
   fi
