/* File: file2dis.c */                 			
/* Illustara uso della grafica (in coordinate di mondo) in TurboC */

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
/*#include <graphics.h>*/


struct Punto {
  double x;
  double y;
};

struct Figura {
  char tipo[15];
  struct Punto* punti;
};

/*
int dispx(double x)
{
  return (int)floor(x*72+0.5);
}

int dispy(double y)
{
  return getmaxy() - (int)floor(y*72+0.5);
}


void inizializzaGrafica(void)
{
  int gdriver = DETECT;
  int gmode;
  initgraph(&gdriver,&gmode,"D:\\BCPP31\\BGI");
}

void chiudiGrafica(void)
{
  getchar();
  closegraph();
}
*/



void copiaFigure (FILE* fp, struct Figura* figure, int dim)
{
  int i, j;
  
  for (i = 0; i < dim; i++) {
    fscanf(fp,"%s",figure[i].tipo);
    if (strcmp(figure[i].tipo,"quadrilatero") == 0) {
      figure[i].punti = malloc(4*sizeof(struct Punto));
      for (j = 0; j < 4; j++) {
	fscanf(fp,"%lg", &(figure[i].punti[j].x));
	fscanf(fp,"%lg", &(figure[i].punti[j].y));
      }
    }
    else { /*strcmp(figure[i].tipo,"triangolo") == 0*/
      figure[i].punti = malloc(3*sizeof(struct Punto));
      for (j = 0; j < 3; j++) {
	fscanf(fp,"%lg", &(figure[i].punti[j].x));
	fscanf(fp,"%lg", &(figure[i].punti[j].y));
      }
    }
  }
}

/*
void disegnaQuadrilatero(struct Punto* punti)
{
  line(dispx(punti[0].x),dispy(punti[0].y),
       dispx(punti[1].x),dispy(punti[1].y));
  line(dispx(punti[1].x),dispy(punti[1].y),
       dispx(punti[2].x),dispy(punti[2].y));
  line(dispx(punti[2].x),dispy(punti[2].y),
       dispx(punti[3].x),dispy(punti[3].y));
  line(dispx(punti[3].x),dispy(punti[3].y),
       dispx(punti[0].x),dispy(punti[0].y));
}



void disegnaTriangolo(struct Punto* punti)
{
	line(dispx(punti[0].x),dispy(punti[0].y),
			 dispx(punti[1].x),dispy(punti[1].y));
	line(dispx(punti[1].x),dispy(punti[1].y),
			 dispx(punti[2].x),dispy(punti[2].y));
	line(dispx(punti[2].x),dispy(punti[2].y),
			 dispx(punti[0].x),dispy(punti[0].y));
}

*/

void disegnaQuadrilatero(struct Punto* punti)
{
  int i;
  for (i = 0; i < 4; i++) 
    printf("(%lg,%lg) ", punti[i].x, punti[i].y);
  printf("\n");
}

void disegnaTriangolo(struct Punto* punti)
{
  int i;
  for (i = 0; i < 3; i++) 
    printf("(%lg,%lg) ", punti[i].x, punti[i].y);
  printf("\n");
}


void disegnaFigure(struct Figura* figure, int dim)
{
  int i;
  for (i = 0; i < dim; i++) {
    /* printf("%s\n",figure[i].tipo);*/
    if (strcmp(figure[i].tipo, "quadrilatero") == 0)
      disegnaQuadrilatero(figure[i].punti);
    else /* (strcmp(figure[i].tipo, "triangolo") == 0) */
      disegnaTriangolo(figure[i].punti);
  }
}



int main(void)
{
  FILE* fp;
  struct Figura* figure;
  int dim;
  char filefigure[25];

  printf("Nome file figure: ");
  scanf("%s",filefigure);

  fp = fopen(filefigure, "r");
  if (fp == NULL) {
    printf("Errore nell'apertura (r) di %s\n", filefigure);
    return 0;
  }

  fscanf(fp,"%d", &dim);
  figure = malloc(dim*sizeof(struct Figura));
  copiaFigure(fp,figure,dim);

  /*  inizializzaGrafica(); */
  disegnaFigure(figure, dim); 
  /* chiudiGrafica(); */

  return 0;
}
