/* map creator for galaxy */
/* Bernhard Schmidt, 1995 */

#include <stdio.h>
#include <math.h>
#define ANZ 549 
#define WID 122
static float pl[3][ANZ];
static char ow[ANZ];
static char wa[ANZ];

static float li[500];
int a;
int this_line(k,delta)
float k,delta;
{
int i,j=0;
	for(i=0;i<ANZ;i++){
		if(((float)(pl[2][i])<k+delta/2)&&((float)(pl[2][i])>=k-delta/2)){
			if(pl[0][i]==a){
				li[j]=pl[1][i];
				wa[j++]='#';
			}else{
				li[j]=pl[1][i];
				wa[j++]=ow[i];
			}
		}
		if(((float)(pl[2][i])<k+delta/2+170)&&((float)(pl[2][i])>=k-delta/2+170)){
			if(pl[0][i]==a){
				li[j]=pl[1][i];
				wa[j++]='#';
			}else{
				li[j]=pl[1][i];
				wa[j++]=ow[i];
			}
		}
		if(((float)(pl[2][i])<k+delta/2-170)&&((float)(pl[2][i])>=k-delta/2-170)){
			if(pl[0][i]==a){
				li[j]=pl[1][i];
				wa[j++]='#';
			}else{
				li[j]=pl[1][i];
				wa[j++]=ow[i];
			}
		}
	}
	return j;
}
void mapmaker(x,y,s)
int x,y,s;
{
int i,j,l,m;
float k,delta;
char str[WID+1];
	delta=(float)(4*(float)s/(float)WID);
/*	printf("Delta: %f\n",delta);
*/	for(k=(float)(y-s)+delta/2;k<=y+s-delta/2;k+=delta){
		str[WID]='\0';
		for(i=0;i<WID;i++)
			str[i]=' ';
		l=this_line(k,delta);
			for(j=0;j<l;j++){
				if((li[j]<x+s)&&(li[j]>=x-s)){
					m=(int)(((li[j]-x)*WID)/(2*s)+WID/2);
					if(str[m]!=' '){
						str[m]-=1;
					}else
						str[m]=wa[j];
				}
				if((li[j]<x+s+170)&&(li[j]>=x-s+170)){
					m=(int)(((li[j]-x-170)*WID)/(2*s)+WID/2);
					if(str[m]!=' '){
						str[m]-=1;
					}else
						str[m]=wa[j];
				}
				if((li[j]<x+s-170)&&(li[j]>=x-s-170)){
					m=(int)(((li[j]-x+170)*WID)/(2*s)+WID/2);
					if(str[m]!=' '){
						str[m]-=1;
					}else
						str[m]=wa[j];
				}
			}
	printf("%3.2f\t: %s\n",k,&str);
	}
}
void main(argc,argv)
char *argv[];
int argc;
{
	FILE *fp;
	int i,type,x,y,s,he,h;
	char hs;

	if(argc>=4) {x=atoi(argv[1]); y=atoi(argv[2]);s=atoi(argv[3]); }
		else {x=0; y=0; s=40;}
	if(argc==5) {a=atoi(argv[4]);}
		else a=1000;
	
	if(argc==2 || argc==3 || argc>5 ) {
		printf("Usage: %s x y size [planet]\n",argv[0]);
		exit();
	}
	for(i=0;i<ANZ;i++)
		ow[i]='+';
	if(fp=fopen("all_planets","r"))
	{
		for(i=0;i<ANZ;i++)
		{
			fscanf(fp,"%f",&pl[0][i]);
			fscanf(fp,"%f",&pl[1][i]);
			fscanf(fp,"%f",&pl[2][i]);
		}
		fclose(fp);
		if(fp=fopen("planeten.owner","r"))
		{
			printf("");
			h=0;
			while(h==0)
				{
				fscanf(fp,"%d",&he);
				fscanf(fp,"%s",&hs);
				if(hs=='\\'){
					h=1;
				}else{
				for(i=0;i<ANZ;i++)
					if(he==(int)pl[0][i]){
						ow[i]=hs;
						i=ANZ;
					}
						
				}
			}
		} else printf("planeten.owner fehlt\n");	
		fclose(fp);
		mapmaker(x,y,s);
	} else printf("all_planets fehlt\n");	
}



