swrip101/bin/
swrip101/boards/
swrip101/clans/
swrip101/doc/mudprogs/
swrip101/planets/
swrip101/space/
 /***************************************************************************
 *                   Star Wars: Rise in Power MUD Codebase                  *
 *--------------------------------------------------------------------------*
 * SWRiP Code Additions and changes from the SWReality and Smaug Code       *
 * copyright (c) 2001 by Mark Miller (Darrik Vequir)                        *
 *--------------------------------------------------------------------------*
 * -----------------------------------------------------------|   (0...0)   *
 * SMAUG 1.4 (C) 1994, 1995, 1996, 1998  by Derek Snider      |    ).:.(    *
 * -----------------------------------------------------------|    {o o}    *
 * SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus,      |   / ' ' \   *
 * Scryn, Rennard, Swordbearer, Gorog, Grishnakh, Nivek,      |~'~.VxvxV.~'~*
 * Tricops and Fireblade                                      |             *
 * ------------------------------------------------------------------------ *
 * Merc 2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael        *
 * Chastain, Michael Quan, and Mitchell Tse.                                *
 * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,          *
 * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.     *
 * ------------------------------------------------------------------------ *
 *                        Alias module                                      *
 ****************************************************************************/
/******************************************************
            Desolation of the Dragon MUD II
      (C) 1997, 1998  Jesse DeFer and Heath Leach
 http://dotd.mudservices.com  dotd@dotd.mudservices.com 
 ******************************************************/

#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <sys/stat.h>
#include "mud.h"

ALIAS_DATA *find_alias( CHAR_DATA *ch, char *argument )
{
    ALIAS_DATA *pal;
    char buf[MAX_INPUT_LENGTH];;
    
    if (!ch || !ch->pcdata)
        return(NULL);
    
    one_argument(argument, buf);
    
    for (pal=ch->pcdata->first_alias;pal;pal=pal->next)
        if ( !str_prefix(buf, pal->name) )
            return(pal);
    
    return(NULL);
}

void do_alias( CHAR_DATA *ch, char *argument )
{
    ALIAS_DATA *pal = NULL;
    char arg[MAX_INPUT_LENGTH];
    
    if (!ch || !ch->pcdata)
        return;
    
    argument = one_argument(argument, arg);
    
    if ( !*arg ) 
    {
        if (!ch->pcdata->first_alias)
        {
            send_to_char("You have no aliases defined!\n\r", ch);
            return;
        }
        pager_printf( ch, "%-20s What it does\n\r", "Alias" );
        for (pal=ch->pcdata->first_alias;pal;pal=pal->next)
            pager_printf( ch, "%-20s %s\n\r",
                          pal->name, pal->cmd );
        return;
    }
    
    if ( !*argument)
    {
        if ( (pal = find_alias(ch, arg)) != NULL )
        {
            DISPOSE(pal->name);
            DISPOSE(pal->cmd);
            UNLINK(pal, ch->pcdata->first_alias, ch->pcdata->last_alias, next, prev);
            DISPOSE(pal);
            send_to_char("Deleted Alias.\n\r", ch);
        } 
	  else
            send_to_char("That alias does not exist.\n\r", ch);
        return;
    }
    
    if ( (pal=find_alias(ch, arg)) == NULL )
    {
        CREATE(pal, ALIAS_DATA, 1);
        pal->name = str_dup(arg);
        pal->cmd  = str_dup(argument);
        LINK(pal, ch->pcdata->first_alias, ch->pcdata->last_alias, next, prev);
        send_to_char("Created Alias.\n\r", ch);
    } 
    else 
    {
        if (pal->cmd);
        DISPOSE(pal->cmd);
        pal->cmd  = str_dup(argument);
        send_to_char("Modified Alias.\n\r", ch);
    }
}

void free_aliases( CHAR_DATA *ch )
{
    ALIAS_DATA *pal, *next_pal;
    
    if (!ch || !ch->pcdata)
        return;
    
    for (pal=ch->pcdata->first_alias;pal;pal=next_pal)
    {
        next_pal=pal->next;
        if (pal->name)
            DISPOSE(pal->name);
        if (pal->cmd)
            DISPOSE(pal->cmd);
        DISPOSE( pal );
    }
}

bool check_alias( CHAR_DATA *ch, char *command, char *argument )
{
    char arg[MAX_INPUT_LENGTH];
    ALIAS_DATA *alias;
    bool nullarg = TRUE;
    
    if ( argument && *argument!='\0' )
      nullarg = FALSE;
      
    if ( (alias=find_alias(ch,command)) == NULL )
	return FALSE;

    if (!alias->cmd || !*alias->cmd)
	return FALSE;

    sprintf(arg, "%s", alias->cmd);

    if (ch->cmd_recurse==-1 || ++ch->cmd_recurse>50)
    {
	if (ch->cmd_recurse!=-1)
	{
	    send_to_char("Unable to further process command, recurses too much.\n\r", ch);
	    ch->cmd_recurse=-1;
	}
	return FALSE;
    }

/*
   {
    char buf[MAX_INPUT_LENGTH];

    sprintf(buf, "%s", alias->name);

    if ( (alias=find_alias(ch,arg)) != NULL )
    {
	sprintf(arg, "Your alias '%s' calls another alias and cannot be executed.\n\r", buf);
	send_to_char(arg, ch);
	return TRUE;
    }
   }
*/
    if (argument && *argument!='\0' && !nullarg)
    {
	strcat(arg, " ");
	strcat(arg, argument);
    }

    interpret(ch, arg);
    return TRUE;
}