Slightly reworked version of D's. Call to acedGetArgs eliminated. pRbTmp != NULL eliminated. RTPOINT and RT3DPOINT reworked. Got rid of unneeded curly brackets in each of the case statements (not needed unless a local variable needs to be assigned defined at case scope).
static int ads_nsum(resbuf * pArgs)
{
double ans = 0;
for(resbuf *pRbTmp = pArgs; pRbTmp; pRbTmp=pRbTmp->rbnext)
{
switch(pRbTmp->restype)
{
case RTSHORT: ans+=pRbTmp->resval.rint; break;
case RTLONG: ans+=pRbTmp->resval.rlong; break;
case RTREAL: ans+=pRbTmp->resval.rreal; break;
case RTPOINT: ans += pRbTmp->resval.rpoint[0] +
pRbTmp->resval.rpoint[1]; break;
case RT3DPOINT: ans+=pRbTmp->resval.rpoint[0] +
pRbTmp->resval.rpoint[1] +
pRbTmp->resval.rpoint[2]; break;
}
}
acedRetReal(ans);
return (RSRSLT) ;
}