00001
00010 #include"table.h"
00011 #include<stdlib.h>
00012 #include<stdio.h>
00013 #include<string.h>
00014 #include"erreur.h"
00015
00016
00017
00018
00019
00020
00021 struct TABLE{
00022
00023 const char* symbole;
00025 int valeur;
00026
00027 table_t suivant;
00028 };
00029
00030
00031
00032
00033 static table_t nouvelle_cellule(table_t next, const char* s, int val){
00034 table_t n=(table_t) malloc(sizeof(struct TABLE));
00035 n->symbole=s;
00036 n->valeur=val;
00037 n->suivant=next;
00038 return n;
00039 }
00040
00041 table_t init_table(){
00042
00043 return nouvelle_cellule(NULL, NULL, 0);
00044 }
00045
00046 void free_table(table_t t){
00047 table_t tmp;
00048 if(!t) return;
00049 while( (tmp=t->suivant) ){
00050 if(tmp->symbole) free((char*)tmp->symbole);
00051 t->suivant=tmp->suivant;
00052 free(tmp);
00053 }
00054 free(t);
00055 }
00056
00057 int find(const table_t t, const char* s, int *val){
00058 table_t tmp;
00059
00060 for(tmp=t->suivant; tmp!=NULL; tmp=tmp->suivant)
00061 if(strcmp(tmp->symbole,s)==0){
00062 *val = tmp->valeur;
00063 return 1;
00064 }
00065 num_erreur=E_NOT_FOUND;
00066 return 0;
00067 }
00068
00069 int add_symbole(table_t t, const char* s, int val){
00070 int x;
00071 char *symb;
00072
00073 if( find(t, s, &x)){
00074 num_erreur= E_EXISTS;
00075 return 0;
00076 }
00077
00078 symb=(char*) malloc(1+strlen(s));
00079 strcpy(symb,s);
00080
00081 t->suivant= nouvelle_cellule(t->suivant, symb, val);
00082 return 1;
00083 }
00084
00085 void print_table(const table_t t){
00086 table_t tmp;
00087 printf("_______________\n");
00088
00089 for(tmp=t->suivant; tmp!=NULL; tmp=tmp->suivant)
00090 printf("| %s |%7d|\n",tmp->symbole, tmp->valeur);
00091 printf("¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\n");
00092 }