tmi2_fluffos_v2/
tmi2_fluffos_v2/bin/
tmi2_fluffos_v2/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/ChangeLog.old/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/Win32/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/simuls/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/clone/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/command/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/data/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/master/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/log/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/compiler/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/efuns/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/operators/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/u/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/tmp/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/windows/
tmi2_fluffos_v2/lib/
tmi2_fluffos_v2/lib/adm/
tmi2_fluffos_v2/lib/adm/daemons/languages/
tmi2_fluffos_v2/lib/adm/daemons/network/I3/
tmi2_fluffos_v2/lib/adm/daemons/virtual/
tmi2_fluffos_v2/lib/adm/daemons/virtual/template/
tmi2_fluffos_v2/lib/adm/news/
tmi2_fluffos_v2/lib/adm/obj/
tmi2_fluffos_v2/lib/adm/obj/master/
tmi2_fluffos_v2/lib/adm/priv/
tmi2_fluffos_v2/lib/adm/shell/
tmi2_fluffos_v2/lib/adm/tmp/
tmi2_fluffos_v2/lib/cmds/
tmi2_fluffos_v2/lib/d/
tmi2_fluffos_v2/lib/d/Conf/
tmi2_fluffos_v2/lib/d/Conf/adm/
tmi2_fluffos_v2/lib/d/Conf/boards/
tmi2_fluffos_v2/lib/d/Conf/cmds/
tmi2_fluffos_v2/lib/d/Conf/data/
tmi2_fluffos_v2/lib/d/Conf/logs/
tmi2_fluffos_v2/lib/d/Conf/obj/
tmi2_fluffos_v2/lib/d/Conf/text/help/
tmi2_fluffos_v2/lib/d/Fooland/adm/
tmi2_fluffos_v2/lib/d/Fooland/data/
tmi2_fluffos_v2/lib/d/Fooland/data/attic/
tmi2_fluffos_v2/lib/d/Fooland/items/
tmi2_fluffos_v2/lib/d/TMI/
tmi2_fluffos_v2/lib/d/TMI/adm/
tmi2_fluffos_v2/lib/d/TMI/boards/
tmi2_fluffos_v2/lib/d/TMI/data/
tmi2_fluffos_v2/lib/d/TMI/rooms/
tmi2_fluffos_v2/lib/d/grid/
tmi2_fluffos_v2/lib/d/grid/adm/
tmi2_fluffos_v2/lib/d/grid/data/
tmi2_fluffos_v2/lib/d/std/
tmi2_fluffos_v2/lib/d/std/adm/
tmi2_fluffos_v2/lib/data/adm/
tmi2_fluffos_v2/lib/data/adm/daemons/
tmi2_fluffos_v2/lib/data/adm/daemons/doc_d/
tmi2_fluffos_v2/lib/data/adm/daemons/emoted/
tmi2_fluffos_v2/lib/data/adm/daemons/network/http/
tmi2_fluffos_v2/lib/data/adm/daemons/network/services/mail_q/
tmi2_fluffos_v2/lib/data/adm/daemons/network/smtp/
tmi2_fluffos_v2/lib/data/adm/daemons/news/archives/
tmi2_fluffos_v2/lib/data/attic/connection/
tmi2_fluffos_v2/lib/data/attic/user/
tmi2_fluffos_v2/lib/data/std/connection/b/
tmi2_fluffos_v2/lib/data/std/connection/l/
tmi2_fluffos_v2/lib/data/std/user/a/
tmi2_fluffos_v2/lib/data/std/user/b/
tmi2_fluffos_v2/lib/data/std/user/d/
tmi2_fluffos_v2/lib/data/std/user/f/
tmi2_fluffos_v2/lib/data/std/user/l/
tmi2_fluffos_v2/lib/data/std/user/x/
tmi2_fluffos_v2/lib/data/u/d/dm/working/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/smtp/
tmi2_fluffos_v2/lib/doc/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/interactive/
tmi2_fluffos_v2/lib/doc/driverdoc/concepts/
tmi2_fluffos_v2/lib/doc/driverdoc/driver/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/arrays/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/buffers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/compile/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/ed/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/filesystem/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/floats/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/functions/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/general/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/mappings/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/numbers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/parsing/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/constructs/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/preprocessor/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/types/
tmi2_fluffos_v2/lib/doc/driverdoc/platforms/
tmi2_fluffos_v2/lib/doc/mudlib/
tmi2_fluffos_v2/lib/ftp/
tmi2_fluffos_v2/lib/include/driver/
tmi2_fluffos_v2/lib/log/
tmi2_fluffos_v2/lib/log/driver/
tmi2_fluffos_v2/lib/obj/net/
tmi2_fluffos_v2/lib/obj/shells/
tmi2_fluffos_v2/lib/obj/tools/
tmi2_fluffos_v2/lib/std/adt/
tmi2_fluffos_v2/lib/std/board/
tmi2_fluffos_v2/lib/std/body/
tmi2_fluffos_v2/lib/std/fun/
tmi2_fluffos_v2/lib/std/living/
tmi2_fluffos_v2/lib/std/object/
tmi2_fluffos_v2/lib/std/shop/
tmi2_fluffos_v2/lib/std/socket/
tmi2_fluffos_v2/lib/std/user/
tmi2_fluffos_v2/lib/std/virtual/
tmi2_fluffos_v2/lib/student/
tmi2_fluffos_v2/lib/student/kalypso/
tmi2_fluffos_v2/lib/student/kalypso/armor/
tmi2_fluffos_v2/lib/student/kalypso/rooms/
tmi2_fluffos_v2/lib/student/kalypso/weapons/
tmi2_fluffos_v2/lib/u/l/leto/
tmi2_fluffos_v2/lib/u/l/leto/cmds/
tmi2_fluffos_v2/lib/www/errors/
tmi2_fluffos_v2/lib/www/gateways/
tmi2_fluffos_v2/lib/www/images/
tmi2_fluffos_v2/old/
tmi2_fluffos_v2/win32/
// alias.c
// storage and retrieval of aliases
// Author: Wayfarer (Some of my code may still exist here. :))
// Zak found a couple of bugs which were screwing up global aliases for
// people who didn't have any personal ones set. Mobydick installed his
// patches on 2-26-93
// Inspiral reported a bug with xverbs.  Guile fixed this but on 7-20-93
// and removed a few unnecessary if() statements while at it.

#include <uid.h>
#include <daemons.h>
#include <commands.h>


mapping alias;
mapping xverb;

void add_alias(string verb, string cmd);

mapping query_nalias()
{
   if(alias)
      return alias + ([]);
   else 
      return ([]);
}

mapping query_xalias()
{
   if(xverb)
      return xverb + ([]);
   else 
      return ([]);
}
mapping query_aliases ()
{ 
  if (!alias)
    alias = ([]);
  if (!xverb)
    xverb = ([]);
  return alias + xverb; 
}

string query_alias (string str)
{
  string ret;
  if (!alias)
    alias = ([]);
  ret = alias[str];
  if (!ret)
    {
      if (!xverb)
	xverb = ([]);
      ret = xverb[str];
    }
  return ret;
}

// this should have been here so buddha added it.
void clear_aliases() { 
  if(geteuid(previous_object()) != ROOT_UID && file_name(previous_object())
    != CMD_ALIAS)
      return;
  alias = ([ ]);
  xverb = ([ ]);
}
  
void add_alias (string verb, string cmd)
{
  if(geteuid(previous_object()) != ROOT_UID && file_name(previous_object())
    != CMD_ALIAS)
      return;
  if (verb[0] == '$' && strlen(verb) > 1)
    {
      if(!xverb)
         xverb = ([]);
      verb = verb[1 .. strlen(verb) - 1];
      if(xverb[verb])
         xverb[verb] = cmd;
      xverb += ([ verb : cmd ]);
   }
  else 
    if (alias[verb])
      alias[verb] = cmd;
    else
      alias += ([ verb : cmd ]);
}

void remove_alias (string verb)
{
  if (alias[verb])
     map_delete(alias,verb);
  else
    if (xverb[verb])
      map_delete(xverb,verb);
}

string
replace_words (string orig, string *words)
{
  string ret, tmp;
  string *parts;
  int i, num;

  parts = explode (orig+"$","$");
  // if(!parts)
  // return orig;
  // Commented out by Guile - This never happens, unless orig is not a
  // string, and we'd have an error anyways for bad type to +
  ret = orig;
  for (i = 0; i < sizeof(parts); i++)
    {
      if (parts[i][0] == '*')
	ret = replace_string(orig,"$*",implode(words," "));
      else 
	{
	  if (sscanf(parts[i],"%d%*s",num) == 0)
	    if (sscanf(parts[i],"%d",num) == 0)
	      continue;
	  if (num > 0 && num <= sizeof(words))
	    {
	      tmp = sprintf ("$%d",num);
	      ret = replace_string(ret,tmp,words[num-1]);
	    }
	}
    }
  return ret;
}


nomask string do_xverb (string str)
{
  string *xv, ret, tmp, *words;
  int i, lenxv;
  mapping tmpxv;

  if (!xverb)
     xverb = ([ ]) ;
   tmpxv = (mapping)GA_SERVER_D->query_global_xaliases() + xverb ;
  xv = keys (tmpxv);
  for (i = 0; i < sizeof(xv); i++)
  {
     lenxv = strlen(xv[i]);
     if(str[0 .. lenxv - 1] == xv[i])
     {
 //        if(strlen(str) > 1)
 //           str = str[1 .. strlen(str) - 1];
           if(strlen(str) > lenxv)
               str = str[lenxv..strlen(str)-1];
        else str = "";
         words = explode(str+" "," ");
        // if(!words)
        // words = ({ str });
        // Commented out by Guile - Why this check again? 
         ret = replace_words(tmpxv[xv[i]],words);
        return ret;
     }
  }
  return 0;
}

nomask string do_alias (string str)
{
  string *words, tmp, ret;
  
  if (!str || str == "")
    return "";
  tmp = do_xverb(str);
  if (tmp)
    return tmp;
  if (!alias)
     alias = ([ ]) ;
  tmp = str;
  words = explode(str+" "," ");
  if (!words || sizeof(words) == 0)
    words = ({tmp});
  if(!(tmp = alias[words[0]]))
    tmp = (mixed)GA_SERVER_D->do_global_alias(words[0]);
  if(tmp)
    {
      ret = replace_words(tmp,words[1..(sizeof(words)+1)]);
      return ret;
    }
  return implode (words," ");
}