#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); }