/****************************************************************************
* _______ _ ______ _______ _______ ______ *
* ( ____ \( \ ( __ \ |\ /|( ___ )( )|\ /|( __ \ *
* | ( \/| ( | ( \ )| ) ( || ( ) || () () || ) ( || ( \ ) *
* | (__ | | | | ) || (___) || (___) || || || || | | || | ) | *
* | __) | | | | | || ___ || ___ || |(_)| || | | || | | | *
* | ( | | | | ) || ( ) || ( ) || | | || | | || | ) | *
* | (____/\| (____/\| (__/ )| ) ( || ) ( || ) ( || (___) || (__/ ) *
* (_______/(_______/(______/ |/ \||/ \||/ \|(_______)(______/ *
* +-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+ *
* |T|h|e| |O|a|k|l|a|n|d| |C|h|r|o|n|i|c|l|e|s| *
* +-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+ *
* ------------------------------------------------------------------------- *
* EldhaMUD code (C) 2003-2005 by Robert Powell (Tommi) *
* EldhaMUD Team: Celest, Altere and Krelowyn *
* ------------------------------------------------------------------------- *
* *
****************************************************************************/
/****************************************************************************
* ^ +----- | / ^ ^ | | +-\ *
* / \ | | / |\ /| | | | \ *
* / \ +--- |< | \ / | | | | | *
* /-----\ | | \ | v | | | | / *
* / \ | | \ | | +-----+ +-/ *
****************************************************************************
* AFKMud Copyright 1997-2003 by Roger Libiez (Samson), *
* Levi Beckerson (Whir), Michael Ward (Tarl), Erik Wolfe (Dwip), *
* Cameron Carroll (Cam), Cyberfox, Karangi, Rathian, Raine, and Adjani. *
* All Rights Reserved. *
* *
* Original SMAUG 1.4a written by Thoric (Derek Snider) with Altrag, *
* Blodkai, Haus, Narn, Scryn, Swordbearer, Tricops, Gorog, Rennard, *
* Grishnakh, Fireblade, and Nivek. *
* *
* Original MERC 2.1 code by Hatchet, Furey, and Kahn. *
* *
* Original DikuMUD code by: Hans Staerfeldt, Katja Nyboe, Tom Madsen, *
* Michael Seifert, and Sebastian Hammer. *
****************************************************************************
* 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 <string.h>
#include "./Headers/mud.h"
ALIAS_DATA * find_alias( CHAR_DATA * ch, char *argument )
{
ALIAS_DATA * pal;
if( !ch || !ch->pcdata )
return ( NULL );
for( pal = ch->pcdata->first_alias; pal; pal = pal->next )
if( !str_prefix( argument, pal->name ) )
return ( pal );
return ( NULL );
}
void free_alias( CHAR_DATA * ch, ALIAS_DATA * pal )
{
STRFREE( pal->name );
STRFREE( pal->cmd );
UNLINK( pal, ch->pcdata->first_alias, ch->pcdata->last_alias, next, prev );
DISPOSE( pal );
return;
}
void do_alias( CHAR_DATA * ch, char *argument )
{
ALIAS_DATA * pal = NULL;
char arg[MAX_INPUT_LENGTH];
char *p;
if( IS_NPC( ch ) )
return;
for( p = argument; *p != '\0'; p++ )
{
if( *p == '~' )
{
send_to_char( "Command not acceptable, cannot use the ~ character.\r\n", ch );
return;
}
}
argument = one_argument( argument, arg );
if( !arg || arg[0] == '\0' )
{
if( !ch->pcdata->first_alias )
{
send_to_char( "You have no aliases defined!\r\n", ch );
return;
}
pager_printf( ch, "%-20s What it does\r\n", "Alias" );
for( pal = ch->pcdata->first_alias; pal; pal = pal->next )
pager_printf( ch, "%-20s %s\r\n", pal->name, pal->cmd );
return;
}
if( !argument || argument[0] == '\0' )
{
if( ( pal = find_alias( ch, arg ) ) != NULL )
{
free_alias( ch, pal );
send_to_char( "Deleted Alias.\r\n", ch );
}
else
send_to_char( "That alias does not exist.\r\n", ch );
return;
}
if( ( pal = find_alias( ch, arg ) ) == NULL )
{
CREATE( pal, ALIAS_DATA, 1 );
pal->name = STRALLOC( arg );
pal->cmd = STRALLOC( argument );
LINK( pal, ch->pcdata->first_alias, ch->pcdata->last_alias, next, prev );
send_to_char( "Created Alias.\r\n", ch );
}
else
{
STRFREE( pal->cmd );
pal->cmd = STRALLOC( argument );
send_to_char( "Modified Alias.\r\n", 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;
free_alias( ch, pal );
}
}
bool check_alias( CHAR_DATA * ch, char *command, char *argument )
{
char arg[MAX_INPUT_LENGTH];
ALIAS_DATA * alias;
if( !( alias = find_alias( ch, command ) ) )
return FALSE;
if( !alias->cmd || !*alias->cmd )
return FALSE;
strncpy( arg, alias->cmd, MAX_INPUT_LENGTH );
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.\r\n", ch );
ch->cmd_recurse = -1;
}
return FALSE;
}
if( argument && argument[0] != '\0' )
{
strncat( arg, " ", MAX_INPUT_LENGTH );
strncat( arg, argument, MAX_INPUT_LENGTH );
}
interpret( ch, arg );
return TRUE;
}