next up previous contents
Next: Références Up: Implémentation du simulateur de Previous: Multifenétrage textuel

Programme principal


/*****************************************************************************/
/*                                                                           */
/* 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)
    ).



Christophe Delord
1998-09-02