This example adds details data for the Car object by appending FIELDINFO structures to *ppClassFieldInfo.
SOM_Scope ULONG SOMLINK carM_wpclsQueryDetailsInfo(M_Car *somSelf,
PCLASSFIELDINFO *ppClassFieldInfo,
PULONG pSize)
{
ULONG cParentCol;
PCLASSFIELDINFO pCFI;
ULONG i;
/* M_CarData *somThis = M_CarGetData(somSelf); */
M_CarMethodDebug("M_Car","carM_wpclsQueryDetailsInfo");
/* Always call the parent method first to retrieve the number of
details columns and any data already defined in the details buffer. */
cParentCol = parent_wpclsQueryDetailsInfo(somSelf, ppClassFieldInfo, pSize);
/* If details columns exist, add the size of ours to it */
if (pSize)
*pSize += sizeof(CARDETAILS);
/* If the request was for the chained fieldinfo structures
* (ppClassFieldInfo is non-NULL), link them in
*
* eventually the chain will look like
*
* Grandad - Dad - Me - Kid - Grandkid
*
* I will be getting the pointer to the beginning of the chain
*
* If the beginning of the chain is 0, I will assign the address
* of my first CLASSFIELDINFO structure to *ppClassFieldInfo.
* Otherwise *pp points to the first column description in the
* chain. We need to walk the chain and link our CLASSFIELDINFO
* structures at the end.
*/
if (ppClassFieldInfo) {
if (*ppClassFieldInfo) {
pCFI = *ppClassFieldInfo;
for (i=0;i<cParentColumns;i++)
pCFI = (pCFI->pNextFieldInfo) ? pCFI->pNextFieldInfo : pCFI;
pCFI->pNextFieldInfo = fieldinfo;
} else {
*ppClassFieldInfo = fieldinfo;
} /* endif */
} /* endif */
return ((ULONG) (cParentColumns + NUM_CAR_FIELDS));
}