/****************************************************************************/
/*                                                                          */
/*                      Chaine de CAO & VLSI   Alliance                     */
/*                                                                          */
/*    Produit :  optimiseur de netlist                                      */
/*    Fichier :  no_menu.c                                                  */
/*                                                                          */
/*    (c) copyright 1991 Laboratoire MASI equipe CAO & VLSI                 */
/*    Tous droits reserves                                                  */
/*    Support : e-mail cao-vlsi@masi.ibp.fr                                 */
/*                                                                          */
/*    Auteur(s) :  L. Burgun                            le : 06/05/1992     */
/*                                                                          */
/*    Modifie par :                                     le : ../../....     */
/*    Modifie par :                                     le : ../../....     */
/*    Modifie par :                                     le : ../../....     */
/*                                                                          */
/****************************************************************************/

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include MUT_H
/*#include "mlo402.h"*/
#include LOG_H
#include "no_menu.h"
#include "titres.h"
#include "../syf/syf_auto.h"



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

---------------------------------------------------------------------------*/
int MENU( Titre, NbrOptions, ListOptions, relax )

	char *Titre;
	int   NbrOptions; 
	char *ListOptions[];
	int relax ;
	{
	char *debut = (char *) mbkalloc ( 2 * MaxString );
	char *milieu = (char *) mbkalloc ( 2 * MaxString );
	char *fin = (char *) mbkalloc ( 2 * MaxString );
	char  ListChoix[MaxString];
	char  Choix;
	int   NumOption;

	RazEcran;
        gotolc(2,2);
  printf("                      Chaine de CAO & VLSI   Alliance\n");
  printf("    ===========================================================\n");
  printf("    (c) copyright 1992 Laboratoire MASI equipe CAO & VLSI\n");
  printf("    All right reserved\n");
  printf("    Support : e-mail cao-vlsi@masi.ibp.fr\n");
  printf("    ===========================================================\n");
  if(relax)
	printf("	%s\n",RELAX_VERSION) ;
  printf("	%s\n",SYF_VERSION) ;
  printf("    WORK_LIB : %s\n\n\n",getenv("SL_FSM_LIB"));
  printf( "\t FUNCTION :  \t%s\n\n\n", Titre );
	
  debut[0] = '\0'; milieu[0] = '\0'; fin[0] = '\0';
	for( NumOption = 0; NumOption < NbrOptions; NumOption ++ )
		{
		if( sscanf( ListOptions[NumOption], "%[^<>] <%[A-Z_]> %[^<>]",
				debut, milieu, fin ) == 1 )
			printf( "   %s\n", debut );
		else
			{
			printf( "   %s<", debut );

			if( strcmp( milieu, "FILE_NAME" ) == 0 )
			   strcpy( milieu, FILE_NAME );
			printf( "%s", milieu );
			printf( "> %s\n", fin );
			};
		ListChoix[NumOption] = ListOptions[NumOption][1];
		debut[0] = '\0'; milieu[0] = '\0'; fin[0] = '\0';
		}
	ListChoix[NbrOptions] = '\0';
	mbkfree( (char *) debut );
	mbkfree( (char *) milieu );
	mbkfree( (char *) fin );


	do {
 	   gotolc( 24, 5 );
	   Choix = toupper( AuVol() );
	   }
	while( strchr( ListChoix, Choix ) == NULL && Choix == 'q');
	return( Choix );
	}


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

---------------------------------------------------------------------------*/
/* Le menu principal */

void PRINCIPAL (relax)
int relax ;

     {
     char  Choix;
	 pCircuit pC ;
	 char* titrePrincipal ;
	 int nbPrincipal, l ;
	 char **listPrincipal ;
	 char bidon[200] ;

	 if(relax)
		{
		titrePrincipal = TitrePrincipalRelax ;
		nbPrincipal = NbrPrincipalRelax ;
		listPrincipal = ListPrincipalRelax ;
		}
	 else
		{
		titrePrincipal = TitrePrincipal ;
		nbPrincipal = NbrPrincipal ;
		listPrincipal = ListPrincipal ;
		}
     do{
       switch ( Choix = MENU(titrePrincipal,nbPrincipal,listPrincipal, relax))
              {
              case '1' : 
	                     RazEcran;
                         gotolc(2,2);
                         system((char *)sprintf(bidon,"vi %s",FSM_FILE)); 
			 			 break;
              case '2' : 
	                     RazEcran;
                         gotolc(2,2);
						 if(!SYF_COMPILE)
							{
							printf("SYF : compilation du %s ....\n",FILE_NAME) ;
						 	pC = compile() ; 
							printf("SYF : Fin de compilation\n") ;
						 	SYF_COMPILE = 1 ;
							}
						else
							printf("SYF : Fichier deja compile'.\n") ;
                         AuVol();
			 			 break;
              case '3' : 
	                     RazEcran;
                         gotolc(2,2);
						 if(SYF_COMPILE)
							{
						 	printf("SYF : Synthese du %s ....\n",FILE_NAME) ;
							syf_cod(MUST,pC,0,0) ;
							l = strlen(autoSys->name) ;
							*(autoSys->name + l -1) = '\0' ;
							printf("SYF : Fin de la synthese\n") ;
							}
						else
							printf("SYF : Synthese impossible, fichier non compile'.\n") ;
                         AuVol();
                         break;
              case '4' : 
	                     RazEcran;
                         gotolc(2,2);
						 if(SYF_COMPILE)
							{
						 	printf("SYF : Synthese du %s ....\n",FILE_NAME) ;
						 	syf_cod(ASP,pC,0,0) ;
							l = strlen(autoSys->name) ;
							*(autoSys->name + l -1) = '\0' ;
						 	printf("SYF : Fin de la synthese\n") ;
							}
						else
							printf("SYF : Synthese impossible, fichier non compile'.\n") ;
                         AuVol();
                         break;
              case '5' : 
	                     RazEcran;
                         gotolc(2,2);
						 if(SYF_COMPILE)
							{
						 	printf("SYF : Synthese du %s ....\n",FILE_NAME) ;
						 	syf_cod(ALEA,pC,0,0) ;
							l = strlen(autoSys->name) ;
							*(autoSys->name + l -1) = '\0' ;
						 	printf("SYF : Fin de la synthese\n") ;
							}
						else
							printf("SYF : Synthese impossible, fichier non compile'.\n") ;
                         AuVol();
			             break;
              case '6' : 
	                     RazEcran;
                         gotolc(2,2);
						 if(SYF_COMPILE)
							{
						 	printf("SYF : Synthese du %s ....\n",FILE_NAME) ;
						 	syf_cod(FORC,pC,0,0) ;
							l = strlen(autoSys->name) ;
							*(autoSys->name + l -1) = '\0' ;
						 	printf("SYF : Fin de la synthese\n") ;
							}
						else
							printf("SYF : Synthese impossible, fichier non compile'.\n") ;
                         AuVol();
			             break;
              };
       }
     while ((Choix != '7') && (Choix != 'Q'));
     RazEcran;
	 if(relax)
		return ;
	 else
     	gotolc(1,1);
     }


