U8 *tSCB(CDoc *, CDocEntry *, CTask *mem_task)
{//This is called by the window mgr.
        //Things would get corrupted
        //if the window mgr used it's own
        //heap, so we use the owning task's heap.
        U8              *st = MAlloc(64, mem_task);
        CDate    cdt = tS * CDATE_FREQ;
        //Doesn't have to be fixed width!!
        StrPrint(st, "%d=%T", cdt, cdt);

        return st;
}

U8 *CurTimeCB(CDoc *, CDocEntry *, CTask *mem_task)
{
        U8 *st = MAlloc(64, mem_task);
        CDate cdt = Now;

        StrPrint(st, "%D %T", cdt, cdt);

        return st;
}

U0 DoIt()
{
        CDoc            *bdoc = DocBorder, *pdoc = DocPut;
        CDocEntry       *doc_e;

        DocLock(bdoc);
        DocBottom(bdoc);        //Ins at the bottom
        DocPrint(bdoc, "$RED$$CM+BY+LX,5,-3$");
        //The DocPrint() routine returns the addr of the last entry.
        doc_e = DocPrint(bdoc, "$TX+TC,\" \"$");
        //The TC flag is "has tag callback".

        //Flags are explained here:
        //::/Doc/DolDocOverview.DD              ::/Doc/Widget.DD
        //Dollar Flags                                  ST_DOC_FLAGS
        doc_e->tag_cb = &tSCB;
        DocPrint(bdoc, "$FG$");
        DocUnlock(bdoc);

        //WARNING: If you use the put_doc you
        //run the risk of the user pressing
        //<CTRL-t> or using the clip, both
        //of which will crash.                          So, you might want
        //to use the border_doc.

        DocLock(pdoc);
        DocPrint(pdoc, "$LTRED$");
        doc_e = DocPrint(pdoc, "$TX+TC,\" \"$");
        doc_e->tag_cb = &CurTimeCB;
        DocPrint(pdoc,"$FG$");
        DocUnlock(pdoc);

        //Send carriage return, new line, so
        //that the timer string is not part
        //of the next cmd on the cmd line.
        '\n';
}

U0 UndoIt()
{//Clear-out entries without a +H hold flag.
        DocClear(Fs->border_doc);
}

DoIt;