#include <ctype.h>
#include <stdio.h>
#include "com_room.h"
#include "socket.h"
#include "stringops.h"
#include "command.h"
static char word [128], output[1024];
void command_room_add (globals *g, player *p, char *l)
{
#ifdef FUNCTIONS
puts ("**command_room_add");
#endif
l = tokenize (word, l);
room_add(g->room_list, word);
if (p->verbose)
{
sprintf (output, "w %s = Room %s added, #%d.", p->name,
g->room_list->tail->name, g->room_list->size);
socket_write (g->socket, output);
}
}
void command_room_delete (globals *g, player *p, char *l)
{
char room_name[128];
room *r;
#ifdef FUNCTIONS
puts ("**command_group_delete");
#endif
l = tokenize (word, l);
if (g->room_list->head == NULL)
{
if (p->verbose)
{
sprintf (output, "w %s = No rooms currently in \
memory.", p->name);
socket_write (g->socket, output);
}
return;
}
if (strlen(word))
{
if (*word == '*')
r = g->room_current;
else
r = room_find (g->room_list, word);
if (r == NULL)
{
sprintf (output, "w %s = Room %s not \
found.", p->name, word);
socket_write (g->socket, output);
return;
}
strcpy (room_name, r->name);
if (r == g->room_current)
g->room_current = NULL;
room_delete (g->room_list, r);
if (p->verbose)
{
sprintf (output, "w %s = Room %s deleted.",
p->name, room_name);
socket_write (g->socket, output);
}
}
}
void command_room_current (globals *g, player *p, char *l)
{
char room_name[128];
room *r;
#ifdef FUNCTIONS
puts ("**command_group_current");
#endif
l = tokenize (word, l);
if (g->room_list->head == NULL)
{
if (p->verbose)
{
sprintf (output, "w %s = No rooms currently in \
memory.", p->name);
socket_write (g->socket, output);
}
return;
}
if (strlen(word))
{
if (*word == '*')
r = g->room_current;
else
r = room_find (g->room_list, word);
if (r == NULL)
{
sprintf (output, "w %s = Room %s not \
found.", p->name, word);
socket_write (g->socket, output);
return;
}
g->room_current = r;
}
if (p->verbose)
{
if (g->room_current != NULL)
{
sprintf (output, "w %s = Current room is:%d %s",
p->name, room_num (g->room_list,
g->room_current), g->room_current->name);
socket_write (g->socket, output);
}
else
{
sprintf (output, "w %s = Current room is:-1 Nowhere",
p->name);
socket_write (g->socket, output);
}
}
}
void command_room_list (globals *g, player *p, char *l)
{
room *list;
int num = 1;
#ifdef FUNCTIONS
puts ("**command_room_list");
#endif
if (g->room_list->head == NULL)
{
sprintf (output, "w %s = No rooms in memory.", p->name);
socket_write (g->socket, output);
}
for (list = g->room_list->head; list != NULL; list = list->next, num++)
{
sprintf (output, "w %s = %d %s", p->name, num, list->name);
socket_write (g->socket, output);
}
}
void command_room_default (globals *g, player *p, char *l)
{
l = tokenize (word, l);
if (strlen (word) > 0)
{
free (g->room_file);
copystring (g->room_file, word);
}
if (p->verbose)
{
sprintf (output, "w %s = Room file default name:%s",
p->name, g->room_file);
socket_write (g->socket, output);
}
}
void command_room_load (globals *g, player *p, char *l)
{
#ifdef FUNCTIONS
puts ("**command_room_load");
#endif
l = tokenize (word, l);
room_burn (g->room_list);
g->room_list = room_load (strlen (word) ? word : g->room_file);
if (p->verbose)
{
sprintf (output, "w %s = Room file %s loaded.", p->name,
strlen (word) ? word : g->room_file);
socket_write (g->socket, output);
}
}
void command_room_save (globals *g, player *p, char *l)
{
#ifdef FUNCTIONS
puts ("**command_room_save");
#endif
l = tokenize (word, l);
room_save (g->room_list, strlen (word) ? word : g->room_file);
if (p->verbose)
{
sprintf (output, "w %s = Room file %s saved.", p->name,
strlen (word) ? word : g->room_file);
socket_write (g->socket, output);
}
}
void command_room (globals *g, player *p, char *l)
{
#ifdef FUNCTIONS
puts ("**command_room");
#endif
l = tokenize (word, l);
if (strlen (word) == 0)
{
if (p->verbose)
{
sprintf (output, "w %s = room commands:add, delete, \
list, default, current, load, save", p->name);
socket_write (g->socket, output);
}
return;
}
if (!strcasecmp (word, "add")) command_room_add (g, p, l);
if (!strcasecmp (word, "delete")) command_room_delete (g, p, l);
if (!strcasecmp (word, "list")) command_room_list (g, p, l);
if (!strcasecmp (word, "default")) command_room_default (g, p, l);
if (!strcasecmp (word, "current")) command_room_current (g, p, l);
if (!strcasecmp (word, "load")) command_room_load (g, p, l);
if (!strcasecmp (word, "save")) command_room_save (g, p, l);
}