/**************************************************************************** * AFKMud Copyright 1997-2002 Alsherok. Contributors: Samson, Dwip, Whir, * * Cyberfox, Karangi, Rathian, Cam, Raine, and Tarl. * * 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 "h/mud.h" ALIAS_DATA *find_alias(CHAR_DATA *ch, char *argument) { ALIAS_DATA *pal; char buf[MIL]; 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[MIL]; 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) { 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) { if((pal = find_alias(ch, arg)) != NULL) { STRFREE(pal->name); STRFREE(pal->cmd); UNLINK(pal, ch->pcdata->first_alias, ch->pcdata->last_alias, next, prev); DISPOSE(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 { if(pal->cmd) 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; if(pal->name) STRFREE(pal->name); if(pal->cmd) STRFREE(pal->cmd); DISPOSE(pal); } } bool check_alias(CHAR_DATA *ch, char *command, char *argument) { char arg[MIL]; ALIAS_DATA *alias; if((alias = find_alias(ch, command)) == NULL) return FALSE; if(!alias->cmd || !*alias->cmd) return FALSE; snprintf(arg, MIL, "%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.\r\n", ch); ch->cmd_recurse = -1; } return FALSE; } if(argument && *argument != '\0') { mudstrlcat(arg, " ", MSL); mudstrlcat(arg, argument, MSL); } interpret(ch, arg); return TRUE; }