Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
DocEd.txt267 linesDownload Raw Back to DolDoc
1 2#help_index "DolDoc/Output;StdOut/DolDoc"3 4public Bool View()5{//Go live for user interaction until <ESC> or <SHIFT-ESC>.6  I64 ch;7  do ch=DocGetKey;8  while (ch!=CH_ESC && ch!=CH_SHIFT_ESC);9  return ch==CH_ESC;10}11 12#help_index "DolDoc"13U8 *EdOverStrikeCB(CDoc *,CDocEntry *doc_e,CTask *mem_task)14{15  CDoc *doc=doc_e->user_data;16  U8 *st=MAlloc(8,mem_task);17  if (doc->flags & DOCF_OVERSTRIKE)18    *st='O';19  else20    *st='.';21  st[1]=0;22  return st;23}24 25U8 *EdAutoSaveCB(CDoc *,CDocEntry *doc_e,CTask *mem_task)26{27  CDoc *doc=doc_e->user_data;28  U8 *st=MAlloc(8,mem_task);29  if (doc->flags & DOCF_AUTO_SAVE)30    *st='S';31  else32    *st='.';33  st[1]=0;34  return st;35}36 37U8 *EdFilterCB(CDoc *,CDocEntry *doc_e,CTask *mem_task)38{39  CDoc *doc=doc_e->user_data;40  U8 *st=MAlloc(8,mem_task);41  if (doc->find_replace->filter_lines)42    *st='F';43  else44    *st='.';45  st[1]=0;46  return st;47}48 49U8 *EdDollarCB(CDoc *,CDocEntry *doc_e,CTask *mem_task)50{51  CDoc *doc=doc_e->user_data;52  U8 *st=MAlloc(8,mem_task);53  if (doc->flags & DOCF_IN_DOLLAR)54    *st='$';55  else56    *st='.';57  st[1]=0;58  return st;59}60 61U8 *EdMoreCB(CDoc *,CDocEntry *doc_e,CTask *mem_task)62{63  CDoc *doc=doc_e->user_data;64  U8 *st=MAlloc(8,mem_task);65  if (doc->flags&DOCF_MORE)66    StrCpy(st,"More.");67  else68    StrCpy(st,".....");69  return st;70}71 72U8 *EdDollarTypeCB(CDoc *,CDocEntry *doc_e,CTask *mem_task)73{74  CDoc *doc=doc_e->user_data;75  U8 *src=DefineSub(doc->cur_entry->type_u8,"ST_DOC_CMDS"),76        *st=CAlloc(8,mem_task);77  if (doc->cur_entry==doc)78    src="EOF";79  else if (!src)80    src="ERR";81  StrPrint(st,"%-3ts",src);82  return st;83}84 85public Bool DocEd(CDoc *doc,I64 dof_flags=0)86{//Live for user interaction. End on <ESC> or <SHIFT-ESC>.87  CDoc *old_put_doc       =DocPut,88        *old_display_doc=DocDisplay,89        *old_border_doc =DocBorder,*bdoc;90  CDocEntry *doc_e;91  I64 old_attr=Fs->text_attr,92        old_top =Fs->win_top, old_bottom=Fs->win_bottom,93        old_left=Fs->win_left,old_right =Fs->win_right,94        old_title_src=Fs->title_src;95  Bool res,unlock;96  U8 *old_task_title;97  if (dof_flags&DOF_WIN_MAX)98    WinMax;99 100  unlock=DocLock(doc);101  doc->win_task=Fs;102  bdoc=DocNew;103  bdoc->flags|=DOCF_BORDER_DOC;104  DocPrint(bdoc,"$CM+TY+LX+NC,0,-1$");105  DocPrint(bdoc,"$TX+RX+BD,\"[X]\"$");106  DocPrint(bdoc,"$BK,1$$TX+LX+BD,\"MENU\"$$BK,0$");107 108  old_task_title=StrNew(Fs->task_title);109  if (Fs->title_src!=TTS_LOCKED_CONST) {110    Fs->title_src=TTS_ED_FILENAME;111    MemCpy(Fs->task_title,doc->filename.name,STR_LEN-1);112  }113  doc_e=DocPrint(bdoc,"$DA-TRM-P+BD+RD+CX+IV,LEN=STR_LEN-1,"114        "A=\"%%s...\",SCX=16$");115  doc_e->data=&Fs->task_title;116  DocDataFmt(bdoc,doc_e);117 118  if (doc->flags & DOCF_ALLOW_UNDO) {119    DocPrint(bdoc,"$CM+BY+LX+NC,1,1$");120    doc_e=DocPrint(bdoc,"$DA+BD+RD-TRM,RT=U32,A=\"Undo:%%03d\"$\n");121    doc_e->data=&doc->undo_cnt;122    DocDataFmt(bdoc,doc_e);123  }124 125  DocPrint(bdoc,"$CM+BY+RX+NC,-31,1$");126  doc_e=DocPrint(bdoc,"$TX+BD+TC,\"     \"$");127  doc_e->user_data=doc;128  doc_e->tag_cb=&EdMoreCB;129  doc_e=DocPrint(bdoc,"$TX+BD+TC,\" \"$");130  doc_e->user_data=doc;131  doc_e->tag_cb=&EdDollarTypeCB;132  doc_e=DocPrint(bdoc,"$TX+BD+TC,\" \"$");133  doc_e->user_data=doc;134  doc_e->tag_cb=&EdFilterCB;135  doc_e=DocPrint(bdoc,"$TX+BD+TC,\" \"$");136  doc_e->user_data=doc;137  doc_e->tag_cb=&EdOverStrikeCB;138  doc_e=DocPrint(bdoc,"$TX+BD+TC,\" \"$");139  doc_e->user_data=doc;140  doc_e->tag_cb=&EdAutoSaveCB;141  doc_e=DocPrint(bdoc,"$TX+BD+TC,\" \"$");142  doc_e->user_data=doc;143  doc_e->tag_cb=&EdDollarCB;144  doc_e=DocPrint(bdoc,"$DA+BD+RD-TRM,A=\"Line:%%04d \"$");145  doc_e->data=&doc->line;146  DocDataFmt(bdoc,doc_e);147  doc_e=DocPrint(bdoc,"$DA+BD+RD-TRM,A=\"Col:%%04d\"$\n");148  doc_e->data=&doc->col;149  DocDataFmt(bdoc,doc_e);150 151  DocRecalc(bdoc);152  DocRecalc(doc);153  if (!(dof_flags&DOF_DONT_HOME))154    DocTop(doc);155  Fs->border_doc=bdoc;156  if (doc!=old_display_doc)157    doc->parent_doc=old_display_doc;158  Fs->put_doc=Fs->display_doc=doc;159  if (!(dof_flags&DOF_DONT_TEXT_ATTR))160    Fs->text_attr=DOC_ATTR_DFT_TEXT;161  if (!(dof_flags&DOF_DONT_SHOW)) {162    LBts(&Fs->display_flags,DISPLAYf_SHOW);163    WinZBufUpdate;164  }165  if (dof_flags&DOF_SIZE_MIN)166    doc->flags|=DOCF_SIZE_MIN;167 168  DocUnlock(doc);169  if (!(dof_flags&DOF_DONT_WINMGR_SYNC)) {170    Refresh(2,TRUE);171    if (doc->flags&DOCF_SIZE_MIN)172      Refresh(2,TRUE);173  }174  res=View;175 176  DocLock(doc);177  if (res) {178    doc_e=doc->head.next;179    while (doc_e!=doc) {180      if (doc_e->type_u8==DOCT_DATA || doc_e->type_u8==DOCT_CHECK_BOX)181        DocDataScan(doc,doc_e);182      doc_e=doc_e->next;183    }184  }185  if (unlock)186    DocUnlock(doc);187  Fs->border_doc =old_border_doc;188  Fs->display_doc=old_display_doc;189  Fs->put_doc    =old_put_doc;190  Fs->text_attr  =old_attr;191  if (Fs->title_src!=TTS_LOCKED_CONST) {192    Fs->title_src  =old_title_src;193    StrCpy(Fs->task_title,old_task_title);194  }195  Free(old_task_title);196  DocDel(bdoc);197  if (dof_flags&DOF_SIZE_MIN) {198    WinHorz(old_left,old_right);199    WinVert(old_top,old_bottom);200  }201  return res;202}203 204#help_index "DolDoc/Cmd Line (Typically);Cmd Line (Typically)"205public Bool Ed(U8 *link_st,I64 edf_dof_flags=0)206{//Invoke document editor.207  U8 *filename,*needle_str;208  I64 i,num;209  Bool cont,res=FALSE;210  CDoc *doc;211 212  switch (i=EdLinkCvt(link_st,&filename,&needle_str,&num,edf_dof_flags)) {213    case -1:214      break;215    case LK_DEF:216      doc=DocNew;217      doc->desc='DictDef';218      ACDDefsPut(doc,filename,num);219      goto ej_doc;220    case LK_HELP_INDEX:221      doc=DocNew;222      doc->desc='HelpIndx';223      DocHelpIdx(doc,filename);224ej_doc:225      if (!(edf_dof_flags&EDF_BAIL)) {226        DocEd(doc);227        DocDel(doc);228      }229      if (!(edf_dof_flags&EDF_WAS_WRITE))230        res=TRUE;231      break;232    default:233      if (IsRaw)234        res=EdLite(filename,num,edf_dof_flags);235      else {236        cont=TRUE;237        if (!(edf_dof_flags&EDF_BAIL) && !(LK_DOC<=i<=LK_DOC_LINE) &&238              !FilesFindMatch(filename,FILEMASK_TXT) &&239              !PopUpCancelOk(ST_WARN_ST "Not Text File\n\n"))240          cont=FALSE;241        if (cont)242          res=DocFileEd(i,filename,needle_str,&num,edf_dof_flags);243      }244  }245  Free(filename);246  Free(needle_str);247  return res;248}249 250public Bool Plain(U8 *filename,I64 edf_dof_flags=0)251{//Edit document in plain text mode, so dollar signs are not special.252  Bool res;253  U8 *st=MStrPrint("PI:%s",filename);254  res=Ed(st,edf_dof_flags);255  Free(st);256  return res;257}258 259#help_index "DolDoc;Job/Exe;Task/Job/Exe"260public I64 PopUpEd(U8 *filename,CTask *parent=NULL,CTask **_pu_task=NULL)261{//Create PopUp win task and edit a doc.262  U8 *st=MStrPrint("Ed(\"%Q\");",filename);263  I64 res=PopUp(st,parent,_pu_task);264  Free(st);265  return res;266}267