📄 cb_dicprivate.c
字号:
CHAR syntax_flag=0; LONG item_offset; item_offset=get_addr_from_id(base_info,input_id); fseek(base_info->fp,item_offset,SEEK_SET); fread((CHAR *)&data_size,sizeof(UINT16),1,base_info->fp); fread((CHAR *)&syntax_flag,1,1,base_info->fp); get_word(base_info,input_id,item_offset,MAX_ITEM_LEN,&data_size,output_str); return 0;}//the following functions in the file/*********************************************此文件中的函数仅仅提供给cb_dicengine.c中的引擎函数使用. **********************************************//**********************************************Func: get return list value*In: *dic_info -> 保存辞典系统信息*Out: *I/O: *Modify:*Return: 高字节返回个数 低字节返回 -> CB_RTN_ERROR --> 失败 CB_RTN_NOLR --> 左、右标志无效 CB_RTN_LNOR --> 左标志有效,右标志无效 CB_RTN_RNOL --> 左标志无效,右标志有效 CB_RTN_LR --> 左、右标志有效*Author:**********************************************/INT32 cbp_get_list_ret( const BQ_Init_t *base_info, CB_LIST_INFO *list_info ){ INT32 ret; ret = base_info->last_word_id+1 - list_info->top_word_id; if( ret > list_info->page_dispnum ) ret = list_info->page_dispnum; ret = ret << 16; if( list_info->top_word_id + list_info->page_dispnum >= base_info->last_word_id+1 ) { if( list_info->top_word_id == 0 ){ return ret + CB_RTN_NOLR; } return ret + CB_RTN_LNOR; } else { if( list_info->top_word_id == 0 ) { return ret + CB_RTN_RNOL; } return ret + CB_RTN_LR; } return CB_RTN_ERROR;}#if 0/**********************************************Func: 转换音标字符*In: ch -> 要转换的字符*Out: *I/O: *Modify:*Return: 转换后的字符*Author:**********************************************/static UINT8 cbp_convert_dj( UINT8 ch ){ char src_tbl[] = { 'A','i','c','u','e','6', '^','x','a',':','3','p', 't','k','f','s','8','1', 'h','b','d','g','v','z', '9','5','m','n','l','r', 'j','w','7','[',']','>', '/',' ',',','\'','I','.', '=','5','U','$','&','X', '-','L',0 }; char new_tbl[] = { 60,61,62,63,64,65, 66,67,68,69,70,71, 72,73,74,75,76,77, 78,79,80,81,82,83, 84,85,86,87,88,89, 90,91,92,93,94,95, 96,97,98,99,100,101, 102,103,104,105,106,107, 108,109,0 }; INT16 i; for( i = 0; i < 50; i++ ) { if( src_tbl[i] == 0 ) { return ch; } if( src_tbl[i] == ch ) { return new_tbl[i]; } } return ch;}#else#if USE_KKstatic unsigned char ipa_map1[] = { //KK音标 ' ',0x0e5,0x000,0x000,0x0cf,0x000,0x0ce,0x0d2, // !"#$%&' '(', ')',0x000,0x000,0x0d3, '-',0x0cb,0x000, //()*+,-./// 简体// 0x0f8,0x0eb,0x0ed,0x0dc,0x000,0x0f1,0x0d1,0x0df, //01234567// 繁体 0x0f8,0x0eb,0x0ed,0x0f7,0x000,0x0f1,0x0d1,0x0df, //01234567// 0x0f5,0x0f9,0x0fb,0x000,0x000,0x000,0x000,0x000, //89:;<=>? 0x000,0x0d5,0x0cc,0x0ef,0x000,0x0dc,0x0cd,0x000, //@ABCDEFG 0x000,0x0de,0x000,0x000,0x000,0x0f6,0x000,0x000, //HIJKLMNO 0x000,0x000,0x0d5,0x000,0x000,0x0e8,0x000,0x000, //PQRSTUVW 0x000,0x000,0x000,0x000,0x000,0x000,0x0ec,0x000, //XYZ[\]^_ 0x000,0x0e4,0x0d4,0x0ef,0x0d7,0x0d0,0x0e9,0x0f0, //`abcdefg 0x0ee,0x0d8,0x0f4,0x0da,0x0dd,0x0d6,0x0ea,0x0e0, //hijklmno 0x0db,0x000,0x0e3,0x0e1,0x0e2,0x0f3,0x0e6,0x0e7, //pqrstuvw 0x0d9,0x000,0x0f2,0x000,0x000,0x000,0x000,0x000, //xyz{|}~};#endif //USE_KK#if 0static unsigned char ipa_map[] = { //DJ音标 ' ',0x0e5,0x000,0x000,0x0cf,0x000,0x0ce,0x0d2, // !"#$%&' '(', ')',0x000,0x000,0x0d3, '-',0x0cb,0x000, //()*+,-./// 简体 0x0f8,0x0eb,0x0ed,0x0dc,0x000,0x0f1,0x0d1,0x0df, //01234567// 繁体// 0f8,0x0eb,0x0ed,0x0f7,0x000,0x0f1,0x0d1,0x0df, //01234567// 0x0f5,0x0f9,0x0fb,0x000,0x000,0x000,0x000,0x000, //89:;<=>? 0x000,0x0d5,0x0cc,0x0ef,0x000,0x0dc,0x0cd,0x000, //@ABCDEFG 0x000,0x0de,0x000,0x000,0x000,0x0f6,0x000,0x000, //HIJKLMNO 0x000,0x000,0x0d5,0x000,0x000,0x0e8,0x000,0x000, //PQRSTUVW 0x000,0x000,0x000,0x000,0x000,0x000,0x0ec,0x000, //XYZ[\]^_ 0x000,0x0e4,0x0d4,0x0ef,0x0d7,0x0d0,0x0e9,0x0f0, //`abcdefg 0x0ee,0x0d8,0x0f4,0x0da,0x0dd,0x0d6,0x0ea,0x0e0, //hijklmno 0x0db,0x000,0x0e3,0x0e1,0x0e2,0x0f3,0x0e6,0x0e7, //pqrstuvw 0x0d9,0x000,0x0f2,0x000,0x000,0x000,0x000,0x000, //xyz{|}~};#endif#endif/**********************************************Func: 转换DJ音标字符*In: ch -> 要转换的字符*Out: *I/O: *Modify:*Return: 转换后的字符*Author:**********************************************/#if 0static UINT8 cbp_convert_dj( UINT8 ch ){ if( ch == 0 ) return ch; return ipa_map[ch-0x20];}#endif#if USE_KK/**********************************************Func: 转换KK音标字符*In: ch -> 要转换的字符*Out: *I/O: *Modify:*Return: 转换后的字符*Author:**********************************************/static UINT8 cbp_convert_kk( UINT8 ch ){ if( ch == 0 ) return ch; return ipa_map1[ch-0x20];}#endif //USE_KK//+******************************//+转换音标符号;将输入的音标代码转//+换为能够显示的字模编码//+return : 显示字模的编码//+******************************UCHAR convert_yb(UCHAR ch){ char src_tbl[]={'a','i','O','u','e','@', 'V','{','A',':','E','p', 't','k','f','s','T','S', 'h','b','d','g','v','z', 'D','Z','m','n','l','r', 'j','w','N','[',']',',', '/',' ','%','\"','I','.', '=','3','U','$','&','X', '-','L','o',';','J','(', ')',0};#if 1 char new_tbl[]={213,216,239,243,208,209, 236,217,213,251,60,219, 226,218,233,225,245,235, 238,212,215,240,230,242, 249,241,214,234,221,227, 244,231,223,91,93,44, 60,60,210,211,216,203, 61,205,243,36,38,88, 45,76,239,250,74,40, 41,0};#else char new_tbl[] ={60,61,62,63,64,65, 66,67,68,69,70,71, 72,73,74,75,76,77, 78,79,80,81,82,83, 84,85,86,87,88,89, 90,91,92,93,94,95, 96,97,98,99,100,101, 102,103,104,105,106,107, 108,109,121,122,72,123, 124,0};#endif int i; for(i=0;i<62;i++) { if(src_tbl[i]==0) return ch; if(src_tbl[i]==ch) return new_tbl[i]; } return ch;}//+***************************************//+fountion : SEARCH THE SERIAL NUM CODE//+input :the number//+output : output_buf//+***************************************UINT16 get_expl_sn(UINT num){ if(num<0||num>20) return 0; return (num+0xa2b0);}UINT16 get_subexpl_sn(UINT num){ if(num<0||num>20) return 0; return (num+0xa2d8); //数字+圈}//+**************************************//fountion: 判断是否为特殊字符//ch_data1 为字母值 ch_data2为特殊代码//0- not //1- is special char//+**************************************int check_spechar(BYTE ch_data1,BYTE ch_data2){ if(ch_data1=='e'&&ch_data2==0x96) return 1; else if(ch_data1=='c'&&ch_data2==0x9e) return 1; else if(ch_data1=='a'&&ch_data2==0x93) return 1; else if(ch_data1=='e'&&ch_data2==0x93) return 1; else if(ch_data1=='a'&&ch_data2==0x95) return 1; else return 0;}//+**************************************//fountion: 转换特殊字符//ch_data1 为字母值 ch_data2为特殊代码//0- not //1- is special char//+**************************************BYTE convert_spechar(BYTE ch_data1,BYTE ch_data2){ if(ch_data1=='e'&&ch_data2==0x96) return 110; //e瞥 else if(ch_data1=='c'&&ch_data2==0x9e) return 111; //c下波浪线 else if(ch_data1=='a'&&ch_data2==0x93) return 112; //a上 ^ else if(ch_data1=='e'&&ch_data2==0x93) return 113; //e上 ^ else if(ch_data1=='a'&&ch_data2==0x95) return 114; //a上 else return 0;}//+******************************************//+ function name :check_end//+ Function: 判断是否结束,读取数据是否完毕//+ Input: Word_Length//+ out_data_off//+ GetDataSize_Flag ;read how much data bytes? 1== less 300 bytes,2==>all data out//+ return: 0==没有结束//+ 非零=则结束//+ Destroy://+******************************************BOOL check_end(UINT Word_Length,LONG start_off,LONG cur_off,UINT GetDataSize_Flag){ ULONG temp; temp=(cur_off-start_off); if(temp>=Word_Length) return 1; if(GetDataSize_Flag==1) { if(temp>300){ return TRUE; } } else if(GetDataSize_Flag==2) { if(temp>MAX_ITEM_LEN)return TRUE; // } else{;} return FALSE;}//+******************************************//+ Function: History:record read out//+ Input: record_id//+ return: constant:word_id//+ Destroy://+******************************************INT32 cbp_his_read_record( INT32 fd, INT8 record_id ){ INT32 rtn_n; CB_HIS_RECORD rec; rtn_n = DBread_by_idxid( fd, (UCHAR*)&rec, (INT32)record_id ); if(rtn_n >= 0 ) return rec.word_id; else return CB_RTN_ERROR;}//+******************************************//+ Function: new word:record read out//+ Input: record_id//+ return: constant:word_id//+ Destroy://+******************************************INT32 cbp_nw_read_record( INT32 fd, INT8 record_id ){ INT32 rtn_n; CB_NW_RECORD rec; rtn_n = DBread_by_idxid( fd, (UCHAR*)&rec, (INT32)record_id ); if(rtn_n >= 0 ) return rec.word_id; else return CB_RTN_ERROR;}//+******************************************//+ Function: 将code_data_buf中解出来的数据追加到out_data_buf中out_data_off偏移位置//+ Input: //+ W_lj_flag=0 不允许写入例句//+ =1 允许写入例句标志//+ code_data_buf//+return: FALSE--=no liju ; TRUE have_liju//+ Output: out_data_off //+ out_data_buf//+ Destroy://+******************************************BOOL write_data_buf(CB_WORD_DETAIL* word_detail,UINT *off_w,UINT *off_p,UINT *off_e,UCHAR *code_data_buf, BOOL *brace_flag,UINT *Expl_Sn,UINT *SubExpl_Sn,UINT *YinBiao_Sn,INT W_lj_flag){ UCHAR ch; UINT16 sn_num; INT i=0; CHAR *pw,*pp,*pe; UINT w_off,p_off,e_off; w_off = *off_w; p_off = *off_p; e_off = *off_e; pw = word_detail->data.word + w_off; pp = word_detail->phon + p_off; pe = word_detail->expl + e_off; while(i <= MAX_LENGTH_ONE_CODE){ ch = *(code_data_buf+i); //例句标志,当遇到例句标志,马上结束,去到别处写example_id if(ch==LJ_FLAG){ if(W_lj_flag){ *pe++ = ' '; e_off++; *pe++ = LJ_ICON_0; e_off++; *pe++ = LJ_ICON_1; e_off++; *pe++ = LJ_ICON_2; e_off++; *pe++ = LJ_ICON_3; e_off++; *pe++ = LJ_ICON_4; e_off++; } i++; *pe = 0; *off_e = e_off; return TRUE; }else if(ch==0){ //结束标志 break; }else if(ch==0x04){ //音标标志 *Expl_Sn=0; //大解释序号清0 *SubExpl_Sn=0; //小解释序号清0 if(*brace_flag==FALSE){ //音标开始 (*YinBiao_Sn)++; if(*YinBiao_Sn>1){ e_off++; *pe++ = '<'; e_off++; *pe++ = 'p'; e_off++; *pe++ = '>'; e_off++; *pe++ = convert_yb('/'); }else{ *pw = 0; //*pp++ = convert_yb('['); *pp++ = '['; p_off++; } i++; *brace_flag=TRUE; }else{ if(*YinBiao_Sn>1){ *pe++ = convert_yb('/'); e_off++; *pe++ = '<'; e_off++; *pe++ = '/'; e_off++; *pe++ = 'p'; e_off++; *pe++ = '>'; e_off++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -