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

📄 cb_dicprivate.c

📁 利用micorwindows实现英英词典 此为:底层操作api
💻 C
📖 第 1 页 / 共 3 页
字号:
	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 + -