/*****************************************************************************/ /* */ /* Interface avec le simulateur */ /* */ /*****************************************************************************/ :-use_module([define,decls,tools,dialogue,compil]). :-undefine(afficher_rapport). :-redefine(afficher_nouveaux). :-undefine(debug_window). :-redefine(trace). :-dynamic fichier/1. state:- user:agents(X,_), writef("\n********* %t\n",[X]), clause(X:state(X,_,_,_,_,_,E),flag(_,_,_)), numbervars(E,0,_), writef("%t\n",[E]), fail ; true. main:- retractall(fichier(_)), sim. main(FICHIER):- retractall(fichier(_)), assertz(fichier(FICHIER)), sim. /*****************************************************************************/ /* */ /* Menu principal */ /* */ /*****************************************************************************/ sim:- reinit, repeat, once(fichier(FICHIER);FICHIER=''), menu("Simulation de dialogue : Menu principal", [ "r" : "Remise a zero" : reinit, "f" : ("Fichier (%t)",[FICHIER]) : fichier, "e" : "Editer" : editer, "c" : "Compiler" : compiler, "s" : "Simuler" : simuler, "o" : "Options" : options, "q" : "Quitter" : (QUITTER=oui) ], "==> " ), QUITTER==oui. /*****************************************************************************/ /* */ /* Choix du fichier de description */ /* */ /*****************************************************************************/ fichier:- writef("Nom du fichier principal de la description du dialogue : "), readln(FICHIER), !, ( FICHIER='' ; retractall(fichier(_)), asserta(fichier(FICHIER)) ). /*****************************************************************************/ /* */ /* Edition du fichier */ /* */ /*****************************************************************************/ editer:- ( fichier(FICHIER) -> vi(FICHIER) ; writef("Vous devez d'abord definir un fichier !\n") ). vi(FICHIER):- concat('vi ',FICHIER,VI), shell(VI,STATUS), ( STATUS==0 ; writef("Impossible d'executer la commande %t\n",[VI]) ), !. /*****************************************************************************/ /* */ /* Compilation */ /* */ /*****************************************************************************/ compiler:- ( fichier(FICHIER) -> analyser(FICHIER) ; writef("Vous devez d'abord definir un fichier !\n") ). /*****************************************************************************/ /* */ /* Simulation */ /* */ /*****************************************************************************/ simuler:- ( agents(BILL,JOHN) -> writef("Dialogue entre %t et %t\n\n",[BILL,JOHN]), dialoguer ; writef("Vous devez specifier les agents du dialogue !\n") ). /*****************************************************************************/ /* */ /* Menu des options */ /* */ /*****************************************************************************/ options:- repeat, once((ifdef(afficher_nouveaux),NOUV="oui";NOUV="non")), once((ifdef(afficher_rapport),ETAPE="oui";ETAPE="non")), once((ifdef(trace),TRACE="oui";TRACE="non")), once((ifdef(debug_window),DEBUG="oui";DEBUG="non")), menu("Simulation de dialogue : Menu des options", [ "n" : ("Afficher les nouveaux etats : %s",[NOUV]) : switch(afficher_nouveaux), "e" : ("Afficher chaque etape : %s",[ETAPE]) : switch(afficher_rapport), "t" : ("Trace : %s",[TRACE]) : switch(trace), "d" : ("Fenetre Debug : %s",[DEBUG]) : switch(debug_window), "c" : "Continuer" : (QUITTER=oui) ], "==> " ), QUITTER==oui. /*****************************************************************************/ /* */ /* (Des)Activation d'un define */ /* */ /*****************************************************************************/ switch(DEF):- ( ifdef(DEF) -> undefine(DEF) ; define(DEF) ).