#include <string.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];
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.\n\r", ch );
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;
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;
}
if (argument && *argument!='\0')
{
strcat(arg, " ");
strcat(arg, argument);
}
interpret(ch, arg);
return TRUE;
}