/* Copyright (c) 1993 Stephen F. White */

#include "cool.h"
#include "buf.h"
#include "netio.h"

void buf_add (Buf * buf, String * str)
{
  Line *new;

  new = MALLOC (Line, 1);
  new->str = str;
  new->ptr = str->str;
  new->next = 0;
  if (!buf->tail) {
    buf->tail = new;
    buf->head = new;
  } else {
    buf->tail->next = new;
    buf->tail = new;
  }
}

void buf_delhead (Buf * buf)
{
  Line *old = buf->head;

  if (!old) {
    return;
  } else {
    buf->head = old->next;
    if (!old->next) {           /* if nothing in queue, */
      buf->tail = 0;            /* reset tail as well */
    }
    string_free (old->str);
    FREE (old);
  }
}

void buf_init (Buf * buf)
{
  buf->head = 0;
  buf->tail = 0;
}

void buf_free (Buf * buf)
{
  Line *line, *next;

  for (line = buf->head; line; line = next) {
    next = line->next;
    string_free (line->str);
    FREE (line);
  }
  buf_init (buf);
}