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

📄 cb_dicprivate.c

📁 利用micorwindows实现英英词典 此为:底层操作api
💻 C
📖 第 1 页 / 共 3 页
字号:
					*pe++ = '\n';					e_off++;				}else{					//*pp++ = convert_yb(']');					*pp++ = ']';					p_off++;					*pp   = 0;				}				i++;				*brace_flag=FALSE;			}		}else if(ch==0x02){//解释标志			(*Expl_Sn)++;		//expl ++			*SubExpl_Sn=0;		//sun expl reset to 0			*pe++ = '\n';			e_off++;			i++;			*brace_flag=FALSE;			sn_num=get_expl_sn(*Expl_Sn);			*pe++ = (BYTE)((sn_num>>8)&0x00ff);			e_off++;			*pe++ = (BYTE)(sn_num&0x00ff);			e_off++;			*pe++ = ' ';			e_off++;		}else if(ch==0x05){//词性标志			*pe++ = '\n';			e_off++;			i++;			*brace_flag=FALSE;			*Expl_Sn=0;			*SubExpl_Sn=0;		}else if(ch==0x06){//sub解释标志			(*SubExpl_Sn)++;			*pe++ = '\n';			e_off++;			i++;			*brace_flag = FALSE;			sn_num = get_subexpl_sn(*SubExpl_Sn);			*pe++ = (BYTE)((sn_num>>8)&0x00ff);			e_off++;			*pe++ = (BYTE)(sn_num&0x00ff);			e_off++;		}else if(ch== 0x07){//特征标志			*pe++ = '\n';			e_off++;			i++;			*brace_flag=FALSE;		}else{			if(*brace_flag==TRUE){	//音标内容				//ch=convert_yb(ch);				if(*YinBiao_Sn>1){					*pe++ = convert_yb( ch );										e_off++;				}else{					*pp++ = convert_yb( ch );					p_off++;				}			}else{			//下面就是普通的单词字母了				//解释				if(*YinBiao_Sn>0){					if( check_spechar(ch,*(code_data_buf+i+1))){//带帽子的字幕					//下周问lili,看怎么显示					}else{						*pe++ = ch;						e_off++;					}				//单词				}else{					if( check_spechar(ch,*(code_data_buf+i+1))){//带帽子的字幕					//下周问lili,看怎么显示					}else{						*pw++ = ch;						w_off++;					}				}			}			i++;		}	}	*pw = 0;	*pp = 0;	*pe = 0;	*off_w = w_off;	*off_p = p_off;	*off_e = e_off;	return FALSE;}int new_get_code(BQ_Init_t *base_info,BYTE *buffer,BOOL *half_part_flag,LONG *code_offset,BYTE *code_data_buf){	BYTE code_buf[CODE_BUF_LEN+1];	UINT32 read_off;	int i;	read_off=*code_offset;	for(i=0;i<=MAX_LENGTH_ONE_CODE;i++)		*(code_data_buf+i)=0;	code_buf[0]=*(buffer+read_off);	code_buf[1]=*(buffer+read_off+1);	code_buf[2]=*(buffer+read_off+2);	if(*half_part_flag!=FIRST_HALF){		asl3_code_buf(code_buf);	}								if( (code_buf[0]&0x80)==0)	{			read_code_data(base_info,1,code_buf,code_data_buf);		if(*half_part_flag==FIRST_HALF){			*half_part_flag=SECOND_HALF;		}		else {			*half_part_flag=FIRST_HALF;			*code_offset+=1;		}		return(1);	}												//======================================	else if( (code_buf[0]&0xc0)==0x80 )	{		read_code_data(base_info,2,code_buf,code_data_buf);		if(*half_part_flag==FIRST_HALF){			*half_part_flag=SECOND_HALF;			*code_offset+=1;		}		else { 			*half_part_flag=FIRST_HALF;						*code_offset+=2;		}		return(3);	}													//======================================	else if( (code_buf[0]&0xe0)==0xc0 )	{														read_code_data(base_info,3,code_buf,code_data_buf);											*code_offset+=2;				return(4);				}													//======================================	else if( (code_buf[0]&0xf0)==0xe0 )		{							read_code_data(base_info,4,code_buf,code_data_buf);							if(*half_part_flag==FIRST_HALF){ 			*half_part_flag=SECOND_HALF;			*code_offset+=2;		}		else{			*half_part_flag=FIRST_HALF;			*code_offset+=3;		}		return(5);			}													//======================================	else if( code_buf[0]==0xf0 )	{						*code_data_buf=code_buf[1];		*(code_data_buf+1)='\0';		*code_offset+=2;			return(4);			}													//======================================	else{					asl3_code_buf(code_buf);		*code_data_buf=*code_buf;		*(code_data_buf+1)=*(code_buf+1);		*(code_data_buf+2)='\0';		if(*half_part_flag==FIRST_HALF){			*half_part_flag=SECOND_HALF;			*code_offset+=2;		}		else {			*half_part_flag=FIRST_HALF;			*code_offset+=3;		}		return(5);	}		}BOOL new_check_end(UINT Word_Length,LONG cur_off,UINT GetDataSize_Flag){	if((UINT32)cur_off>=Word_Length) return 1;	if(GetDataSize_Flag==1)	{		if(cur_off>300){			return TRUE;		}	}	else if(GetDataSize_Flag==2)	{		if(cur_off>MAX_ITEM_LEN)return TRUE;	//	}	else{;}	return FALSE;}//==============================================//由内存数组中读取例句id列表//==============================================void new_write_example_id(BQ_Init_t *base_info,BOOL *half_part_flag,UCHAR *Data_Buffer,LONG *offset, UINT *lj_id_queue,INT8 *lj_id_num){		BYTE	id_byte[3];	UINT	example_id;	FILE *data_fp;	data_fp=base_info->fp;	if(*half_part_flag){		*half_part_flag=0;		*offset+=1;	}			id_byte[0]=*(Data_Buffer+*offset);	id_byte[1]=*(Data_Buffer+*offset+1);	id_byte[2]=*(Data_Buffer+*offset+2);	*offset+=3;	example_id=(UINT)id_byte[2]*256*256+(UINT)id_byte[1]*256+(UINT)id_byte[0];	*(lj_id_queue + *lj_id_num)=example_id;	*lj_id_num +=1;}//+***************************************************************************//+ Function:	get the word item, phonetic and expain data,example id,saved//+		their data in their relevant buffer//+ Input:	base_info: initliazed data structure//+				cur_id://+				GetDataSize_Flag	0	all word data//+							1	part data//+							2	only item//				fancha_flag 反查状态的标志,//						==0则非反查,输出"例"图标; //						==1则反查浏览得解释解压。不要例句//+ Output:	word_detail->expl,word_detail->phone,word_detail->data.word//+				//+ retrun://+ Destroy://+ Note:	Synopsys:New_Get_Data(...);//+***************************************************************************void cbp_get_word_data(BQ_Init_t *base_info,UINT cur_id,UINT GetDataSize_Flag,		CB_WORD_DETAIL* word_detail,INT fancha_flag){	UINT16	Word_Length;				UINT	Syntax_Icon;	UINT	Syntax_ID;	BYTE	code_data_buf[MAX_LENGTH_ONE_CODE+1];	BOOL	brace_flag=FALSE;	int i;	BYTE    CatchBuffer[BUFFER_SIZE];		UINT out_data_off,w_off,p_off,e_off;					BOOL have_lj_flag;	BOOL half_part_flag;				LONG word_data_offset;	LONG expl_data_offset;	UINT Expl_sn,SubExpl_sn,YinBiao_sn;	word_detail->lj_id_num=0;	if(cur_id > base_info->last_word_id)return;	word_data_offset=get_addr_from_id(base_info,cur_id);	Syntax_Icon=0;	Word_Length=0;	fseek(base_info->fp,word_data_offset,SEEK_SET);	fread((UCHAR *)&Word_Length,DATA_LEN_SIZE,1,base_info->fp);	fseek(base_info->fp,word_data_offset,SEEK_SET);	//read the all record data to CatchBuffer	fread((BYTE*)CatchBuffer,1,Word_Length,base_info->fp);	expl_data_offset=2;	Syntax_Icon=CatchBuffer[expl_data_offset];	expl_data_offset++;	if(Syntax_Icon){		Syntax_ID=CatchBuffer[expl_data_offset]+256*CatchBuffer[expl_data_offset+1]+						256*256*CatchBuffer[expl_data_offset+2] ;		expl_data_offset+=SYNTAX_ID_SIZE;	}else{		Syntax_ID=0xffffffff;	}	for(i=0;i<LJ_QUEUE_SIZE;i++)	       *(word_detail->lj_id_queue+i)=0xffffffff;	half_part_flag=FIRST_HALF;	out_data_off=0;	w_off = 0;	p_off = 0;	e_off = 0;	YinBiao_sn=0;	Expl_sn=0;	SubExpl_sn=0;	while(out_data_off<=MAX_BQDATA_LEN){		new_get_code(base_info,CatchBuffer,&half_part_flag,&expl_data_offset,code_data_buf);		if(fancha_flag==0)			have_lj_flag=write_data_buf(word_detail,&w_off,&p_off,&e_off,code_data_buf,&brace_flag,&Expl_sn,&SubExpl_sn,&YinBiao_sn,1);		else			have_lj_flag=write_data_buf(word_detail,&w_off,&p_off,&e_off,code_data_buf,&brace_flag,&Expl_sn,&SubExpl_sn,&YinBiao_sn,0);		out_data_off = w_off + p_off + e_off;		if(have_lj_flag==TRUE){			new_write_example_id(base_info,&half_part_flag,CatchBuffer,&expl_data_offset,word_detail->lj_id_queue,&word_detail->lj_id_num);		}		if(new_check_end(Word_Length,expl_data_offset,GetDataSize_Flag)==TRUE)break;	}}//***************************************************//由例句ID拿到例句的存储位置信息//input :	bq_base_info//			example_id//return :the offset of example sentance offset in file//***************************************************LONG cbp_get_ljaddr_from_id(BQ_Init_t* base_info,UINT example_id){	UINT id_temp;	LONG data_offset;	UINT16 data_len;	UINT32	id_index_unit;		FILE *dict_fp;		dict_fp=base_info->fp;	id_temp=example_id/128;	data_offset=(LONG)(id_temp*PHY_INDEX_LEN+base_info->EXAMPLE_INDEX_OFFSET);	fseek(dict_fp,data_offset,SEEK_SET);	id_index_unit=0;	fread(&id_index_unit,sizeof(UINT32),1,dict_fp);	data_offset=(LONG)id_index_unit;	id_temp=example_id%128;	while(id_temp){		fseek(dict_fp,data_offset,SEEK_SET);		data_len=0;		fread(&data_len,sizeof(UINT16),1,dict_fp);			data_offset=(LONG)data_len+data_offset;		id_temp--;	}	return data_offset; }//+******************************************//+ function name :write_lj_data//+ Function:	将code_data_buf中解出来的数据追加到out_data_buf中out_data_off偏移位置//+ Input:   	//+				code_data_buf//+	return:		FALSE--=no liju ; TRUE have_liju//+ Output:		output_off //+				output_buf//+ Destroy://+******************************************void write_lj_data(UCHAR *output_buf,UINT *output_off,UCHAR *code_buf)	{	UINT off;	UCHAR ch;	UCHAR ch2;	int i=0;	off=*output_off;	while(i<=MAX_LENGTH_ONE_CODE){		ch=*(code_buf+i);		if(off==0){							*(output_buf+off)=LJ_ICON_1;			off++;			*(output_buf+off)=LJ_ICON_2;			off++;						*(output_buf+off)=LJ_ICON_3;			off++;					}		else if(ch==0)		{			break;			}		else if(ch==0x03)		{#if 0			*(output_buf+off)='<';			off++;			*(output_buf+off)='T';			off++;#endif			*(output_buf+off)='\n';			off++;			i++;			*(output_buf+off)=LJ_ICON_1;			off++;			*(output_buf+off)=LJ_ICON_2;			off++;						*(output_buf+off)=LJ_ICON_3;			off++;						*(output_buf+off)=0;			*output_off=off;				i++;		}		else{			//特殊字符如何显示			if(check_spechar(ch,*(code_buf+i+1)) )			{				*(output_buf+off)='<';				off++;				*(output_buf+off)='W';				off++;				*(output_buf+off)='>';				off++;				i++;				ch2=*(code_buf+i);				*(output_buf+off)=convert_spechar(ch,ch2);				off++;				*(output_buf+off)='<';				off++;				*(output_buf+off)='N';				off++;				*(output_buf+off)='>';			}			else{				*(output_buf+off)=ch;			}			i++;			off++;		}	}	*(output_buf+off)=0;	*output_off=off;}//+******************************************//+ function name :comm_Get_data//+ Function:	decode function   //现在只给例句用,//+ Input:   	base_info//+				data_Addr		数据CODE 地址//+				output_buf//+	output :	output_buf//+ retrun://+ Destroy://+ Note://+******************************************void cbp_comm_get_data(BQ_Init_t* base_info,LONG data_fp_off,		UINT word_length,BYTE *output_buf){	BOOL half_part_flag=FIRST_HALF;	BYTE code_data_buf[MAX_LENGTH_ONE_CODE+1];	ULONG comm_data_fp_off=data_fp_off;	ULONG start_off;	UINT  output_off;	start_off=data_fp_off;	*output_buf=0;	output_off=0;	while(strlen(output_buf)<1500){		get_code(base_info,&half_part_flag,&comm_data_fp_off,code_data_buf);		strcat(output_buf,code_data_buf);		write_lj_data(output_buf,&output_off,code_data_buf);		if( (comm_data_fp_off-start_off)>= word_length){				break;								}		if(code_data_buf[0]==0){				break;		}	}}#pragma far_pic_off#pragma far_pid_off

⌨️ 快捷键说明

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