diff --git a/src/arachne.c b/src/arachne.c index 096c9ef..99a29a2 100644 --- a/src/arachne.c +++ b/src/arachne.c @@ -890,7 +890,11 @@ dotSemiState () } // Draw the first box // 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); eprintf ("\", shape=diamond];\n"); eprintf ("\t\ts%i -> ", run); diff --git a/src/role.c b/src/role.c index 6a8653c..3548621 100644 --- a/src/role.c +++ b/src/role.c @@ -57,12 +57,19 @@ roledefPrintGeneric (Roledef rd, int print_actor) //! Print label Term label; + /* Old version: sometimes prints protocol stuff (really unique labels) label = deVar (rd->label); if (protocolCount < 2 && realTermTuple (label)) { // Only one protocol, so we don't need to show the extra label info label = TermOp2 (label); } + */ + label = deVar(rd->label); + if (realTermTuple (label)) + { + label = TermOp2 (label); + } //! Print latex/normal if (globalLatex) diff --git a/src/system.c b/src/system.c index d9d00e6..127eeda 100644 --- a/src/system.c +++ b/src/system.c @@ -366,30 +366,61 @@ not_read_first (const Roledef rdstart, const Term t) Term agentOfRunRole (const System sys, const int run, const Term role) { - Termlist roles = sys->runs[run].protocol->rolenames; - Termlist agents = sys->runs[run].agents; - - /* TODO stupid reversed order, lose that soon */ - if (agents != NULL) + if (sys->engine != ARACHNE_ENGINE) { - agents = termlistForward (agents); - while (agents != NULL && roles != NULL) + // Non-arachne + Termlist roles; + Termlist agents; + + roles = sys->runs[run].protocol->rolenames; + agents = sys->runs[run].agents; + + /* TODO stupid reversed order, lose that soon */ + if (agents != NULL) { - if (isTermEqual (roles->term, role)) + agents = termlistForward (agents); + while (agents != NULL && roles != NULL) { - return agents->term; + if (isTermEqual (roles->term, role)) + { + return agents->term; + } + agents = agents->prev; + roles = roles->next; } - agents = agents->prev; - roles = roles->next; } + else + { + error + ("Agent list for run %i is empty, so agentOfRunRole is not usable.", + run); + } + return NULL; } else { - error - ("Agent list for run %i is empty, so agentOfRunRole is not usable.", - run); + // 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; } - return NULL; } //! Yield the actor agent of a run in the system.