void draw_automaton(Automaton* a){ int state, arc; FILE *fic; int local_xfig = 0; /* mettre à 1 pour utiliser la version de xdot locale */ if(a == NULL) return; fic = fopen(".tmp", "w"); if (fic == NULL){ fprintf(stderr, "impossible d'ouvrir le fichier .tmp\n"); return; } 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 < a->num_states; state++) for(arc = 0; arc < a->states[state].num_arcs; arc++) fprintf(fic, "%d -> %d [label=\"%d\"];\n", state, a->states[state].arcs[arc].destination, a->states[state].arcs[arc].symbol) ; for(state = 0; state < a->num_states; state++) if(a->states[state].is_final == TRUE) if (state == a->initial_state) fprintf(fic, "%d [shape=doublecircle style=bold];\n", state); else fprintf(fic, "%d [shape=doublecircle style=solid];\n", state); if(a->states[a->initial_state].is_final == FALSE) fprintf(fic, "%d [shape=circle style=bold];\n", a->initial_state); fprintf(fic, "}\n"); if(fic != stdout) fclose(fic); if(local_xfig) system("./xdot .tmp &"); else system("dot .tmp | xdot - &"); }