/**************************************************************************
*  File: memory.c                                         Part of DikuMud *
*  Usage: Memory for MOBs.						  *
*  Author : Dionysos, the God of Wine. 					  *
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
***************************************************************************/

#include <stdio.h>
#include <strings.h>
#include <ctype.h>
#include <time.h>

#include "structs.h"
#include "utils.h"

int str_cmp(char *arg1, char *arg2);

/*******************************************************************/
/* FUNCTIONS                                                       */
/*******************************************************************/

void remember (char *name, struct char_data *victim)
{
   MEMtMemoryRec *new, *curr;
   bool present = FALSE;
   
   /* See if the person is already in the list (no duplicates) */

   curr = (MEMtMemoryRec *)victim->specials.memory;
   while (curr != NULL) {
      if (str_cmp(name, curr->name) == 0) {
         present = TRUE;
         break;
      }
      else {
         curr = curr->next;
      }
   } 

   if (!present) {
      CREATE(new, MEMtMemoryRec, 1);
      new->next = victim->specials.memory;
      (void)strcpy(new->name, name);
      victim->specials.memory = new;
   }

} /* remember */

/*******************************************************************/

void forget (char *name, struct char_data *victim) 
{
   MEMtMemoryRec *prev, *curr;

   prev = (MEMtMemoryRec *)victim->specials.memory;
   curr = prev;

   while ((curr != NULL) && (str_cmp(curr->name, name) != 0)) {
      prev = curr;
      curr = curr->next;
   }

   if (curr == NULL) return;
   if (curr == victim->specials.memory) {
      victim->specials.memory = curr->next;
   }
   else {
      prev->next = curr->next;
   }

   free(curr);
} /* forget */

/********************************************************************/

void clearMemory(struct char_data *ch)
{
   MEMtMemoryRec *curr, *prev;

   prev = (MEMtMemoryRec *)ch->specials.memory;
   curr = prev;

   while (prev != NULL) {
      curr = prev->next;
      free(prev);
      prev = curr;
   } 

   ch->specials.memory = NULL;
} /* clearMemory */