#include <glib.h>
#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <merc.h>
#include <recycle.h>
#include <tables.h>
#include <telnet.h>
extern GMemChunk *descriptor_mem_chunk;
GSList *descriptor_free;
GSList *descriptor_list;
void initnew_descriptor(DESCRIPTOR_DATA *d)
{
d->host = g_string_new("");
d->outbuf = g_string_new("");
return;
}
void reset_descriptor(DESCRIPTOR_DATA *d)
{
int x = 0;
for (x = 0; x < MAX_INPUT_LENGTH; x++)
d->inlast[x] = 0;
for (x = 0; x < MAX_INPUT_LENGTH; x++)
d->incomm[x] = 0;
for (x = 0; x < 4 * MAX_INPUT_LENGTH; x++)
d->inbuf[x] = 0;
for (x = 0; x < NUM_OPT; x++)
d->telnet_option[x] = INACTIVE;
d->showstr_point = NULL;
d->showstr_head = NULL;
d->pString = NULL;
d->pEdit = NULL;
d->original = NULL;
d->character = NULL;
d->snoop_by = NULL;
d->s_state = 0;
d->editor = 0;
d->repeat = 0;
d->connected = 0;
d->descriptor = 0;
d->fcommand = FALSE;
d->outbuf = g_string_assign(d->outbuf,"");
d->host = g_string_assign(d->host,"");
return;
}
DESCRIPTOR_DATA *new_descriptor(void)
{
DESCRIPTOR_DATA *d;
if (g_slist_length(descriptor_free) == 0)
{
d = g_chunk_new (DESCRIPTOR_DATA, descriptor_mem_chunk);
initnew_descriptor(d);
}
else
{
d = (DESCRIPTOR_DATA*)descriptor_free->data;
descriptor_free = g_slist_remove(descriptor_free,d);
mudsetting->players_recycled++;
}
reset_descriptor(d);
d->connected = CON_GET_NAME;
VALIDATE(d);
//increment PLayers connected
mudsetting->total_players_connected++;
mudsetting->current_players_connected++;
return d;
}
void free_descriptor(DESCRIPTOR_DATA *d)
{
if (!IS_VALID(d))
return;
INVALIDATE(d);
descriptor_free = g_slist_append(descriptor_free,d);
mudsetting->current_players_connected--;
}
void remove_descriptor(DESCRIPTOR_DATA *d)
{
descriptor_list = g_slist_remove(descriptor_list,d);
}
void add_descriptor(DESCRIPTOR_DATA *d)
{
descriptor_list = g_slist_append(descriptor_list,d);
}