FCode (p4_dot_chain)
{
    register const p4char* nfa;
    register Link* link = (void*) FX_POP; 
    if (! link->next) { p4_outs ("Empty"); return; }
    FX (p4_cr);
    FX (p4_start_Q_cr);
    while ((link = link->next))
    {
# if defined PFE_CALL_THREADING
        { 
            nfa = p4_dladdr (link->exec, 0);
            if (! nfa) { p4_outf ("%8p: %08p     (???)", link, link->exec); }
            else { p4_outf ("%8p: %08p     %s", link, link->exec, nfa); }
        }
# else 
        if ((void*)(link->exec) == (void*) (&(link->exec) + 1)) 
        {
            nfa = p4_dladdr (link->exec, 0);
            if (! nfa) { p4_outf ("%8p: %08p     (???)", link, link->exec); }
            else { p4_outf ("%8p: %08p     %s", link, link->exec, nfa); }
        }else{
            nfa = p4_addr_to_name ((void*) link->exec);
            if (! nfa) { p4_outf ("%8p: %08p     (???)", link, link->exec); }
            else 
            {
                register p4xt xt = p4_name_from (nfa);
                if (xt == link->exec) 
                    p4_outf ("%8p: %08p %.*s", link, link->exec, 
                             NFACNT(*nfa), nfa+1);
                else
                    p4_outf ("%8p, %08p %.*s [%+i]", link, link->exec, 
                             NFACNT(*nfa), nfa+1, xt - link->exec);
            }
        }
# endif
        if (p4_Q_cr ()) 
            break;
    }
} |