/************************************************************************
* Variable declarations
************************************************************************/
ID idJDBReturn = JDEDB_PASSED;
HUSER hUser = (HUSER)NULL;
int iCounter = 0;
BOOL bContinue = TRUE;
MATH_NUMERIC mnZero,mnNull;
/************************************************************************
* Declare structures
************************************************************************/
/************************************************************************
* Declare pointers
************************************************************************/
LPDSArray pArrayPointer;
/************************************************************************
* Check for NULL pointers
************************************************************************/
if ((lpBhvrCom == (LPBHVRCOM) NULL) ||
(lpVoid == (LPVOID) NULL) ||
(lpDS == (LPDSD5500010B) NULL))
{
jdeErrorSet (lpBhvrCom, lpVoid, (ID) 0, "4363", (LPVOID) NULL);
return ER_ERROR;
}
idJDBReturn = JDB_InitBhvr((void *)lpBhvrCom, &hUser, (char *) NULL, JDEDB_COMMIT_AUTO);
if(idJDBReturn == JDEDB_FAILED)
{
jdeErrorSet (lpBhvrCom, lpVoid, (ID)0, "078S", (LPVOID)NULL);
return ER_ERROR;
}
/************************************************************************
* Set pointers
************************************************************************/
/************************************************************************
* Main Processing
************************************************************************/
ZeroMathNumeric(&mnZero);
memset(&mnNull,'\0',sizeof(mnNull));
switch(lpDS->cMode)
{
case '1': /* AddCreate Array */
if(lpDS->idArrayPointer==0)
{ /* Assume the array doesn't exist if zero is passed in
Save the array's memory location */
pArrayPointer = (LPDSArray)jdeAlloc(COMMON_POOL,
MAXARRAYCOUNT * sizeof(struct tagDSArray), MEM_ZEROINIT);
lpDS->idArrayPointer = (ID) jdeStoreDataPtr(hUser, pArrayPointer);
}
else
{ /* The pointer isn't zero, so retreive the memory location */
pArrayPointer = (LPDSArray) jdeRetrieveDataPtr(hUser, lpDS->idArrayPointer);
}
/* Search for the next empty entry in the array and place the new data into it. */
while(iCounter<=MAXARRAYCOUNT && bContinue==TRUE)
{
if(MathCompare(&pArrayPointer[iCounter].mnOrderNumber,&mnZero)==0 ||
MathCompare(&pArrayPointer[iCounter].mnOrderNumber,&mnNull)==0)
{
MathCopy( &pArrayPointer[iCounter].mnOrderNumber,
&lpDS->mnOrderNumber );
MathCopy( &pArrayPointer[iCounter].mnLineNumber,
&lpDS->mnLineNumber );
jdeStrcpy(pArrayPointer[iCounter].szOrderType ,
lpDS->szOrderType, sizeof( lpDS->szOrderType ) );
jdeStrcpy(pArrayPointer[iCounter].szKeyCompany , lpDS->szKeyCompany,
sizeof( lpDS->szKeyCompany ) );
bContinue=FALSE;
}
else /* Since we found the entry again, just leave */
{
if((MathCompare(&pArrayPointer[iCounter].mnOrderNumber,
&lpDS->mnOrderNumber)==0) &&
(MathCompare(&pArrayPointer[iCounter].mnLineNumber,
&lpDS->mnLineNumber)==0) &&
(strcmp((const char*)&pArrayPointer[iCounter].szOrderType ,
lpDS->szOrderType)==0) &&
(strcmp((const char*)&pArrayPointer[iCounter].szKeyCompany ,
lpDS->szKeyCompany)==0))
bContinue=FALSE;
}
iCounter++;
}
break;
case '2': /* CountArray - count the number of entries in the array */
if(lpDS->idArrayPointer!=0)
{
pArrayPointer = (LPDSArray) jdeRetrieveDataPtr(hUser, lpDS->idArrayPointer);
while(iCounter<=MAXARRAYCOUNT && bContinue==TRUE)
{
if(MathCompare(&pArrayPointer[iCounter].mnOrderNumber,&mnZero))
{
iCounter++;
IntToMathNumeric(iCounter,&lpDS->mnArrayCount);
}
else
{
bContinue=FALSE;
}
}
}
break;
case '3': /* FreeArray - Release the array's pointer */
pArrayPointer = (LPDSArray) jdeRemoveDataPtr(hUser, lpDS->idArrayPointer);
lpDS->idArrayPointer=0;
if(pArrayPointer != (LPDSArray) NULL)
{
JDB_FreeBhvr(pArrayPointer) ;
}
break;
}
/************************************************************************
* Function Clean Up
************************************************************************/
if(hUser != (HUSER) NULL)
{
JDB_FreeBhvr(hUser) ;
}
return (ER_SUCCESS);