Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
DocDblBuf.txt112 linesDownload Raw Back to DolDoc
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