#include <ctype.h>
#include <stdio.h>
#include "socket.h"
#include "group.h"
#include "stringops.h"
#include "com_resp.h"
#include "resp.h"
#include "command.h"
static char word [128], output[1024];
static void command_resp_list_out (globals *g, player *p, resp *r, int n)
{
sprintf (output, "w %s = % -4d", p->name, n);
socket_write_noret (g->socket, output);
if (r->lowerflag)
{
sprintf (output, "%+-4d", r->lower);
socket_write_noret (g->socket, output);
}
else
socket_write_noret (g->socket, "****");
socket_write_noret (g->socket, " to ");
if (r->upperflag)
{
sprintf (output, "%+-4d", r->upper);
socket_write_noret (g->socket, output);
}
else
socket_write_noret (g->socket, "****");
sprintf (output, ":% -4d:% 4d:%s",
r->status_change, r->priority,
r->response);
socket_write (g->socket, output);
}
void command_resp_add (globals *g, player *p, char *l)
{
group *gr;
int success;
#ifdef FUNCTIONS
puts ("**command_resp_add");
#endif
l = tokenize (word, l);
if (strlen (word) == 0)
{
if (p->verbose)
{
sprintf (output,
"w %s = resp add {group} {resp}",
p->name);
socket_write (g->socket, output);
}
return;
}
gr = (*word == '*') ? (g->group_current) : group_find (g->group_list,
word);
if (gr)
{
success = resp_add (gr->r, l);
if (p->verbose)
{
if (success)
{
sprintf (output, "w %s = Response %s added to \
group %s.", p->name, l, gr->name);
socket_write (g->socket, output);
}
else
{
sprintf (output, "w %s = Format of command: \
resp add {group}/* {lower}/* to \
{upper}/*:{status_change}:{priority}:\
{action(s)}.", p->name);
socket_write (g->socket, output);
}
}
}
else
{
if (p->verbose)
{
if (g->group_list)
sprintf (output, "w %s = Group %s not found.",
p->name, word);
else
sprintf (output, "w %s = No groups in \
memory.", p->name);
socket_write (g->socket, output);
}
}
}
void command_resp_list (globals *g, player *p, char *l)
{
group *gr;
#ifdef FUNCTIONS
puts ("**command_resp_list");
#endif
l = tokenize (word, l);
if (strlen (word) == 0)
{
if (p->verbose)
{
sprintf (output,
"w %s = resp list {group} [{status}]",
p->name);
socket_write (g->socket, output);
}
return;
}
gr = (*word == '*') ? (g->group_current) : group_find (g->group_list,
word);
if (gr)
{
resp *scan;
int n = 1, status, statusflag = 0;
l = tokenize (word, l);
if (strlen (word) > 0)
{
statusflag = 1;
status = atoi (word);
}
for (scan = gr->r->head; scan != NULL; scan = scan->next, n++)
{
if (statusflag)
{
if (((status >= scan->lower) ||
(!scan->lowerflag)) &&
((!scan->upperflag) ||
(status <= scan->upper)))
command_resp_list_out (g, p, scan, n);
}
else
{
command_resp_list_out (g, p, scan, n);
}
}
}
else
{
if (p->verbose)
{
if (g->group_list)
sprintf (output, "w %s = Group %s not found.",
p->name, word);
else
sprintf (output, "w %s = No groups in \
memory.", p->name);
socket_write (g->socket, output);
}
}
}
void command_resp_delete (globals *g, player *p, char *l)
{
group *gr;
#ifdef FUNCTIONS
puts ("**command_resp_delete");
#endif
l = tokenize (word, l);
if (strlen (word) == 0)
{
if (p->verbose)
{
sprintf (output,
"w %s = resp delete {group} {resp #}",
p->name);
socket_write (g->socket, output);
}
return;
}
gr = (*word == '*') ? (g->group_current) : group_find (g->group_list,
word);
if (gr)
{
resp *resp_found;
if (l == NULL)
{
if (p->verbose)
{
sprintf (output, "w %s = resp delete {group} \
{response}", p->name);
socket_write (g->socket, output);
}
return;
}
resp_found = resp_find_num (gr->r, atoi(l));
if (resp_found != NULL)
{
resp_delete (gr->r, resp_found);
if (p->verbose)
{
sprintf (output, "w %s = Response %s deleted \
from group %s.", p->name, l, gr->name);
socket_write (g->socket, output);
}
}
else
{
if (p->verbose)
{
sprintf (output, "w %s = Response %s not \
found in group %s.", p->name, l,
gr->name);
socket_write (g->socket, output);
}
}
}
else
{
if (p->verbose)
{
if (g->group_list)
sprintf (output, "w %s = Group %s not found.",
p->name, word);
else
sprintf (output, "w %s = No groups in \
memory.", p->name);
socket_write (g->socket, output);
}
}
}
void command_resp (globals *g, player *p, char *l)
{
#ifdef FUNCTIONS
puts ("**command_resp");
#endif
l = tokenize (word, l);
if (strlen (word) == 0)
{
if (p->verbose)
{
sprintf (output, "w %s = resp commands:add, delete, \
list", p->name);
socket_write (g->socket, output);
}
return;
}
if (!strcasecmp (word, "add")) command_resp_add (g, p, l);
if (!strcasecmp (word, "list")) command_resp_list (g, p, l);
if (!strcasecmp (word, "delete")) command_resp_delete (g, p, l);
}