#include <conio.h>
#include <dos.h>
#include <stdio.h>
#include "laser.cpp"
#include "joystick.cpp"



int getarea(int x,int y){
if (y<64){
	if (x<85) return 1;
	if (x<170) return 2;
	return 3;
	}
if (y<196){
	if (x<42) return 4;
	if (x<85) return 5;
	if (x<170) return 6;
	if (x<202) return 7;
	return 8;
	}
if (x<21) return 9;
if (x<42) return 10;
if (x<106) return 11;
if (x<148) return 12;
if (x<202) return 14;
return 15;
}



void main(){
int playing=0,area=0;
int index[100]={0};
int x,y;
int a;
JOYSTICK J;
LASER L(COM2);
while (!kbhit()){
	if (!playing){
		if (J.button(1)){
			playing=L.play();
			while (J.button(1));
			}
		if (J.button(2)){
			printf("Scanning Chapters...\n");
			if (L.play()){
				for (a=0;a<100;++a) index[a]=0;
				for (a=1;a<100;a+=5) {
					L.gotochapter(a);
					if (L.framenumber()>1) break;
					}
				for (;a<100;++a){
					L.gotochapter(a);
					L.pause();
					index[a]=L.framenumber();
					if (index[a]<=index[a-1]) break;
					printf("Chapter %i: Frame %i\n",a,index[a]);
					}
				while (a<100) index[a++]=L.framenumber();
				while (index[a])--a;
				for (;a>0;--a){
					L.gotochapter(a);
					L.pause();
					index[a]=L.framenumber();
					if (index[a]>=index[a+1]) break;
					printf("Chapter %i: Frame %i\n",a,index[a]);
					}
				while (a>0) index[a--]=L.framenumber();
				L.stop();
				}
			while (J.button(2));
			}
		}
	if (playing){
		int mode=0,nx,ny;
		J.position(nx,ny);
		printf("status: %x\n",L.status());
		if ((nx-x)*(nx-x) + (ny-y)*(ny-y) > 100){
			x=nx;
			y=ny;
			delay(10);
			continue;
			}
		x=nx;
		y=ny;
		nx=area;
		area=getarea(x,y);
		if (nx==area) mode=1; else mode=0;
		switch(area){
			case 1:
				if (J.button(2)) {
					L.counter();
					while (J.button(2));
					}
				break;
			case 2:
				break;
			case 3:
				if (J.button(2)){
					L.channel();
					while (J.button(2));
					}
				break;
			case 4:
				if (!mode) L.backscan();
				else if (J.button(1)){
					int frame=L.framenumber();
					for (a=1;a<100;++a){
						if (index[a]>frame-60) break;
						}
					if (a>0 && a<100) L.gotochapter(a-1);
					while (J.button(1));
					}
				else if (J.button(2)){
					while (J.button(2));
					while (!J.button(2));
					while (J.button(2));
					}
				break;
			case 5:
				if (!mode) L.back3x();
				else if (J.button(2)){
					while (J.button(2));
					while (!J.button(2));
					while (J.button(2));
					}
				break;
			case 6:
				if (!mode) L.play();
				else if (J.button(1)){
					L.stop();
					playing=0;
					while (J.button(1));
					}
				else if (J.button(2)){
					while (J.button(2));
					while (!J.button(2));
					while (J.button(2));
					}
				break;
			case 7:
				if (!mode) L.fore3x();
				else if (J.button(2)){
					while (J.button(2));
					while (!J.button(2));
					while (J.button(2));
					}
				break;
			case 8:
				if (!mode) L.forescan();
				else if (J.button(1)){
					int frame=L.framenumber();
					for (a=1;a<100;++a){
						if (index[a]>frame || index[a]==0) break;
						}
					if (a<100) L.gotochapter(a);
					while (J.button(1));
					}
				else if (J.button(2)){
					while (J.button(2));
					while (!J.button(2));
					while (J.button(2));
					}
				break;
			case 9:
				if (!mode) L.backplay();
				else if (J.button(2)){
					while (J.button(2));
					while (!J.button(2));
					while (J.button(2));
					}
				break;
			case 10:
				if (!mode) L.backslow();
				else if (J.button(2)){
					while (J.button(2));
					while (!J.button(2));
					while (J.button(2));
					}
				break;
			case 11:
				L.backstep();
				delay((x-42)*10);
				break;
			case 12:
				if (!mode) L.pause();
				else if (J.button(2)){
					while (J.button(2));
					while (!J.button(2));
					while (J.button(2));
					}
				break;
			case 13:
				L.forestep();
				delay((202-x)*10);
				break;
			case 14:
				if (!mode) L.foreslow();
				else if (J.button(2)){
					while (J.button(2));
					while (!J.button(2));
					while (J.button(2));
					}
				break;
			case 15:
				if (!mode) L.forestep(0);
				else if (J.button(2)){
					while (J.button(2));
					while (!J.button(2));
					while (J.button(2));
					}
				break;
			}
		}
	}
}