mirror of
https://github.com/EnergyMech/energymech.git
synced 2025-12-29 16:14:43 +00:00
Initial Import
This commit is contained in:
196
src/alias.c
Normal file
196
src/alias.c
Normal file
@@ -0,0 +1,196 @@
|
||||
/*
|
||||
|
||||
EnergyMech, IRC bot software
|
||||
Copyright (c) 1997-2004 proton
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
#define ALIAS_C
|
||||
#include "config.h"
|
||||
|
||||
#ifdef ALIAS
|
||||
#include "defines.h"
|
||||
#include "structs.h"
|
||||
#include "global.h"
|
||||
#include "h.h"
|
||||
#include "text.h"
|
||||
#include "mcmd.h"
|
||||
|
||||
void afmt(char *copy_to, const char *src, const char *input)
|
||||
{
|
||||
#define BUFTAIL (tmp+MSGLEN-1) /* avoid buffer overflows */
|
||||
char tmp[MSGLEN];
|
||||
const char *np;
|
||||
char *dest;
|
||||
int n,t,tu,spc;
|
||||
|
||||
dest = tmp;
|
||||
while(*src)
|
||||
{
|
||||
check_fmt:
|
||||
if (*src == '$')
|
||||
{
|
||||
src++;
|
||||
if (*src == '$')
|
||||
goto copychar;
|
||||
tu = t = n = 0;
|
||||
while(attrtab[(uchar)*src] & NUM)
|
||||
{
|
||||
n = (n * 10) + (*(src++) - '0');
|
||||
}
|
||||
if (n)
|
||||
{
|
||||
if (*src == '-')
|
||||
{
|
||||
tu = n;
|
||||
src++;
|
||||
while(attrtab[(uchar)*src] & NUM)
|
||||
{
|
||||
t = (t * 10) + (*(src++) - '0');
|
||||
}
|
||||
}
|
||||
n--;
|
||||
spc = 0;
|
||||
for(np=input;*np;)
|
||||
{
|
||||
if (*np == ' ')
|
||||
{
|
||||
if (!spc)
|
||||
n--;
|
||||
spc = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
spc = 0;
|
||||
if (!n)
|
||||
break;
|
||||
}
|
||||
np++;
|
||||
}
|
||||
spc = 0;
|
||||
while(*np)
|
||||
{
|
||||
if (*np == ' ')
|
||||
{
|
||||
if (!tu || (t && tu >= t))
|
||||
goto check_fmt;
|
||||
if (!spc)
|
||||
tu++;
|
||||
spc = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
spc = 0;
|
||||
}
|
||||
if (dest == BUFTAIL)
|
||||
goto afmt_escape;
|
||||
*(dest++) = *(np++);
|
||||
}
|
||||
}
|
||||
goto check_fmt;
|
||||
}
|
||||
copychar:
|
||||
if (dest == BUFTAIL)
|
||||
goto afmt_escape;
|
||||
*(dest++) = *(src++);
|
||||
}
|
||||
afmt_escape:
|
||||
*dest = 0;
|
||||
Strcpy(copy_to,tmp);
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* associated commands
|
||||
*
|
||||
*/
|
||||
|
||||
void do_alias(COMMAND_ARGS)
|
||||
{
|
||||
/*
|
||||
* on_msg checks: GAXS
|
||||
*/
|
||||
Alias *alias;
|
||||
char *cmd;
|
||||
|
||||
if (!*rest)
|
||||
{
|
||||
/* list all aliases */
|
||||
if (!aliaslist)
|
||||
to_user(from,TEXT_NOALIASES);
|
||||
else
|
||||
{
|
||||
if (dcc_only_command(from))
|
||||
return;
|
||||
to_user(from,"\037Alias\037 \037Format\037");
|
||||
for(alias=aliaslist;alias;alias=alias->next)
|
||||
{
|
||||
to_user(from,"%-18s %s",alias->alias,alias->format);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
cmd = chop(&rest);
|
||||
if (!*rest)
|
||||
{
|
||||
usage(from); /* usage for CurrentCmd->name */
|
||||
return;
|
||||
}
|
||||
for(alias=aliaslist;alias;alias=alias->next)
|
||||
{
|
||||
if (!Strcasecmp(alias->alias,cmd))
|
||||
{
|
||||
Free(&alias->format);
|
||||
set_mallocdoer(do_alias);
|
||||
alias->format = Strdup(rest);
|
||||
to_user(from,"Replaced alias: %s --> %s",cmd,rest);
|
||||
return;
|
||||
}
|
||||
}
|
||||
set_mallocdoer(do_alias);
|
||||
alias = (Alias*)Calloc(sizeof(Alias)+strlen(cmd));
|
||||
Strcpy(alias->alias,cmd);
|
||||
set_mallocdoer(do_alias);
|
||||
alias->format = Strdup(rest);
|
||||
alias->next = aliaslist;
|
||||
aliaslist = alias;
|
||||
to_user(from,"Added alias: %s --> %s",cmd,rest);
|
||||
}
|
||||
|
||||
void do_unalias(COMMAND_ARGS)
|
||||
{
|
||||
/*
|
||||
* on_msg checks: GAXS + CARGS
|
||||
*/
|
||||
Alias *alias,**ap;
|
||||
|
||||
for(ap=&aliaslist;*ap;ap=&(*ap)->next)
|
||||
{
|
||||
if (!Strcasecmp(rest,(*ap)->alias))
|
||||
{
|
||||
alias = *ap;
|
||||
*ap = alias->next;
|
||||
to_user(from,"Removed alias: %s (--> %s)",alias->alias,alias->format);
|
||||
Free(&alias->format);
|
||||
Free((void*)&alias);
|
||||
return;
|
||||
}
|
||||
}
|
||||
to_user(from,"Couldnt find matching alias");
|
||||
}
|
||||
|
||||
#endif /* ALIAS */
|
||||
Reference in New Issue
Block a user