#help_index "DolDoc/Task;StdOut/Task" public CDoc *DocPut(CTask *task=NULL) {//Current document that StdOut Put() goes to. //Basically, StdOut unless double buffering. CDoc *res; if (!task) task = Fs; if (Bt(&task->task_flags, TASKf_INPUT_FILTER_TASK)) task = task->parent_task; if ((res = task->put_doc) && res->doc_signature == DOC_SIGNATURE_VAL) return res; else return NULL; } public CDoc *DocDisplay(CTask *task=NULL) {//StdOut displayed unless double buffering. CDoc *res; if (!task) task = Fs; if ((res = task->display_doc) && res->doc_signature == DOC_SIGNATURE_VAL) return res; else return NULL; } public CDoc *DocBorder(CTask *task=NULL) {//Doc holding border of window text. CDoc *res; if (!task) task = Fs; if ((res = task->border_doc) && res->doc_signature == DOC_SIGNATURE_VAL) return res; else return NULL; } public CDoc *DocDblBufStart(CTask *task=NULL) {//See ::/Demo/Spy.CC Bool unlock_ddoc; CDoc *pdoc = DocPut(task), *ddoc = DocDisplay(task), *res; if (!pdoc || !ddoc || pdoc != ddoc) res = NULL; //Already Double buffering else { if (!task) task = Fs; unlock_ddoc = DocLock(ddoc); //dont change during winupdate, so lock DocPut res = DocNew(,task); res->win_task = ddoc->win_task; res->max_entries = ddoc->max_entries; MemCopy(res->find_replace, ddoc->find_replace, sizeof(CEdFindText)); MemCopy(&res->filename, &ddoc->filename, sizeof(CEdFileName)); res->left_click_link = ddoc->left_click_link; res->right_click_link = ddoc->right_click_link; res->user_put_data = ddoc->user_put_data; res->user_put_key = ddoc->user_put_key; res->user_put_s = ddoc->user_put_s; res->parent_doc = ddoc->parent_doc; res->desc = ddoc->desc; res->user_data = ddoc->user_data; res->flags |= ddoc->flags & DOCG_DBL_BUF_FLAGS | DOCF_DONT_SHOW; task->put_doc = res; if (unlock_ddoc) DocUnlock(ddoc); } return res; } public Bool DocDblBufEnd(CTask *task=NULL) {//See ::/Demo/Spy.CC Bool res = FALSE; CDoc *pdoc = DocPut(task), *ddoc = DocDisplay(task); if (pdoc && ddoc && pdoc != ddoc) {//Double buffering? if (!task) task = Fs; ddoc->flags |= DOCF_DONT_SHOW; pdoc->flags &= ~DOCF_DONT_SHOW; DocLock(ddoc); task->display_doc = pdoc; DocUnlock(ddoc); DocDel(ddoc); res = TRUE; } return res; } public Bool DocDblBufSwap(CTask *task=NULL) {//See ::/Demo/Spy.CC Bool res = FALSE; CDoc *pdoc = DocPut(task), *ddoc = DocDisplay(task); if (pdoc && ddoc && pdoc != ddoc) {//Double buffering? if (!task) task = Fs; ddoc->flags |= DOCF_DONT_SHOW; pdoc->flags &= ~DOCF_DONT_SHOW; DocLock(ddoc); task->display_doc = pdoc; DocUnlock(ddoc); DocReset(ddoc, TRUE); MemCopy(ddoc->find_replace, pdoc->find_replace, sizeof(CEdFindText)); MemCopy(&ddoc->filename, &pdoc->filename, sizeof(CEdFileName)); ddoc->max_entries = pdoc->max_entries; ddoc->flags = pdoc->flags & DOCG_DBL_BUF_FLAGS | ddoc->flags & ~DOCG_DBL_BUF_FLAGS; ddoc->left_click_link = pdoc->left_click_link; ddoc->right_click_link = pdoc->right_click_link; ddoc->user_put_data = pdoc->user_put_data; ddoc->user_put_key = pdoc->user_put_key; ddoc->user_put_s = pdoc->user_put_s; ddoc->desc = pdoc->desc; ddoc->user_data = pdoc->user_data; task->put_doc = ddoc; res = TRUE; } return res; }