text: #include "sam.h"
  
  /*
   * Check that list has room for one more element.
   */
  void
  growlist(List *l)
  {
  	if(l->listptr==0 || l->nalloc==0){
  		l->nalloc = INCR;
  		l->listptr = emalloc(INCR*sizeof(long));
  		l->nused = 0;
  	}else if(l->nused == l->nalloc){
  		l->listptr = erealloc(l->listptr, (l->nalloc+INCR)*sizeof(long));
  		memset((void*)(l->longptr+l->nalloc), 0, INCR*sizeof(long));
  		l->nalloc += INCR;
  	}
  }
  
  /*
   * Remove the ith element from the list
   */
  void
  dellist(List *l, int i)
  {
  	memmove(&l->longptr[i], &l->longptr[i+1], (l->nused-(i+1))*sizeof(long));
  	l->nused--;
  }
  
  /*
   * Add a new element, whose position is i, to the list
   */
  void
  inslist(List *l, int i, long val)
  {
  	growlist(l);
  	memmove(&l->longptr[i+1], &l->longptr[i], (l->nused-i)*sizeof(long));
  	l->longptr[i] = val;
  	l->nused++;
  }
  
  void
  listfree(List *l)
  {
  	free(l->listptr);
  	free(l);
  }
  