#include <aes.h>
#include <stdio.h>
#include <stdlib.h>
#include <tos.h>
#include <string.h>
#include <mydefs.h>
#include "strins.c"
#include "belltest.h"
#include "belltstr.c"

void mess(char *c)
	{
	char 	a[40];
	
	graf_mouse(ARROW,0);
	strcpy(a,"[3][");
	strcat(a,c);
	strcat(a,"][OK]");
	form_alert(1,a);
	graf_mouse(POINT_HAND,0);
	}

/*******************************
	Select a file
*******************************/
int fileselect(
	char 	*s,
	char	*ext)
	{
	char	p[64];
	int		n;
	int		drv;

	drv = Dgetdrv();
	Dgetpath(p,0);
	if (p[0] != '\\')	strinc(p,0,'\\');
	strins(p,0,"A:");
	while (drv > 0)
		{
		--drv;
		++p[0];
		}
	if (p[strlen(p)-1] != '\\')	strcat(p,"\\");
	strcat(p,ext);
	graf_mouse(ARROW,0);
	fsel_input(p,s,&n);
	graf_mouse(POINT_HAND,0);
	if (strrchr(p,'\\') != strchr(p,'\\'))
		*(strrchr(p,'\\')) = 0x0;
	else
		*(strrchr(p,'\\')+1) = 0x0;
	while (*p > 'A')
		{
		--p[0];
		++drv;
		}
	Dsetdrv(drv);
	Dsetpath(p+2);
	return(n);
	}

void dial_draw(
	int box_ind,
	int	obj	)
	{
	int		x1,y1;
	OBJECT	*redraw;
	
	redraw = &rs_object[rs_trloc[box_ind]+obj];
	objc_offset(rs_trindex[box_ind],obj,&x1,&y1);
	objc_draw(rs_trindex[box_ind],0,10,x1,y1,redraw->ob_width,redraw->ob_height);
	}


void erase_dialog(
	int	x,
	int	y,
	int	w,
	int	h	)
	{
	int sx,sy;
	sx=x+(w/2);
	sy=y+(h/2);
	form_dial(FMD_SHRINK,sx,sy,0,0,x,y,w,h);
	form_dial(FMD_FINISH,sx,sy,0,0,x,y,w,h);
	}

void draw_dialog(
	int		box_ind,
	int		*x,
	int		*y,
	int		*w,
	int		*h,
	char	draw	)
	{
	int		sx,sy;
	
	form_center(rs_trindex[box_ind],x,y,w,h);
	sx=*x+(*w/2);
	sy=*y+(*h/2);
	
	form_dial(FMD_START,sx,sy,0,0,*x,*y,*w,*h); 
	form_dial(FMD_GROW,sx,sy,0,0,*x,*y,*w,*h);
	if (draw) objc_draw(rs_trindex[box_ind],0,10,*x,*y,*w,*h);
	}

void unselect(
	int box,
	int item)
	{
	rs_object[rs_trloc[box]+item].ob_state &= UNSELECT;
	}

int selected(
	int box,
	int item)
	{
	return(rs_object[rs_trloc[box]+item].ob_state & SELECTED);
	}

int	exit_dialog(
	int box_ind,
	int	x,
	int	y,
	int	w,
	int	h,
	int	draw	)
	{
	int 	e;
	
	if (draw) objc_draw(rs_trindex[box_ind],0,10,x,y,w,h);
	e = form_do(rs_trindex[box_ind],0);
	unselect(box_ind,e);
	dial_draw(box_ind,e);
	return(e);
	}

void putspeed(char c)
	{
	int i;

	for(i=8;i<12;i++)
		if ((rs_object[i].ob_state & SELECTED)!=0)
			{
			if (c != *rs_object[i].ob_spec.free_string)
				rs_object[i].ob_state &= UNSELECT;
			}
		else
			{
			if (c == *rs_object[i].ob_spec.free_string)
				rs_object[i].ob_state |= SELECTED;
			}
	}


char getspeed(void)
	{
	int i;
	char c='3';

	for(i=8;i<12;i++)
		if ((rs_object[i].ob_state & SELECTED)!=0)
			c = *rs_object[i].ob_spec.free_string;
	return(c);
	}

int main()
	{
	int 		x,y,w,h;
	int 		choice,flag,fd;
	static char *ext="*.SND";
	static COMMAND line={0,"0 TESTTEST.SND"};
	char 		*buf,*file;
	DTA			*dta;
	long		l;
	static char *newb="\0C:\\AUTO\\NEWBELL.PRG";
	long 		*screen;
	long		cnt;
	long		*scrbuf;

	/*      INITIALIZE GEM              */
	appl_init();
   	fix_objects();
	
	/*      APPLICATION ROUTINES        */
	graf_mouse(POINT_HAND,0);

	flag=0;
	if (Fsfirst("NEWBELL.PRG",0)<0)
		{
		++flag;
		if (Fsfirst("C:\\AUTO\\NEWBELL.PRG",0)<0)
			{
			++flag;
			if (Fsfirst("A:\\AUTO\\NEWBELL.PRG",0)<0)
				{
				mess("NEWBELL.PRG NOT FOUND");
				++flag;
				}
			else
				strcpy(newb,"A:\\AUTO\\NEWBELL.PRG");
			}
		else
			strcpy(newb,"C:\\AUTO\\NEWBELL.PRG");
		}
	else
		strcpy(newb,"NEWBELL.PRG");

	if (flag!=3)
		{
		draw_dialog(MAINDIAL,&x,&y,&w,&h,1);
		file = line.command_tail+2;
		buf = NULL;
		choice=0;
		while(choice!=MAINQUIT)
			{
			choice = exit_dialog(MAINDIAL,x,y,w,h,0);
			switch(choice)
				{
				case MAINLOAD:
					erase_dialog(x,y,w,h);
					if (fileselect(file,ext))
						{
						if (Fsfirst(file,0)>=0)
							{
							dta = Fgetdta();
							l = dta->d_length;
							if (buf!=NULL)
								free(buf);
							buf=malloc(l+16);
							fd=Fopen(file,READ);
							Fread(fd,l,buf);
							Fclose(fd);
							if ((*buf<6)&&(*buf>0))
								putspeed(*buf+'0');
							}
						}
					draw_dialog(MAINDIAL,&x,&y,&w,&h,1);
					break;
				case MAINSAVE:
					break;
				case MAINPLAY:
					scrbuf=malloc(32768L);
					if (scrbuf!=NULL)
						{
						graf_mouse(M_OFF,0);
						screen=(long *)Physbase();
						for(cnt=0;cnt<8192L;cnt++)
							{
							*(scrbuf+cnt)=*(screen+cnt);
							*(screen+cnt)=0L;
							}
						}
					line.length = strlen(line.command_tail);
					*line.command_tail = getspeed();
					*buf = getspeed() - '0';
					fd=Fopen(file,WRITE);
					Fwrite(fd,l,buf);
					Fclose(fd);
					Pexec(0,newb,&line,NULL);
					if (scrbuf!=NULL)
						{
						for(cnt=0;cnt<8192L;cnt++)
							*(screen+cnt)=*(scrbuf+cnt);
						free(scrbuf);
						graf_mouse(M_ON,0);
						graf_mouse(POINT_HAND,0);
						}
					break;
				case MAINQUIT:
					break;
				}
			}
		erase_dialog(x,y,w,h);
		if (buf!=NULL)
			free(buf);
		}
	graf_mouse(ARROW,0);
	appl_exit();
	return(0);
	}
