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;