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

📄 dcw_pb_api.c

📁 重写的展迅电话本, 重写的展迅电话本, 重写的展迅电话本,
💻 C
📖 第 1 页 / 共 5 页
字号:
        }

        if(bcdCode > 9)
        {
            break;
        }

        if(i >= 8)
        {/* cmpNumPtr->low 保存8位电话号码 */
            cmpNumPtr->high <<= 4;
            cmpNumPtr->high |= ((cmpNumPtr->low & 0xF0000000) >> 28);
        }

        cmpNumPtr->low <<= 4;
        cmpNumPtr->low |= bcdCode;
    }

    cmpNumPtr->len = MIN(DCW_PB_MAX_NUMBER_LEN,i);
}
/****************************************************************************
 *  Function name : DCW_PB_twoRecordEqual
 *  Description   : 比较两条记录,并把比较结果返回
 *  Param         : recordSrc : 记录1
                    recordDst : 记录2 
                    type      : 记录存储信息    
 *  Return        : uint8       比较结果                    
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
uint8 DCW_PB_twoRecordEqual(void *recordSrcPtr,void *recordDstPtr,PHONEBOOK_STORAGE_E type)
{
    uint8           ret = 0;
    T_PB_NV_RECORD  *nvRecordScrPtr;
    T_PB_NV_RECORD  *nvRecordDstPtr;
    T_PB_SIM_RECORD *simRecordScrPtr;
    T_PB_SIM_RECORD *simRecordDstPtr;

    if(type == PHONEBOOK_SIM_STORAGE)
    {
        simRecordScrPtr = (T_PB_SIM_RECORD *)recordSrcPtr;
        simRecordDstPtr = (T_PB_SIM_RECORD *)recordDstPtr;

        if(DCW_PB_compareByChar(simRecordScrPtr->outerName.array, simRecordDstPtr->outerName.array,
                                simRecordScrPtr->outerName.len,   simRecordDstPtr->outerName.len) != 0)
        {
            ret |= PB_NAME_MODIFY_E;
        }
        if(DCW_PB_compareByChar(simRecordScrPtr->num.number, simRecordDstPtr->num.number,
                                simRecordScrPtr->num.len,   simRecordDstPtr->num.len) != 0)
        {
            ret |= PB_PHONE_NUMBER_0_MODIFY_E;
        }
    }
    else
    {
        nvRecordScrPtr = (T_PB_NV_RECORD *)recordSrcPtr;
        nvRecordDstPtr = (T_PB_NV_RECORD *)recordDstPtr;

        if(DCW_PB_compareByChar(nvRecordScrPtr->outerName.array, nvRecordDstPtr->outerName.array,
                                nvRecordScrPtr->outerName.len,   nvRecordDstPtr->outerName.len) != 0)
        {
            ret |= PB_NAME_MODIFY_E;
        }
        if(DCW_PB_compareByChar(nvRecordScrPtr->num[0].number, nvRecordDstPtr->num[0].number,
                                nvRecordScrPtr->num[0].len,   nvRecordDstPtr->num[0].len) != 0)
        {
            ret |= PB_PHONE_NUMBER_0_MODIFY_E;
        }
        if(DCW_PB_compareByChar(nvRecordScrPtr->num[1].number, nvRecordDstPtr->num[1].number,
                                nvRecordScrPtr->num[1].len,   nvRecordDstPtr->num[1].len) != 0)
        {
            ret |= PB_PHONE_NUMBER_1_MODIFY_E;
        }
        if(DCW_PB_compareByChar(nvRecordScrPtr->num[2].number, nvRecordDstPtr->num[2].number,
                                nvRecordScrPtr->num[2].len,   nvRecordDstPtr->num[2].len) != 0)
        {
            ret |= PB_PHONE_NUMBER_2_MODIFY_E;
        }
        if(DCW_PB_compareByChar(nvRecordScrPtr->mail.array, nvRecordDstPtr->mail.array,
                                nvRecordScrPtr->mail.len,   nvRecordDstPtr->mail.len) != 0)
        {
            ret |= PB_MAIL_MODIFY_E;
        }
        if(nvRecordScrPtr->groupId != nvRecordDstPtr->groupId)
        {
            ret |= PB_GROUP_MODIFY_E;
        }
    }

    return ret;
}
/****************************************************************************
 *  Function name : DCW_PB_adjustNumList
 *  Description   : 当增加记录,删除记录,修改记录时,Number List也要改变
 *  Param         : recordSrc : 改前记录
                    recordDst : 改后记录 
                    type      : 记录存储信息    
                    flag      : 记录改变前后的差异信息  
 *  Return        : None                    
 *  Author:       : *************
 *  Note          : None 
 *****************************************************************************/
void DCW_PB_adjustNumList(void * recordSrcPtr,void *recordDstPtr,PHONEBOOK_STORAGE_E type,E_PB_MODIFY_FLAG flag)
{
    uint16                      i;   
    T_PB_NV_RECORD              *nvRecordSrcPtr;
    T_PB_NV_RECORD              *nvRecordDstPtr;
    T_PB_SIM_RECORD             *simRecordSrcPtr;
    T_PB_SIM_RECORD             *simRecordDstPtr;
    T_PB_SEARCH_NUMBER_ITEM     numItemSrc;
    T_PB_SEARCH_NUMBER_ITEM     numItemDst;

    if(type == PHONEBOOK_SIM_STORAGE)
    {
        simRecordSrcPtr = (T_PB_SIM_RECORD *)recordSrcPtr;
        simRecordDstPtr = (T_PB_SIM_RECORD *)recordDstPtr;       
    }
    else
    {
        nvRecordSrcPtr = (T_PB_NV_RECORD *)recordSrcPtr;
        nvRecordDstPtr = (T_PB_NV_RECORD *)recordDstPtr;
    }

    if(type == PHONEBOOK_SIM_STORAGE)
    {
        if((flag & PB_PHONE_NUMBER_0_MODIFY_E) == PB_PHONE_NUMBER_0_MODIFY_E)
        {
            DCW_PB_getCompareNumber(&simRecordSrcPtr->num,&numItemSrc.cmpNum);
            numItemSrc.type     = PHONEBOOK_SIM_STORAGE;
            numItemSrc.id       = simRecordSrcPtr->id;
            numItemSrc.offset   = 0;

            DCW_PB_getCompareNumber(&simRecordDstPtr->num,&numItemDst.cmpNum);
            numItemDst.type     = PHONEBOOK_SIM_STORAGE;
            numItemDst.id       = simRecordDstPtr->id;
            numItemDst.offset   = 0;

            DCW_PB_modifyOneItemInNumList(&numItemSrc,&numItemDst);
        }
        else if((flag & PB_ADD_E) == PB_ADD_E)
        {
            DCW_PB_getCompareNumber(&simRecordSrcPtr->num,&numItemSrc.cmpNum);
            numItemSrc.type     = PHONEBOOK_SIM_STORAGE;
            numItemSrc.id       = simRecordSrcPtr->id;
            numItemSrc.offset   = 0;
            
            DCW_PB_InsertOneItemToNumList(&numItemSrc);
        }
        else if((flag & PB_DELETE_E) == PB_DELETE_E)
        {
            DCW_PB_getCompareNumber(&simRecordDstPtr->num,&numItemDst.cmpNum);
            numItemDst.type     = PHONEBOOK_SIM_STORAGE;
            numItemDst.id       = simRecordDstPtr->id;
            numItemDst.offset   = 0;

            DCW_PB_deleteOneItemFromNumList(&numItemDst);
        }
        else
        {
        }
    }
    else
    {
        BOOLEAN   flagBuf[3] = {FALSE, FALSE, FALSE};

        if((flag & PB_PHONE_NUMBER_0_MODIFY_E) == PB_PHONE_NUMBER_0_MODIFY_E)
        {
            flagBuf[0] = TRUE;
        }
        if((flag & PB_PHONE_NUMBER_1_MODIFY_E) == PB_PHONE_NUMBER_1_MODIFY_E)
        {
            flagBuf[1] = TRUE;
        }
        if((flag & PB_PHONE_NUMBER_2_MODIFY_E) == PB_PHONE_NUMBER_2_MODIFY_E)
        {
            flagBuf[2] = TRUE;
        }
        
        if(flagBuf[0] == TRUE || flagBuf[1] == TRUE || flagBuf[2] == TRUE)
        {
            for(i = 0; i < 3; i++)
            {
                if(flagBuf[i] == 1)
                {
                    if(nvRecordSrcPtr->num[i].len == 0)
                    {
                        DCW_PB_getCompareNumber(&nvRecordDstPtr->num[i],&numItemDst.cmpNum);
                        numItemDst.type     = PHONEBOOK_NV_STORAGE;
                        numItemDst.id       = nvRecordDstPtr->id;
                        numItemDst.offset   = 0;

                        DCW_PB_deleteOneItemFromNumList(&numItemDst);
                    }
                    else if(nvRecordDstPtr->num[i].len == 0)
                    {
                        DCW_PB_getCompareNumber(&nvRecordSrcPtr->num[i],&numItemSrc.cmpNum);
                        numItemSrc.type     = PHONEBOOK_NV_STORAGE;
                        numItemSrc.id       = nvRecordSrcPtr->id;
                        numItemSrc.offset   = i;

                        DCW_PB_InsertOneItemToNumList(&numItemSrc);
                    }
                    else
                    {
                        DCW_PB_getCompareNumber(&nvRecordSrcPtr->num[i],&numItemSrc.cmpNum);
                        numItemSrc.type     = PHONEBOOK_NV_STORAGE;
                        numItemSrc.id       = nvRecordSrcPtr->id;
                        numItemSrc.offset   = i;

                        DCW_PB_getCompareNumber(&nvRecordDstPtr->num[i],&numItemDst.cmpNum);
                        numItemDst.type     = PHONEBOOK_NV_STORAGE;
                        numItemDst.id       = nvRecordDstPtr->id;
                        numItemDst.offset   = 0;

                        DCW_PB_modifyOneItemInNumList(&numItemSrc,&numItemDst);
                    }
                }
            }
        }
        else if((flag & PB_ADD_E) == PB_ADD_E)
        {
            for(i = 0; i < DCW_PB_MAX_NV_PHONE_NUM;i++)
            {
                if(nvRecordSrcPtr->num[i].len != 0)
                {
                    DCW_PB_getCompareNumber(&nvRecordSrcPtr->num[i],&numItemSrc.cmpNum);
                    numItemSrc.type     = PHONEBOOK_NV_STORAGE;
                    numItemSrc.id       = nvRecordSrcPtr->id;
                    numItemSrc.offset   = i;

                    DCW_PB_InsertOneItemToNumList(&numItemSrc);
                }
            }
        }
        else if((flag & PB_DELETE_E) == PB_DELETE_E)
        {
            for(i = 0; i < DCW_PB_MAX_NV_PHONE_NUM;i++)
            {
                if(nvRecordDstPtr->num[i].len != 0)
                {
                    DCW_PB_getCompareNumber(&nvRecordDstPtr->num[i],&numItemDst.cmpNum);
                    numItemDst.type     = PHONEBOOK_NV_STORAGE;
                    numItemDst.id       = nvRecordDstPtr->id;
                    numItemDst.offset   = i;

                    DCW_PB_deleteOneItemFromNumList(&numItemDst);
                }
            }
        }
        else
        {
        }
    }
}
/****************************************************************************
 *  Function name : DCW_PB_InsertOneItemToNumList
 *  Description   : 向电话号码查询列表里添加一个条目
 *  Param         : item :添加的项目
 *  Return        : None
 *  Author:       : *************
 *  Note          : None
 *****************************************************************************/
void DCW_PB_InsertOneItemToNumList(T_PB_SEARCH_NUMBER_ITEM *itemPtr)
{
    uint16      i;
    uint16      startPos;
    uint16      endPos;
    uint16      midPos;
    uint16      insertPos;
    int8        cmpRet;
    T_PB_SEARCH_RETURN_INFO     searchInfo;

    DCW_PB_twoSplitSearch(0, g_pb.numSearchList.count, (void *)itemPtr, DCW_PB_comparePhoneNumber,&searchInfo);

    if(searchInfo.equal == TRUE)
    {
    }
    else if(g_pb.numSearchList.count < g_pb.numSearchList.maxAmount)
    {
        /* 插入 */
        for(i = g_pb.numSearchList.count; i > searchInfo.pos; i--)
        {
            g_pb.numSearchList.ptr[i] = g_pb.numSearchList.ptr[i - 1];
        }
        g_pb.numSearchList.ptr[searchInfo.pos] = *itemPtr;

        g_pb.numSearchList.count++;
    }
    else
    {
    }
}

/****************************************************************************
 *  Function name : DCW_PB_modifyOneItemInNumList
 *  Description   : 修改电话号码查询列表里的一个条目
 *  Param         : itemSrc : 修改前的条目
                    itemDst : 修改后的条目
 *  Return        : None
 *  Author:       : *************
 *  Note          : None
 *****************************************************************************/
void DCW_PB_modifyOneItemInNumList(T_PB_SEARCH_NUMBER_ITEM *itemSrcPtr,T_PB_SEARCH_NUMBER_ITEM *itemDstPtr)
{
    uint16                      i;
    T_PB_SEARCH_RETURN_INFO     searchInfoSrc;
    T_PB_SEARCH_RETURN_INFO     searchInfoDst;

    DCW_PB_twoSplitSearch(0, g_pb.numSearchList.count, (void *)itemSrcPtr, DCW_PB_comparePhoneNumber,&searchInfoSrc);
    DCW_PB_twoSplitSearch(0, g_pb.numSearchList.count, (void *)itemDstPtr, DCW_PB_comparePhoneNumber,&searchInfoDst);

    if(searchInfoDst.equal == FALSE)
    {   /* 没找到 */
        DCW_PB_InsertOneItemToNumList(itemSrcPtr);
        return;
    }

    if(searchInfoSrc.pos < searchInfoDst.pos)
    {
        for(i = searchInfoDst.pos; i > searchInfoSrc.pos; i--)
        {
            g_pb.numSearchList.ptr[i] = g_pb.numSearchList.ptr[i - 1];
        }
        g_pb.numSearchList.ptr[searchInfoSrc.pos] = *itemSrcPtr;
    }
    else if(searchInfoSrc.pos > searchInfoDst.pos)
    {
        searchInfoSrc.pos--;

        for(i = searchInfoDst.pos; i < searchInfoSrc.pos; i++)
        {
            g_pb.numSearchList.ptr[i] = g_pb.numSearchList.ptr[i + 1];
        }
        g_pb.numSearchList.ptr[searchInfoSrc.pos] = *itemSrcPtr;
    }
    else
    {
        g_pb.numSearchList.ptr[searchInfoSrc.pos] = *itemSrcPtr;
    }
}
/****************************************************************************
 *  Function name : DCW_PB_deleteOneItemFromNumList
 *  Description   : 删除电话号码查询列表里的一个条目
 *  Param         : item :删除的条目
 *  Return        : None
 *  Author:       : *************
 *  Note          : None
 *****************************************************************************/
void DCW_PB_deleteOneItemFromNumList(T_PB_SEARCH_NUMBER_ITEM *itemPtr)
{
    uint16                      i;
    T_PB_SEARCH_RETURN_INFO     searchInfo;

    DCW_PB_twoSplitSearch(0, g_pb.numSearchList.count, (void *)itemPtr, DCW_PB_comparePhoneNumber,&searchInfo);

    if(searchInfo.equal == TRUE)
    {
        for(i = searchInfo.pos; i < g_pb.numSearchList.count - 1; i++)
        {
            g_pb.numSearchList.ptr[i] = g_pb.numSearchList.ptr[i + 1];
        }
        g_pb.numSearchList.count--;
    }
}
/****************************************************************************
 *  Function name : DCW_PB_searchNumInNumList
 *  Description   : 查找一个电话号码,得到这个电话号码对应的存储位置
 *  Param         : bcdNum : 要查找的电话号码
                    type   : 存储在哪个存储器
                    id   : 载存储器上的位置
 *  Return        : 查找是否成功
 *  Author:       : *************
 *  Note          : None
 *****************************************************************************/
BOOLEAN DCW_PB_searchNumInNumList(T_PB_BCD_NUMBER *bcdNumPtr,uint16 *idPtr,PHONEBOOK_STORAGE_E *typePtr)
{
    T_PB_SEARCH_NUMBER_ITEM     numItem;
    T_PB_SEARCH_RETURN_INFO     searchInfo;                   
    uint16                      posOne;
    uint16                      posTwo;

    *idPtr = DCW_PB_16_INVALID;

    if(g_pb.numSearchList.count != 0)    
    {
        SCI_MEMSET(&numItem,0x00,sizeof(T_PB_SEARCH_NUMBER_ITEM));

⌨️ 快捷键说明

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