next up previous contents
Next: Multifenétrage textuel Up: Implémentation du simulateur de Previous: Affichage du dialogue

Outils de trace

/*****************************************************************************/
/*                                                                           */
/* Execution pas a pas du dialogue                                           */
/*                                                                           */
/*****************************************************************************/

:-module(pasapas,
    [
        pas_a_pas/0
    ]
).

pas_a_pas:-
    (   ifdef(trace)
    ->  (   user:coups([COUP|_])
        ->  writef("Coup precedent : %t\n",[COUP])
        ;   writef("Debut du dialogue.\n")
        ),
        repeat,
            writef("Trace : "),
            get_single_char(C),
            (   C\=32, C\=13, C\=10
            ->  exec(C),
                fail
            ;   writef("Suite...\n")
            )
    ;   true
    ),
    !.

exec(0'h):-
    !,
    writef("Aide\n"),
    writef("espace : continuer\n"),
    writef("     h : aide\n"),
    writef("     c : modifier le dernier coup\n"),
    writef("     t : trace prolog\n"),
    writef("     a : abort\n"),
    writef("     x : exit\n").
 
exec(0'c):-
    !,
    (   retract(user:coups([_|COUPS]))
    ->  writef("Modifier le dernier coup\n"),
        writef("Entrez le nouvel coup : "), read(0,COUP),
        assert(user:coups([COUP|COUPS]))
    ;   writef("Debut du dialogue\n")
    ).
 
exec(0't):-
    !,
    trace.

exec(0'x):-
    !,
    abort.
 
exec(0'a):-
    !,
    abort.
 
exec(_):-
    writef("Tapez h pour l'aide\n").



Christophe Delord
1998-09-02