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

📄 carddbi.c

📁 国家ASIC工程中心使用的嵌入式操作系统
💻 C
📖 第 1 页 / 共 3 页
字号:
	 for (count =0;count<(inf->cpostalcode);count++)
	{
	   pos = 2+count+inf->ctel+inf->cmob+inf->cbp+inf->cfax+inf->cunit+inf->cemail+inf->caddress+inf->cQQ+inf->chabit;
	   if((*inf->recordinf[pos])!= 0)
	        strcpy(thisptr->postalcode[count],inf->recordinf[pos]);
	}
	for(count=inf->cpostalcode;count<MAXPOSTALCODE;count++)//对剩下的数据赋零操作
	{
		memset(thisptr->postalcodebuf[count],0x0,MAXPOSTLEN);	
	}	
	return ASIX_OK;
		

}







void  CardAddRecordToDB(CALLCARD*thisptr,SAVEMODE mode)
{
   U8 count;
   U8 alllen = 0;
   U8 *dataptr;
   U8 *tmpptr;
   U16  lastpos,lastlen;
   U32  id;
   U8 tmprel;  //转换关系到ASCII码
   U8  tmplen;//用于计算拷贝字符串到数据块的长度
   //RecordStrLens  lens;
   if(thisptr ==NULL)  return;//asix_error

   //***********************************
   alllen = 12*sizeof(U16); //所有字符串的索引指针的占用的地址空间
   thisptr->namelen = (U8)strlen(thisptr->namebuf)+1;//首先计算各字符串的长度
   thisptr->namepos = 12*sizeof(U16);
   alllen += thisptr->namelen;
   
   lastpos = thisptr->namepos;
   lastlen = thisptr->namelen;
   
 
	for(count=0;count<MAXMOBNUM;count++)
	{
		if((*(thisptr->mobile[count]))!= 0)
		{
		   thisptr->moblen[count]=(U8)strlen(thisptr->mobbuf[count])+1+sizeof(U16);
		   alllen +=thisptr->moblen[count];
		   thisptr->mobpos[count] = lastpos +lastlen;
		   lastpos = thisptr->mobpos[count];
		   lastlen = thisptr->moblen[count];        
		}
	}

	for(count=0;count<MAXTELNUM;count++)
	{
		if((*(thisptr->tel[count]))!=0)
		{
		   thisptr->tellen[count] = (U8)strlen(thisptr->telbuf[count])+1+sizeof(U16);//包括了一个偏移的长度
		   thisptr->telpos[count] = lastpos+lastlen;
		   alllen += thisptr->tellen[count];   //添加一个偏移的长度
		   lastpos = thisptr->telpos[count];
		   lastlen = thisptr->tellen[count];
		}
	}

   thisptr->rellen = (U8)strlen("0")+1;
   thisptr->relpos = lastpos + lastlen;
   alllen += thisptr->rellen;
   lastpos = thisptr->relpos;
   lastlen = 2;
   
	for(count=0;count<MAXBPNUM;count++)
	{
		if((*(thisptr->bp[count]))!=0)
		{
		   thisptr->bplen[count] = (U8)strlen(thisptr->bpbuf[count])+1+sizeof(U16);
		   alllen +=thisptr->bplen[count];
		   thisptr->bppos[count] = lastpos+lastlen;
		   lastpos =thisptr->bppos[count];
		   lastlen = thisptr->bplen[count];
		}
	}

	//保存FAX参数
	for(count=0;count<MAXFAX;count++)
	{
		if((*(thisptr->fax[count]))!=0)
		{
		   thisptr->faxlen[count] = (U8)strlen(thisptr->faxbuf[count])+1+sizeof(U16);
		   alllen += thisptr->faxlen[count];
		   thisptr->faxpos[count] = lastpos+lastlen;
		   lastpos =thisptr->faxpos[count];
		   lastlen = thisptr->faxlen[count];
		}
	}


	//保存单位参数
	for(count=0;count<MAXUNIT;count++)
	{
		if((*(thisptr->unit[count]))!=0)
		{
		   thisptr->unitlen[count] = (U8)strlen(thisptr->unitbuf[count])+1+sizeof(U16);
		   alllen += thisptr->unitlen[count];
		   thisptr->unitpos[count] = lastpos+lastlen;
		   lastpos =thisptr->unitpos[count];
		   lastlen = thisptr->unitlen[count];
		}
	}

	//保存EMAIL参数
	for(count=0;count<MAXEMAIL;count++)
	{
		if((*(thisptr->email[count]))!=0)
		{
		   thisptr->emaillen[count] = (U8)strlen(thisptr->emailbuf[count])+1+sizeof(U16);
		   alllen += thisptr->emaillen[count];
		   thisptr->emailpos[count] = lastpos+lastlen;
		   lastpos =thisptr->emailpos[count];
		   lastlen = thisptr->emaillen[count];
		}
	}

	//保存地址参数
	for(count=0;count<MAXADDRESS;count++)
	{
		if((*(thisptr->address[count]))!=0)
		{
		   thisptr->addresslen[count] = (U8)strlen(thisptr->addressbuf[count])+1+sizeof(U16);
		   alllen += thisptr->addresslen[count];
		   thisptr->addresspos[count] = lastpos+lastlen;
		   lastpos =thisptr->addresspos[count];
		   lastlen = thisptr->addresslen[count];
		}
	}   

	//保存QQ参数
	for(count=0;count<MAXQQ;count++)
	{
		if((*(thisptr->QQ[count]))!=0)
		{
		   thisptr->QQlen[count] = (U8)strlen(thisptr->QQbuf[count])+1+sizeof(U16);
		   alllen += thisptr->QQlen[count];
		   thisptr->QQpos[count] = lastpos+lastlen;
		   lastpos =thisptr->QQpos[count];
		   lastlen = thisptr->QQlen[count];
		}
	}   

	//保存爱好参数
	for(count=0;count<MAXQQ;count++)
	{
		if((*(thisptr->habbit[count]))!=0)
		{
		   thisptr->habbitlen[count] = (U8)strlen(thisptr->habbitbuf[count])+1+sizeof(U16);
		   alllen += thisptr->habbitlen[count];
		   thisptr->habbitpos[count] = lastpos+lastlen;
		   lastpos =thisptr->habbitpos[count];
		   lastlen = thisptr->habbitlen[count];
		}
	}      

	//保存邮编参数
	for(count=0;count<MAXPOSTALCODE;count++)
	{
		if((*(thisptr->postalcode[count]))!=0)
		{
		   thisptr->postalcodelen[count] = (U8)strlen(thisptr->postalcodebuf[count])+1+sizeof(U16);
		   alllen += thisptr->postalcodelen[count];
		   thisptr->postalcodepos[count] = lastpos+lastlen;
		   lastpos =thisptr->postalcodepos[count];
		   lastlen = thisptr->postalcodelen[count];
		}
	}         

//*************************************
   dataptr = (U8 *)Lmalloc( alllen);  //给数据块留余量
   if( dataptr == NULL )
      return; //ASIX_ERROR;
   memset(dataptr,0x0,alllen);
   tmpptr = dataptr;
   memcpy( tmpptr, &(thisptr->namepos), sizeof(U16));  //下面开始存储数据块
   tmpptr = dataptr + thisptr->namepos;
   tmplen = (U8)strlen(thisptr->name)+1;//包括字符/0,计算字符 串的长度
   memcpy(tmpptr,thisptr->name,tmplen);



	tmpptr = dataptr +sizeof(U16);
	for(count=0;count<MAXMOBNUM; count++)
	{
		if((*(thisptr->mobile[count]))==0)
		{     
			memset(tmpptr,0x0,sizeof(U16));
			//break;
			goto out1;
		}else{   //如果数据不为空,则存储数据,但是下一个偏移量等下次判断
			  memcpy(tmpptr,&(thisptr->mobpos[count]),sizeof(U16));
			  tmplen = (U8)strlen(thisptr->mobile[count])+1;//计算字符串长度
			  memcpy(dataptr+thisptr->mobpos[count]+sizeof(U16),thisptr->mobile[count],tmplen);
			  tmpptr =dataptr+thisptr->mobpos[count];	      
		}
		if(count == MAXMOBNUM - 1)//如果已经存储满了数据,则在最后一个数据的偏移值复制0
		{
			memset(dataptr+thisptr->mobpos[count],0x0,sizeof(U16));
		}
	}


   out1:
   tmpptr = dataptr + 2*sizeof(U16);
   for(count=0;count<MAXTELNUM; count++)
   {
   	if((*(thisptr->tel[count]))==0)
   	{     
   		memset(tmpptr,0x0,sizeof(U16));
   		goto out2;
   		//break;
   	}else{   //如果数据不为空,则存储数据,但是下一个偏移量等下次判断
   	      memcpy(tmpptr,&(thisptr->telpos[count]),sizeof(U16));
   	      tmplen = (U8)strlen(thisptr->tel[count])+1;
   	      memcpy(dataptr+thisptr->telpos[count]+sizeof(U16),thisptr->tel[count],tmplen);
   	      tmpptr =dataptr+thisptr->telpos[count];	      
   	}
   	 if(count == MAXTELNUM- 1)//如果已经存储满了数据,则在最后一个数据的偏移值复制0
   	{
   		memset(dataptr+thisptr->telpos[count],0x0,sizeof(U16));
   	}
   }


   out2:
   tmprel = (U8)(thisptr->relation)+0x30;//转换成ASCII码
   tmpptr = dataptr + 3*sizeof(U16);
   memcpy( tmpptr, &(thisptr->relpos), sizeof(U16));  //下面开始存储数据块
   tmpptr = dataptr + thisptr->relpos;
   memcpy(tmpptr,&tmprel,1);



   tmpptr = dataptr+4*sizeof(U16);
    for(count=0;count<MAXBPNUM; count++)
   {
   	if((*(thisptr->bp[count]))==0)
   	{     
   		memset(tmpptr,0x0,sizeof(U16));
   		goto out3;
   		//break;
   	}else{   //如果数据不为空,则存储数据,但是下一个偏移量等下次判断
    	  memcpy(tmpptr,&(thisptr->bppos[count]),sizeof(U16));  	
    	  tmplen =(U8) strlen(thisptr->bp[count])+1;
   	      memcpy(dataptr+thisptr->bppos[count]+sizeof(U16),thisptr->bp[count],tmplen);
   	      tmpptr =dataptr+thisptr->bppos[count];	      
   	}
   	 if(count == MAXBPNUM - 1)//如果已经存储满了数据,则在最后一个数据的偏移值复制0
   	{
   		memset(dataptr+thisptr->bppos[count],0x0,sizeof(U16));
   	}
   }
    
  out3:
  //保存传真	
   tmpptr = dataptr+5*sizeof(U16);
   for(count=0;count<MAXFAX;count++)
   {
   	if((*(thisptr->fax[count]))==0)
   	{     
   		memset(tmpptr,0x0,sizeof(U16));
   		goto out4;
   		//break;
   	}else{   //如果数据不为空,则存储数据,但是下一个偏移量等下次判断
		memcpy(tmpptr,&(thisptr->faxpos[count]),sizeof(U16));  	
		tmplen =(U8) strlen(thisptr->fax[count])+1;
		memcpy(dataptr+thisptr->faxpos[count]+sizeof(U16),thisptr->fax[count],tmplen);
		tmpptr =dataptr+thisptr->faxpos[count];	      
   	}
   	 if(count == MAXFAX- 1)//如果已经存储满了数据,则在最后一个数据的偏移值复制0
   	{
   		memset(dataptr+thisptr->faxpos[count],0x0,sizeof(U16));
   	}
   }

out4:
  //保存单位	
   tmpptr = dataptr+6*sizeof(U16);
   for(count=0;count<MAXUNIT;count++)
   {
   	if((*(thisptr->unit[count]))==0)
   	{     
   		memset(tmpptr,0x0,sizeof(U16));
   		goto out5;
   		//break;
   	}else{   //如果数据不为空,则存储数据,但是下一个偏移量等下次判断
		memcpy(tmpptr,&(thisptr->unitpos[count]),sizeof(U16));  	
		tmplen =(U8) strlen(thisptr->unit[count])+1;
		memcpy(dataptr+thisptr->unitpos[count]+sizeof(U16),thisptr->unit[count],tmplen);
		tmpptr =dataptr+thisptr->unitpos[count];	      
   	}
   	 if(count == MAXUNIT- 1)//如果已经存储满了数据,则在最后一个数据的偏移值复制0
   	{
   		memset(dataptr+thisptr->unitpos[count],0x0,sizeof(U16));
   	}
   }



out5:
  //保存EMAIL	
	tmpptr = dataptr+7*sizeof(U16);
	for(count=0;count<MAXEMAIL;count++)
   {
   	if((*(thisptr->email[count]))==0)
   	{     
   		memset(tmpptr,0x0,sizeof(U16));
   		goto out6;
   		//break;
   	}else{   //如果数据不为空,则存储数据,但是下一个偏移量等下次判断
		memcpy(tmpptr,&(thisptr->emailpos[count]),sizeof(U16));  	
		tmplen =(U8) strlen(thisptr->email[count])+1;
		memcpy(dataptr+thisptr->emailpos[count]+sizeof(U16),thisptr->email[count],tmplen);
		tmpptr =dataptr+thisptr->emailpos[count];	      
   	}
   	 if(count == MAXEMAIL- 1)//如果已经存储满了数据,则在最后一个数据的偏移值复制0
   	{
   		memset(dataptr+thisptr->emailpos[count],0x0,sizeof(U16));
   	}
   }

out6:
  //保存地址	
   tmpptr = dataptr+8*sizeof(U16);
    for(count=0;count<MAXADDRESS;count++)
   {
   	if((*(thisptr->address[count]))==0)
   	{     
   		memset(tmpptr,0x0,sizeof(U16));
   		goto out7;
   		//break;
   	}else{   //如果数据不为空,则存储数据,但是下一个偏移量等下次判断
		memcpy(tmpptr,&(thisptr->addresspos[count]),sizeof(U16));  	
		tmplen =(U8) strlen(thisptr->address[count])+1;
		memcpy(dataptr+thisptr->addresspos[count]+sizeof(U16),thisptr->address[count],tmplen);
		tmpptr =dataptr+thisptr->addresspos[count];	      
   	}
   	 if(count == MAXADDRESS- 1)//如果已经存储满了数据,则在最后一个数据的偏移值复制0
   	{
   		memset(dataptr+thisptr->addresspos[count],0x0,sizeof(U16));
   	}
   }



out7:
  //保存QQ	
   tmpptr = dataptr+9*sizeof(U16);
    for(count=0;count<MAXQQ;count++)
   {
   	if((*(thisptr->QQ[count]))==0)
   	{     
   		memset(tmpptr,0x0,sizeof(U16));
   		goto out8;
   		//break;
   	}else{   //如果数据不为空,则存储数据,但是下一个偏移量等下次判断
		memcpy(tmpptr,&(thisptr->QQpos[count]),sizeof(U16));  	
		tmplen =(U8) strlen(thisptr->QQ[count])+1;
		memcpy(dataptr+thisptr->QQpos[count]+sizeof(U16),thisptr->QQ[count],tmplen);
		tmpptr =dataptr+thisptr->QQpos[count];	      
   	}
   	if(count == MAXQQ- 1)//如果已经存储满了数据,则在最后一个数据的偏移值复制0
   	{
   		memset(dataptr+thisptr->QQpos[count],0x0,sizeof(U16));
   	}
   }


out8:
  //保存爱好	
	tmpptr = dataptr+10*sizeof(U16);
	for(count=0;count<MAXHABIT;count++)
   {
   	if((*(thisptr->habbit[count]))==0)
   	{     
   		memset(tmpptr,0x0,sizeof(U16));
   		goto out9;
   		//break;
   	}else{   //如果数据不为空,则存储数据,但是下一个偏移量等下次判断
		memcpy(tmpptr,&(thisptr->habbitpos[count]),sizeof(U16));  	
		tmplen =(U8) strlen(thisptr->habbit[count])+1;
		memcpy(dataptr+thisptr->habbitpos[count]+sizeof(U16),thisptr->habbit[count],tmplen);
		tmpptr =dataptr+thisptr->habbitpos[count];	      
   	}
   	 if(count == MAXHABIT- 1)//如果已经存储满了数据,则在最后一个数据的偏移值复制0
   	{
   		memset(dataptr+thisptr->habbitpos[count],0x0,sizeof(U16));
   	}
   }

out9:
  //保存邮编
	tmpptr = dataptr+11*sizeof(U16);
	for(count=0;count<MAXPOSTALCODE;count++)
   {
   	if((*(thisptr->postalcode[count]))==0)
   	{     
   		memset(tmpptr,0x0,sizeof(U16));
   		goto out10;
   		//break;
   	}else{   //如果数据不为空,则存储数据,但是下一个偏移量等下次判断
		memcpy(tmpptr,&(thisptr->postalcodepos[count]),sizeof(U16));  	
		tmplen =(U8) strlen(thisptr->postalcode[count])+1;
		memcpy(dataptr+thisptr->postalcodepos[count]+sizeof(U16),thisptr->postalcode[count],tmplen);
		tmpptr =dataptr+thisptr->postalcodepos[count];	      
   	}
   	if(count == MAXPOSTALCODE- 1)//如果已经存储满了数据,则在最后一个数据的偏移值复制0
   	{
   		memset(dataptr+thisptr->postalcodepos[count],0x0,sizeof(U16));
   	}
   }
out10:

  	
  if(mode==SAVE_INNEW)
  {
  	id = LocalAddRecord(cardlacb,dataptr,alllen);
  } else
  if(mode ==SAVE_INEDIT)
  {
  	id = LocalModifyRecord( cardlacb,thisptr->ID, dataptr, alllen);
  }

  Lfree(dataptr);//保存数据完毕,释放数据块

  
}



⌨️ 快捷键说明

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