/* 1st Darklord module */

#include "vdi.h"
#include "stdlib.h"
#include "mod_head.h"

#define OFFSET 12
#define START 0
#define STOP 3600

#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif

int calc_num(int, int);

int main(DKL_INFO *dark_pars)
{
short handle, xres, yres;
short pxy[4];
int *exit_flag;
int max_colours;
short centrex, centrey, perm_radius1, perm_radius2;
short temp_radius1, temp_radius2, colour;
int min_rad, max_rad, spheres;

	xres=dark_pars->dk_xres;
	yres=dark_pars->dk_yres;
	handle=dark_pars->dk_handle;
	exit_flag=dark_pars->dklord_flag;
	max_colours=dark_pars->dk_pens;
	min_rad=dark_pars->dk_start1;
	max_rad=dark_pars->dk_start2;
	spheres=dark_pars->dk_flag1;

	pxy[0]=0;
	pxy[1]=0;
	pxy[2]=xres;
	pxy[3]=yres;
	vs_clip(handle, TRUE, pxy);		/* set clip rectangle */

	while(*exit_flag) {
		perm_radius1=(short)calc_num(min_rad, max_rad);
		perm_radius1=(perm_radius1/5)*5;
		if(spheres==1) perm_radius2=perm_radius1;
		else if(spheres==2) {
			perm_radius2=(short)calc_num(min_rad,max_rad);
			perm_radius1=(perm_radius1/5)*5;
		}

		centrex=(short)calc_num(OFFSET, xres-OFFSET);
		centrey=(short)calc_num(OFFSET, yres-OFFSET);        
		colour=(short)calc_num(1, max_colours);	/* choose a colour */
		vsl_color(handle, colour);
		vsf_interior(handle, FIS_HOLLOW);	/* hollow fill */
		vsf_color(handle, colour);			/* chosen colour */
		vsf_perimeter(handle, TRUE);		/* perimeter on */

		v_ellipse(handle, centrex, centrey, perm_radius1, perm_radius2);
		temp_radius1=perm_radius2-5;
		temp_radius2=perm_radius1-5;
		v_ellarc(handle, centrex, centrey, perm_radius1, perm_radius2, START, STOP);

		while(TRUE){
			if(temp_radius1>=0) v_ellarc(handle, centrex, centrey, perm_radius1, temp_radius1, START, STOP);
			if(temp_radius2>=0) v_ellarc(handle, centrex, centrey, temp_radius2, perm_radius2, START, STOP);
			temp_radius1-=5;
			temp_radius2-=5;
			if(temp_radius1<0 && temp_radius2<0) break;
		}
	}
	return 0;
}
/* -------------------------------------------------------------------- */
int calc_num(int min, int max)
{
int diff;

	diff=max-min;
	if(!diff) diff=1;	/* avoid divide-by-zero exception */
	return ((rand()%diff)+min);
}
/* -------------------------------------------------------------------- */
