#help_index "AutoComplete/Dictionary" U0 ACDDictWordsAdd(U8 *st) { I64 i; U8 *ptr; if (st && *st && (ptr=ACDWordPtAt(st))) { for (i=0;iflags|=DOCF_SIZE_MIN; Fs->border_src=BDS_CONST; Fs->border_attr=LTGRAY<<4+DrvTextAttrGet(':')&15; Fs->text_attr =LTGRAY<<4+BLUE; LBtr(&Fs->display_flags,DISPLAYf_SHOW); WinHorz(left,Fs->win_right); WinVert(top,Fs->win_bottom); DocCursor; } I64 ACSkipCrap(U8 *src,I64 len) { I64 j; j=len-1; while (j>=0) { if (Bt(char_bmp_alpha_numeric,src[j])) break; else j--; } return j+1; } I64 ACPriorWordInStr(U8 *src,U8 *dst,I64 len,I64 buf_size) { I64 i,j=0,k; i=len-1; while (i>=0) if (!Bt(char_bmp_alpha_numeric,src[i])) break; else i--; if (i>=-1 && len>0) for (k=i+1;khits>ac.fillin_hits[ac.num_fillins-1]) { for (k=ac.num_fillins-1;k>=0;k--) { if (tmpw->hits<=ac.fillin_hits[k]) break; else { ac.fillin_matches[k+1]=ac.fillin_matches[k]; ac.fillin_hits[k+1] =ac.fillin_hits[k]; } } ac.fillin_matches[k+1]=tmpw; ac.fillin_hits[k+1] =tmpw->hits; if (ac.num_fillinsmask && tSbody[i]; while (tmpw) { if (!MemCmp(ac.cur_word,tmpw->str,StrLen(ac.cur_word))) ACFillInAdd(tmpw); tmpw=tmpw->next; } } ACDocRst(51,13); if (ac.cur_word && *ac.cur_word) { "$$PURPLE$$Word:%s$$FG$$\n",ac.cur_word; for (i=0;istr; "$$GREEN$$F%02d$$FG$$ ",i+1; if (TaskValidate(focus_task) && (tmph=HashFind(st,focus_task->hash_table,HTG_SRC_SYM)) && tmph->src_link) { if (tmph->type&HTF_PUBLIC) "$$RED$$"; "$$TX+UL+L+PU,\"%$$Q\",A=\"%s\"$$$$FG$$\n",st,tmph->src_link; } else "%s\n",st; } if (acd.has_words) ACDDictWordsAdd(ac.cur_word); } else if (FileFind("::/Doc/StandBy.DD.Z")) Type("::/Doc/StandBy.DD.Z",0); } Free(src); Free(buf); Free(buf1); } U0 ACTaskNormal(I64 sc,I64 last_sc, CTask *focus_task,CTask *original_focus_task) { CDoc *doc; CDocEntry *doc_e; if ((doc=DocPut(focus_task)) && focus_task!=Fs && Bt(&focus_task->display_flags,DISPLAYf_SHOW)) { DocLock(doc); if (TaskValidate(focus_task) && original_focus_task==sys_focus_task && doc && doc==DocPut(focus_task) && (doc_e=doc->cur_entry)) { if (doc_e==doc) doc_e=doc_e->last; while (doc_e->last!=doc && (doc_e->type_u8==DOCT_NEW_LINE || doc_e->type_u8==DOCT_SOFT_NEW_LINE)) doc_e=doc_e->last; while (doc_e->last->type_u8!=DOCT_NEW_LINE && doc_e->last!=doc) doc_e=doc_e->last; ACPutChoices(doc,doc_e,focus_task,ToBool(sc!=last_sc)); } else DocUnlock(doc); } if (!LBts(&Fs->display_flags,DISPLAYf_SHOW)) WinZBufUpdate; } U0 ACTaskCtrl(I64 sc,I64 last_sc, CTask *focus_task,CTask *original_focus_task) { if (TaskValidate(focus_task) && (focus_task->scroll_x || focus_task->scroll_y)) { if (LBtr(&Fs->display_flags,DISPLAYf_SHOW)) WinZBufUpdate; } else { if (sc!=last_sc) { if (sc&SCF_ALT) { ACDocRst(27,3); if (TaskValidate(original_focus_task) && !Bt(&original_focus_task->win_inhibit,WIf_SELF_KEY_DESC)) KeyMapFamily(original_focus_task,0, ToBool(!(sc&SCF_SHIFT)),ToBool(sc&SCF_SHIFT)); KeyMapCtrlAltFamily( ToBool(!(sc&SCF_SHIFT)),ToBool(sc&SCF_SHIFT)); } else if (TaskValidate(original_focus_task) && !Bt(&original_focus_task->win_inhibit,WIf_SELF_KEY_DESC)) { ACDocRst(27,3); KeyMapFamily(original_focus_task,SCF_CTRL, ToBool(!(sc&SCF_SHIFT)),ToBool(sc&SCF_SHIFT)); } } if (!LBts(&Fs->display_flags,DISPLAYf_SHOW)) WinZBufUpdate; } } U0 ACTaskAlt(I64 sc,I64 last_sc, CTask *,CTask *original_focus_task) { if (sc!=last_sc && TaskValidate(original_focus_task) && !Bt(&original_focus_task->win_inhibit,WIf_SELF_KEY_DESC)) { ACDocRst(27,3); KeyMapFamily(original_focus_task,SCF_ALT, ToBool(!(sc&SCF_SHIFT)),ToBool(sc&SCF_SHIFT)); } if (!LBts(&Fs->display_flags,DISPLAYf_SHOW)) WinZBufUpdate; } U0 ACTaskEndCB() { ac.task=NULL; Exit; } U0 ACTask(I64) { CTask *focus_task,*original_focus_task; I64 ch,scan_code=0,last_scan_code=0; CDoc *doc; Fs->task_end_cb=&ACTaskEndCB; DocTermNew; LBts(&Fs->display_flags,DISPLAYf_SHOW); WinHorz(51,Fs->win_right); LBts(&Fs->display_flags,DISPLAYf_WIN_ON_TOP); Fs->win_inhibit=WIG_NO_FOCUS_TASK_DFT; Free(ac.cur_word); ac.cur_word=NULL; while (TRUE) { if (scan_code&(SCF_CTRL|SCF_ALT) || GetTSC>KbdMsEvtTime+cnts.time_stamp_freq>>1) { last_scan_code=scan_code; scan_code=kbd.scan_code; } original_focus_task=focus_task=sys_focus_task; while (TaskValidate(focus_task) && Bt(&focus_task->task_flags,TASKf_INPUT_FILTER_TASK)) focus_task=focus_task->parent_task; if (scan_code&SCF_CTRL) ACTaskCtrl(scan_code,last_scan_code,focus_task,original_focus_task); else if (TaskValidate(focus_task)) { if (scan_code&SCF_ALT) ACTaskAlt(scan_code,last_scan_code,focus_task,original_focus_task); else ACTaskNormal(scan_code,last_scan_code,focus_task,original_focus_task); } Sleep(333); if (ScanMsg(&ch,,1<cur_entry->de_flags & DOCEF_LINK) { '' CH_SPACE; doc->cur_entry=doc; } DocUnlock(doc); } } public Bool AutoComplete(Bool val=OFF) {//Turn AutoComplete OFF or ON. Bool old_val=FALSE; while (Bt(&ac.flags,ACf_INIT_IN_PROGRESS)) Sleep(10); if (val) { if (Bt(&sys_run_level,RLf_AUTO_COMPLETE)) { if (TaskValidate(ac.task)) old_val=TRUE; else { ac.task=Spawn(&ACTask,NULL,"AutoComplete"); TaskWait(ac.task); } WinToTop(ac.task); } } else { if (TaskValidate(ac.task)) { if (Bt(&sys_run_level,RLf_AUTO_COMPLETE)) old_val=TRUE; Kill(ac.task); DeathWait(&ac.task); } } return old_val; }