/* DEC *SubtractPercent(pDst,pSrc1,pSrc2) * * ARGUMENT * DEC *pDst, *pSrc1, pSrc2; * * DESCRIPTION * Subtracts pSrc2 percent from pSrc1, stroring the result in pDst. * pDst = pSrc1 * (1 - pSrc2/100) * pDst is rounded two 2 decimal places. * * SIDE EFFECTS * None. * * RETURNS * Returns a pointer to the dest structure unless overflow, * when it returns a GM_NULL. * * * POSSIBLE ERROR CODES * * GM_NULLPOINTER * GM_OVERFLOW * GM_UNDERFLOW * * AUTHOR * Jared Levy * Copyright (C) 1987-1990 Greenleaf Software Inc. All rights reserved. * * MODIFICATIONS * */ #include #include "gm.h" #include "gmsystem.h" DEC *SubtractPercent(pDst,pSrc1,pSrc2) DEC *pDst; DEC *pSrc1,*pSrc2; { DEC dtemp, *temp=&dtemp; _MacStart(GM_PSUB); _MacInVarD(pSrc2); _MacDCopy(temp, pSrc2); temp->dc.id += 2; (void) _SubDec80Bit(temp, &decOne, temp); /* overflow not possible */ if (_Sq5UnsTo4Uns(temp)!=GM_SUCCESS) { _MacErr(GM_ARGVAL); _MacRet(GM_NULL); } pDst = MultiplyDecimalAndRound(pDst, pSrc1, temp, 2); _MacRet(pDst); /* error flag set by MultiplyDecimalAndRound */ }