#include "dico.h"

int afficheDico = 0;

/*-------------------------------------------------------------------------*/

void entreeFonction(void){
  dico.base = dico.sommet;
  contexte = C_VARIABLE_LOCALE;
  adresseLocaleCourante = 0;
  adresseArgumentCourant = 0;
}

/*-------------------------------------------------------------------------*/

void sortieFonction(void){
  dico.sommet = dico.base;
  dico.base = 0;
  contexte = C_VARIABLE_GLOBALE;  
}

/*-------------------------------------------------------------------------*/

int ajouteIdentificateur(char *identif, int classe, int type, int adresse, int complement)
{
  dico.tab[dico.sommet].identif = strdup(identif);
  dico.tab[dico.sommet].classe = classe;
  dico.tab[dico.sommet].type = type;
  dico.tab[dico.sommet].adresse = adresse;
  dico.tab[dico.sommet].complement = complement;
  dico.sommet++;

  if(dico.sommet == maxDico){
    fprintf(stderr, "attention, plus de place dans le dictionnaire des \
                     identificateurs, augmenter maxDico\n");
    exit(1);
  }
 /* affiche_dico(); */
  return dico.sommet - 1;
}

/*-------------------------------------------------------------------------*/

int rechercheExecutable(char *identif)
{
  int i;
  for(i = dico.sommet - 1; i >= 0; i--){
    if(!strcmp(identif, dico.tab[i].identif))
      return i;
  }
  return -1;
}

/*-------------------------------------------------------------------------*/

int rechercheDeclarative(char *identif)
{
  int i;
  for(i = dico.base; i < dico.sommet; i++){
    if(!strcmp(identif, dico.tab[i].identif))
      return i;
  }
  return -1;
}

/*-------------------------------------------------------------------------*/

void affiche_dico(void)
{
  if(afficheDico) {
    int i;
    printf("------------------------------------------\n");
    printf("base = %d\n", dico.base);
    printf("sommet = %d\n", dico.sommet);
    for(i=0; i < dico.sommet; i++){
      printf("%d ", i);
      printf("%s ", dico.tab[i].identif);
      if(dico.tab[i].classe == C_VARIABLE_GLOBALE)
        printf("GLOBALE ");
      else
      if(dico.tab[i].classe == C_VARIABLE_LOCALE)
        printf("LOCALE ");
      else
      if(dico.tab[i].classe == C_ARGUMENT)
        printf("ARGUMENT ");

      if(dico.tab[i].type == T_ENTIER)
        printf("ENTIER ");
      else if(dico.tab[i].type == T_TABLEAU_ENTIER)
        printf("TABLEAU ");
  /*     else if(dico.tab[i].type == _ARGUMENT) */
  /*       printf("ARGUMENT "); */
      else if(dico.tab[i].type == T_FONCTION)
        printf("FONCTION ");
      
      printf("%d ", dico.tab[i].adresse);
      printf("%d\n", dico.tab[i].complement);
    }
    printf("------------------------------------------\n");
  }
}
