hschumann2/TempleOS-Source-Code
0847
1 2#help_index "DolDoc/Task;StdOut/Task"3public CDoc *DocPut(CTask *task=NULL)4{//Current document that StdOut Put() goes to.5//Basically, StdOut unless double buffering.6 CDoc *res;7 if (!task) task=Fs;8 if (Bt(&task->task_flags,TASKf_INPUT_FILTER_TASK))9 task=task->parent_task;10 if ((res=task->put_doc) && res->doc_signature==DOC_SIGNATURE_VAL)11 return res;12 else13 return NULL;14}15 16public CDoc *DocDisplay(CTask *task=NULL)17{//StdOut displayed unless double buffering.18 CDoc *res;19 if (!task) task=Fs;20 if ((res=task->display_doc) && res->doc_signature==DOC_SIGNATURE_VAL)21 return res;22 else23 return NULL;24}25 26public CDoc *DocBorder(CTask *task=NULL)27{//Doc holding border of window text.28 CDoc *res;29 if (!task) task=Fs;30 if ((res=task->border_doc) && res->doc_signature==DOC_SIGNATURE_VAL)31 return res;32 else33 return NULL;34}35 36public CDoc *DocDblBufStart(CTask *task=NULL)37{//See ::/Demo/Spy.HC38 Bool unlock_ddoc;39 CDoc *pdoc=DocPut(task),*ddoc=DocDisplay(task),*res;40 if (!pdoc || !ddoc || pdoc!=ddoc)41 res=NULL; //Already Double buffering42 else {43 if (!task) task=Fs;44 unlock_ddoc=DocLock(ddoc); //dont change during winupdate, so lock DocPut45 res=DocNew(,task);46 res->win_task =ddoc->win_task;47 res->max_entries =ddoc->max_entries;48 MemCpy(res->find_replace,ddoc->find_replace,sizeof(CEdFindText));49 MemCpy(&res->filename,&ddoc->filename,sizeof(CEdFileName));50 res->left_click_link =ddoc->left_click_link;51 res->right_click_link =ddoc->right_click_link;52 res->user_put_data =ddoc->user_put_data;53 res->user_put_key =ddoc->user_put_key;54 res->user_put_s =ddoc->user_put_s;55 res->parent_doc =ddoc->parent_doc;56 res->desc =ddoc->desc;57 res->user_data =ddoc->user_data;58 res->flags|=ddoc->flags&DOCG_DBL_BUF_FLAGS | DOCF_DONT_SHOW;59 task->put_doc=res;60 if (unlock_ddoc)61 DocUnlock(ddoc);62 }63 return res;64}65 66public Bool DocDblBufEnd(CTask *task=NULL)67{//See ::/Demo/Spy.HC68 Bool res=FALSE;69 CDoc *pdoc=DocPut(task),*ddoc=DocDisplay(task);70 if (pdoc && ddoc && pdoc!=ddoc) {//Double buffering?71 if (!task) task=Fs;72 ddoc->flags|=DOCF_DONT_SHOW;73 pdoc->flags&=~DOCF_DONT_SHOW;74 DocLock(ddoc);75 task->display_doc=pdoc;76 DocUnlock(ddoc);77 DocDel(ddoc);78 res=TRUE;79 }80 return res;81}82 83public Bool DocDblBufSwap(CTask *task=NULL)84{//See ::/Demo/Spy.HC85 Bool res=FALSE;86 CDoc *pdoc=DocPut(task),*ddoc=DocDisplay(task);87 if (pdoc && ddoc && pdoc!=ddoc) {//Double buffering?88 if (!task) task=Fs;89 ddoc->flags|=DOCF_DONT_SHOW;90 pdoc->flags&=~DOCF_DONT_SHOW;91 DocLock(ddoc);92 task->display_doc=pdoc;93 DocUnlock(ddoc);94 DocRst(ddoc,TRUE);95 MemCpy(ddoc->find_replace,pdoc->find_replace,sizeof(CEdFindText));96 MemCpy(&ddoc->filename,&pdoc->filename,sizeof(CEdFileName));97 ddoc->max_entries =pdoc->max_entries;98 ddoc->flags =pdoc->flags&DOCG_DBL_BUF_FLAGS |99 ddoc->flags&~DOCG_DBL_BUF_FLAGS;100 ddoc->left_click_link =pdoc->left_click_link;101 ddoc->right_click_link =pdoc->right_click_link;102 ddoc->user_put_data =pdoc->user_put_data;103 ddoc->user_put_key =pdoc->user_put_key;104 ddoc->user_put_s =pdoc->user_put_s;105 ddoc->desc =pdoc->desc;106 ddoc->user_data =pdoc->user_data;107 task->put_doc=ddoc;108 res=TRUE;109 }110 return res;111}112 