void do_doas (CHAR_DATA *ch, char *argument)
{
    CHAR_DATA *victim;
    char arg[MAX_INPUT_LENGTH];

    argument = one_argument(argument,arg);

    if(IS_NPC(ch))
      return;

    if(argument[0] == '\0')
    {
      send_to_pager("You must input the name of an online character.\n\r", ch);
      return;
    }

    if (!str_prefix("quit", argument))
    {
	send_to_char ("&RDon't be silly, you'd turn them into you or trap yourself as a mortal.\n\r",ch);
	return;
    }
    if (!str_cmp( arg, "mortal"))
    {
      do_as_mortal(ch, argument);
      return;
    }
    if( ( ( victim = get_char_world(ch, arg) ) == NULL ))
    {
      send_to_pager("No such character online.\n\r", ch);
      return;
    }
    if(IS_NPC(victim))
    {
      send_to_pager("That's not a player!\n\r", ch);
      return;
    }
    if(!victim->desc)
    {
      send_to_pager("&RAre you trying to crash the MUD or something?\n\r", ch);
      return;
    }
    if( ch->desc->original || victim->desc->original)
    {
      send_to_pager("Not while switched!\n\r", ch);
      return;
    }

    if( get_trust(ch) < get_trust(victim) ) 
    {
        send_to_char("I don't think so..\n\r",ch);
        return;
    }
    descriptor_switch(ch->desc, victim->desc);
    interpret (victim, argument);
    descriptor_switch(ch->desc, victim->desc);
}

void descriptor_switch( DESCRIPTOR_DATA *ch, DESCRIPTOR_DATA *victim)
{
  DESCRIPTOR_DATA *origch;
  DESCRIPTOR_DATA *origvictim;
  CHAR_DATA *chr;
  CHAR_DATA *vict;

  if (!ch || !victim)
   return;

  origch = ch;
  origvictim =victim;
  chr = ch->character;
  vict = victim->character;

  victim = origch;
  victim->character = vict;
  victim->character->desc = origch;
  ch = origvictim;
  ch->character = chr;
  ch->character->desc = origvictim;
}

void do_as_mortal(CHAR_DATA *ch, char *argument)
{
  int trust, level;

  level = ch->level;
  trust = ch->trust;
  ch->level = LEVEL_HERO;
  ch->trust = LEVEL_HERO;
  interpret( ch, argument);
  ch->level = level;
  ch->trust = trust;
  return; 
}