#include "tas_de_macros.h" #include "arbre.h" #include #include static arbre tas_de_macros = NULL ; static detruire_element liberer_nom = free ; static detruire_element liberer_definition = free ; struct macro { char *nom ; texte definition; char valide; } ; static int mac_compare(void *a, void *b) ; static void detruire_macro(void *m); void mac_initialiser(detruire_element detruire_nom, detruire_element detruire_definition) { tas_de_macros = arb_creer(mac_compare, detruire_macro); if (detruire_definition != NULL) liberer_definition = detruire_definition ; if (detruire_nom != NULL) liberer_nom = detruire_nom; } static void detruire_macro(void *m) { macro mac = m ; liberer_nom(mac->nom); liberer_definition(mac->definition); free(m); } static int mac_compare(void *a, void *b) { macro m_a = (macro) a; macro m_b = (macro) b ; return strcmp(m_a->nom,m_b->nom); } void mac_definir(char *nom, texte definition) { macro mac = (macro) malloc(sizeof(struct macro)) ; assert(mac != NULL && nom != NULL && definition != NULL) ; mac->nom = nom ; mac->definition = definition ; mac->valide = 1 ; arb_inserer(mac, tas_de_macros); } macro mac_chercher(char *nom) { struct macro mac = {nom,NULL,1} ; macro resultat = arb_chercher(&mac,tas_de_macros) ; return (resultat != NULL && resultat->valide) ? resultat : NULL ; } texte mac_definition(macro mac) { return mac->definition ; } void mac_inhiber(macro mac) { mac->valide = 0; } void mac_desinhiber(macro mac) { mac->valide = 1; txt_deplacer_curseur(mac->definition, Au_debut); } void mac_supprimer(char *nom) { struct macro mac = {nom,NULL,1} ; arb_detruire(&mac,tas_de_macros) ; }