Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes832downloads
ACInit.txt171 linesDownload Raw Back to AutoComplete
1 2#help_index "AutoComplete/Dictionary"3acd.has_words=FileFind(ACD_WORD_FILENAME);4acd.has_defs =FileFind(ACD_DEF_FILENAME)||FileFind(ACD_DEF_FILENAME_Z);5 6public U0 ACDWordsLoad()7{//Put words from word list into hash table.8  I64 size;9  CHashGeneric *tmph;10  U8 *in_ptr,*in_start,*st2;11  U16 *d;12  acd.num_words=0;13  if (in_ptr=FileRead(ACD_WORD_FILENAME,&size)) {14    in_start=in_ptr;15    Free(acd.word_lst);16    acd.word_lst=AMAlloc(size);17    MemCpy(acd.word_lst,in_start,size);18    acd.word_lst_size=size;19 20    while (in_ptr<in_start+size) {21      if (*in_ptr==ACD_WORD_CHAR)22        in_ptr++;23      if (*in_ptr) {24        st2=MStrUtil(in_ptr,SUF_TO_UPPER);25        tmph=ACAlloc(sizeof(CHashGeneric)+StrLen(st2)+1);26        StrCpy(tmph+1,st2);27        Free(st2);28        in_ptr+=StrLen(in_ptr)+1;29        tmph->str=tmph+1;30        tmph->use_cnt=1;31        tmph->type=HTT_DICT_WORD;32        d=in_ptr;33        tmph->user_data0=*d;34        in_ptr+=2;35        HashAdd(tmph,ac.hash_table);36        acd.num_words++;37      } else38        in_ptr+=3;39    }40    Free(in_start);41  }42}43 44#help_index "AutoComplete"45CHashAC *ACHashAdd(U8 *w)46{47  CHashAC *tmpw=HashFind(w,ac.hash_table,HTT_WORD);48  if (tmpw) {49    tmpw->hits++;50    return tmpw;51  }52  tmpw=ACAlloc(sizeof(CHashAC));53  tmpw->str=AStrNew(w);54  tmpw->type=HTT_WORD;55  tmpw->use_cnt=1;56  tmpw->hits=1;57  HashAdd(tmpw,ac.hash_table);58  ac.num_words++;59  return tmpw;60}61 62U0 ACSingleFileAdd(U8 *buf)63{64  I64 ch;65  U8 *ptr=buf,*ptr2,*ptr3;66  while (TRUE) {67    while (TRUE) {68      if (ch=*ptr++) {69        if (Bt(char_bmp_alpha_numeric,ch))70          break;71      } else72        return;73    }74    ptr3=ptr;75    ptr2=ptr;76    ptr--;77    while (TRUE) {78      if (ch=*ptr2++) {79        if (Bt(char_bmp_alpha_numeric,ch))80          *ptr3++=ch;81        else if (ch!=CH_CURSOR)82          break;83      } else {84        ptr2--;85        break;86      }87    }88    *ptr3=0;89    ACHashAdd(ptr);90    ptr=ptr2;91  }92}93 94U0 ACMainFileLstTraverse(U8 *files_find_mask)95{96  U8 *buf;97  CDirEntry *tmpde,*tmpde1;98  try {99    tmpde=tmpde1=FilesFind(files_find_mask,100          FUF_RECURSE|FUF_JUST_TXT|FUF_JUST_FILES|FUF_CLUS_ORDER);101    while (tmpde) {102      "%s\n",tmpde->full_name;103      buf=FileRead(tmpde->full_name);104      ACSingleFileAdd(buf);105      Free(buf);106      tmpde=tmpde->next;107    }108  } catch109    Fs->catch_except=TRUE;110  DirTreeDel(tmpde1);111}112 113U0 ACProgressTask(Bool *_start_flag)114{115  I64 start=blkdev.write_cnt;116  progress1=0;117  progress1_max=(Size(ACD_DEF_FILENAME_Z,"+x+s")+BLK_SIZE-1)>>BLK_SIZE_BITS;118  StrCpy(progress1_desc,"Uncompressing Dictionary");119  start=blkdev.write_cnt;120  *_start_flag=TRUE;121  while (progress1<progress1_max) {122    progress1=blkdev.write_cnt-start;123    Sleep(10);124  }125  *progress1_desc=progress1=progress1_max=0;126}127 128public U0 ACInit(U8 *mask=NULL)129{//Read files and build AutoComplete statistics.130  Bool start_flag;131  CBlkDev *bd=Let2BlkDev;132 133  LBtr(&sys_run_level,RLf_AUTO_COMPLETE);134  AutoComplete;135  while (LBts(&ac.flags,ACf_INIT_IN_PROGRESS))136    Yield;137  if (DrvIsWritable && FileFind(ACD_DEF_FILENAME_Z) &&138        !FileFind(ACD_DEF_FILENAME)) {139    if (bd->type!=BDT_RAM) {140      start_flag=FALSE;141      Spawn(&ACProgressTask,&start_flag);142      while (!start_flag)143        Yield;144    }145    Move(ACD_DEF_FILENAME_Z,ACD_DEF_FILENAME);146  }147 148  HashTableDel(ac.hash_table);149  ac.hash_table=HashTableNew(2048,adam_task);150 151  ac.num_words=0;152  Free(ac.cur_word);153  ac.cur_word=NULL;154 155  if (mask)156    ACMainFileLstTraverse(mask);157 158  ACDWordsLoad;159  LBtr(&ac.flags,ACf_INIT_IN_PROGRESS);160  LBts(&sys_run_level,RLf_AUTO_COMPLETE);161  AutoComplete(ON);162}163 164I64 AutoCompleteSize()165{166  if (ac.hash_table)167    return HashTableSize2(ac.hash_table)+MSize2(acd.word_lst);168  else169    return 0;170}171