/* * Solid Internet Relay Chat daemon, src/toys.c * Copyright (C) 2004 Juan L. BAez * * 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 1, 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. */ /***************************************************************** * $Id: toys.c,v 1.4 2006/03/18 05:37:00 sheik Exp $ * $Name: $ * $Source: /cvsroot/solidircd/solidircd-stable/src/toys.c,v $ * $State: Exp $ ***************************************************************** */ #include "sys.h" #include "struct.h" #include "common.h" #include "msg.h" #include "h.h" #include "numeric.h" #include #include #ifdef HAVE_STRING_H # include #else # include #endif #undef CHECK #define STATES_NUM 512 typedef struct { short next_state[128]; char *replacement; } STATE; static STATE state[STATES_NUM]; static int next_free_state; char *LowerAll(char *str) { char *s; for(s = str; *s; s++) *s = ToLower(*s); return str; } /***************************************** * Start whee routines *****************************************/ char *add_punctuation(char *old_msg, char *new_msg) { int i, len; len = strlen(new_msg); for (i=0; old_msg[i]; i++) { switch(old_msg[i]) { case '!': case '?': case '.': new_msg[len++] = old_msg[i]; new_msg[len] = 0; if (len == 256) break; } } return new_msg; } /***************************************** * End whee routines *****************************************/ /***************************************** * Start ELMER routines *****************************************/ void add_translate(char *old_text, char *new_text) { int i, len, curr_state, curr_char; short *next_state_p; old_text = LowerAll(old_text); len = strlen(old_text); curr_state = 0; for (i=0; i chars_left) add_frag_len = chars_left; strncpy(new_text, add_frag, add_frag_len); new_text += add_frag_len; chars_left -= add_frag_len; if (!chars_left) break; } while (*old_text); *new_text = 0; } void init_chef(void) { memset(state, 0, sizeof(state)); next_free_state = 1; #ifdef CHECK fprintf(stderr, "states used: %d\n", next_free_state); #endif } /***************************************** * End ELMER routines *****************************************/ int m_elmer(aClient *cptr, aClient *sptr, int parc, char *parv[]) { aClient *acptr; if (!IsPrivileged(sptr)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; } if (parc < 2) { sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "ELMER"); return 0; } if ((acptr = find_client(parv[1], NULL))==NULL) { if (MyClient(sptr)) sendto_one (sptr, err_str (ERR_NOSUCHNICK),me.name, sptr->name, parv[1]); return 0; } if (IsPrivileged(acptr)) /* Enough said. */ { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; } acptr->user->special = 2; if (IsServer(cptr)) { #ifdef MAGICWAND_ELMER sendto_one(acptr, ":%s NOTICE %s :*** You have now adquired a new vocabulary.", me.name, parv[1], parv[0]); #endif sendto_serv_butone(cptr, ":%s ELMER :%s", me.name, parv[1]); return 0; } send_globops("%s set \2ELMER\2 on %s (%s@%s)", parv[0], acptr->name, acptr->user->username, acptr->user->realhost); sendto_serv_butone(NULL, ":%s ELMER %s", me.name, parv[1]); return 0; } int m_silly(aClient *cptr, aClient *sptr, int parc, char *parv[]) { aClient *acptr; if (!IsPrivileged(sptr)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; } if (parc < 2) { sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "SILLY"); return 0; } if ((acptr = find_client(parv[1], NULL))==NULL) { if (MyClient(sptr)) sendto_one (sptr, err_str (ERR_NOSUCHNICK),me.name, sptr->name, parv[1]); return 0; } if (IsPrivileged(acptr)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; } acptr->user->special = 1; if (IsServer(cptr)) { #ifdef MAGICWAND_SILLY sendto_one(acptr, ":%s NOTICE %s :*** You have now adquired an new vocabulary. ", me.name, parv[1], parv[0]); #endif sendto_serv_butone(cptr, ":%s SILLY %s", me.name, parv[1]); return 0; } send_globops("%s set \2SILLY\2 on %s (%s@%s)", parv[0], acptr->name, acptr->user->username, acptr->user->realhost); sendto_serv_butone(NULL, ":%s SILLY %s", me.name, parv[1]); return 0; } int m_normal(aClient *cptr, aClient *sptr, int parc, char *parv[]) { aClient *acptr; if (!IsPrivileged(sptr)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; } if (parc < 2) { sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "NORMAL"); return 0; } if ((acptr = find_client(parv[1], NULL))==NULL) { if (MyClient(sptr)) sendto_one (sptr, err_str (ERR_NOSUCHNICK),me.name, sptr->name, parv[1]); return 0; } if (IsPrivileged(acptr)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; } acptr->user->special = 0; if (IsServer(cptr)) { #ifdef MAGICWAND_NORMAL sendto_one(acptr, ":%s NOTICE %s :*** You have been returned to normality.", me.name, parv[1], parv[0]); #endif sendto_serv_butone(cptr, ":%s NORMAL %s", me.name, parv[1]); return 0; } send_globops("%s set \2NORMAL\2 on %s (%s@%s)", parv[0], acptr->name, acptr->user->username, acptr->user->realhost); sendto_serv_butone(NULL, ":%s NORMAL %s", me.name, parv[1]); return 0; } /***************************************** * End ELMER routines *****************************************/