/*
	ARTemis (Graphic Editor for FM-TOWNS)  	(c) MATSUUCHI Ryosuke 1992,1993

	arealist.c
		領域リストを管理するモジュール (objectively designed)

	ALnew					Arealist を生成する
	ALdelete(al)			Arealist を消滅させる
	ALaddarea(al,area)		Arealist 内のリストに Area を追加する
	ALdeletearea(al)		最後に追加した Area を削除する
	ALgetfirstarea(al)		Arealist 内のリストの先頭の Area を得る
	ALgetnextarea(al)		リスト内の次の Area を得る
*/

#include <stdio.h>
#include <malloc.h>
#include "arealist.h"

Arealist *ALnew()
{
	Arealist *al;
	if ((al = malloc(sizeof(Arealist))) == NULL)
		return NULL;
	al->arealist = NULL;
	al->curarea = NULL;
	return al;
}

void ALdelete(Arealist *al)
{
	if (al == NULL)
		return;
	Area *p,*t;
	for (p=al->arealist,t=p->next; p!=NULL; p=t,t=(t==NULL?NULL:t->next))
		free(p);
	free(al);
}

Area *ALaddarea(Arealist *al, Area *area)
{
	Area *new;
	if ((new = malloc(sizeof(Area))) == NULL)
		return NULL;
	*new = *area;
	new->next = al->arealist;
	al->arealist = new;
	return new;
}

void ALdeletearea(Arealist *al)
{
	if (al->arealist == NULL)
		return;
	Area *t;
	t = al->arealist;
	al->arealist = al->arealist->next;
	free(t);
}

Area *ALgetfirstarea(Arealist *al)
{
	al->curarea = al->arealist;
	return al->curarea;
}

Area *ALgetnextarea(Arealist *al)
{
	if (al->curarea == NULL)
		return NULL;
	al->curarea = al->curarea->next;
	return al->curarea;
}

void ALarea_setdata(Area *area, void *data)
{
	area->data = data;
}

void *ALarea_getdata(Area *area)
{
	return area->data;
}

/* end of arealist.c */
