In the following example, the Service Provider performs the masking.
int iRowCount = 0;
int *piDstSize = NULL;
int *piOutLen = NULL;
short sMyColCnt = 0;
short sSrvMethod;
short sLoopCol = 0;
unsigned char *pDstBuf = NULL;
unsigned char *pSrc1Buf = NULL;
unsigned char *pSrc2Buf = NULL;
DP_MYCTRL_DEF *pMyCtrlBlk = NULL;
int iSrcVal1 = 0;
int iSrcVal2 = 0;
int iResult = 0;
pMyCtrlBlk = (DP_MYCTRL_DEF*)pCtrlBlk->pExt;
if(NULL == pMyCtrlBlk)
{
retval = MY_ERR_MYCTRLBLK_NOT_FOUND;
return retval;
}
{
retval = MY_ERR_ROWSET_EMPTY;
return retval;
}
else
{
}
sMyColCnt = pCtrlBlk->sSrcColCount + 1;
if(pRowDef->
sCount < sMyColCnt)
{
retval = MY_ERR_NOT_ENOUGH_DATA_BLOCKS;
return retval;
}
if((pMyCtrlBlk->sSrc1ColIndex >= pRowDef->
sCount) ||
(pMyCtrlBlk->sSrc2ColIndex >= pRowDef->
sCount))
{
retval = MY_ERR_SRCCOLIDX_EXCEEDS_ROWDEF_COLCOUNT;
return retval;
}
if(pMyCtrlBlk->sDestColIndex >= pRowDef->
sCount)
{
retval = MY_ERR_DSTCOLIDX_EXCEEDS_ROWDEF_COLCOUNT;
return retval;
}
{
sSrvMethod = pCtrlBlk->sMethod;
}
{
sSrvMethod = sMethod;
}
else
{
retval = MY_ERR_INVALID_METHOD;
return retval;
}
for(sLoopCol=0; sLoopCol < pMyCtrlBlk->sDestColIndex; sLoopCol++)
{
MOVENEXT(pData)
}
if(NULL == pData)
{
retval = MY_ERR_NO_DEST_DATA_COL;
goto OnRowError;
}
if(pCtrlBlk->bCopyToDest &&
{
retval = MY_ERR_NULL_DEST_BUFFER;
goto OnRowError;
}
else if(!pCtrlBlk->bCopyToDest &&
{
retval = MY_ERR_NULL_DEST_BUFFER;
goto OnRowError;
}
switch(pMyCtrlBlk->iOperator)
{
case PARAM_OPERATOR_ADD:
{
iResult = iSrcVal1 + iSrcVal2;
}
break;
default:
retval = MY_ERR_INVALID_OPERATOR;
goto OnRowError;
break;
}
if(!pCtrlBlk->bCopyToDest)
{
}
else
{
}
MOVENEXT(pRowDef)
continue;
OnRowError:
if(NULL != pData)
{
pData->iErrorCode = retval;
}
MOVENEXT(pRowDef)
}
return ODPPSUCCESS;