/*
	makeraw.c


	reads a '*.bin' file and makes a '*.raw' file.


	makeraw infile(bin) outfile(raw) MaxLat MinLat MaxLon MinLon

	example:

	makeraw l:\demo\road1a d:\mydir\m_road1a  45.0 35.0 -100.0 -124.0

*/
#include <stdio.h>
#include <string.h>
#include "getfile.c"

float MaxLat=90.1,MinLat=-90.1,MaxLon=360.1,MinLon=-360.1;

main(argc,argv)

int argc;
char *argv[];

{
	int i,j,k,n=0;
	int numseg,numpts,doit;
	float latlon[2],mll[4],mnln,mxln,mnlt,mxlt;
	FILE *fpbin,*fpout,*fpatr;
	char name[100],string[100],cr=0xd,file[100];
	long lattrib;
	int attrib,atr=0;

	if(argc<3)
	{
		i=get_file_name("*.bin",name);
		if(i<0)
			exit(0);
		for(i=0;i<strlen(name);i++)
		{
			if(name[i]=='.')
				file[i]='\0';
			else
				file[i]=name[i];
		}
		fpbin=fopen(name,"rb");
		if(!fpbin)
		{
			printf("Could not open '%s'\n",name);
			exit(0);
		}
		for(i=0;i<strlen(name);i++)
			if(name[i]=='.')
				name[i]='\0';
		strcat(name,".raw");
		fpout=fopen(name,"wt");
		printf("\nOutput is in '%s'\n",name);
	}
	else
	{
		strcpy(name,argv[1]);
		strcpy(file,argv[1]);
		strcat(name,".bin");
		fpbin=fopen(name,"rb");
		if(!fpbin)
		{
			printf("Could not open '%s'\n",name);
			exit(0);
		}
		printf("input file = %s  ",name);
		strcpy(name,argv[2]);
		strcat(name,".raw");
		fpout=fopen(name,"wt");
		printf("\nOutput name is '%s'\n",name);
		if(argc==7)
		{
			sscanf(argv[3],"%f",&MaxLat);
			sscanf(argv[4],"%f",&MinLat);
			sscanf(argv[5],"%f",&MaxLon);
			sscanf(argv[6],"%f",&MinLon);
			printf("\nMaxlat = %f MinLat = %f MaxLon = %f MinLon = %f\n",
				MaxLat,MinLat,MaxLon,MinLon);
		}
	}
	printf("file = '%s'\n",file);
	sprintf(name,"%s.atr",file);
	fpatr=fopen(name,"rb");
	if(fpatr)
	{
		printf("Attribute file present.\n");
		atr=1;
	}
	else
		printf("No attribute file found.\n");
	fread((char *)&numseg,sizeof(int),1,fpbin);
	printf("numseg = %d\n",numseg);
	for(i=0;i<numseg;i++)
	{
		fread((char *)&numpts,sizeof(int),1,fpbin);
		fread((char *)mll,sizeof(float),4,fpbin);
		if(atr==1)
			fread((char *)&lattrib,sizeof(long),1,fpatr);
		mnln=mll[0];mxln=mll[1];mnlt=mll[2];mxlt=mll[3];
		doit=1;
		if(mnln>MaxLon||mnlt>MaxLat||mxln<MinLon||mxlt<MinLat)
			doit=0;
		if(doit==1)
		{
			if(atr==0)
				fprintf(fpout,"%5d",i+1);
			else
			{
				fprintf(fpout,"%5ld",lattrib);
				printf("%8ld",lattrib);
			}
		}
		for(j=0;j<numpts;j++)
		{
			fread((char *)latlon,sizeof(float),2,fpbin);
			if(doit==1)
			{
				if(j%3==0)
					fprintf(fpout,"\n");
				else
					fprintf(fpout,"  ");
				fprintf(fpout,"%8.5f %11.5f",latlon[0],latlon[1]);
			}
		}
		if(doit==1)
		{
			fprintf(fpout,"//\n");
			n+=1;
		}
		printf("%6d %6d of %6d%c",i+1,n,numseg,cr);
	}
	printf("\n");
	fclose(fpout);
	fclose(fpbin);
}



                                                                                    