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