- Improved the .dot output format quite a bit.

This commit is contained in:
ccremers 2005-02-21 15:12:59 +00:00
parent aa70b19142
commit 5c90a5af29
3 changed files with 58 additions and 16 deletions

View File

@ -890,7 +890,11 @@ dotSemiState ()
} }
// Draw the first box // Draw the first box
// This used to be drawn only if done && send_before_read, now we always draw it. // This used to be drawn only if done && send_before_read, now we always draw it.
eprintf ("\t\ts%i [label=\"Run %i\\n", run, run); eprintf ("\t\ts%i [label=\"Run %i: ", run, run);
termPrint (sys->runs[run].protocol->nameterm);
eprintf (", ");
termPrint (sys->runs[run].role->nameterm);
eprintf ("\\n");
agentsOfRunPrint (sys, run); agentsOfRunPrint (sys, run);
eprintf ("\", shape=diamond];\n"); eprintf ("\", shape=diamond];\n");
eprintf ("\t\ts%i -> ", run); eprintf ("\t\ts%i -> ", run);

View File

@ -57,12 +57,19 @@ roledefPrintGeneric (Roledef rd, int print_actor)
//! Print label //! Print label
Term label; Term label;
/* Old version: sometimes prints protocol stuff (really unique labels)
label = deVar (rd->label); label = deVar (rd->label);
if (protocolCount < 2 && realTermTuple (label)) if (protocolCount < 2 && realTermTuple (label))
{ {
// Only one protocol, so we don't need to show the extra label info // Only one protocol, so we don't need to show the extra label info
label = TermOp2 (label); label = TermOp2 (label);
} }
*/
label = deVar(rd->label);
if (realTermTuple (label))
{
label = TermOp2 (label);
}
//! Print latex/normal //! Print latex/normal
if (globalLatex) if (globalLatex)

View File

@ -366,8 +366,14 @@ not_read_first (const Roledef rdstart, const Term t)
Term Term
agentOfRunRole (const System sys, const int run, const Term role) agentOfRunRole (const System sys, const int run, const Term role)
{ {
Termlist roles = sys->runs[run].protocol->rolenames; if (sys->engine != ARACHNE_ENGINE)
Termlist agents = sys->runs[run].agents; {
// Non-arachne
Termlist roles;
Termlist agents;
roles = sys->runs[run].protocol->rolenames;
agents = sys->runs[run].agents;
/* TODO stupid reversed order, lose that soon */ /* TODO stupid reversed order, lose that soon */
if (agents != NULL) if (agents != NULL)
@ -391,6 +397,31 @@ agentOfRunRole (const System sys, const int run, const Term role)
} }
return NULL; return NULL;
} }
else
{
// Arachne engine
Termlist agents;
// Agent variables have the same symbol as the role names, so
// we can scan for this.
agents = sys->runs[run].agents;
while (agents != NULL)
{
Term agent;
agent = agents->term;
if (TermSymb(role) == TermSymb(agent))
{
return agent;
}
else
{
agents = agents->next;
}
}
return NULL;
}
}
//! Yield the actor agent of a run in the system. //! Yield the actor agent of a run in the system.
/** /**