lurf/area/
lurf/build/testing/
lurf/log/
lurf/player/
lurf/player/backup/
#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);	
}