#include "stdio.h"
#include "string.h"

unsigned long bin2long(unsigned char b[4])
{

	return((long)b[0]+256*(long)b[1]+65536*(long)b[2]+256*65536*(long)b[3]);

}

float bin2float(unsigned char b[4])

{
float f;
char *b1=(char *) &f;
// Sparc
//	b1[0]=b[3];
//	b1[1]=b[2];
//	b1[2]=b[1];
//	b1[3]=b[0]; 

// Intel
	b1[3]=b[3];
	b1[2]=b[2];
	b1[1]=b[1];
	b1[0]=b[0];
	return(f);
}

int main(int argc,char **argv)
{
char fich_entree[255];
char fich_sortie[255];
int t1,t2;
FILE *fe;
FILE *fs;
FILE *fv1;
FILE *fv2;
char poub[255];
unsigned i,k,attr;
unsigned j,nb_facettes;
unsigned char b[4];
float f;
size_t buf;
	t1=0;
	t2=0;
	i=0;
	while (i<argc)
	{
		if ((strcmp(argv[i],"-i")==0) && (argc>i))
		{
			strcpy(fich_entree,argv[i+1]);
			t1=1;
		}
		if ((strcmp(argv[i],"-o")==0) && (argc>i))
		{
			strcpy(fich_sortie,argv[i+1]);
			t2=1;
		}
		i++;
	}

	if ((t1==1) && (t2==1))
	{
		fe=fopen(fich_entree,"rb");
		printf("%s\n",fich_entree);
		fs=fopen(fich_sortie,"wt");
		printf("%s\n",fich_sortie);
		fv1=fopen("visu_2D.pts","wt");
		fv2=fopen("visu_2D.tri","wt");
		buf=fread(poub,80,1,fe);
		if (buf!=1) return(1);
		poub[80]='\0';
		buf=fread(b,4,1,fe);
		if (buf!=1) return(1);
		nb_facettes=bin2long(b);
		printf("nb de facettes %u\n",nb_facettes);
		fprintf(fs,"solid %s\n",fich_sortie);
		fprintf(fv1,"%d %d\n",3*nb_facettes,nb_facettes);
		
		for (j=1;j<=nb_facettes;j++)
		{
		fprintf(fs,"  facet normal");
			for (i=1;i<=3;i++)
			{
				buf=fread(b,4,1,fe);
				if (buf!=1) return(1);
				f=bin2float(b);
				fprintf(fs,"  %f",f);
			}
			fprintf(fs,"\n    outer loop\n");
			fprintf(fv2,"3 ");
			for (i=1;i<=3;i++)
			{
				fprintf(fs,"      vertex  ");
				fprintf(fv1,"%d",3*(j-1)+i);
				fprintf(fv2,"%d ",3*(j-1)+i);
				for (k=1;k<=3;k++)
				{
					buf=fread(b,4,1,fe);
					if (buf!=1) return(1);
					f=bin2float(b);
					fprintf(fs,"  %e",f);
					fprintf(fv1," %e",f); 
				}
				fprintf(fv1,"\n");
				fprintf(fs,"\n");
			}
			buf=fread(&attr,2,1,fe);
			if (buf!=1) return(1);
			fprintf(fs,"    endloop\n  endfacet\n");

			fprintf(fv2,"\n");
		}	
		fprintf(fs,"endsolid %s\n",fich_sortie);
		fclose(fe);
		fclose(fs);		
	}
	return(0);
}
