#include <stdio.h>
#include <stdlib.h>
#include "chaineMot.h"
#define T_table 8


void creerCLES(char *mot, long *cle)
{
    int k=0;
    *cle=0;
    
    while(k<=strlen(mot))
    {
        *cle+=mot[k];
        k++;
    }
    *cle=(*cle)%(T_table);  
}


void CreerTable(ptr_poste tableHachage[])
{
  long a=0;
  
  while(a<T_table)
  {
    tableHachage[a]=(ptr_poste)malloc(sizeof(poste));
    tableHachage[a]->suiv=NULL;
    tableHachage[a]->mot='\0';
    a++;
  }
}    




void remplirTable(ptr_poste tableHachage[])
{
    FILE *fp=NULL;
    ptr_poste temp;
    char fichierHachage[30];/////////////
    char E_mot[30];
    long cle,a; 
    
  /*
    printf("nom du fichier de hachage: ");
    fichierName(fichierHachage);  // fichier que 'lon va traiter
  */

    fp = fopen("test.txt","r");
    if(fp!=NULL)
    {  	
      while (!feof(fp)) 
      {   
         fscanf(fp,"%s",E_mot);
         creerCLES(E_mot,&cle);
         if(tableHachage[cle]->mot=='\0')
         {
             tableHachage[cle]->mot=(char *)malloc(30*sizeof(char));
             strcpy(tableHachage[cle]->mot,E_mot);
         }else{
             // on se palce sur le dernier chainon 
             temp=tableHachage[cle];
        	 while(temp->suiv!=NULL)
          	 {
          	     temp=temp->suiv;
          	 }
             temp->suiv=(ptr_poste)malloc(sizeof(poste));
             temp=temp->suiv;
          	 temp->mot=(char *)malloc(30*sizeof(char));
          	 strcpy(temp->mot,E_mot);
          	 temp->suiv=NULL;
         }     
      }
      fclose (fp);  
    } 
}


void fichierName(char *fichier)
{
    FILE *fp=NULL;

    gets(fichier);
    fp = fopen(fichier,"r");  
    if(fp==NULL)
    {
       printf("\n/!\\ fichier non charger /!\\\n->");
       fichierName(fichier);
    }else{
       fclose (fp); 
    }     
}  

void sauvegarderFichier(char *motEnCour,long numL,char fichierSave[])
{
    FILE *fp=NULL;
    
    fp = fopen(fichierSave,"a");
    if(fp!=NULL)
    {      
        fprintf(fp,"%30s  | %5ld \n",motEnCour,numL); 
        fclose (fp);
    }
        
}


void traiterTexte(ptr_poste tableHachage[])
{
    char f;
    char texte[30];
    char fichierLoad[30];
    char fichierSave[30];
    long numL=1;
    long cle,a;
    FILE *fp=NULL;
    ptr_poste temp;/////////////////
    int quit=0;
  
  /*  
    printf("Nom du fichier a traiter: ");
    fichierName(fichierLoad);    // fichier que 'lon va traiter
    printf("Nom du fichier save: ");
    gets(fichierSave);    // on nome le fichier de sauvegarde
  */ 
    fp = fopen("test2.txt","r"); ////a rechanger 
    if(fp!=NULL)
    {
      a=0;
      numL=1;
      while ((f= fgetc(fp)) != EOF) 
      { 
          // on compose le mot
          if( ('A'<=f && f<='Z') || ('a'<=f && f<='z') )
          {
             texte[a]=f;
             a++;   
          } 
          // on a un mot
          else
          {   
              if(f==10)
              {
                 numL++;
              } 
              texte[a]='\0';
              a=0;
              // on recherche le mot dans la table
              creerCLES(texte,&cle);
              temp=tableHachage[cle];
              
                  while(quit!=1 && temp->suiv!=NULL)
                  {
                      if (strcmp(temp->mot,texte)==0)
                      {
                         quit=1;   
                      }
                      else
                      {
                        temp=temp->suiv;   
                      }     
                  }  
                  if (quit==0)
                  {
                       sauvegarderFichier(texte,numL,"test3.txt");
                  } 
                  quit=0; 
          }
      }
      fclose (fp); 
    }  
} 
