/* For copyright information, see olden_v1.0/COPYRIGHT */

/********************************************************************
 *  List.c:  Handles lists.                                         *
 *           To be used with health.c                               *
 ********************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include "health.h"

void addList(struct List *list, struct Patient *patient) {
  struct List *b;

  while (list != NULL) {
    b = list;
    list = list->forward; }
  
  list = (struct List *)malloc(sizeof(struct List));
  list->patient = patient;
  list->forward = NULL;
  list->back = b;
  b->forward = list;
} 

void removeList(struct List *list, struct Patient *patient) {
  struct List          *l1,*l2;
  struct Patient       *p;

  p = list->patient;
  while(p != patient) {
      list = list->forward; 
      p = list->patient;
  }
    
  l1 = list->back;
  l2 = list->forward;
  l1->forward = l2;
  if (list->forward != NULL) {
    l1 = list->forward;
    l2 = list->back;
    l1->back = l2;
  }
  /*free(list);*/
}
     
