/*
* tclserv.c -- part of server.mod
*
* $Id: tclserv.c,v 1.19 2006-03-28 02:35:51 wcc Exp $
*/
/*
* Copyright (C) 1997 Robey Pointer
* Copyright (C) 1999 - 2006 Eggheads Development Team
*
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
static int tcl_isbotnick STDVAR
{
BADARGS(2, 2, " nick");
if (match_my_nick(argv[1]))
Tcl_AppendResult(irp, "1", NULL);
else
Tcl_AppendResult(irp, "0", NULL);
return TCL_OK;
}
static int tcl_putquick STDVAR
{
char s[511], *p;
BADARGS(2, 3, " text ?options?");
if ((argc == 3) && egg_strcasecmp(argv[2], "-next") &&
egg_strcasecmp(argv[2], "-normal")) {
Tcl_AppendResult(irp, "unknown putquick option: should be one of: ",
"-normal -next", NULL);
return TCL_ERROR;
}
strncpy(s, argv[1], 510);
s[510] = 0;
p = strchr(s, '\n');
if (p != NULL)
*p = 0;
p = strchr(s, '\r');
if (p != NULL)
*p = 0;
if (argc == 3 && !egg_strcasecmp(argv[2], "-next"))
dprintf(DP_MODE_NEXT, "%s\n", s);
else
dprintf(DP_MODE, "%s\n", s);
return TCL_OK;
}
static int tcl_putserv STDVAR
{
char s[511], *p;
BADARGS(2, 3, " text ?options?");
if ((argc == 3) && egg_strcasecmp(argv[2], "-next") &&
egg_strcasecmp(argv[2], "-normal")) {
Tcl_AppendResult(irp, "unknown putserv option: should be one of: ",
"-normal -next", NULL);
return TCL_ERROR;
}
strncpy(s, argv[1], 510);
s[510] = 0;
p = strchr(s, '\n');
if (p != NULL)
*p = 0;
p = strchr(s, '\r');
if (p != NULL)
*p = 0;
if (argc == 3 && !egg_strcasecmp(argv[2], "-next"))
dprintf(DP_SERVER_NEXT, "%s\n", s);
else
dprintf(DP_SERVER, "%s\n", s);
return TCL_OK;
}
static int tcl_puthelp STDVAR
{
char s[511], *p;
BADARGS(2, 3, " text ?options?");
if ((argc == 3) && egg_strcasecmp(argv[2], "-next") &&
egg_strcasecmp(argv[2], "-normal")) {
Tcl_AppendResult(irp, "unknown puthelp option: should be one of: ",
"-normal -next", NULL);
return TCL_ERROR;
}
strncpy(s, argv[1], 510);
s[510] = 0;
p = strchr(s, '\n');
if (p != NULL)
*p = 0;
p = strchr(s, '\r');
if (p != NULL)
*p = 0;
if (argc == 3 && !egg_strcasecmp(argv[2], "-next"))
dprintf(DP_HELP_NEXT, "%s\n", s);
else
dprintf(DP_HELP, "%s\n", s);
return TCL_OK;
}
static int tcl_jump STDVAR
{
BADARGS(1, 4, " ?server? ?port? ?pass?");
if (argc >= 2) {
strncpyz(newserver, argv[1], sizeof newserver);
if (argc >= 3)
newserverport = atoi(argv[2]);
else
newserverport = default_port;
if (argc == 4)
strncpyz(newserverpass, argv[3], sizeof newserverpass);
}
cycle_time = 0;
nuke_server("changing servers\n");
return TCL_OK;
}
static int tcl_clearqueue STDVAR
{
struct msgq *q, *qq;
int msgs = 0;
char s[20];
BADARGS(2, 2, " queue");
if (!strcmp(argv[1], "all")) {
msgs = (int) (modeq.tot + mq.tot + hq.tot);
for (q = modeq.head; q; q = qq) {
qq = q->next;
nfree(q->msg);
nfree(q);
}
for (q = mq.head; q; q = qq) {
qq = q->next;
nfree(q->msg);
nfree(q);
}
for (q = hq.head; q; q = qq) {
qq = q->next;
nfree(q->msg);
nfree(q);
}
modeq.tot = mq.tot = hq.tot = modeq.warned = mq.warned = hq.warned = 0;
mq.head = hq.head = modeq.head = mq.last = hq.last = modeq.last = 0;
double_warned = 0;
burst = 0;
simple_sprintf(s, "%d", msgs);
Tcl_AppendResult(irp, s, NULL);
return TCL_OK;
} else if (!strncmp(argv[1], "serv", 4)) {
msgs = mq.tot;
for (q = mq.head; q; q = qq) {
qq = q->next;
nfree(q->msg);
nfree(q);
}
mq.tot = mq.warned = 0;
mq.head = mq.last = 0;
if (modeq.tot == 0)
burst = 0;
double_warned = 0;
mq.tot = mq.warned = 0;
mq.head = mq.last = 0;
simple_sprintf(s, "%d", msgs);
Tcl_AppendResult(irp, s, NULL);
return TCL_OK;
} else if (!strcmp(argv[1], "mode")) {
msgs = modeq.tot;
for (q = modeq.head; q; q = qq) {
qq = q->next;
nfree(q->msg);
nfree(q);
}
if (mq.tot == 0)
burst = 0;
double_warned = 0;
modeq.tot = modeq.warned = 0;
modeq.head = modeq.last = 0;
simple_sprintf(s, "%d", msgs);
Tcl_AppendResult(irp, s, NULL);
return TCL_OK;
} else if (!strcmp(argv[1], "help")) {
msgs = hq.tot;
for (q = hq.head; q; q = qq) {
qq = q->next;
nfree(q->msg);
nfree(q);
}
double_warned = 0;
hq.tot = hq.warned = 0;
hq.head = hq.last = 0;
simple_sprintf(s, "%d", msgs);
Tcl_AppendResult(irp, s, NULL);
return TCL_OK;
}
Tcl_AppendResult(irp, "bad option \"", argv[1],
"\": must be mode, server, help, or all", NULL);
return TCL_ERROR;
}
static int tcl_queuesize STDVAR
{
char s[20];
int x;
BADARGS(1, 2, " ?queue?");
if (argc == 1) {
x = (int) (modeq.tot + hq.tot + mq.tot);
simple_sprintf(s, "%d", x);
Tcl_AppendResult(irp, s, NULL);
return TCL_OK;
} else if (!strncmp(argv[1], "serv", 4)) {
x = (int) (mq.tot);
simple_sprintf(s, "%d", x);
Tcl_AppendResult(irp, s, NULL);
return TCL_OK;
} else if (!strcmp(argv[1], "mode")) {
x = (int) (modeq.tot);
simple_sprintf(s, "%d", x);
Tcl_AppendResult(irp, s, NULL);
return TCL_OK;
} else if (!strcmp(argv[1], "help")) {
x = (int) (hq.tot);
simple_sprintf(s, "%d", x);
Tcl_AppendResult(irp, s, NULL);
return TCL_OK;
}
Tcl_AppendResult(irp, "bad option \"", argv[1],
"\": must be mode, server, or help", NULL);
return TCL_ERROR;
}
static tcl_cmds my_tcl_cmds[] = {
{"jump", tcl_jump},
{"isbotnick", tcl_isbotnick},
{"clearqueue", tcl_clearqueue},
{"queuesize", tcl_queuesize},
{"puthelp", tcl_puthelp},
{"putserv", tcl_putserv},
{"putquick", tcl_putquick},
{NULL, NULL}
};
syntax highlighted by Code2HTML, v. 0.9.1