Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
ACFill.txt228 linesDownload Raw Back to AutoComplete
1 2#help_index "AutoComplete/Dictionary"3public U8 *ACDDefGet(U8 *st,I64 def_num=1)4{//MAlloc str holding single dict definition of word.5  CFile *f;6  CHashGeneric *tmph;7  U8 *res=NULL,*buf,*in_ptr,8        *st2=MStrUtil(st,SUF_TO_UPPER);9  tmph=HashFind(st2,ac.hash_table,HTT_DICT_WORD);10  Free(st2);11  if (tmph) {12    if (f=FOpen(ACD_DEF_FILENAME,"r")) {13      buf=MAlloc(ACD_BLK_SIZE*2+1);14      buf[ACD_BLK_SIZE*2]=0; //terminate15      FBlkRead(f,buf,tmph->user_data0*ACD_BLK_SIZE/BLK_SIZE,16            ACD_BLK_SIZE*2/BLK_SIZE);17      FClose(f);18      in_ptr=buf;19      while (in_ptr<buf+ACD_BLK_SIZE*2) {20        while (*in_ptr!=ACD_WORD_CHAR && in_ptr<buf+ACD_BLK_SIZE*2)21          in_ptr++;22        if (*in_ptr++==ACD_WORD_CHAR) {23          if (!StrICmp(st,in_ptr)) {24            while (def_num && *in_ptr!=ACD_WORD_CHAR25                  && in_ptr<buf+ACD_BLK_SIZE*2) {26              if (*in_ptr==ACD_DEF_CHAR) {27                if (!--def_num)28                  break;29                else30                  in_ptr++;31              } else32                in_ptr++;33            }34            if (*in_ptr++==ACD_DEF_CHAR) {35              res=StrNew(in_ptr);36              break;37            }38          }39        }40      }41      Free(buf);42    }43  }44  return res;45}46 47public U8 *ACDDefsGet(U8 *st)48{//MAlloc str with all dict definitions of word.49  CFile *f;50  CHashGeneric *tmph;51  U8 *res=NULL,*buf,*in_ptr,*in_ptr2,52        *st2=MStrUtil(st,SUF_TO_UPPER);53  tmph=HashFind(st2,ac.hash_table,HTT_DICT_WORD);54  Free(st2);55  if (tmph) {56    if (f=FOpen(ACD_DEF_FILENAME,"r")) {57      buf=MAlloc(ACD_BLK_SIZE*2+1);58      buf[ACD_BLK_SIZE*2]=0; //terminate59      FBlkRead(f,buf,tmph->user_data0*ACD_BLK_SIZE/BLK_SIZE,60            ACD_BLK_SIZE*2/BLK_SIZE);61      FClose(f);62      in_ptr=buf;63      while (in_ptr<buf+ACD_BLK_SIZE*2) {64        while (*in_ptr!=ACD_WORD_CHAR && in_ptr<buf+ACD_BLK_SIZE*2)65          in_ptr++;66        if (*in_ptr++==ACD_WORD_CHAR) {67          if (!StrICmp(st,in_ptr)) {68            in_ptr2=in_ptr;69            in_ptr--;70            while (*in_ptr2!=ACD_WORD_CHAR71                  && in_ptr2<buf+ACD_BLK_SIZE*2) {72              in_ptr2++;73            }74            res=MAlloc(in_ptr2+1-in_ptr);75            MemCpy(res,in_ptr,in_ptr2-in_ptr);76            res[in_ptr2-in_ptr]=ACD_END_CHAR;77            break;78          }79        }80      }81      Free(buf);82    }83  }84  return res;85}86 87/*Fmt of word lst entry:88  U8 ACD_WORD_CHAR89  U8 word[] with terminating zero90  I16 block;91*/92public U8 *ACDWordPtAt(U8 *st)93{//Point to word in word list.94  I64 i;95  U8 *start=acd.word_lst,*r=start,96        *end=acd.word_lst+acd.word_lst_size;97  if (!st || !*st)98    return acd.word_lst;99  if (acd.word_lst_size) {100    while (start+3<end) {101      r=(start+end)>>1;102      while (TRUE) {103        while (*r!=ACD_WORD_CHAR && r>acd.word_lst)104          r--;105        if ((r[2]==ACD_WORD_CHAR||r[1]==ACD_WORD_CHAR)&&r-3>acd.word_lst)106          r--;107        else108          break;109      }110      if (*r==ACD_WORD_CHAR) {111        i=StrICmp(st,r+1);112        if (i<0)113          end=r-1;114        else if (i>0)115          start=r+StrLen(r)+3;116        else117          return r;118      } else119        break;120    }121    r=(start+end)>>1;122    while (TRUE) {123      while (*r!=ACD_WORD_CHAR && r>acd.word_lst)124        r--;125      if ((r[2]==ACD_WORD_CHAR||r[1]==ACD_WORD_CHAR)&&r-3>acd.word_lst)126        r--;127      else128        break;129    }130    if (*r==ACD_WORD_CHAR && StrICmp(st,r+1)>0)131      r+=StrLen(r)+3;132  }133  if (*r==ACD_WORD_CHAR)134    return r;135  else136    return acd.word_lst;137}138 139U0 ACDFillin(I64 n)140{141  U8 *s;142  I64 len;143  if (0<=n<acd.num_fillins) {144    s=acd.fillins[n]+1;145    len=StrLen(s);146    if (len>ac.partial_len)147      In(s+ac.partial_len);148  }149}150 151public U0 ACDDefsPut(CDoc *doc=NULL,U8 *st,I64 num=-1)152{//Put to doc a dictionary definition(s) of a word.153  U8 *st2,*st3;154  I64 ch,i=0;155  if (!st) return;156  if (*st==ACD_WORD_CHAR)157    st++;158  DocPrint(doc,"$WW,1$$RED$%s:$FG$\n\n",st);159  if (num<0) {160    if (st3=ACDDefsGet(st)) {161      st2=st3;162      while (ch=*st2++) {163        switch (ch) {164          case ACD_WORD_CHAR:165            break;166          case ACD_DEF_CHAR:167            DocPrint(doc,"$GREEN$(%d)$FG$ %s\n",168                  ++i,st2);169            break;170          case ACD_PRONUNCIATION_CHAR:171            DocPrint(doc,"$LTGREEN$%s$FG$\n",st2);172            break;173          case ACD_POS_CHAR:174            DocPrint(doc,"$BLACK$%s$FG$\n",st2);175            break;176          case ACD_EXTRA_CHAR:177            DocPrint(doc,"$LTBLUE$%s$FG$\n",st2);178            break;179        }180        st2+=StrLen(st2)+1;181      }182      Free(st3);183    }184  } else {185    while (st2=ACDDefGet(st,++i)) {186      if (i==num)187        DocPrint(doc,"$GREEN$(%d)$FG$ %s\n",188              i,st2);189      Free(st2);190    }191  }192}193 194U0 ACDPopUpDef(U8 *st,I64 num=-1,CTask *parent=NULL)195{196  U8 *buf;197  buf=MStrPrint("ACDDefsPut(DocPut,\"%s\",%d);View;",st,num);198  PopUp(buf,parent);199  Free(buf);200}201 202U0 ACDDef(I64 n,CTask *parent=NULL)203{204  if (0<=n<acd.num_fillins)205    ACDPopUpDef(acd.fillins[n],-1,parent);206}207 208#help_index "AutoComplete"209U0 ACFillIn(I64 n)210{211  U8 *s;212  if (0<=--n<ac.num_fillins) {213    s=ac.fillin_matches[n]->str;214    if (StrLen(s)>ac.partial_len)215      In(s+ac.partial_len);216  }217}218 219U0 ACMan(I64 n,CTask *parent_task=NULL)220{221  CHashAC *tmpw;222  CHashSrcSym *tmph;223  if (0<=--n<ac.num_fillins && (tmpw=ac.fillin_matches[n]) &&224        (tmph=HashFind(tmpw->str,Fs->hash_table,HTG_SRC_SYM)) &&225        tmph->src_link)226    PopUpEd(tmph->src_link,parent_task);227}228