⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blind_ime_more.h

📁 it is about embeded system
💻 H
📖 第 1 页 / 共 2 页
字号:
  //stop_t2s("由同音字词语选汉字");  cur = first;  while(1)           //没有按下ENTER键且链表未读完时循环  {       get_first_phrase(s_tmp,cur->phrase);    T2S_t2s(s_tmp);//调用语音函数读出汉字    printf("s_tmp=%s\n",s_tmp);    usleep(1800000);    //stop_t2s(s_tmp);//选择等待时间    if(cur->link==NULL)    {    	cur=first;	    }    else cur=cur->link;  }}void * associate_th(void * data)              //语音读同音字链表线程{  char s_tmp[40],ph_tmp[20];  int i_st=0,i_pht=0;  //  T2S_option( FEMALE, 2, 1 );            //调用语音函数读出汉字 // T2S_t2s("选择汉字或词语");  //stop_t2s("选择汉字或词语");  sprintf(s_tmp,"%s,%s",cur->character,cur->phrase);  while(1)         {       i_pht=0;    while(s_tmp[i_st]!=','&&s_tmp[i_st]!='\0')/*取得字或词组*/    {      ph_tmp[i_pht++]=s_tmp[i_st++];    }    i_st++;    ph_tmp[i_pht]='\0';    T2S_t2s(ph_tmp);//调用语音函数读出汉字    strcpy(character,ph_tmp);    printf("ph_tmp=%s\n",ph_tmp);    usleep(2000000);//选择等待时间   // stop_t2s(ph_tmp);        if(s_tmp[i_st]=='\0')    {      i_st=0;    }  }}//触摸屏汉字选择线程void * read_th(void * data)             //语音读同音字链表线程{  pthread_t th_display=-1,th_associate=-1;  int ret;    /*同音词选择*/  printf("display_th start\n");  pthread_create(&th_display, NULL, display_th, 0);  ret=bime_left_or_right();  pthread_cancel(th_display);    /*联想选择*/  printf("associate_th start\n");  pthread_create(&th_associate, NULL, associate_th, 0);  ret=bime_left_or_right();  pthread_cancel(th_associate);                     printf("%s\n", character );   freq_change( &my_stock, cur->sequence );          //字频改编函数}  /* 修改字库表中的字频项 */void  freq_change(STOCK_DBS *my_stock , char * sequence){  int ret,i;   char seq_cp[MAXFIELD];   DBC * cursor_words;  DBT  key, data;  WORDS my_words;  char seq[MAXFIELD];  strcpy( seq, sequence );                      //将sequence的值赋给数组seq,保证其稳定性  memset(&my_words, 0, sizeof(WORDS));  memset(&key, 0, sizeof(DBT));  memset(&data, 0, sizeof(DBT));  ret = my_stock->words_dbp->cursor( my_stock->words_dbp, NULL, &cursor_words, 0);  print_error(ret);   key.data = seq ;               key.size = strlen( seq ) +1 ;  ret = cursor_words->get( cursor_words, &key, &data, DB_SET_RANGE ) ;    print_error( ret );  data.data = &my_words;  data.size = sizeof( my_words );  data.ulen = sizeof( WORDS );  data.flags = DB_DBT_USERMEM;   ret = cursor_words->get( cursor_words, &key, &data, DB_CURRENT ) ;    print_error( ret );  my_words.freq+=1;                  //改变字频//数据库中记录的关键字赋值  key.size = strlen(my_words.sequence) + 1;       key.data = my_words.sequence;   //数据库中记录的数据项赋值  data.size = sizeof(WORDS);           data.data = &(my_words);/* 运用 put 函数将记录放入 words 数据库中.*/  ret=cursor_words->put( cursor_words, &key, &data, DB_KEYFIRST );  print_error(ret);}/* 根据同音字起始序列号查找并显示字库表记录 */int  get_words_record(STOCK_DBS *my_stock , const char *program_name, FILE *error_file_pointer,char * sequence){   int ret,i;   char seq_cp[20];   DBC * cursor_words;  DBT  key, data;  WORDS my_words;  char seq[MAXFIELD];  pthread_t th_read;  void *retval;  strcpy( seq, sequence );                      //将sequence的值赋给数组seq,保证其稳定性    printf("seq=%s",seq);  printf("character=%s",character);  memset(&my_words, 0, sizeof(WORDS));  memset(&key, 0, sizeof(DBT));  memset(&data, 0, sizeof(DBT));  ret = my_stock->words_dbp->cursor( my_stock->words_dbp, NULL, &cursor_words, 0);  print_error(ret); // printf("\n***********字库表*********\n");    key.data = seq ;               key.size = strlen( seq ) +1 ;  ret = cursor_words->get( cursor_words, &key, &data, DB_SET_RANGE ) ;    print_error( ret );  data.data = &my_words;  data.size = sizeof( my_words );  data.ulen = sizeof( WORDS );  data.flags = DB_DBT_USERMEM;   ret = cursor_words->get( cursor_words, &key, &data, DB_CURRENT ) ;    print_error( ret );  display( my_words );               //调用排序函数  for( i=0; i<strlen(seq); i++ )  {      if( isdigit (seq[i]) != 0 ) break;    seq_cp[i]=seq[i];   };  seq_cp[i] = '\0';  ret = cursor_words->get( cursor_words, &key, &data, DB_NEXT);   i=1;  while(1)                       {       i++;     if ( (strncmp( (char *)key.data, seq_cp, strlen(seq_cp) ) != 0)         ||!isdigit( ((char *)key.data)[strlen(seq_cp)]) ) break;           key.data = data.data;     key.size = strlen(data.data) + 1;     data.data = &my_words;     data.ulen = sizeof(WORDS);     data.flags = DB_DBT_USERMEM;     display(my_words);                    //调用排序函数     if( (ret = cursor_words->get( cursor_words, &key, &data, DB_NEXT)) != 0)      break;     }   printf("\n");//显示排序后的链表  cur = first;  while(cur)  {    printf("character: %s ", cur->character );    printf("\t freq: %d\n", cur->freq );    cur=cur->link;  }// 开启触摸屏汉字选择线程 printf("touch selction start\n");  pthread_create(&th_read, NULL, read_th, 0); printf("touch selction over\n");  pthread_join(th_read, &retval);  if( cursor_words != NULL)        cursor_words->close(cursor_words);   return 0;}/* 汉字查询函数 */int  database_get(STOCK_DBS *my_stock , const char *program_name, FILE *error_file_pointer){  int ret;  char  sequence[MAXLINE]="",  syllable[MAXLINE]=""; //触摸屏输入查询查询// array 为触摸屏接口参数 ( 联调触摸屏程序时要定义全局变量 array 接收字符串 )  get_blind_record( my_stock , program_name , error_file_pointer, array,syllable );  printf( "sta_db:syllable:%s\n",syllable);  //sleep(3);    get_index_record( my_stock , program_name,  error_file_pointer, syllable,sequence );  printf( "words_index_db:sequence:%s\n",sequence);  //sleep(3);    if ( sequence[0] == '\0') return 0;    strcpy(character,"");  ret = get_words_record( my_stock , program_name,  error_file_pointer , sequence);  return ret;}void db_search_touch(char *statistics){	struct cha *ptr;	array=statistics;	database_get(&my_stock, "database_get", stderr);      //调用检索函数进行	        while(first!=NULL)                        //将查询后的同音字链表清空          {             ptr = first;            first=first->link;            free(ptr);          } }int blind_db( char *statistics,char *ime_ret){  int ret, size ;  char *basename, *words_index_file, *words_file, *keyboard_file;    pthread_t th_a;  void *retval;  first=NULL;          cur=NULL;  initialize_stockdbs(&my_stock);  basename = "./blind_ime/";                      //所有数据库存放文件  set_db_filenames(&my_stock);/* 打开所有数据库 */   ret = databases_setup(&my_stock, "databases_setup", stderr);  if (ret != 0) {    fprintf(stderr, "Error opening databases\n");  return (ret);  } /*数据库搜索*/  db_search_touch(statistics);/* 输入所得字符串拷贝至ime_ret */  strcpy(ime_ret,character);/* 关闭所有数据库 */  databases_close(&my_stock);  return (0);}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -