
#include "main.h"
#include "bmp2map.h"


//--------------------------------------------------
//
//--------------------------------------------------
void getConfig()
{
int length;	
FILE *config;

	if((config=fopen("config.dat","r"))!=NULL)		// Leseüberprüfung	
		printf("SYS|Read config.dat...\n");			// leere Anweisung weil == nicht funktioniert
	else 
	{
		printf("\nError: Can't open config.dat.");
		getchar();									// damit die Meldung lesbar ist
		getchar();
		exit(-1);
	}
	
	fgets(mapmul,40,config);						// Buffer

	fgets(mapmul,40,config);
	length=strlen(mapmul);
	mapmul[length-1]=0;								// \n durch terminierednes \o ersetzen

	fgets(statics,40,config);
	length=strlen(statics);
	statics[length-1]=0;

	fgets(staidx,40,config);
	length=strlen(staidx);
	staidx[length-1]=0;
	
	fclose(config);
}



//--------------------------------------------------
//
//--------------------------------------------------
void getItems()
{
char leer[100];
int chk;
color_item *tmp_color;
item *tmp_item;
freq_item *tmp_freq;
FILE *f_items;

	if((f_items=fopen("scripts/items.txt","r"))!=NULL)	// Leseüberprüfung	
		;												// leere Anweisung weil == nicht funktioniert
	else 
	{
		printf("\nError: Can't open items.txt.");
		getchar();										// damit die Meldung lesbar ist
		getchar();
		exit(-1);
	}		

	a_color_item=(color_item*)malloc(sizeof(color_item));
	tmp_color=a_color_item;
	fgets(leer,100,f_items);

	while( fgets(leer,100,f_items)!=NULL )		
	{
		tmp_color->next=(color_item*)malloc(sizeof(color_item));
		tmp_color->a_freq_item=(freq_item*)malloc(sizeof(freq_item));
		tmp_freq=tmp_color->a_freq_item;
		fscanf(f_items,"%x",&tmp_color->color);


		while( (chk=fscanf(f_items,"%d",&tmp_freq->freq))!=EOF && chk!=0 )
		{
			tmp_freq->next=(freq_item*)malloc(sizeof(freq_item));
			tmp_freq->a_item=(item*)malloc(sizeof(item));
			tmp_item=tmp_freq->a_item;

			while ( fscanf(f_items,"%x",&tmp_item->ID)!=0  )
			{
				tmp_item->next=(item*)malloc(sizeof(item));
				fscanf(f_items,"%d",&tmp_item->zlev);
				fscanf(f_items,"%x",&tmp_item->color);
				fscanf(f_items,"%d",&tmp_item->xmove);
				fscanf(f_items,"%d",&tmp_item->ymove);
				tmp_item=tmp_item->next;
				tmp_item->next=NULL;
			}
			fgets(leer,100,f_items);
			tmp_freq=tmp_freq->next;
			tmp_freq->next=NULL;
		}
		tmp_color=tmp_color->next;
		tmp_color->next=NULL;
	}
	fclose(f_items);
}



//--------------------------------------------------
//
//--------------------------------------------------
void getColor()
{
char leer[100];
liste *neu;
FILE *area;
FILE *coast;

	if((coast = fopen("scripts/color_coast.txt", "r"))!=NULL)	// Leseüberprüfung	
		;														// leere Anweisung weil == nicht funktioniert
	else 
	{
		printf("\nError: Can't open color_coast.txt.");
		getchar();												// damit die Meldung lesbar ist
		getchar();
		exit(-1);
	}	
	if((area = fopen("scripts/color_area.txt", "r"))!=NULL)	// Leseüberprüfung	
		;														// leere Anweisung weil == nicht funktioniert
	else 
	{
		printf("\nError: Can't open color_area.txt.");
		getchar();												// damit die Meldung lesbar ist
		getchar();
		exit(-1);
	}	

	a_liste=(liste*)malloc(sizeof(liste));			// Anfang initialisieren
	neu=a_liste;									// Laufzeiger setzen
	while( fscanf(area,"%x",&neu->BMPID)!=EOF )
	{	
		neu->next = (liste*)malloc(sizeof(liste));

		fscanf(area,"%d",&neu->MAPID);
		fscanf(area,"%d",&neu->low);
		fscanf(area,"%d",&neu->high);
		fgets(leer,100,area);						// Beschreibung

		neu = neu->next;
		neu->next=NULL;
	}
	b_liste=(liste*)malloc(sizeof(liste));			// Anfang initialisieren
	neu=b_liste;									// Laufzeiger setzen
	while( fscanf(coast,"%x",&neu->BMPID)!=EOF )
	{	
		neu->next = (liste*)malloc(sizeof(liste));

		fscanf(coast,"%d",&neu->MAPID);
		fscanf(coast,"%d",&neu->low);
		fscanf(coast,"%d",&neu->high);
		fgets(leer,100,coast);						// Beschreibung

		neu = neu->next;
		neu->next=NULL;
	}
	fclose(area);
	fclose(coast);
}



//--------------------------------------------------
//
//--------------------------------------------------
void getTiles()
{
int i;
char leer[100];
cat*neu;
FILE *tiles;

	if((tiles = fopen("scripts/texture_area.txt", "r"))!=NULL)	// Leseüberprüfung	
		;														// leere Anweisung weil == nicht funktioniert
	else 
	{
		printf("\nError: Can't open texture_area.txt.");
		getchar();												// damit die Meldung lesbar ist
		getchar();
		exit(-1);
	}
	
	a_cat=(cat*)malloc(sizeof(cat));				// Anfang initialisieren
	neu=a_cat;										// Laufzeiger setzen
	while( fgets(leer,5,tiles)!=NULL )		
	{
			neu->next = (cat*)malloc(sizeof(cat));
						
			fgets(leer,5,tiles);					// Leerzeile
			fgets(leer,100,tiles);					// Beschreibung
			fscanf(tiles,"%d",&neu->cat);
			fscanf(tiles,"%d",&neu->anzahl);
			for( i=0;i<neu->anzahl;i++ )
				fscanf(tiles,"%x",&neu->id[i]);

			neu = neu->next;
			neu->next=NULL;
	}
	fclose(tiles);
}



//--------------------------------------------------
//
//--------------------------------------------------
void getMntn()
{
int i;
char leer[100];
mntn*neu;
FILE *mountain;

	if((mountain = fopen("scripts/color_mntn.txt", "r"))!=NULL)	// Leseüberprüfung	
		;														// leere Anweisung weil == nicht funktioniert
	else 
	{
		printf("\nError: Can't open color_mntn.txt.");
		getchar();												// damit die Meldung lesbar ist
		getchar();
		exit(-1);
	}
	

	a_mntn=(mntn*)malloc(sizeof(mntn));				// Anfang initialisieren
	neu=a_mntn;										// Laufzeiger setzen
	while( fgets(leer,5,mountain)!=NULL )		
	{
			neu->next = (mntn*)malloc(sizeof(mntn));
						
			fgets(leer,100,mountain);				// Beschreibung
			fscanf(mountain,"%x",&neu->color);
			fscanf(mountain,"%d",&neu->ID);
			fgetc(mountain);						// Komma entfernen
			fscanf(mountain,"%i",&neu->check);
			fscanf(mountain,"%x",&neu->color_spez);
			if( neu->color_spez!=0 )
			{
				fgetc(mountain);
				fscanf(mountain,"%d",&neu->ID_spez);
			}
			for( i=0;i<=14;i+=2 )
			{
				fscanf(mountain,"%d",&neu->zlev[i]);
				fgetc(mountain);
				fscanf(mountain,"%d",&neu->zlev[i+1]);
			}
			neu = neu->next;
			neu->next=NULL;
	}
	fclose(mountain);
}



//--------------------------------------------------
//
//--------------------------------------------------
void loadCoastData()
{
int j;
char leer[100];
coast*neu;
farbe*farbeneu;
FILE *datei;

	if((datei = fopen("scripts/ite_tex_coast.txt", "r"))!=NULL)	// Leseüberprüfung	
		;														// leere Anweisung weil == nicht funktioniert
	else 
	{
		printf("\nError: Can't open ite_tex_coast.txt.");
		getchar();												// damit die Meldung lesbar ist
		getchar();
		exit(-1);
	}

	a_coast=(coast*)malloc(sizeof(coast));				// Anfang initialisieren
	neu=a_coast;										// Laufzeiger setzen	
	while( fgets(leer,100,datei)!=NULL )
	{
		neu->next = (coast*)malloc(sizeof(coast));

		fgets(leer,100,datei);							// Beschreibung
		fscanf(datei,"%x",&neu->color_a);
		fscanf(datei,"%x",&neu->fault);					// für Lücken
		for( j=0;j<12;j++)
		{
			fscanf(datei,"%x",&neu->item[j][0]);
			if( fgetc(datei)==',' )
				fscanf(datei,"%x",&neu->item[j][1]);
			else 
				neu->item[j][1]=0;
		}

		neu->color_b=(farbe*)malloc(sizeof(farbe));
		farbeneu = neu->color_b;
		farbeneu->next = NULL;
		fscanf(datei,"%x",&farbeneu->color);

		while( fgetc(datei)==',' )
		{
			farbeneu->next = (farbe*)malloc(sizeof(farbe));
			farbeneu=farbeneu->next;
			farbeneu->next = NULL;
			fscanf(datei,"%x",&farbeneu->color);
		}

		fscanf(datei,"%x",&neu->spezial);
		for( j=0;j<12;j++)
		{
			fscanf(datei,"%x",&neu->side[j][0]);
			if( fgetc(datei)==',' )
				fscanf(datei,"%x",&neu->side[j][1]);
			else neu->side[j][1]=0;
		}
		if( neu->side[11][1]!=0 )						// Berücksichtigung: getc evtl.'\o' gelöscht
			fgets(leer,100,datei);
		fgets(leer,100,datei);

		neu = neu->next;
		neu->next=NULL;
	}
	fclose(datei);
}



//--------------------------------------------------
//
//--------------------------------------------------
void loadSmoothData()
{
int j;
char leer[100],tmp;
smooth*neu;
farbe*farbeneu;
FILE *datei;

	if((datei = fopen("scripts/texture_smooth.txt", "r"))!=NULL)	// Leseüberprüfung	
		;														// leere Anweisung weil == nicht funktioniert
	else 
	{
		printf("\nError: Can't open texture_smooth.txt.");
		getchar();												// damit die Meldung lesbar ist
		getchar();
		exit(-1);
	}

	a_smooth=(smooth*)malloc(sizeof(smooth));			//Anfang initialisieren
	neu=a_smooth;										// Laufzeiger setzen
	while( fgets(leer,100,datei)!=NULL )
	{
		neu->next = (smooth*)malloc(sizeof(smooth));		

		fgets(leer,100,datei);							// Beschreibung
		neu->color_a=(farbe*)malloc(sizeof(farbe));
		farbeneu = neu->color_a;
		farbeneu->next = NULL;
		fscanf(datei,"%x",&farbeneu->color);

		while( fgetc(datei)==',' )
		{
			farbeneu->next = (farbe*)malloc(sizeof(farbe));
			farbeneu=farbeneu->next;
			farbeneu->next = NULL;
			fscanf(datei,"%x",&farbeneu->color);
		}

		neu->color_b=(farbe*)malloc(sizeof(farbe));
		farbeneu = neu->color_b;
		farbeneu->next = NULL;
		fscanf(datei,"%x",&farbeneu->color);

		while( fgetc(datei)==',' )
		{
			farbeneu->next = (farbe*)malloc(sizeof(farbe));
			farbeneu=farbeneu->next;
			farbeneu->next = NULL;
			fscanf(datei,"%x",&farbeneu->color);
		}

		fscanf(datei,"%d",&neu->special);
		for( j=0;j<12;j++)
		{
			fscanf(datei,"%x",&neu->side[j][0]);
			if( (tmp=fgetc(datei))==',' )
				fscanf(datei,"%x",&neu->side[j][1]);
			else 
				neu->side[j][1]=0;
		}
		if(tmp==',')
			fgets(leer,100,datei);
		fgets(leer,100,datei);

		neu = neu->next;
		neu->next=NULL;
		
	}
	fclose(datei);
}



//--------------------------------------------------
//
//--------------------------------------------------
void loadCliffData()
{
int i=0;
char leer[100];
cliff*neu;
farbe*farbeneu;
FILE *f_data;
int color;

	if((f_data = fopen("scripts/texture_cliff.txt", "r"))!=NULL)	// Leseüberprüfung	
		;															// leere Anweisung weil == nicht funktioniert
	else 
	{
		printf("\nError: Can't open texture_cliff.txt.");
		getchar();													// damit die Meldung lesbar ist
		getchar();
		exit(-1);
	}

	a_cliff[0]=(cliff*)malloc(sizeof(cliff));			
	neu=a_cliff[0];

	fgets(leer,100,f_data);
	fscanf(f_data,"%x",&defcliff1);
	fscanf(f_data,"%x",&defcliff2);
	fscanf(f_data,"%x",&defcliff3);
	fscanf(f_data,"%x",&COLOR_CLFF);						// Farbfestsetzung
	fgets(leer,100,f_data);
	fgets(leer,100,f_data);

	while( fgets(leer,100,f_data)!=NULL && i < 9 )					// Beschreibung
	{	
		a_cliff[i+1] = (cliff*)malloc(sizeof(cliff));		// nächste Liste		

		
		while( fscanf(f_data,"%x",&color)!=0 ) // && fgetc(f_data)!=EOF )
		{
			neu->next = (cliff*)malloc(sizeof(cliff));

			neu->color_a=(farbe*)malloc(sizeof(farbe));
			farbeneu = neu->color_a;
			farbeneu->next = NULL;
			farbeneu->color = color;

			while( fgetc(f_data)==',' )
			{
				farbeneu->next = (farbe*)malloc(sizeof(farbe));
				farbeneu=farbeneu->next;
				farbeneu->next = NULL;
				fscanf(f_data,"%x",&farbeneu->color);
			}
			
			neu->color_b=(farbe*)malloc(sizeof(farbe));
			farbeneu = neu->color_b;
			farbeneu->next = NULL;
			fscanf(f_data,"%x",&farbeneu->color);
			while( fgetc(f_data)==',' )
			{	
				farbeneu->next = (farbe*)malloc(sizeof(farbe));
				farbeneu=farbeneu->next;
				farbeneu->next = NULL;
				fscanf(f_data,"%x",&farbeneu->color);
			}

			fscanf(f_data,"%x",&neu->ID[0]);
			fscanf(f_data,"%x",&neu->ID[1]);
			fscanf(f_data,"%x",&neu->ID[2]);
			fgets(leer,100,f_data);							// Beschreibung

			neu=neu->next;
			neu->next=NULL;
		}
		i++;
		neu=a_cliff[i];
	}
	fclose(f_data);
}



//--------------------------------------------------
//
//--------------------------------------------------
void loadSmoothItem()
{
int j;
char leer[100],tmp;
farbe*farbeneu;
smooth*neu;
FILE *datei;

	if((datei = fopen("scripts/items_smooth.txt", "r"))!=NULL)		// Leseüberprüfung	
		;															// leere Anweisung weil == nicht funktioniert
	else 
	{
		printf("\nError: Can't open texture_cliff.txt.");
		getchar();													// damit die Meldung lesbar ist
		getchar();
		exit(-1);
	}

	i_smooth=(smooth*)malloc(sizeof(smooth));				// Anfang initialisieren
	neu=i_smooth;											// Laufzeiger setzen
	while( fgets(leer,100,datei)!=NULL )
	{
		neu->next = (smooth*)malloc(sizeof(smooth));		
	
		fgets(leer,100,datei);								// Beschreibung
		neu->color_a=(farbe*)malloc(sizeof(farbe));
		farbeneu = neu->color_a;
		farbeneu->next = NULL;
		fscanf(datei,"%x",&farbeneu->color);
		while( fgetc(datei)==',' )
		{
			farbeneu->next = (farbe*)malloc(sizeof(farbe));
			farbeneu=farbeneu->next;
			farbeneu->next = NULL;
			fscanf(datei,"%x",&farbeneu->color);
		}

		//fscanf(datei,"%x",&neu->color_b);
		//fscanf(datei,"%x",&neu->color_c);
		for( j=0;j<12;j++)
		{
			fscanf(datei,"%x",&neu->side[j][0]);
			if( (tmp=fgetc(datei))==',' )
				fscanf(datei,"%x",&neu->side[j][1]);
			else 
				neu->side[j][1]=0;
		}
		if(tmp==',')
			fgets(leer,100,datei);
		fgets(leer,100,datei);

		neu = neu->next;
		neu->next=NULL;
		
	}
	fclose(datei);
}