/**********************************************************************
 
	Copyright (C) 2003 Hirohisa MORI <joshua@nichibun.ac.jp>
 
	This program is free software; you can redistribute it 
	and/or modify it under the terms of the GLOBALBASE 
	Library General Public License (G-LGPL) as published by 

	http://www.globalbase.org/
 
	This program is distributed in the hope that it will be 
	useful, but WITHOUT ANY WARRANTY; without even the 
	implied warranty of MERCHANTABILITY or FITNESS FOR A 
	PARTICULAR PURPOSE.

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




#include	"xlerror.h"
#include	"memory_debug.h"
#include	"xl.h"
#include	"xl2pdb_p.h"
#include	"unit.h"
#include	"utils.h"


XL_SEXP * xl_end();

void
init_end(XLISP_ENV * env)
{
	set_env(env,l_string(std_cm,"end"),
		get_func_prim(xl_end,FO_APPLICATIVE,0,1,1));
}


XL_SEXP *
xl_end(XLISP_ENV * env,XL_SEXP * s,
	XLISP_ENV * a,XL_SYM_FIELD * sf)
{
PDB_POLYGON2D * p;
XL_SEXP * ret;
PDB_PD_POINT * ptr, * ptr_list, * ptr2;
extern int point_nos;
	p = get_polygon(&ret,sf,s->h.file,s->h.line);
	if ( p == 0 )
		return ret;
	if ( p->point == 0 )
		return 0;
	if ( p->point->next == 0 )
		return 0;
	for ( ptr = p->point ; ptr->next ; ptr = ptr->next );
	if ( p->point->p.x == ptr->p.x &&
		p->point->p.y == ptr->p.y ) {

		ptr = p->point;
		p->point = ptr->next;
		d_f_ree(ptr);
		point_nos --;
	}
	ptr_list = 0;
	for ( ptr = p->point ; ptr ; ) {
		ptr2 = ptr;
		ptr = ptr->next;
		ptr2->next = ptr_list;
		ptr_list = ptr2;
	}
	p->point = ptr_list;
	fprintf(stderr,"END %i\r",s->h.line);
	return 0;
}

