#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.HC 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; MemCpy(res->find_replace,ddoc->find_replace,sizeof(CEdFindText)); MemCpy(&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.HC 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.HC 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); DocRst(ddoc,TRUE); MemCpy(ddoc->find_replace,pdoc->find_replace,sizeof(CEdFindText)); MemCpy(&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; }