diff options
Diffstat (limited to 'irc/c_numeric.c')
-rw-r--r-- | irc/c_numeric.c | 413 |
1 files changed, 413 insertions, 0 deletions
diff --git a/irc/c_numeric.c b/irc/c_numeric.c new file mode 100644 index 0000000..f124a05 --- /dev/null +++ b/irc/c_numeric.c @@ -0,0 +1,413 @@ +/************************************************************************ + * IRC - Internet Relay Chat, irc/c_numeric.c + * Copyright (C) 1990 Jarkko Oikarinen + * + * 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. + */ + +#ifndef lint +static char rcsid[] = "@(#)$Id: c_numeric.c,v 1.3 1997/09/03 17:45:35 kalt Exp $"; +#endif + +#include "os.h" +#include "c_defines.h" +#define C_NUMERIC_C +#include "c_externs.h" +#undef C_NUMERIC_C + +/* +** DoNumeric (replacement for the old do_numeric) +** +** parc number of arguments ('sender' counted as one!) +** parv[0] pointer to 'sender' (may point to empty string) (not used) +** parv[1]..parv[parc-1] +** pointers to additional parameters, this is a NULL +** terminated list (parv[parc] == NULL). +*/ + +int do_numeric(numeric, cptr, sptr, parc, parv) +int numeric; +aClient *cptr, *sptr; +int parc; +char *parv[]; + { + char *tmp; + int i; + time_t l; /* ctime(&l) on STATS L */ + + /* ...make sure undefined parameters point to empty string */ + for (i = parc; i < MAXPARA; parv[i++] = ""); + + switch (numeric) + { + case ERR_NOSUCHNICK: + sprintf(mybuf, "*** Error: %s: %s (%s)", + parv[0], parv[3], parv[2]); + sendto_one(&me, "WHOWAS %s 1", parv[2]); + break; + case ERR_WASNOSUCHNICK: + mybuf[0] = '\0'; + break; + case ERR_NOSUCHSERVER: + sprintf(mybuf, "*** Error: %s: No such server (%s)", + parv[0], parv[2]); + break; + case ERR_NOSUCHCHANNEL: + sprintf(mybuf, "*** Error: %s: No such channel (%s)", + parv[0], parv[2]); + break; + case ERR_NOSUCHSERVICE: + sprintf(mybuf, "*** Error: %s: No such service (%s)", + parv[0], parv[2]); + break; + case ERR_TOOMANYCHANNELS: + sprintf(mybuf, "*** Error: %s: You have join max. channels", + parv[0]); + break; + case ERR_TOOMANYTARGETS: + sprintf(mybuf, "*** Error: %s: Too many targets given", + parv[0]); + break; + case ERR_NORECIPIENT: + sprintf(mybuf, "*** Error: %s: Message had no recipient", + parv[0]); + break; + case ERR_NOTEXTTOSEND: + sprintf(mybuf, "*** Error: %s: Empty messages cannot be sent", + parv[0]); + break; + case ERR_NOTOPLEVEL: + sprintf(mybuf, "*** Error: %s: No toplevel domainname given", + parv[0]); + break; + case ERR_WILDTOPLEVEL: + sprintf(mybuf, "*** Error: %s: Wildcard in toplevel name", + parv[0]); + break; + case ERR_UNKNOWNCOMMAND: + sprintf(mybuf, "*** Error: %s: Unknown command (%s)", + parv[0],parv[2]); + break; + case ERR_NONICKNAMEGIVEN: + sprintf(mybuf, "*** Error: %s: No nickname given", parv[0]); + break; + case ERR_ERRONEUSNICKNAME: + sprintf(mybuf, + "*** Error: %s: Some special characters cannot %s", + parv[0], "be used in nicknames"); + break; + case ERR_NICKNAMEINUSE: + sprintf(mybuf, + "*** Error: %s: Nickname %s is already in use. %s", + parv[0], parv[2], "Please choose another."); + break; + case ERR_SERVICENAMEINUSE: + sprintf(mybuf, "*** Error: %s: Service %s is already in use.", + parv[0], parv[2]); + break; + case ERR_SERVICECONFUSED: + sprintf(mybuf, "Error: %s: Your service name is confused", + parv[0]); + break; + case ERR_USERNOTINCHANNEL: + sprintf(mybuf, "*** Error: %s: %s", parv[0], + (parv[2][0]) ? parv[2] : + "You have not joined any channel"); + break; + case ERR_NOTONCHANNEL: + sprintf(mybuf, "*** Error: %s: %s %s", + parv[0], parv[3], parv[2]); + break; + case ERR_INVITEONLYCHAN: + sprintf(mybuf, "*** Error: %s: %s", parv[0], + "Magic locks open only with an invitation key"); + break; + case ERR_BANNEDFROMCHAN: + sprintf(mybuf,"*** Error: %s: %s %s", + parv[0], "You are banned from the channel", parv[2]); + break; + case ERR_NOTREGISTERED: + sprintf(mybuf, "*** Error: %s: %s", parv[0], + (parv[2][0]) ? parv[2] : + "You have not registered yourself yet"); + break; + case ERR_NEEDMOREPARAMS: + sprintf(mybuf, "*** Error: %s: %s: %s", parv[0], parv[2], + (parv[3][0]) ? parv[3] : "Not enough parameters"); + break; + case ERR_ALREADYREGISTRED: + sprintf(mybuf, "*** Error: %s: %s", parv[0], + (parv[2][0]) ? parv[2] : "Identity problems, eh ?"); + break; + case ERR_NOPERMFORHOST: + sprintf(mybuf, "*** Error: %s: %s", parv[0], + (parv[2][0]) ? parv[2] : + "Your host isn't among the privileged"); + break; + case ERR_PASSWDMISMATCH: + sprintf(mybuf, "*** Error: %s: %s", parv[0], + (parv[2][0]) ? parv[2] : "Incorrect password"); + break; + case ERR_YOUREBANNEDCREEP: + sprintf(mybuf, "*** %s: %s", parv[0], + (parv[2][0]) ? parv[2] : + "You're banned from irc..."); + break; + case ERR_YOUWILLBEBANNED: + sprintf(mybuf, "*** Warning: You will be banned in %d minutes", + atoi(parv[2])); + break; + case ERR_CHANNELISFULL: + sprintf(mybuf, "*** Error: %s: Channel %s is full", + parv[0], parv[2]); + break; + case ERR_CANNOTSENDTOCHAN: + sprintf(mybuf, "*** Error: Sending to channel is %s", + "forbidden from heathens"); + break; + case ERR_NOPRIVILEGES: + sprintf(mybuf, "*** Error: %s: %s", parv[0], + (parv[2][0]) ? parv[2] : + "Only few and chosen are granted privileges. You're not one."); + break; + case ERR_NOOPERHOST: + sprintf(mybuf, "*** Error: %s: %s", parv[0], + (parv[2][0]) ? parv[2] : + "Only few of mere mortals may try to enter the twilight zone.."); + break; + case ERR_UMODEUNKNOWNFLAG: + sprintf(mybuf, "*** Error: %s: Unknown User Mode Flag", + parv[0]); + break; + case ERR_USERSDONTMATCH: + sprintf(mybuf, "*** Error: %s: Can only change your own mode", + parv[0]); + break; + case RPL_AWAY: + sprintf(mybuf, "*** %s: %s is away: %s", parv[0], + (parv[2][0]) ? parv[2] : "*Unknown*", + (parv[3][0]) ? parv[3] : "*No message (strange)*"); + break; + case RPL_USERHOST: + sprintf(mybuf, "*** USERHOST reply: %s", parv[2]); + break; + case RPL_ISON: + sprintf(mybuf, "*** ISON reply: %s", parv[2]); + break; + case RPL_WHOISUSER: + sprintf(mybuf, "*** %s is %s@%s (%s)", + parv[2], parv[3], parv[4], parv[6]); + break; + case RPL_WHOWASUSER: + sprintf(mybuf, "*** %s was %s@%s (%s)", + parv[2], parv[3], parv[4], parv[6]); + break; + case RPL_WHOISSERVER: + if (parc == 4) + sprintf(mybuf, "*** On irc via server %s (%s)", + parv[2], parv[3]); + else + sprintf(mybuf, "*** On irc via server %s (%s)", + parv[3], parv[4]); + break; + case RPL_WHOISOPERATOR: + sprintf(mybuf, "*** %s has a connection to the twilight zone", + parv[2]); + break; + case RPL_WHOISCHANOP: + sprintf(mybuf, "*** %s has been touched by magic forces", + parv[2]); + break; + case RPL_WHOISIDLE: + sprintf(mybuf, "*** %s %s %s", + parv[2], parv[3], parv[4]); + break; + case RPL_WHOISCHANNELS: + sprintf(mybuf, "*** On Channels: %s", parv[3]); + break; + case RPL_LISTSTART: + sprintf(mybuf, "*** Chn Users Name"); + break; + case RPL_LIST: + sprintf(mybuf, "*** %3s %5s %s", + (parv[2][0] == '*') ? "Prv" : parv[2], + parv[3], parv[4]); + break; + case RPL_LISTEND: + mybuf[0] = '\0'; + break; + case RPL_NOTOPIC: + sprintf(mybuf, "*** %s: No Topic is set", parv[0]); + break; + case RPL_TOPIC: + sprintf(mybuf, "*** %s: Topic on %s is: %s", parv[0], parv[2], + parv[3]); + break; + case RPL_INVITING: + sprintf(mybuf, "*** %s: Inviting user %s into channel %s", + parv[0], parv[2], parv[3]); + break; + case RPL_VERSION: + /* sprintf(mybuf, "*** %s: Server %s runs ircd %s (%s)", parv[0], */ + sprintf(mybuf, "*** Server %s runs ircd %s (%s)", + parv[3], parv[2], parv[4]); + break; + case RPL_KILLDONE: + sprintf(mybuf, "*** %s: May %s rest in peace", + parv[0], parv[2]); + break; + case RPL_INFO: + sprintf(mybuf, "*** %s: Info: %s", parv[0], parv[2]); + break; +#if 1 + case RPL_MOTD: + sprintf(mybuf, "*** %s: Motd: %s", parv[0], parv[2]); + break; +#endif /* 0 Looks better this way! -Vesa */ + case RPL_YOUREOPER: + sprintf(mybuf, "*** %s: %s", parv[0], (parv[2][0] == '\0') ? + "You have operator privileges now. Be nice to mere mortal souls" : + parv[2]); + break; + case RPL_NOTOPERANYMORE: + sprintf(mybuf, "*** %s: You are No Longer Have Operator %s", + parv[0], "Privileges"); + break; + case RPL_REHASHING: + sprintf(mybuf, "*** %s: %s", parv[0], (parv[2][0] == '\0') ? + "Rereading configuration file.." : parv[2]); + break; + case RPL_MYPORTIS: + sprintf(mybuf, "*** %s: %s %s", parv[0], parv[2], parv[1]); + break; + case RPL_TIME: + sprintf(mybuf, "*** Time on host %s is %s", + parv[2], parv[3]); + break; + case RPL_CHANNELMODEIS: + sprintf(mybuf, "*** Mode is %s %s %s", + parv[2], parv[3], parv[4]); + break; + case RPL_LINKS: + m_linreply(cptr, sptr, parc, parv); + break; + case RPL_WHOREPLY: + m_newwhoreply(parv[2],parv[3],parv[4],parv[6],parv[7],parv[8]); + break; + case RPL_NAMREPLY: + m_newnamreply(cptr, sptr, parc, parv); + break; + case RPL_BANLIST: + sprintf(mybuf, "*** %s is banned on %s", + parv[3], parv[2]); + break; + case RPL_TRACELINK: + sprintf(mybuf,"%s<%s> Link %s> %s (%s up %s) bQ:%s fQ:%s", + parv[0], parv[3], parv[6], parv[4], parv[5], parv[7], + parv[8], parv[9]); + break; + case RPL_TRACESERVER: + if (parc <= 5) + sprintf(mybuf,"*** %s Class: %s %s: %s", + parv[0], parv[3], parv[2], parv[4]); + else + sprintf(mybuf,"*** %s %s Cl:%s %s/%s %s %s %s", + parv[0], parv[2], parv[3], parv[4], + parv[5], parv[6], parv[7], parv[8]); + break; + case RPL_TRACECONNECTING: + case RPL_TRACEHANDSHAKE: + case RPL_TRACEUNKNOWN: + case RPL_TRACEOPERATOR: + case RPL_TRACEUSER: + case RPL_TRACESERVICE: + case RPL_TRACENEWTYPE: + sprintf(mybuf,"*** %s %s Class: %s %s", + parv[0], parv[2], parv[3], parv[4]); + break; + case RPL_TRACELOG: + sprintf(mybuf,"*** %s File: %s level:%s ", + parv[0], parv[3], parv[4]); + break; + case RPL_TRACECLASS: + sprintf(mybuf,"*** %s Class: %s Links: %s", + parv[0], parv[3], parv[4]); + break; + case RPL_STATSLINKINFO: + l = time(NULL) - atol(parv[8]); /* count startup time */ + tmp = (char *) ctime(&l); + *((char *) index(tmp, '\n')) = (char) '\0'; /* remove '\n' */ + sprintf(mybuf,"*** %s: %s Q:%s sM:%s sB:%s rM:%s rB:%s D:%s", + parv[0], parv[2], parv[3], parv[4], parv[5], + parv[6], parv[7], tmp); + break; + case RPL_STATSCOMMANDS: + sprintf(mybuf, "*** %s: %s has been used %s times (%s bytes)", + parv[0], parv[2], parv[3], parv[4]); + break; + case RPL_STATSYLINE: + sprintf(mybuf, "*** %s: Cl:%s Pf:%s Cf:%s Max:%s Sq:%s", + parv[0], parv[3], parv[4], + parv[5], parv[6], parv[7]); + break; + case RPL_UMODEIS: + sprintf(mybuf, "*** %s: Mode for user %s is %s", + parv[0], parv[1], parv[2]); + break; +#ifdef HIDE_NUMERICS + case RPL_STATSCLINE: + case RPL_STATSNLINE: + case RPL_STATSILINE: + sprintf(mybuf, "*** %s: %s:%s:*:%s:%s:%s", + parv[0], parv[2], parv[3], parv[5], parv[6], parv[7]); + break; + case RPL_STATSKLINE: + case RPL_STATSQLINE: + sprintf(mybuf, "*** %s: %s:%s:%s:%s:%s:%s", + parv[0], parv[2], parv[3], parv[4], + parv[5], parv[6], parv[7]); + break; + case RPL_SERVICEINFO: + sprintf(mybuf, "*** %s: Info For Service %s: %s", + parv[0], parv[3], parv[4]); + break; + case RPL_ENDOFWHO: + case RPL_ENDOFWHOIS: + case RPL_ENDOFWHOWAS: + case RPL_ENDOFINFO: + case RPL_ENDOFMOTD: + case RPL_ENDOFUSERS: + case RPL_ENDOFLINKS: + case RPL_ENDOFNAMES: + case RPL_ENDOFSTATS: + case RPL_ENDOFBANLIST: + case RPL_ENDOFSERVICES: + mybuf[0] = '\0'; + break; +#endif /* !HIDE_NUMERICS */ + case RPL_WELCOME: + strcpy(me.name, parv[1]); + write_statusline(); + default: + sprintf(mybuf, "%03d %s %s %s %s %s %s %s %s %s", + numeric, parv[0], parv[2], + parv[3], parv[4], parv[5], parv[6], parv[7], + parv[8], parv[9]); + break; + } + if (mybuf[0]) + putline(mybuf); + return 0; +} |