hschumann2/TempleOS-Source-Code
0847
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 