//Pass the task structure you
//wish to spy upon.

U0 SpyStackRep(CTask *task)
{
    CDoc *doc = DocDblBufStart;

    while (!CharScan && TaskValidate(task))
    {
        StackRep(task);
        '\n';
        "$BK,1$PRESS A KEY$BK,0$\n";
        DocDblBufSwap;
        Refresh;
    }
    if (DocPut == doc)
        DocDblBufSwap;
    DocDblBufEnd;
}

U0 SpyCallerRep(CTask *task)
{
    CDoc *doc = DocDblBufStart;

    while (!CharScan && TaskValidate(task))
    {
        CallerRep(task->rbp,task);
        '\n';
        "$BK,1$PRESS A KEY$BK,0$\n";
        DocDblBufSwap;
        Refresh;
    }
    if (DocPut == doc)
        DocDblBufSwap;
    DocDblBufEnd;
}

U0 Spy()
{
    I64     i;
    CTask  *task;

    while (TRUE)
    {
        task = Fs->next_task;
        while (task != Fs)
        {
            "$MA+X,T=\"Task:%08X:%16ts\",LM=\"0x%08X\n\"$\n", task, task->task_name, task;
            task = task->next_task;
        }
        '\n';
        task = I64Get("Task Addr: ", 0);
        if (TaskValidate(task))
        {
            "\n\n\t$BT,\"StackRep\",LM=\"1\n\"$\n\n\n"
            "\n\n\t$BT,\"CallerRep\",LM=\"2\n\"$\n\n\n";
            i = I64Get("", 0);
            if (i == 1)
                SpyStackRep(task);
            else if (i == 2)
                SpyCallerRep(task);
            else
                break;
        }
        else
            break;
    }
    '\n';
}

Spy;