#include #include #include "draw.h" #include "Automaton.h" int draw_automaton(Automaton *a){ int state, arc; FILE *fic; if(a == NULL){ return 1; } fic = fopen(".tmp", "w"); if (fic == NULL){ fprintf(stderr, "impossible d'ouvrir le fichier .tmp\n"); return 0; } fprintf(fic, "digraph fsm {\n"); fprintf(fic, "graph [margin=\"0,0\"];\n"); fprintf(fic, "node [shape = circle];\n"); fprintf(fic, "rankdir=LR;\n"); for(state = 0; state < get_num_states(a); state++) { for(arc = 0; arc < get_num_arcs(a, state); arc++){ fprintf(fic, "%d -> %d [label=\"%d\"];\n", state, get_destination(a, state, arc), get_symbol(a, state, arc)); } } for(state = 0; state < get_num_states(a); state++){ if(is_final(a, state)){ if (state == get_initial(a)) { fprintf(fic, "%d [shape=doublecircle style=bold];\n", state); } else { fprintf(fic, "%d [shape=doublecircle style=solid];\n", state); } } } if(! is_final(a, get_initial(a))){ fprintf(fic, "%d [shape=circle style=bold];\n", get_initial(a)); } fprintf(fic, "}\n"); if(fic != stdout){ fclose(fic); } if(system("dot .tmp | xdot - &") != 0) { fprintf(stderr, "impossible de dessiner l'automate"); return 0; } return 1; }