📄 carddbi.c
字号:
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 + -