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

U0 SpyStkRep(CTask *task)
{
  CDoc *doc=DocDblBufStart;
  while (!ScanChar && TaskValidate(task)) {
    StkRep(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 (!ScanChar && 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=GetI64("Task Addr: ",0);
    if (TaskValidate(task)) {
      "\n\n\t$BT,\"StkRep\",LM=\"1\n\"$\n\n\n"
            "\n\n\t$BT,\"CallerRep\",LM=\"2\n\"$\n\n\n";
      i=GetI64("",0);
      if (i==1)
        SpyStkRep(task);
      else if (i==2)
        SpyCallerRep(task);
      else
        break;
    } else
      break;
  }
  '\n';
}

Spy;