#include "delta_encrier.h"
#include <conio.h>

/* table des lexemes */
extern ECHANT *Techant;
extern long nb_echant;

/* table des types de variables */
extern TYPE_VARIABLE tab_type_variable[MAX_TYPE_VARIABLE];
extern int nb_tab_type_variable;


/* table des instructions */
extern INSTRUCTION tab_instruction[MAX_INSTRUCTION];
extern int nb_instruction;

/* table des fonctions */
extern FONCTION tab_fonction[MAX_FONCTION];
extern int nb_fonction;

/* table des routines */
extern SUBROUTINE tab_subroutine[MAX_SUBROUTINE];
extern int nb_subroutine;

/* table des taches */
extern TACHE tab_tache[MAX_TACHE];
extern int nb_tache;

/* programme */
extern PROGRAM program;

extern char nom_fic[100];
extern long limite;
extern FILE *file_conf;

extern char buffer_courant[1000];
extern long ligne_lu;
extern long limite;

extern int  ignore_chaine;
extern char chaine_ignoree[300];

extern int   index_lexeme;
extern int   type_token;
extern char  token[MAX_IDENT];
extern char  module[100];
extern int   ligne_courante;
extern int   cr;

TAB_DEFINE tab_define[MAX_DEFINE];
int nb_define;

/*****************************************************/
/* fonction de lecture d'une ligne de fichier        */
/*****************************************************/

int lire_ligne_conf(char *buffer)
 {
 	  char *res;


      res=fgets(buffer,1000,file_conf);

      if(res==(char*)NULL)
	   	{
	  	  	return(-1);
 	   	}

	  ligne_lu++;

      return(strlen(buffer));
 }

char * recherche_define(char *);

/******************************************************/
/* analyse du fichier ligne à ligne                   */
/******************************************************/

void analyse_fichier_ligne_a_ligne(char *nom_fic)
 {
	int code=0;
	int i=0;
	int lg;
	char buff[1000];
	char hdeb[30];
	char *deb_buff;
	int index,sav_index;
	int dernier;
	int commentaire;
	int max_lg;

	dernier=-1;
	commentaire=0;

	/*code=lire_ligne_conf(buffer_courant);*/

	if(nb_echant==0)
		{
			Techant=(ECHANT *)malloc(sizeof(ECHANT)*100000L);
			if(Techant==NULL)
			 {

	  			printf("\n -------> module %s line %d :: [%s]",nom_fic,ligne_lu,LX0001);
				printf("\n\n\n Press a key to terminate");

				for(;kbhit()==0;){}
				exit(-1);
			 }
		}

	for(;;)
		{
			if(((nb_echant % 100000L)==0)&&(nb_echant>1L))
				{
					ECHANT *Tempo;

					if(dernier!=nb_echant)
						{

							printf("\n Augmentation de la mémoire dynamique %ld %ld \n",(((nb_echant/100000L)+1)*100000L),nb_echant);
							Tempo=(ECHANT *)realloc(Techant,sizeof(ECHANT)*(((nb_echant/100000L)+1)*100000L));

							dernier=nb_echant;

							if((Tempo==NULL)||(Tempo==Techant))
								{
									printf("\n -------> module %s line %d :: [%s]",nom_fic,ligne_lu,LX0010);
									printf("\n\n\n  Press a key to terminate");

									for(;kbhit()==0;){}
									exit(-1);
								}
							else
								{
									/*printf("\n Reallocation OK %ld \n",(((nb_echant/100000L)+1)*100000L));*/
									Techant=Tempo;
								}
						}/*if*/
				}/*if*/

			code=lire_ligne_conf(buffer_courant);
			if(code==-1) break;

#ifdef TEST
			printf("\n %s",buffer_courant);
#endif
/*#define TESTLEX*/

			strcpy(buff,buffer_courant);

			/*printf(" %c %d ",0xd,ligne_lu);*/

			max_lg=strlen(buff);

			/* analyse lexicale */


			index=0;

			for(;;)
			  {
				if(buff[index]=='\0') break;

				/* vire les commentaires, les car inf à code ASCII 32 et sort si buffer vidé */
				for(;;)
				  {
					if(buff[index]=='\0') break;
#ifdef TESTLEX
					printf(" [%c] ",buff[index]);
#endif

					if(commentaire==1)
						{
							if((buff[index]=='*')&&(buff[index+1]=='/'))
								{
										commentaire=0;
										index=index+2;
										break;
							    }
							else
								{
									index++;
									continue;
								} /*if */
					    }/*if*/

					if((buff[index]=='/')&&(buff[index+1]=='*'))
						{

								commentaire=1;
								index=index+2;
								continue;
				   	    }

					if(buff[index]<=0x20)
						{
								index++;
								continue;
					    }

					/*intf("ici");*/

					break;

				  } /*for vire commentaire  */
			    /* il y a un lexeme */
				sav_index=nb_echant;

				if(buff[index]=='\0') goto fin;

debut_analyse:
				if(buff[index]=='#')
					{
						index=max_lg;

#ifdef TESTLEX
						printf("\n %d - ignore '%s'",ligne_lu,buff);
#endif

						goto fin;
					}


#ifdef TESTLEX
				printf("analyse lexeme ");
#endif

				if(buff[index]=='{')
					{
#ifdef TESTLEX
						printf(" { [%d] ",nb_echant);
#endif
						Techant[nb_echant].type_lexeme=LBEGIN;
						strcpy(Techant[nb_echant].lexeme,"{");
						Techant[nb_echant].num_ligne=ligne_lu;
						strcpy(Techant[nb_echant].module,nom_fic);
  						nb_echant++;
					    index++;
						goto fin;
					}


				if(buff[index]=='}')
					{
#ifdef TESTLEX
						printf(" } [%d] ",nb_echant);
#endif
						Techant[nb_echant].type_lexeme=LEND;
						strcpy(Techant[nb_echant].lexeme,"}");
						Techant[nb_echant].num_ligne=ligne_lu;
						strcpy(Techant[nb_echant].module,nom_fic);
						index++;
  						nb_echant++;
						goto fin;
					}

/* LPV         10 /* ; */

				if(buff[index]==';')
					{
#ifdef TESTLEX
						printf(" ; [%d] ",nb_echant);
#endif
						Techant[nb_echant].type_lexeme=LPV;
						strcpy(Techant[nb_echant].lexeme,";");
						Techant[nb_echant].num_ligne=ligne_lu;
						strcpy(Techant[nb_echant].module,nom_fic);
						index++;
  						nb_echant++;
						goto fin;
					}


/* LV          11 /* , */


				if(buff[index]==',')
					{
#ifdef TESTLEX
						printf(" , [%d] ",nb_echant);
#endif
						Techant[nb_echant].type_lexeme=LV;
						strcpy(Techant[nb_echant].lexeme,",");
						Techant[nb_echant].num_ligne=ligne_lu;
						strcpy(Techant[nb_echant].module,nom_fic);
						index++;
  						nb_echant++;
						goto fin;
					}


/* LMODULO         58 /* , */

				if(buff[index]=='%')
					{
#ifdef TESTLEX
						printf(" , [%d] ",nb_echant);
#endif
						Techant[nb_echant].type_lexeme=LMODULO;
						strcpy(Techant[nb_echant].lexeme,"%");
						Techant[nb_echant].num_ligne=ligne_lu;
						strcpy(Techant[nb_echant].module,nom_fic);
						index++;
  						nb_echant++;
						goto fin;
					}


/* LPLUS       12 /* + */
/* LINC        51 /* ++ */


				if(buff[index]=='+')
					{
						if(buff[index+1]=='+')
						 {
#ifdef TESTLEX
							printf(" ++ [%d] ",nb_echant);
#endif
							Techant[nb_echant].type_lexeme=LINC;
							strcpy(Techant[nb_echant].lexeme,"++");
							Techant[nb_echant].num_ligne=ligne_lu;
							strcpy(Techant[nb_echant].module,nom_fic);
							index=index+2;
  							nb_echant++;
							goto fin;
					     }

				       else
					    {
#ifdef TESTLEX
							printf(" + [%d] ",nb_echant);
#endif
							Techant[nb_echant].type_lexeme=LPLUS;
							strcpy(Techant[nb_echant].lexeme,"+");
							Techant[nb_echant].num_ligne=ligne_lu;
							strcpy(Techant[nb_echant].module,nom_fic);
							index++;
  							nb_echant++;
							goto fin;
						}
				}

/* LMOINS      13 /* -   */
/* LDEC        52 /* -- */
/* LINDIRECT   55 /* -> */


				if(buff[index]=='-')
					{
						if(buff[index+1]=='-')
						 {
#ifdef TESTLEX
							printf(" -- [%d] ",nb_echant);
#endif
							Techant[nb_echant].type_lexeme=LDEC;
							strcpy(Techant[nb_echant].lexeme,"--");
							Techant[nb_echant].num_ligne=ligne_lu;
							strcpy(Techant[nb_echant].module,nom_fic);
							index=index+2;
  							nb_echant++;
							goto fin;
						}
						else if(buff[index+1]=='>')
						 {
#ifdef TESTLEX
							printf(" -> [%d] ",nb_echant);
#endif
							Techant[nb_echant].type_lexeme=LINDIRECT;
							strcpy(Techant[nb_echant].lexeme,"->");
							Techant[nb_echant].num_ligne=ligne_lu;
							strcpy(Techant[nb_echant].module,nom_fic);
							index=index+2;
  							nb_echant++;
							goto fin;
						 }
					else
						{
#ifdef TESTLEX
							printf(" - [%d] ",nb_echant);
#endif
							Techant[nb_echant].type_lexeme=LMOINS;
							strcpy(Techant[nb_echant].lexeme,"-");
							Techant[nb_echant].num_ligne=ligne_lu;
							strcpy(Techant[nb_echant].module,nom_fic);
							index++;
  							nb_echant++;
							goto fin;
						}
					}

/* LCOMPINF    16 /* < */
/* LCOMPINFEG  18 /* <= */
/* LSHL        63 /* << */



				if(buff[index]=='<')
					{
						if(buff[index+1]=='=')
						 {
#ifdef TESTLEX
							printf(" <= [%d] ",nb_echant);
#endif
							Techant[nb_echant].type_lexeme=LCOMPINFEG;
							strcpy(Techant[nb_echant].lexeme,"<=");
							Techant[nb_echant].num_ligne=ligne_lu;
							strcpy(Techant[nb_echant].module,nom_fic);
							index=index+2;
  							nb_echant++;
							goto fin;
						}
						else
							if(buff[index+1]=='<')
						     {
#ifdef TESTLEX
								printf(" << [%d] ",nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LSHL;
								strcpy(Techant[nb_echant].lexeme,"<<");
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
								index=index+2;
  								nb_echant++;
								goto fin;
						     } else
						      {
#ifdef TESTLEX
								printf(" < [%d] ",nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LCOMPINF;
								strcpy(Techant[nb_echant].lexeme,"<");
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
								index++;
  								nb_echant++;
								goto fin;
						  	 }
				   }

/* LCOMPSUP    17 /* > */
/* LCOMPSUPEG  19 /* >= */
/* LSHR        64 /* >> */


				if(buff[index]=='>')
					{
						if(buff[index+1]=='=')
						 {
#ifdef TESTLEX
							printf(" >= [%d] ",nb_echant);
#endif
							Techant[nb_echant].type_lexeme=LCOMPSUPEG;
							strcpy(Techant[nb_echant].lexeme,">=");
							Techant[nb_echant].num_ligne=ligne_lu;
							strcpy(Techant[nb_echant].module,nom_fic);
							index=index+2;
  							nb_echant++;
							goto fin;
						 } else if(buff[index+1]=='>')
						  {
#ifdef TESTLEX
							printf(" >> [%d] ",nb_echant);
#endif
							Techant[nb_echant].type_lexeme=LSHR;
							strcpy(Techant[nb_echant].lexeme,">>");
							Techant[nb_echant].num_ligne=ligne_lu;
							strcpy(Techant[nb_echant].module,nom_fic);
							index=index+2;
  							nb_echant++;
							goto fin;
						  }
						else
						 {
#ifdef TESTLEX
							printf(" > [%d] ",nb_echant);
#endif
							Techant[nb_echant].type_lexeme=LCOMPSUP;
							strcpy(Techant[nb_echant].lexeme,">");
							Techant[nb_echant].num_ligne=ligne_lu;
							strcpy(Techant[nb_echant].module,nom_fic);
							index++;
  							nb_echant++;
							goto fin;
						 }
				   }

/* COMPNON     39 /* ! */


/* LEG         31 /* = */
/* LCOMPEG     20 /* == */


				if(buff[index]=='=')
					{
						if(buff[index+1]=='=')
						 {
#ifdef TESTLEX
							printf(" == [%d] ",nb_echant);
#endif
							Techant[nb_echant].type_lexeme=LCOMPEG;
							strcpy(Techant[nb_echant].lexeme,"==");
							Techant[nb_echant].num_ligne=ligne_lu;
							strcpy(Techant[nb_echant].module,nom_fic);
							index=index+2;
  							nb_echant++;
							goto fin;
						}
						else
						{
#ifdef TESTLEX
							printf(" = [%d] ",nb_echant);
#endif
							Techant[nb_echant].type_lexeme=LEG;
							strcpy(Techant[nb_echant].lexeme,"=");
							Techant[nb_echant].num_ligne=ligne_lu;
							strcpy(Techant[nb_echant].module,nom_fic);
							index++;
  							nb_echant++;
							goto fin;
						}
				   }

/* LET         35 /* & */
/* LCOMPET     37 /* && */


				if(buff[index]=='&')
					{
						if(buff[index+1]=='&')
						 {
#ifdef TESTLEX
							printf(" && [%d] ",nb_echant);
#endif
							Techant[nb_echant].type_lexeme=LCOMPET;
							strcpy(Techant[nb_echant].lexeme,"&&");
							Techant[nb_echant].num_ligne=ligne_lu;
							strcpy(Techant[nb_echant].module,nom_fic);
							index=index+2;
  							nb_echant++;
							goto fin;
						}
						else
						{
#ifdef TESTLEX
							printf(" & [%d] ",nb_echant);
#endif
							Techant[nb_echant].type_lexeme=LET;
							strcpy(Techant[nb_echant].lexeme,"&");
							Techant[nb_echant].num_ligne=ligne_lu;
							strcpy(Techant[nb_echant].module,nom_fic);
							index++;
  							nb_echant++;
							goto fin;
						}
				   }

/* LOU         36 /* | */
/* LCOMPOU     38 /* || */


				if(buff[index]=='|')
					{
						if(buff[index+1]=='|')
						 {
#ifdef TESTLEX
							printf(" || [%d] ",nb_echant);
#endif
							Techant[nb_echant].type_lexeme=LCOMPOU;
							strcpy(Techant[nb_echant].lexeme,"||");
							Techant[nb_echant].num_ligne=ligne_lu;
							strcpy(Techant[nb_echant].module,nom_fic);
							index=index+2;
  							nb_echant++;
							goto fin;
						}
						else
						{
#ifdef TESTLEX
							printf(" | [%d] ",nb_echant);
#endif
							Techant[nb_echant].type_lexeme=LOU;
							strcpy(Techant[nb_echant].lexeme,"|");
							Techant[nb_echant].num_ligne=ligne_lu;
							strcpy(Techant[nb_echant].module,nom_fic);
							index++;
  							nb_echant++;
							goto fin;
						}
				   }

/* LCOMPDIFF     39 /* != */
/* LNON        39 /* ! */


				if(buff[index]=='!')
					{
						if(buff[index+1]=='=')
						 {
#ifdef TESTLEX
							printf(" != [%d] ",nb_echant);
#endif
							Techant[nb_echant].type_lexeme=LCOMPDIFF;
							strcpy(Techant[nb_echant].lexeme,"!=");
							Techant[nb_echant].num_ligne=ligne_lu;
							strcpy(Techant[nb_echant].module,nom_fic);
							index=index+2;
  							nb_echant++;
							goto fin;
						}
						else
						{
#ifdef TESTLEX
							printf(" ! [%d] ",nb_echant);
#endif
							Techant[nb_echant].type_lexeme=LNON;
							strcpy(Techant[nb_echant].lexeme,"!");
							Techant[nb_echant].num_ligne=ligne_lu;
							strcpy(Techant[nb_echant].module,nom_fic);
							index++;
  							nb_echant++;
							goto fin;
						}
				   }


/* LMUL        14 /* * */

				if(buff[index]=='*')
					{
#ifdef TESTLEX
						printf(" * [%d] ",nb_echant);
#endif
						Techant[nb_echant].type_lexeme=LMUL;
						strcpy(Techant[nb_echant].lexeme,"*");
						Techant[nb_echant].num_ligne=ligne_lu;
						strcpy(Techant[nb_echant].module,nom_fic);
  						nb_echant++;
					    index++;
						goto fin;
					}


/* LDIV        15 /* / */


				if(buff[index]=='/')
					{
#ifdef TESTLEX
						printf(" / [%d] ",nb_echant);
#endif
						Techant[nb_echant].type_lexeme=LDIV;
						strcpy(Techant[nb_echant].lexeme,"/");
						Techant[nb_echant].num_ligne=ligne_lu;
						strcpy(Techant[nb_echant].module,nom_fic);
  						nb_echant++;
					    index++;
						goto fin;
					}

/* LOP         32 /* ( */

				if(buff[index]=='(')
					{
#ifdef TESTLEX
						printf(" ( [%d] ",nb_echant);
#endif
						Techant[nb_echant].type_lexeme=LOP;
						strcpy(Techant[nb_echant].lexeme,"(");
						Techant[nb_echant].num_ligne=ligne_lu;
						strcpy(Techant[nb_echant].module,nom_fic);
  						nb_echant++;
					    index++;
						goto fin;
					}

/* LCL         33 /* ) */


				if(buff[index]==')')
					{
#ifdef TESTLEX
						printf(" ) [%d] ",nb_echant);
#endif
						Techant[nb_echant].type_lexeme=LCL;
						strcpy(Techant[nb_echant].lexeme,")");
						Techant[nb_echant].num_ligne=ligne_lu;
						strcpy(Techant[nb_echant].module,nom_fic);
  						nb_echant++;
					    index++;
						goto fin;
					}

/* LDP         34  /* : */


				if(buff[index]==':')
					{
#ifdef TESTLEX
						printf(" : [%d] ",nb_echant);
#endif
						Techant[nb_echant].type_lexeme=LDP;
						strcpy(Techant[nb_echant].lexeme,":");
						Techant[nb_echant].num_ligne=ligne_lu;
						strcpy(Techant[nb_echant].module,nom_fic);
  						nb_echant++;
					    index++;
						goto fin;
					}

/* LCROP       41 /*[*/

				if(buff[index]=='[')
					{
#ifdef TESTLEX
						printf(" [ [%d] ",nb_echant);
#endif
						Techant[nb_echant].type_lexeme=LCROP;
						strcpy(Techant[nb_echant].lexeme,"[");
						Techant[nb_echant].num_ligne=ligne_lu;
						strcpy(Techant[nb_echant].module,nom_fic);
  						nb_echant++;
					    index++;
						goto fin;
					}

/* LCRCL       42 /* ] */


				if(buff[index]==']')
					{
#ifdef TESTLEX
						printf(" ] [%d] ",nb_echant);
#endif
						Techant[nb_echant].type_lexeme=LCRCL;
						strcpy(Techant[nb_echant].lexeme,"]");
						Techant[nb_echant].num_ligne=ligne_lu;
						strcpy(Techant[nb_echant].module,nom_fic);
  						nb_echant++;
					    index++;
						goto fin;
					}

/* LPOINT      47  /* . */


				if(buff[index]=='.')
					{
#ifdef TESTLEX
						printf(" . [%d] ",nb_echant);
#endif
						Techant[nb_echant].type_lexeme=LPOINT;
						strcpy(Techant[nb_echant].lexeme,".");
						Techant[nb_echant].num_ligne=ligne_lu;
						strcpy(Techant[nb_echant].module,nom_fic);
  						nb_echant++;
					    index++;
						goto fin;
					}



/* LCHIFFREENT 43 /* 123 */
/* LCHIFFRREEL 44 /*123.52 */


				if((buff[index]>='0')&&(buff[index]<='9'))
					{
						char chaine_tempo[1000];
						int k;

						k=0;


						/* cas binaire */
						if((buff[index]=='0')&&(buff[index+1]=='b'))
							{
								chaine_tempo[k]=buff[index];
								k++;index++;
								chaine_tempo[k]=buff[index];
								k++;index++;
								for(;((buff[index]=='0')||(buff[index]<='1'));)
									{
										chaine_tempo[k]=buff[index];
										k++;index++;
									}
								chaine_tempo[k]='\0';
#ifdef TESTLEX
						printf(" %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LCHIFFREENT;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}
						else
						/* cas hexadecimal */
						if((buff[index]=='0')&&(buff[index+1]=='x'))
							{
								chaine_tempo[k]=buff[index];
								k++;index++;
								chaine_tempo[k]=buff[index];
								k++;index++;
								for(;((buff[index]>='0')&&(buff[index]<='9')||
									  (buff[index]>='a')&&(buff[index]<='f')||
								  	  (buff[index]>='A')&&(buff[index]<='F'))
									;)
									{
										chaine_tempo[k]=buff[index];
										k++;index++;
									}
								chaine_tempo[k]='\0';
#ifdef TESTLEX
						printf(" %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LCHIFFREENT;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}
						else
						{

						for(;(buff[index]>='0')&&(buff[index]<='9');)
							{
								chaine_tempo[k]=buff[index];
								k++;index++;
							}

					    if(buff[index]=='.')
							{
								int l;
							    l=0;

								chaine_tempo[k]=buff[index];
								k++;index++;

								for(;(buff[index]>='0')&&(buff[index]<='9');)
									{
										chaine_tempo[k]=buff[index];
										k++;index++;l++;
									}
								if(l==0)
								  {
									  chaine_tempo[k]='\0';
									  printf("\n -------> module %s line %d :: [%s] :: %s",nom_fic,ligne_lu,LX0020,chaine_tempo);
									  printf("\n\n\n  Press a key to terminate");
									  for(;kbhit()==0;){}
									  exit(-1);
								  }

								chaine_tempo[k]='\0';

#ifdef TESTLEX
						printf(" %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LCHIFFRREEL;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
						    }
						else
						    {

								chaine_tempo[k]='\0';
#ifdef TESTLEX
						printf(" %s [%d] ",chaine_tempo,nb_echant);
#endif
									Techant[nb_echant].type_lexeme=LCHIFFREENT;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/
					  } /* reel ou entier */
					} /*if*/

/* CHAINE      9 /* chaine */

				if(buff[index]=='"')
					{
						char chaine_tempo[1000];
						int k;

						k=0;
						index++;
						for(;((buff[index]!='"')&&(buff[index]!='\0'));)
							{
								chaine_tempo[k]=buff[index];
								k++;index++;
							}
						if(k==0) /* bug à investiguer */
						 {
							  chaine_tempo[k]='\0';

							  printf("\n -------> module %s line %d :: [%s] :: %s",nom_fic,ligne_lu,LX0030,chaine_tempo);
							  printf("\n\n\n Press a key to terminate");
							  for(;kbhit()==0;){}

							  exit(-1);
						 }

						 if(buff[index]!='"')
						 {
							  chaine_tempo[k]='\0';

							  printf("\n -------> module %s line %d :: [%s] :: %s",nom_fic,ligne_lu,LX0040,chaine_tempo);
							  printf("\n\n\n Press a key to terminate");
							  for(;kbhit()==0;){}

							  exit(-1);
						 }

						chaine_tempo[k]='\0';

#ifdef TESTLEX
						printf(" %s [%d] ",chaine_tempo,nb_echant);
#endif
						Techant[nb_echant].type_lexeme=CHAINE;
						strcpy(Techant[nb_echant].lexeme,chaine_tempo);
						Techant[nb_echant].num_ligne=ligne_lu;
						strcpy(Techant[nb_echant].module,nom_fic);
  						nb_echant++;
						index++;
						goto fin;
					}

/* LIF         21 /* if */
/* LELSE		22 /* else */
/* LRETURN     23 /* return */
/* LCONTINUE   27 /* continue */
/* LBREAK      28 /* break */
/* LSWITCH     29 /* switch */
/* LCASE       30 /* case */
/* LSTRUCT     48 /* struct */
/* LEXIT       49 /* exit */
/* LVOID       50 /* LVOID */
/* LFOR        2 /* for */
/* LWHILE      3 /* while */
/* LDO         4 /* do */
/* LTASK       5 /* task */
/* LSUBROUTINE 6 /* subroutine */
/* LIDENT      7 /*identifier */
/* LENTIER     8 /* int */
/* LCHAR       24 /* char */
/* OCTET       26 /*byte */
/* LFLOTTANT   25 /* float */



				if(	((buff[index]>='a')&&(buff[index]<='z')) ||
					((buff[index]>='A')&&(buff[index]<='Z'))
				  )
					{
						char chaine_tempo[1000];
						int k;

						k=0;
						for(;(
						     ((buff[index]>='a')&&(buff[index]<='z')) ||
							 ((buff[index]>='A')&&(buff[index]<='Z')) ||
						     ((buff[index]>='0')&&(buff[index]<='9')) ||
						      (buff[index]=='_'))
						    ;)
							{
								chaine_tempo[k]=buff[index];
								k++;index++;
							}

						chaine_tempo[k]='\0';

/* LIF         21 /* if */

						if(strcmp("if",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" IF %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LIF;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LELSE		22 /* else */

						if(strcmp("else",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" ELSE %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LELSE;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LRETURN     23 /* return */

						if(strcmp("return",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf("RETURN %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LRETURN;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LCONTINUE   27 /* continue */

						if(strcmp("continue",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf("CONTINUE %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LCONTINUE;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LBREAK      28 /* break */

						if(strcmp("break",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf("BREAK %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LBREAK;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/


/* LGOTO      53 /* break */

						if(strcmp("goto",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf("GOTO %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LGOTO;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LSWITCH     29 /* switch */


						if(strcmp("switch",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" SWITCH %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LSWITCH;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LCASE       30 /* case */


						if(strcmp("case",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" CASE %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LCASE;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/


/* LDEFAULT       57 /* case */


						if(strcmp("default",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" DEFAULT %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LDEFAULT;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LSTRUCT     48 /* struct */

						if(strcmp("struct",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" STRUCT %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LSTRUCT;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LEXIT       49 /* exit */

						if(strcmp("exit",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" EXIT %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LEXIT;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LVOID       50 /* LVOID */


						if(strcmp("void",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" VOID %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LVOID;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LFOR        2 /* for */


						if(strcmp("for",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" FOR %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LFOR;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LWHILE      3 /* while */


						if(strcmp("while",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" WHILE %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LWHILE;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LDO         4 /* do */


						if(strcmp("do",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" DO %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LDO;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LTASK       5 /* task */


						if(strcmp("task",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" TASK %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LTASK;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LSUBROUTINE 6 /* subroutine */

						if(strcmp("subroutine",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" SUBROUTINE %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LSUBROUTINE;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/


/* LENTIER     8 /* int */

						if(strcmp("int",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" INT %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LENTIER;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/


/* LCHAR       24 /* char */


						if(strcmp("char",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" CHAR %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LCHAR;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LSCHAR      59 schar */

						if(strcmp("schar",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" SCHAR %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LSCHAR;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LSINT       60 sint */

						if(strcmp("sint",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" SINT %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LSINT;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LLONG       61 long */


						if(strcmp("long",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" LONG %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LLONG;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LSLONG      62 slong */


						if(strcmp("slong",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" SLONG %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LSLONG;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* OCTET       26 /*byte */


						if(strcmp("byte",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" BYTE %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=OCTET;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LFLOTTANT   25 /* float */


						if(strcmp("float",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" FLOAT  %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LFLOTTANT;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LSIZEOF     57 /* sizeof */


						if(strcmp("sizeof",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" SIZEOF  %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LSIZEOF;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LPRECEDES     65 /* precedes */


						if(strcmp("precedes",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" PRECEDES  %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LPRECEDES;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LMODIFY     66 /* mod */


						if(strcmp("mod",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" MOD  %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LMODIFY;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/


/* LINLINE     67 /* mod */


						if(strcmp("inline",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" INLINE  %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LINLINE;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/


/* LMUTEX     69 /* mutex */


						if(strcmp("mutex",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" MUTEX  %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LMUTEX;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/


/* LACQUIRE     70 /* acquire */


						if(strcmp("acquire",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" ACQUIRE  %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LACQUIRE;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/


/* LRELEASE     71 /* release */


						if(strcmp("release",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" RELEASE  %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LRELEASE;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/



/* LARRSIZE	72 /* arrsize */

						if(strcmp("arrsize",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" ARRSIZE  %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LARRSIZE;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/

/* LARRINIT	73 /* arrinit */

						if(strcmp("arrinit",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" ARRINIT  %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LARRINIT;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/


/* LARRSUBSET	74 /* arrsubset */

						if(strcmp("arrsubset",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" LARRSUBSET  %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LARRSUBSET;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/


/*  LARRBUILD	75 /* arrbuild */

						if(strcmp("arrbuild",chaine_tempo)==0)
						   {
#ifdef TESTLEX
						printf(" LARRBUILD  %s [%d] ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LARRBUILD;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/



/* traitement des defines */

						{
							char *definition;

							definition=recherche_define(chaine_tempo);

							if(definition!=NULL)
								{
									char buff_tempo[1000];
#ifdef TESTLEX
									printf("\n Define '%s' detecte dans buffer '%s' a remplacer par '%s' car = '%c' index=%d",
										chaine_tempo,
										buff,
										definition,
										buff[index],
										index);
#endif
									strcpy(buff_tempo,buff);
									buff_tempo[index-strlen(chaine_tempo)]='\0';

									sprintf(buff,"%s%s%s",buff_tempo,definition,&buff[index]);

									index=index-strlen(chaine_tempo);
#ifdef TESTLEX
									printf("\n expanse '%s' car = '%c' car suiv = '%c' index=%d ligne %d ",buff,buff[index],buff[index+1],index,ligne_lu);
#endif

									goto debut_analyse;
								}

					    }


/* LIDENT      7 /*identifier */

						   {
#ifdef TESTLEX
						printf("\n IDENTIFIER %s [%d]\n ",chaine_tempo,nb_echant);
#endif
								Techant[nb_echant].type_lexeme=LIDENT;
								strcpy(Techant[nb_echant].lexeme,chaine_tempo);
								Techant[nb_echant].num_ligne=ligne_lu;
								strcpy(Techant[nb_echant].module,nom_fic);
  								nb_echant++;
								goto fin;
							}/*if*/


				} /*if*/

fin:
				if((sav_index==nb_echant)&&(buff[index]>0x20))
					{
						printf("\n -------> module %s line %d :: [%s] :: %s",nom_fic,ligne_lu,LX0050,buff);
						printf("\n\n\n Press a key to terminate");
						for(;kbhit()==0;){}

						exit(-1);
					}

            } /*for */
    } /*for */

 }

/******************************************************/
/* ajout d'un define                                  */
/******************************************************/

int ajout_define(char *ident,char *module,int ligne, char  *definition)
 {
	 	int i;

		for(i=0;i<nb_define;i++)
			{
				if(strcmp(ident,tab_define[i].ident)==0) break;
			}

	 	if(i==nb_define)
			{
				strcpy(tab_define[nb_define].ident,ident);
				strcpy(tab_define[nb_define].module,module);
				tab_define[nb_define].ligne=ligne;
				tab_define[nb_define].definition=(char * )malloc(strlen(definition)+1);
				strcpy(tab_define[nb_define].definition,definition);

				return(nb_define++);
			}
		else
			{
				printf("\n -------> module %s line %d ::",nom_fic,ligne_lu);
				printf(LX0060,
					module,ligne,ident,module,
					tab_define[i].module,tab_define[i].ligne,tab_define[i].ident,tab_define[i].definition);

				for(;kbhit()==0;){}
				exit(-1);
				return(-1);

			}

 }

/*****************************************************/
/* recherche d'un define                             */
/*****************************************************/

char * recherche_define(char *ident)
 {
	int i;

	for(i=0;i<nb_define;i++)
			{
				if(strcmp(ident,tab_define[i].ident)==0) break;
			}

   	if(i==nb_define)
		return(NULL);
	else
		return(tab_define[i].definition);
 }

/******************************************************/
/* analyse du fichier ligne à ligne                   */
/******************************************************/

void analyse_fichier_ligne_a_ligne_define(char *nom_fic)
 {
	int code=0;
	int i=0;
	int lg;
	char buff[1000];
	char hdeb[30];
	char *deb_buff;
	int index,sav_index;
	int dernier;
	int commentaire;
	int max_lg;

	dernier=-1;
	commentaire=0;

	for(;;)
		{
			code=lire_ligne_conf(buffer_courant);
			if(code==-1) break;

#ifdef TEST
			printf("\n %s",buffer_courant);
#endif
/*#define TESTLEX*/

			strcpy(buff,buffer_courant);

			/*printf(" %c %d ",0xd,ligne_lu);*/

			max_lg=strlen(buff);

			/* analyse lexicale */

			index=0;

			for(;;)
			  {
				if(buff[index]=='\0') break;

				/* vire les commentaires, les car inf à code ASCII 32 et sort si buffer vidé */
				for(;;)
				  {
					if(buff[index]=='\0') break;
#ifdef TESTLEX
					printf(" [%c] ",buff[index]);
#endif

					if(commentaire==1)
						{
							if((buff[index]=='*')&&(buff[index+1]=='/'))
								{
										commentaire=0;
										index=index+2;
										break;
							    }
							else
								{
									index++;
									continue;
								} /*if */
					    }/*if*/

					if((buff[index]=='/')&&(buff[index+1]=='*'))
						{

								commentaire=1;
								index=index+2;
								continue;
				   	    }

					if(buff[index]<=0x20)
						{
								index++;
								continue;
					    }

					/*intf("ici");*/

					break;

				  } /*for vire commentaire  */
			    /* il y a un lexeme */
				sav_index=nb_echant;

				if(buff[index]=='\0') goto fin;

				if(buff[index]!='#')
					{
						index=max_lg;
						goto fin;
					}
				else
				    {
						/* y-a-t-il le mot clef define ? */
						char *deb,*fin;

						index++;

						deb=&buff[index];

						for(;;)
							{
								if(buff[index]=='\0') break;

								if((buff[index]>='a')&&(buff[index]<='z'))
								    index++;
								else  break;
							}

						if(buff[index]=='\0') index=max_lg;
						else
							{
								char buff_tamp[1000];

								strcpy(buff_tamp,deb);
								buff_tamp[&buff[index]-deb]='\0';
#ifdef TESTLEX
								printf("\n 1 [%s] ",buff_tamp);
#endif
								if(strcmp("define",buff_tamp)==0)
									{
										/* on consomme entre define est ident */
#ifdef TESTLEX
										printf("\n 2 C'est un define ");
#endif
										    for(;;)
												{
													if(buff[index]=='\0') break;

													if(buff[index]<=0x20)
														index++;
													else break;
												}
#ifdef TESTLEX
											printf("\n 3 position [%s] ",&buff[index]);
#endif
											if(buff[index]=='\0') index=max_lg;
											else
												{
													deb=&buff[index];
#ifdef TESTLEX
													printf("\n 4 [%s] ",deb);
#endif
													for(;;)
													 {
														if(buff[index]=='\0') break;

														if( ((buff[index]>='A')&&(buff[index]<='Z')) ||
													   		 ((buff[index]>='0')&&(buff[index]<='9')) ||
													   		 (buff[index]=='_')
													 		 ) index++;
														else  break;
													 }

													if(buff[index]=='\0') index=max_lg;
													else
													 {
														strcpy(buff_tamp,deb);
														buff_tamp[&buff[index]-deb]='\0';
														fin=&buff[index];

														/* bug a traiter : supprimer les commentaires */


														fin[strlen(fin)-1]='\0';
#ifdef TESTLEX
														printf("\n #%d identifier=[%s] = [%s]",ligne_lu,buff_tamp,fin);
#endif
														/* ajout d'un define */

													    ajout_define(buff_tamp,nom_fic,ligne_lu,fin);

														index=max_lg;
													 }
											 }
									}
								else index=max_lg;
							}
				    }
fin:
				if((sav_index==nb_echant)&&(buff[index]>0x20))
					{
						printf("\n -------> module %s line %d :: [%s] :: %s",nom_fic,ligne_lu,LX0070,buff);
						printf("\n\n\n  Press a key to terminate");
						for(;kbhit()==0;){}

						exit(-1);
					}

            } /*for */
    } /*for */

 }



/*************************************************/
/* ouverture du fichier et analyse ligne à ligne */
/*************************************************/
void lecture_donnees(char *nom_fic)
 {
	long v;

	file_conf=fopen(nom_fic,"r");

    if(file_conf==(FILE *)NULL)
     {
		printf(LX0080,nom_fic);
		for(;kbhit()==0;){}
		exit(-1);
     }

	analyse_fichier_ligne_a_ligne(nom_fic);

	fclose(file_conf);

 }


/*************************************************/
/* ouverture du fichier et analyse ligne à ligne */
/* analyse des defines                           */
/*************************************************/
void lecture_donnees_define(char *nom_fic)
 {
	long v;

	file_conf=fopen(nom_fic,"r");

    if(file_conf==(FILE *)NULL)
     {
		printf(LX0090,nom_fic);
		for(;kbhit()==0;){}
		exit(-1);
     }

	analyse_fichier_ligne_a_ligne_define(nom_fic);

	fclose(file_conf);

 }


/****************/
/* lit un token */
/****************/

int lire_token(void)
 {
	 if (index_lexeme==nb_echant) return(-1);

	 type_token=Techant[index_lexeme].type_lexeme;
	 strcpy(token,Techant[index_lexeme].lexeme);
	 ligne_courante=Techant[index_lexeme].num_ligne;
	 strcpy(module,Techant[index_lexeme].module);

	 /*printf("\n%d '%s'",ligne_courante,token);*/

	 return(Techant[index_lexeme++].num_ligne);
 }

/***********************************/
/* repositionne au token precedent */
/***********************************/

int retour_arriere(void)
 {
	 index_lexeme--;
	 type_token=Techant[index_lexeme].type_lexeme;
	 strcpy(token,Techant[index_lexeme].lexeme);
	 ligne_courante=Techant[index_lexeme].num_ligne;
	 strcpy(module,Techant[index_lexeme].module);

	  /*printf("\n retour arriere %d '%s'",ligne_courante,token);*/

	 return(Techant[index_lexeme].num_ligne);
 }

/*******************************/
/* analyse lexicale du fichier */
/*******************************/

void analyse_lexicale(char *choix)
 {
	 lecture_donnees(choix);
 }


/*******************************/
/* analyse lexicale du fichier */
/* recherche des defines       */
/*******************************/
void analyse_lexicale_define(char *choix)
 {
	 lecture_donnees_define(choix);
 }

