#define USE_CONSOLE
#include <math.h>
#include <allegro.h>
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <malloc.h>

#define FPS_MAX 73

#define RESOX	800
#define RESOY	800
#define RESOZ	800

#define MiD		400
#define LENGTH	165
#define PER_0 1600

#define DEPTH 7
#define DEPTH1 5

#define FC 6.283185307179586476925286766559

#define N 12
int poly;

#define ESC 27
#define SPACE 32
#define ENTER 13

long volatile t568=0;
long fps;

int init568();
int refresh_needed();

void timer_ms(void)
	{
	t568++;
	}
END_OF_FUNCTION(timer_ms)

typedef float vect0r[4]; 
typedef float matrix[4][4];

typedef struct
	{
	vect0r cor[3];
	float z;
	int col;
	}flat; 

flat cube[N];
vect0r centre;
matrix scale_m,x_m,y_m,z_m;

int init_kyb()
	{
	char* strng=(char*)malloc(sizeof(char)*256);
	FILE* cfg=fopen("lol.txt","r");
	
	if(cfg==NULL)
		return 1;

	strng=fgets(strng,256,cfg);
	if(strcmp(strng,"FORMAT:"))
		{
		fclose(cfg);
		return 1;
		}
	
	fclose(cfg);
	return 0;
	}

void draw_kyb(BITMAP* dest)
	{
	int i,j;

	for(i=0;i<poly;i++)
		for(j=i;j<poly;j++)
			if(cube[i].z<cube[j].z)
				{
				cube[i].z+=cube[j].z;
				cube[j].z=cube[i].z-cube[j].z;
				cube[i].z-=cube[j].z;
				}
	}

void move_kyb(BITMAP* dest)
	{

	}

int main()
	{
	char ch=0;
	int refresh_needed=1;
	long cnt=t568;	

	if(init568())
		return 1;
	BITMAP* debm=create_bitmap(RESOX,RESOY);
	clear_to_color(debm,makecol(0,0,0));
	
	if(init_kyb())
		return 1;	
		
	while(ch!=ESC)
		{
		if(refresh_needed)
			{
			blit(debm,screen,0,0,0,0,RESOX,RESOY);
			clear_to_color(debm,makecol(0,0,0));
	
			draw_kyb(debm);
			move_kyb(debm);
			}
		else
			rest(1);

		if(t568-cnt>1000/FPS_MAX)
			{
			fps=1000/(t568-cnt);
			textprintf_ex(debm,font,1,1,makecol(255,255,255),0,"FPS %d",fps);							
			refresh_needed=1;
			cnt=t568;
			}
		else
			refresh_needed=0;

		if(keypressed())
			ch=readkey();

		}
	
	return 0;
	}

int init568()
	{
	if (allegro_init() != 0)
		return 1;
    install_keyboard();
    install_timer();
	
	set_color_depth(32);
	if(set_gfx_mode(GFX_AUTODETECT_WINDOWED, RESOX,RESOY, 0, 0) != 0) 
		{
		set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
		allegro_message("Unable to set graphic mode\n%s\n",allegro_error);
		return 1;
		}
	
	srand(time(NULL));

	LOCK_VARIABLE(t568);
	LOCK_FUNCTION(timer_ms);
	install_timer();
	install_int(timer_ms,1);

    return 0;
	}