hschumann2/TempleOS-Source-Code
0847
1 2#help_index "DolDoc"3 4public I64 DocEntryRun(CDoc *doc,CDocEntry *doc_e,5 Bool exited,I64 *_has_action=NULL)6{//Do action on final entry sel by user.7//Sometimes returns locked, sometimes unlocked8 U8 ch=doc->cmd_U8,*st;9 I64 res=DOCM_CANCEL,has_action=FALSE;10 CHashDefineStr *tmph;11 DocLock(doc);12 if (!exited) {13 if (doc_e->de_flags & DOCEF_ESC) {14 Msg(MSG_KEY_DOWN,CH_ESC,0,1<<JOBf_DONT_FILTER);15 has_action=TRUE;16 goto er_done;17 } if (doc_e->de_flags & DOCEF_QUIT) {18 Msg(MSG_KEY_DOWN,CH_SHIFT_ESC,0,1<<JOBf_DONT_FILTER);19 has_action=TRUE;20 goto er_done;21 } else if (doc_e->de_flags & DOCEF_CHECK_COLLAPSABLE) {22 doc_e->de_flags^=DOCEF_CHECKED_COLLAPSED;23 has_action=TRUE;24 }25 }26 try {27 if (ch==CH_SPACE) {28 if (doc_e->de_flags & DOCEF_LINK && doc->left_click_link) {29 res=(*doc->left_click_link)(doc,doc_e);30 has_action=TRUE;31 }32 if (doc_e->de_flags & DOCEF_LEFT_EXP) {33 res=doc_e->left_exp;34 has_action=TRUE;35 Msg(MSG_CMD,res,0,1<<JOBf_DONT_FILTER);36 }37 if (doc_e->de_flags & DOCEF_LEFT_CB && doc_e->left_cb) {38 DocUnlock(doc);39 res=(*doc_e->left_cb)(doc,doc_e);40 has_action=TRUE;41 Msg(MSG_CMD,res,0,1<<JOBf_DONT_FILTER);42 }43 if (doc_e->de_flags & DOCEF_LEFT_MACRO) {44 if (doc_e->de_flags & DOCEF_POPUP) {45 st=StrNew(doc_e->left_macro);46 DocUnlock(doc);47 PopUp(st,Fs);48 Free(st);49 } else {50 if (doc_e->de_flags & DOCEF_LEFT_IN_STR)51 InStr("%s",doc_e->left_macro);52 else53 In("%s",doc_e->left_macro);54 }55 has_action=TRUE;56 }57 if (!exited && doc_e->de_flags & DOCEF_LST &&58 doc_e->de_flags & DOCEF_DEFINE &&59 (tmph=HashFind(doc_e->define_str,60 doc->win_task->hash_table,HTT_DEFINE_STR)) &&61 (res=PopUpPickLst(tmph->data))!=DOCM_CANCEL) {62 DocDataFmt(doc,doc_e,res);63 DocDataScan(doc,doc_e);64 has_action=TRUE;65 }66 } else if (ch=='\n') {67 if (doc_e->de_flags & DOCEF_LINK && doc->right_click_link) {68 res=(*doc->right_click_link)(doc,doc_e);69 has_action=TRUE;70 }71 if (doc_e->de_flags & DOCEF_RIGHT_EXP) {72 res=doc_e->right_exp;73 has_action=TRUE;74 Msg(MSG_CMD,res,0,1<<JOBf_DONT_FILTER);75 }76 if (doc_e->de_flags & DOCEF_RIGHT_CB && doc_e->right_cb) {77 DocUnlock(doc);78 res=(*doc_e->right_cb)(doc,doc_e);79 has_action=TRUE;80 Msg(MSG_CMD,res,0,1<<JOBf_DONT_FILTER);81 }82 if (doc_e->de_flags & DOCEF_RIGHT_MACRO) {83 if (doc_e->de_flags & DOCEF_POPUP) {84 st=StrNew(doc_e->right_macro);85 DocUnlock(doc);86 PopUp(st,Fs);87 Free(st);88 } else {89 if (doc_e->de_flags & DOCEF_RIGHT_IN_STR)90 InStr("%s",doc_e->right_macro);91 else92 In("%s",doc_e->right_macro);93 }94 has_action=TRUE;95 }96 }97 }98 catch99 DocBottom(doc);100 doc->cmd_U8=CH_SPACE;101er_done:102 if (_has_action) *_has_action=has_action;103 return res;104}105 