#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

int couleur (char  * couleurs)
{if  (!strcmp(couleurs,"Rod"))
     return 16742263;
else if (!strcmp(couleurs,"Gul"))
     return 16764831;
else if (!strcmp(couleurs,"Gronn"))
     return 9961367;
else if (!strcmp(couleurs,"Lilla"))
     return 33464319;
else if (!strcmp(couleurs,"Brun"))
     return 11425536;
else if (!strcmp(couleurs,"Svart"))
     return 6316128;}





int main() 
{
FILE  *h_fic, *fichecrit ,*fichesql;
 int nbligne,color;
 char ligne[512];
 char mot[25][25];
 char * nomdelobjet, * nomdelalign, *nom;
int nbmot,i,j,v,len,nbcar,k,forme,u,w,cpt,var;
 double x,y;
float tab[520000];
forme=0;nbligne=0;nbmot=0;k=0;u=0;v=0;
cpt=0; nomdelalign == NULL;nomdelobjet=NULL;var=2;

//ouverture des fichiers texte   
h_fic = fopen ("Ruter","rt");
   fichecrit=fopen("Ruter.mif","wt");
   fichesql=fopen("Ruter.mid","wt");
   if (h_fic ==NULL) 
   {printf("Erreur d'ouverture de fichier\n");
        return(-1);
   }    

else 
   {
//ecriture de l'en-tete        
fprintf(fichecrit,"Version 300\n");
fprintf (fichecrit, "Charset \"WindowsLatin1\" \n");
fprintf (fichecrit, "Delimiter  \",\" \n");
fprintf (fichecrit, "Index 2\n");
fprintf (fichecrit,"Columns 20\n");
fprintf (fichecrit,"Nom Char(20)\n");
for (j=1;j<20;j++)
   {fprintf (fichecrit,"Commentaire_%d Char(150)\n",j);
   }
fprintf (fichecrit,"\n");
fprintf (fichecrit,"Data \n\n");

//lecture ligne par ligne du document olex 
while ((fgets(ligne, 512, h_fic)))
{nbmot=0;           
len = strlen(ligne);
nbcar=0;
//decoupage de chaque ligne en mot 
for (i=0;i<len;i++) 
{  
if ((ligne[i]==' ') || (ligne[i]=='\n')) 
               {
               mot[nbmot][nbcar]='\0';
               nbmot++;nbcar=0;}
               else {mot[nbmot][nbcar]=ligne[i];nbcar++;
               }
}
//énumeration des cas 
if(!strcmp(mot[0],"Rute"))
                   {                            
                   }               
else if   (!strcmp(mot[0],"Rutetype"))
     {forme =1; 
     {
     if((!strcmp(mot[1],"Areal")))
     {nomdelalign = "Areal";}
     }
     }
                                    
else if ((!strcmp(mot[0],"Linjefarge")))
                   { //on va dans la fonction couleur
                    forme=1;
                    color = couleur(mot[1]);
                    }    
else if ((!strcmp(mot[0],"\0")))
    {// affichage des zones et changement de block donc reinitialisation des couleurs ,des formes.....
                  if (cpt!=0)
                  {
                  if (nomdelalign != "Areal")
                  {fprintf (fichecrit,"Pline %d\n",cpt);
                  for (u=0;u<2*cpt;u++)
                      {
                      fprintf (fichecrit,"%f %f",tab[u],tab[u+1]);
                      fprintf (fichecrit,"\n");
                      u++;
                      }
                      fprintf (fichecrit,"Pen (1,2,%d)\n",color);
                      }
                  else 
                       {fprintf (fichecrit,"Region 1 \n%d\n" ,cpt+1);
                       for (u=0;u<2*cpt;u++)
                       {
                       fprintf (fichecrit,"%f %f",tab[u],tab[u+1]);
                       fprintf (fichecrit,"\n");
                       u++;
                       }
                       fprintf (fichecrit,"%f %f\n",tab[0],tab[1]); 
                       fprintf (fichecrit,"Pen (1,2,%d)\n",color);
                       fprintf (fichecrit,"Brush (2,%d,%d)\n\n",color,color);
                       }
                       }
fprintf (fichecrit,"\n");
fprintf (fichesql,"\n\n");  
    forme =0;nomdelobjet=NULL;nomdelalign="rien";color=0;cpt=0;u=0;var=2;
    
    } 
 
else if (!strcmp(mot[0],"Plottsett")) 
        {}
else if (!strcmp(mot[0],"Fikspos"))
        {}
else if (!strcmp(mot[0],"Navn"))
              if (!strcmp(mot[1],"\0"))
              {fprintf (fichesql,"\" \" ,");}
              else {
                   {for(k=1;k<nbmot;k++)
              {fprintf (fichesql,"%s ",mot[k]);}
              fprintf (fichesql,", ");
                      }
                      }
else if (!strcmp(mot[0],"MTekst"))
          {for(k=2;k<nbmot;k++)
         {fprintf (fichesql,"%s ",mot[k]);}
           fprintf (fichesql,", ");var=1;    
           }      
else {
     //position xy
     if (forme==0)
                     { switch (var)
                       {case 0 : fprintf (fichesql," \" \" , \" \" \n");
                        case 1 : fprintf (fichesql,"\n");
                        case 2 :{} }
                       
                       x = strtod(mot[1] , NULL );
                       y = strtod(mot[0] , NULL );
                       // changement de minutes en decimal
                       x=x/60;
                       y=y/60;
                       fprintf (fichecrit,"Point ");
                       fprintf (fichecrit,"%f %f\n",x,y);
                       fprintf (fichecrit,"Symbol (");
                       fprintf (fichecrit,"\"%s.BMP\"",mot[3]);
                       fprintf (fichecrit,",0,12,0)\n");var=0;
                      }
else {     switch (var)
                       {case 0 : fprintf (fichesql," \" \" , \" \" \n");
                        case 1 : fprintf (fichesql,"\n");
                        case 2 :{} }
     
          cpt++;
          x = strtod(mot[1] , NULL );
          y = strtod(mot[0] , NULL );
          x=x/60;tab[u]=x;u++;
          y=y/60;tab[u]=y;u++;
          fprintf (fichecrit,"Point ");
          fprintf (fichecrit,"%f %f\n",x,y);
          fprintf (fichecrit,"Symbol (");
          fprintf (fichecrit,"38,0,8)\n");
          }
}
}   
//fin du else 
}

if (cpt!=0)
                  {if (nomdelalign != "Areal")
                  {fprintf (fichecrit,"Pline %d\n",cpt);
                  for (u=0;u<2*cpt;u++)
                      {
                      fprintf (fichecrit,"%f %f",tab[u],tab[u+1]);
                      fprintf (fichecrit,"\n");
                      u++;
                      }
                      fprintf (fichecrit,"Pen (1,2,%d)\n",color);
                      }
                  else 
                       {fprintf (fichecrit,"Region %d\n" ,cpt+1);
                       for (u=0;u<2*cpt;u++)
                       {
                       fprintf (fichecrit,"%f %f",tab[u],tab[u+1]);
                       fprintf (fichecrit,"\n");
                       u++;
                       }
                       fprintf (fichecrit,"%f %f\n",tab[0],tab[1]); 
                       fprintf (fichecrit,"Pen (1,2,%d)\n",color);
                       fprintf (fichecrit,"Brush (2,%d,%d)\n\n",color,color);
                   
                       }
                   
                   }

 
 
 
 

fclose (h_fic);
fclose(fichecrit);
fclose(fichesql);
return 0;
}

