35#define CY_MULTIPLIER 10000
36#define CY_MULTIPLIER_F 10000.0
37#define CY_HALF (CY_MULTIPLIER/2)
38#define CY_HALF_F (CY_MULTIPLIER_F/2.0)
64 FIXME(
"VT_ type %d unhandled, please report!\n",
vt);
71#define VARIANT_DutchRound(typ, value, res) do { \
72 double whole = value < 0 ? ceil(value) : floor(value); \
73 double fract = value - whole; \
74 if (fract > 0.5) res = (typ)whole + (typ)1; \
75 else if (fract == 0.5) { typ is_odd = (typ)whole & 1; res = whole + is_odd; } \
76 else if (fract >= 0.0) res = (typ)whole; \
77 else if (fract == -0.5) { typ is_odd = (typ)whole & 1; res = whole - is_odd; } \
78 else if (fract > -0.5) res = (typ)whole; \
79 else res = (typ)whole - (typ)1; \
112 static DISPPARAMS emptyParams = {
NULL,
NULL, 0, 0 };
140#define RETTYP static inline HRESULT
144#define SIMPLE(dest, src, func) RETTYP _##func(src in, dest* out) { \
145 *out = in; return S_OK; }
148#define NEGTST(dest, src, func) RETTYP _##func(src in, dest* out) { \
149 if (in < 0) { return DISP_E_OVERFLOW; } *out = in; return S_OK; }
152#define POSTST(dest, src, func, tst) RETTYP _##func(src in, dest* out) { \
153 if (in > (dest)tst) { return DISP_E_OVERFLOW; } *out = in; return S_OK; }
156#define BOTHTST(dest, src, func, lo, hi) RETTYP _##func(src in, dest* out) { \
157 if (in < (dest)lo || in > hi) { return DISP_E_OVERFLOW; } *out = in; return S_OK; }
278 return _VarI1FromUI1(bIn, pcOut);
297 return _VarI1FromI2(sIn, pcOut);
316 return _VarI1FromI4(iIn, pcOut);
357 if (dblIn < I1_MIN - 0.5 || dblIn >=
I1_MAX + 0.5)
401 return _VarI1FromI4(
i, pcOut);
461 return _VarI1FromBool(boolIn, pcOut);
480 return _VarI1FromUI2(usIn, pcOut);
500 return _VarI1FromUI4(ulIn, pcOut);
525 hRet = _VarI1FromI8(i64, pcOut);
545 return _VarI1FromI8(llIn, pcOut);
564 return _VarI1FromUI8(ullIn, pcOut);
586 return _VarUI1FromI2(sIn, pbOut);
605 return _VarUI1FromI4(iIn, pbOut);
647 if (dblIn < -0.5 || dblIn >=
UI1_MAX + 0.5)
675 return _VarUI1FromUI4(
i, pbOut);
754 return _VarUI1FromBool(boolIn, pbOut);
773 return _VarUI1FromI1(cIn, pbOut);
792 return _VarUI1FromUI2(usIn, pbOut);
811 return _VarUI1FromUI4(ulIn, pbOut);
836 hRet = _VarUI1FromI8(i64, pbOut);
856 return _VarUI1FromI8(llIn, pbOut);
875 return _VarUI1FromUI8(ullIn, pbOut);
896 return _VarI2FromUI1(bIn, psOut);
914 return _VarI2FromI4(iIn, psOut);
953 if (dblIn < I2_MIN - 0.5 || dblIn >=
I2_MAX + 0.5)
977 return _VarI2FromI4(
i, psOut);
1055 return _VarI2FromBool(boolIn, psOut);
1072 return _VarI2FromI1(cIn, psOut);
1090 return _VarI2FromUI2(usIn, psOut);
1108 return _VarI2FromUI4(ulIn, psOut);
1133 hRet = _VarI2FromI8(i64, psOut);
1152 return _VarI2FromI8(llIn, psOut);
1170 return _VarI2FromUI8(ullIn, psOut);
1190 return _VarUI2FromUI1(bIn, pusOut);
1208 return _VarUI2FromI2(sIn, pusOut);
1226 return _VarUI2FromI4(iIn, pusOut);
1265 if (dblIn < -0.5 || dblIn >=
UI2_MAX + 0.5)
1310 return _VarUI2FromUI4(
i, pusOut);
1369 return _VarUI2FromBool(boolIn, pusOut);
1387 return _VarUI2FromI1(cIn, pusOut);
1405 return _VarUI2FromUI4(ulIn, pusOut);
1430 hRet = _VarUI2FromI8(i64, pusOut);
1449 return _VarUI2FromI8(llIn, pusOut);
1467 return _VarUI2FromUI8(ullIn, pusOut);
1487 return _VarI4FromUI1(bIn, piOut);
1506 return _VarI4FromI2(sIn, piOut);
1545 if (dblIn < I4_MIN - 0.5 || dblIn >=
I4_MAX + 0.5)
1645 return _VarI4FromBool(boolIn, piOut);
1662 return _VarI4FromI1(cIn, piOut);
1679 return _VarI4FromUI2(usIn, piOut);
1697 return _VarI4FromUI4(ulIn, piOut);
1722 hRet = _VarI4FromI8(i64, piOut);
1741 return _VarI4FromI8(llIn, piOut);
1759 return _VarI4FromUI8(ullIn, piOut);
1779 return _VarUI4FromUI1(bIn, pulOut);
1797 return _VarUI4FromI2(sIn, pulOut);
1815 return _VarUI4FromI4(iIn, pulOut);
1854 if (dblIn < -0.5 || dblIn >=
UI4_MAX + 0.5)
1954 return _VarUI4FromBool(boolIn, pulOut);
1972 return _VarUI4FromI1(cIn, pulOut);
1989 return _VarUI4FromUI2(usIn, pulOut);
2014 hRet = _VarUI4FromI8(i64, pulOut);
2033 return _VarUI4FromI8(llIn, pulOut);
2051 return _VarUI4FromUI8(ullIn, pulOut);
2071 return _VarI8FromUI1(bIn, pi64Out);
2089 return _VarI8FromI2(sIn, pi64Out);
2144 if ( dblIn < -4611686018427387904.0 || dblIn >= 4611686018427387904.0)
2278 return _VarI8FromI1(cIn, pi64Out);
2295 return _VarI8FromUI2(usIn, pi64Out);
2312 return _VarI8FromUI4(ulIn, pi64Out);
2334 if (pdecIn->
sign & ~DECIMAL_NEG)
2337 if (pdecIn->
Hi32 || pdecIn->
Mid32 & 0x80000000)
2341 *pi64Out = -pdecIn->
Lo64;
2343 *pi64Out = pdecIn->
Lo64;
2374 return _VarI8FromUI8(ullIn, pi64Out);
2395 return _VarUI8FromI8(llIn, pui64Out);
2412 return _VarUI8FromUI1(bIn, pui64Out);
2429 return _VarUI8FromI2(sIn, pui64Out);
2469 if (dblIn < -0.5 || dblIn > 1.844674407370955e19)
2607 return _VarUI8FromI1(cIn, pui64Out);
2624 return _VarUI8FromUI2(usIn, pui64Out);
2641 return _VarUI8FromUI4(ulIn, pui64Out);
2669 if (pdecIn->
sign & ~DECIMAL_NEG)
2677 WARN(
"Sign would be ignored under Win32!\n");
2681 *pui64Out = pdecIn->
Lo64;
2714 return _VarR4FromUI1(bIn, pFltOut);
2731 return _VarR4FromI2(sIn, pFltOut);
2748 return _VarR4FromI4(lIn, pFltOut);
2766 double d = dblIn < 0.0 ? -dblIn : dblIn;
2884 return _VarR4FromI1(cIn, pFltOut);
2904 return _VarR4FromUI2(usIn, pFltOut);
2924 return _VarR4FromUI4(ulIn, pFltOut);
2958 highPart *= 4294967296.0F;
2959 highPart *= 4294967296.0F;
2982 return _VarR4FromI8(llIn, pFltOut);
2999 return _VarR4FromUI8(ullIn, pFltOut);
3017 if (fltLeft < dblRight)
3019 else if (fltLeft > dblRight)
3041 return _VarR8FromUI1(bIn, pDblOut);
3058 return _VarR8FromI2(sIn, pDblOut);
3075 return _VarR8FromI4(lIn, pDblOut);
3092 return _VarR8FromR4(fltIn, pDblOut);
3126 return _VarR8FromDate(dateIn, pDblOut);
3205 return _VarR8FromI1(cIn, pDblOut);
3225 return _VarR8FromUI2(usIn, pDblOut);
3245 return _VarR8FromUI4(ulIn, pDblOut);
3264 double divisor = 1.0, highPart;
3278 highPart *= 4294967296.0F;
3279 highPart *= 4294967296.0F;
3302 return _VarR8FromI8(llIn, pDblOut);
3319 return _VarR8FromUI8(ullIn, pDblOut);
3337 *pDblOut =
pow(dblLeft, dblPow);
3364 double scale, whole, fract;
3372 whole = dblIn < 0 ?
ceil(dblIn) :
floor(dblIn);
3373 fract = dblIn - whole;
3376 dblIn = whole + 1.0;
3377 else if (fract == 0.5)
3378 dblIn = whole +
fmod(whole, 2.0);
3379 else if (fract >= 0.0)
3381 else if (fract == -0.5)
3382 dblIn = whole +
fmod(whole, 2.0);
3383 else if (fract > -0.5)
3386 dblIn = whole - 1.0;
3388 *pDblOut = dblIn /
scale;
3499#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
3503 static const unsigned short r8_fpcontrol = 0x137f;
3505 unsigned short old_fpcontrol, result_fpstatus;
3508 __asm__ __volatile__(
"fnclex" );
3509 __asm__ __volatile__(
"fstcw %0" :
"=m" (old_fpcontrol) : );
3510 __asm__ __volatile__(
"fldcw %0" : :
"m" (r8_fpcontrol) );
3512 __asm__ __volatile__(
"fldl %0" : :
"m" (dblIn) );
3513 __asm__ __volatile__(
"fmull %0" : :
"m" (r8_multiplier) );
3514 __asm__ __volatile__(
"fistpll %0" : :
"m" (*pCyOut) );
3516 __asm__ __volatile__(
"fstsw %0" :
"=m" (result_fpstatus) : );
3517 __asm__ __volatile__(
"fnclex" );
3518 __asm__ __volatile__(
"fldcw %0" : :
"m" (old_fpcontrol) );
3520 if (result_fpstatus & 0x9)
3524 if (dblIn < -922337203685477.5807 || dblIn >= 922337203685477.5807)
3872 if (cyIn.
Hi == 0x80000000 && !cyIn.
Lo)
3947 if (cyIn.
Hi == 0x80000000 && !cyIn.
Lo)
4018 else if (
result.int64 > 0)
4133 pDecOut->
sign = DECIMAL_NEG;
4134 pDecOut->
Lo32 = -lIn;
4139 pDecOut->
Lo32 = lIn;
4241 pDecOut->
sign = DECIMAL_NEG;
4312 pDecOut->
sign = DECIMAL_NEG;
4374 pDecOut->
Lo64 = ulIn;
4397 pDecOut->
sign = DECIMAL_NEG;
4398 pDecOut->
Lo64 = -llIn;
4403 pDecOut->
Lo64 = llIn;
4425 pDecOut->
Lo64 = ullIn;
4440 if ((*ppDecLeft)->sign & ~DECIMAL_NEG || (*ppDecRight)->sign & ~DECIMAL_NEG)
4443 scaleFactor.
Lo32 = 10;
4445 i = scaleAmount = (*ppDecLeft)->scale - (*ppDecRight)->scale;
4450 if (scaleAmount > 0)
4452 decTemp = *(*ppDecRight);
4453 *ppDecRight = &pDecOut[0];
4457 decTemp = *(*ppDecLeft);
4458 *ppDecLeft = &pDecOut[0];
4465 decTemp = pDecOut[0];
4471 pDecOut[0].
scale += (scaleAmount > 0) ? scaleAmount : (-scaleAmount);
4476 pDecOut[0] = decTemp;
4477 if (scaleAmount > 0)
4479 pDecOut[0].
scale += scaleAmount -
i;
4481 *ppDecLeft = &pDecOut[1];
4485 pDecOut[0].
scale += (-scaleAmount) -
i;
4487 *ppDecRight = &pDecOut[1];
4502 remainder = (digit > 0xFFFFFFFF) ? 1 : 0;
4503 di.
bitsnum[
i] = digit & 0xFFFFFFFF;
4528 if (ulLeft < ulRight)
4558 if ( pDecLeft->
Hi32 < pDecRight->
Hi32 ||
4561 else if (pDecLeft->
Hi32 == pDecRight->
Hi32 && pDecLeft->
Lo64 == pDecRight->
Lo64)
4595 if (pDecLeft->
sign && pDecRight->
sign)
4599 goto VarDecAdd_AsPositive;
4601 else if (pDecLeft->
sign && !pDecRight->
sign)
4609VarDecAdd_AsNegative:
4616VarDecAdd_AsInvertedNegative:
4622 else if (!pDecLeft->
sign && pDecRight->
sign)
4630 goto VarDecAdd_AsInvertedNegative;
4632 goto VarDecAdd_AsNegative;
4637VarDecAdd_AsPositive:
4648 if (!pDecLeft->
scale)
4654 n[0] = pDecOut->
Lo32;
4656 n[2] = pDecOut->
Hi32;
4667 remainder = (digit > 0xFFFFFFFF) ? 1 : 0;
4668 n[
i] = digit & 0xFFFFFFFF;
4672 pDecOut->
Lo32 =
n[0] ;
4674 pDecOut->
Hi32 =
n[2];
4733 for (
i =
n - 1;
i >= 0 && !
p[
i];
i--);
4734 for (;
i >= 0;
i--) {
4747 for (;
n > 0;
n--)
if (*
p++ != 0)
return FALSE;
4760 signed int mulstart;
4763 result->sign = (
a->sign ^
b->sign) ? 1 : 0;
4768 result->scale =
a->scale +
b->scale;
4769 memset(running, 0,
sizeof(running));
4772 for (mulstart =
ARRAY_SIZE(
a->bitsnum) - 1; mulstart >= 0 && !
a->bitsnum[mulstart]; mulstart--);
4782 for (iA = 0; iA <= mulstart; iA++) {
4786 for (iOverflowMul = 0, iB = 0; iB <
ARRAY_SIZE(
b->bitsnum); iB++) {
4790 iRV =
VARIANT_Mul(
b->bitsnum[iB],
a->bitsnum[iA], &iOverflowMul);
4806 while (
result->scale > 0) {
4807 memcpy(quotient, running,
sizeof(quotient));
4810 memcpy(running, quotient,
sizeof(quotient));
4831 remainder = (digit > 0xFFFFFFFF) ? 1 : 0;
4832 running[
i] = digit & 0xFFFFFFFF;
4863 else overflow =
TRUE;
4871 }
else overflow =
TRUE;
4875 memcpy(quotient,
a->bitsnum,
sizeof(
a->bitsnum));
4897 if (i <= a->
scale) {
4898 unsigned int numzeroes =
a->scale + 1 -
i;
4899 if (
i + 1 + numzeroes >=
n) {
4904 while (numzeroes > 0) {
4905 s[--numzeroes] =
'0';
4912 unsigned int periodpos =
i -
a->scale;
4916 memmove(
s + periodpos + 1,
s + periodpos, (
i + 1 - periodpos) *
sizeof(
WCHAR));
4917 s[periodpos] =
'.';
i++;
4920 while (
s[
i - 1] ==
'0')
s[--
i] =
'\0';
4921 if (
s[
i - 1] ==
'.')
s[--
i] =
'\0';
4960 unsigned char carry = 0;
4966 for (
i = 0;
i < np;
i++) {
4970 v[
i] =
sum & 0xffffffff;
4973 for (;
i < nv && carry;
i++) {
4976 v[
i] =
sum & 0xffffffff;
5001 DWORD * negdivisor = tempsub +
n;
5004 for (
i = 0;
i <
n;
i++) negdivisor[
i] = (
i < dn) ?
~divisor[
i] : 0xFFFFFFFF;
5012 for (
i <<= 5;
i < (
n << 5);
i++) {
5020 if ((tempsub[
n - 1] & 0x80000000) == 0) {
5033 for (iOverflowMul = 0,
i = 0;
i <
n;
i++)
5035 return (
unsigned char)iOverflowMul;
5044 DWORD *
a,
int * ascale,
unsigned int an,
5045 DWORD *
b,
int * bscale,
unsigned int bn)
5058 unsigned int tn = an + 1;
5061 if (bn + 1 > tn) tn = bn + 1;
5062 if (*ascale != *bscale) {
5065 DWORD * digitchosen;
5066 unsigned int nchosen;
5070 if (*ascale < *bscale) {
5071 targetscale = *ascale;
5072 scalechosen = bscale;
5076 targetscale = *bscale;
5077 scalechosen = ascale;
5085 while (*scalechosen > targetscale) {
5094 if (*ascale != *bscale) {
5095 DWORD * digitchosen;
5096 unsigned int nchosen;
5101 if (*ascale > *bscale) {
5102 targetscale = *ascale;
5103 scalechosen = bscale;
5107 targetscale = *bscale;
5108 scalechosen = ascale;
5118 while (*scalechosen < targetscale &&
t[nchosen] == 0) {
5120 if (
t[nchosen] == 0) {
5128 if (*ascale != *bscale) {
5131 DWORD * digitchosen;
5132 unsigned int nchosen;
5136 if (*ascale < *bscale) {
5137 targetscale = *ascale;
5138 scalechosen = bscale;
5142 targetscale = *bscale;
5143 scalechosen = ascale;
5151 while (*scalechosen > targetscale) {
5168 while (!underflow) {
5208 int quotientscale, remainderscale, tempquotientscale;
5209 DWORD remainderplusquotient[8];
5212 quotientscale = remainderscale = (
int)dividend->
scale - (
int)
divisor->scale;
5213 tempquotientscale = quotientscale;
5232 memset(remainderplusquotient, 0,
sizeof(remainderplusquotient));
5238 if (round_remainder) {
5239 if(remainderplusquotient[4] >= 5){
5244 remainder = (digit > 0xFFFFFFFF) ? 1 : 0;
5245 quotient->
bitsnum[
i] = digit & 0xFFFFFFFF;
5248 memset(remainderplusquotient, 0,
sizeof(remainderplusquotient));
5251 memcpy(remainderplusquotient, remainderplusquotient + 4, 4 *
sizeof(
DWORD));
5253 tempquotientscale = ++remainderscale;
5260 while (r_overflow ==
S_OK && quotientscale < 0) {
5261 memset(remainderplusquotient, 0,
sizeof(remainderplusquotient));
5270 if (r_overflow ==
S_OK) {
5271 if (quotientscale <= 255) quotient->
scale = quotientscale;
5288 int exponent5, exponent10;
5294 exponent5 = -exponent2;
5295 exponent10 = exponent2;
5298 while (exponent5 > 0) {
5305 if ((
val->bitsnum[0] & 1) == 0) {
5308 exponent10++; exponent5--;
5311 bPrevCarryBit =
val->bitsnum[2] & 1;
5312 val->bitsnum[2] >>= 1;
5313 bCurrCarryBit =
val->bitsnum[1] & 1;
5314 val->bitsnum[1] = (
val->bitsnum[1] >> 1) | (bPrevCarryBit ? 0x80000000 : 0);
5315 val->bitsnum[0] = (
val->bitsnum[0] >> 1) | (bCurrCarryBit ? 0x80000000 : 0);
5319 DWORD temp_bitsnum[3];
5336 bPrevCarryBit =
val->bitsnum[2] & 1;
5337 val->bitsnum[2] >>= 1;
5338 bCurrCarryBit =
val->bitsnum[1] & 1;
5339 val->bitsnum[1] = (
val->bitsnum[1] >> 1) | (bPrevCarryBit ? 0x80000000 : 0);
5340 val->bitsnum[0] = (
val->bitsnum[0] >> 1) | (bCurrCarryBit ? 0x80000000 : 0);
5346 while (exponent5 < 0) {
5350 if ((
val->bitsnum[2] & 0x80000000) == 0) {
5352 exponent10--; exponent5++;
5367 while (
hres ==
S_OK && exponent10 > 0) {
5387 }
else if (rem10 >= 5) {
5396 while (exponent10 < 0 && (
val->bitsnum[2] != 0 || (
val->bitsnum[1] & 0xFFE00000) != 0)) {
5407 while (exponent10 < 0 && (
val->bitsnum[2] != 0 ||
val->bitsnum[1] != 0 ||
5408 (
val->bitsnum[2] == 0 &&
val->bitsnum[1] == 0 && (
val->bitsnum[0] & 0xFF000000) != 0))) {
5420 while (exponent10 < 0) {
5421 DWORD temp_bitsnum[3];
5440 unsigned int m : 23;
5457 if (
fx.i.m == 0 &&
fx.i.exp_bias == 0) {
5460 }
else if (
fx.i.m == 0 &&
fx.i.exp_bias == 0xFF) {
5463 }
else if (
fx.i.exp_bias == 0xFF) {
5470 exponent2 =
fx.i.exp_bias - 127;
5474 dest->bitsnum[0] =
fx.i.m;
5475 dest->bitsnum[0] &= 0x007FFFFF;
5476 if (
fx.i.exp_bias == 0) {
5481 dest->bitsnum[0] |= 0x00800000;
5517 if (
fx.i.m_lo == 0 &&
fx.i.m_hi == 0 &&
fx.i.exp_bias == 0) {
5520 }
else if (
fx.i.m_lo == 0 &&
fx.i.m_hi == 0 &&
fx.i.exp_bias == 0x7FF) {
5523 }
else if (
fx.i.exp_bias == 0x7FF) {
5530 exponent2 =
fx.i.exp_bias - 1023;
5534 dest->bitsnum[0] =
fx.i.m_lo;
5535 dest->bitsnum[1] =
fx.i.m_hi;
5536 dest->bitsnum[1] &= 0x000FFFFF;
5537 if (
fx.i.exp_bias == 0) {
5542 dest->bitsnum[1] |= 0x00100000;
5566 if (divresult !=
S_OK)
5583 WARN(
"result scale is %u, scaling (with loss of significant digits)...\n",
5593 WARN(
"result underflowed, setting to 0\n");
5594 di_result.
scale = 0;
5602 remainder = (digit > 0xFFFFFFFF) ? 1 : 0;
5603 di_result.
bitsnum[
i] = digit & 0xFFFFFFFF;
5628 if (!pDecLeft || !pDecRight || !pDecOut)
return E_INVALIDARG;
5669 WARN(
"result scale is %u, scaling (with loss of significant digits)...\n",
5679 WARN(
"result underflowed, setting to 0\n");
5680 di_result.
scale = 0;
5708 return VarDecAdd(pDecLeft, &decRight, pDecOut);
5726 pDecOut->
sign &= ~DECIMAL_NEG;
5752 if (pDecIn->
sign & ~DECIMAL_NEG)
5792 if (pDecIn->
sign & ~DECIMAL_NEG)
5795 if (!(pDecIn->
sign & DECIMAL_NEG) || !pDecIn->
scale)
5800 LONGLONG rounded = dbl >= 0.0 ? dbl + 0.5 : dbl - 0.5;
5822 pDecOut->
sign ^= DECIMAL_NEG;
5849 if (cDecimals >= pDecIn->
scale)
5859 memset(&tmp, 0,
sizeof(tmp));
5861 for (
i = 0;
i < pDecIn->
scale - cDecimals; ++
i)
5872 pDecOut->
scale = cDecimals;
5896 if (!pDecLeft || !pDecRight)
5899 if ((!(pDecLeft->
sign & DECIMAL_NEG)) && (pDecRight->
sign & DECIMAL_NEG) &&
5900 (pDecLeft->
Hi32 || pDecLeft->
Lo64))
5902 else if ((pDecLeft->
sign & DECIMAL_NEG) && (!(pDecRight->
sign & DECIMAL_NEG)) &&
5903 (pDecLeft->
Hi32 || pDecLeft->
Lo64))
5913 if ((
result.sign & DECIMAL_NEG) && non_zero)
5967 *pBoolOut = bIn ? VARIANT_TRUE : VARIANT_FALSE;
5985 *pBoolOut = sIn ? VARIANT_TRUE : VARIANT_FALSE;
6003 *pBoolOut = lIn ? VARIANT_TRUE : VARIANT_FALSE;
6021 *pBoolOut = fltIn ? VARIANT_TRUE : VARIANT_FALSE;
6039 *pBoolOut = dblIn ? VARIANT_TRUE : VARIANT_FALSE;
6057 *pBoolOut = dateIn ? VARIANT_TRUE : VARIANT_FALSE;
6075 *pBoolOut = cyIn.
int64 ? VARIANT_TRUE : VARIANT_FALSE;
6101 for (
i = 0;
i < (dwId & 0x0f);
i++)
p += *
p + 1;
6145 if (!strIn || !pBoolOut)
6172VarBoolFromStr_CheckLocalised:
6178 *pBoolOut = VARIANT_TRUE;
6184 *pBoolOut = VARIANT_FALSE;
6193 goto VarBoolFromStr_CheckLocalised;
6197 if (!
wcscmp(strIn,
L"#FALSE#"))
6198 *pBoolOut = VARIANT_FALSE;
6199 else if (!
wcscmp(strIn,
L"#TRUE#"))
6200 *pBoolOut = VARIANT_TRUE;
6207 if (
SUCCEEDED(hRes)) *pBoolOut =
d ? VARIANT_TRUE : VARIANT_FALSE;
6247 *pBoolOut = cIn ? VARIANT_TRUE : VARIANT_FALSE;
6265 *pBoolOut = usIn ? VARIANT_TRUE : VARIANT_FALSE;
6283 *pBoolOut = ulIn ? VARIANT_TRUE : VARIANT_FALSE;
6306 *pBoolOut = VARIANT_TRUE;
6308 *pBoolOut = VARIANT_FALSE;
6326 *pBoolOut = llIn ? VARIANT_TRUE : VARIANT_FALSE;
6344 *pBoolOut = ullIn ? VARIANT_TRUE : VARIANT_FALSE;
6356 WCHAR ulNextDigit = ulVal % 10;
6358 *szOut-- =
'0' + ulNextDigit;
6359 ulVal = (ulVal - ulNextDigit) / 10;
6369 WCHAR szConverted[256];
6377 szConverted[0] =
'\0';
6380 szOut = szConverted;
6482 WCHAR lpDecimalSep[16];
6493 if (lpDecimalSep[0] ==
'.' && lpDecimalSep[1] ==
'\0')
6523 WARN(
"GetNumberFormatW() failed, returning raw number string instead\n");
6565 extra_decimals = dot ?
e - dot - 2 : 0;
6681 if (cyIn.
Hi & 0x80000000UL) {
6686 decVal.
bitsnum[0] = ~decVal.bitsnum[0];
6687 decVal.
bitsnum[1] = ~decVal.bitsnum[1];
6713 if(min_len >= date_len)
6716 for(
len=0, tmp=o; tmp; tmp/=10)
len++;
6721 for(tmp=min_len-
len; tmp>0; tmp--)
6723 for(tmp=
len; tmp>0; tmp--, o/=10)
6724 date[tmp-1] =
'0' + o%10;
6725 return min_len>
len ? min_len :
len;
6732 static const LCTYPE dayname[] = {
6736 static const LCTYPE sdayname[] = {
6741 static const LCTYPE monthname[] = {
6746 static const LCTYPE smonthname[] = {
6757 while(*
fmt && date_len) {
6795 FIXME(
"Should be using GetCalendarInfo(CAL_SERASTRING), defaulting to 'AD'\n");
6855 FIXME(
"VAR_CALENDAR_HIJRI/VAR_CALENDAR_GREGORIAN not handled\n");
6861 double whole = dateIn < 0 ?
ceil(dateIn) :
floor(dateIn);
6862 double partial = dateIn - whole;
6866 else if (partial > -1
e-12 && partial < 1
e-12)
6945 if (boolIn == VARIANT_FALSE)
6948VarBstrFromBool_GetLocalised:
6958 goto VarBstrFromBool_GetLocalised;
6962 WARN(
"Failed to load bool text!\n");
7170 unsigned int lenLeft, lenRight;
7187 (*pbstrOut)[0] =
'\0';
7190 memcpy(*pbstrOut, pbstrLeft, lenLeft);
7193 memcpy((
CHAR*)*pbstrOut + lenLeft, pbstrRight, lenRight);
7224 TRACE(
"%s, %s, %#lx, %#lx.\n",
7228 if (!pbstrLeft || !*pbstrLeft)
7230 if (pbstrRight && *pbstrRight)
7233 else if (!pbstrRight || !*pbstrRight)
7240 ret =
memcmp(pbstrLeft, pbstrRight,
min(lenLeft, lenRight));
7245 if (lenLeft < lenRight)
7247 if (lenLeft > lenRight)
7256 if (lenLeft == 0 || lenRight == 0)
7258 if (lenLeft == 0 && lenRight == 0)
return VARCMP_EQ;
7356 *pdateOut = (
DATE)dblIn;
7416#define DP_TIMESEP 0x01
7417#define DP_DATESEP 0x02
7418#define DP_MONTH 0x04
7430#define TIMEFLAG(i) ((dp.dwFlags[i] & DP_TIMESEP) << i)
7432#define IsLeapYear(y) (((y % 4) == 0) && (((y % 100) != 0) || ((y % 400) == 0)))
7437 static const BYTE days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
7448#define ORDER_MDY 0x01
7449#define ORDER_YMD 0x02
7450#define ORDER_YDM 0x04
7451#define ORDER_DMY 0x08
7452#define ORDER_MYD 0x10
7458 DWORD dwAllOrders, dwTry, dwCount = 0,
v1,
v2,
v3;
7465 goto VARIANT_MakeDate_OK;
7506VARIANT_MakeDate_Start:
7507 TRACE(
"dwAllOrders is %#lx\n", dwAllOrders);
7518 case 0: dwTry = dwAllOrders &
ORDER_MDY;
break;
7519 case 1: dwTry = dwAllOrders &
ORDER_DMY;
break;
7520 default: dwTry = dwAllOrders &
ORDER_YMD;
break;
7523 else if (dwCount == 1)
7536 dwTry = dwAllOrders;
7539 TRACE(
"Attempt %ld, dwTry is %#lx\n", dwCount, dwTry);
7545#define DATE_SWAP(x,y) do { dwTemp = x; x = y; y = dwTemp; } while (0)
7552 goto VARIANT_MakeDate_OK;
7554 dwAllOrders &= ~ORDER_MDY;
7561 goto VARIANT_MakeDate_OK;
7563 dwAllOrders &= ~ORDER_YMD;
7571 goto VARIANT_MakeDate_OK;
7573 dwAllOrders &= ~ORDER_YDM;
7578 goto VARIANT_MakeDate_OK;
7579 dwAllOrders &= ~ORDER_DMY;
7588 goto VARIANT_MakeDate_OK;
7590 dwAllOrders &= ~ORDER_MYD;
7601 goto VARIANT_MakeDate_Start;
7665 static const USHORT ParseDateTokens[] =
7684 static const BYTE ParseDateMonths[] =
7686 1,2,3,4,5,6,7,8,9,10,11,12,13,
7687 1,2,3,4,5,6,7,8,9,10,11,12,13
7692 DWORD dwDateSeps = 0, iDate = 0;
7706 memset(&dp, 0,
sizeof(dp));
7710 TRACE(
"iDate is %ld\n", iDate);
7730 if (
'0' <= *strIn && *strIn <=
'9')
7749 if (dwLen && !
wcsnicmp(strIn, tokens[
i], dwLen))
7762 else if (
i > 39 &&
i < 42)
7772 strIn += (dwLen - 1);
7780 if ((*strIn ==
'a' || *strIn ==
'A' || *strIn ==
'p' || *strIn ==
'P') &&
7784 if (*strIn ==
'a' || *strIn ==
'A')
7804 else if (*strIn ==
':' || *strIn ==
'.')
7809 if (tokens[42][0] == *strIn)
7820 else if (*strIn ==
'-' || *strIn ==
'/')
7823 if (dwDateSeps > 2 || !dp.
dwCount || !strIn[1])
7828 else if (*strIn ==
',' ||
iswspace(*strIn))
7830 if (*strIn ==
',' && !strIn[1])
8095 *pdateOut = (
DATE)llIn;
8115 *pdateOut = (
DATE)ullIn;
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static const WCHAR empty[1]
static DOUBLE day(DOUBLE time)
VOID WINAPI GetSystemTime(OUT LPSYSTEMTIME lpSystemTime)
LPVOID WINAPI LockResource(HGLOBAL handle)
HRSRC WINAPI FindResourceExW(HMODULE hModule, LPCWSTR type, LPCWSTR name, WORD lang)
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
INT WINAPI CompareStringW(LCID lcid, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2)
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
LCID WINAPI ConvertDefaultLocale(LCID lcid)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
_ACRTIMP __msvcrt_ulong __cdecl wcstoul(const wchar_t *, wchar_t **, int)
_ACRTIMP __msvcrt_long __cdecl wcstol(const wchar_t *, wchar_t **, int)
_ACRTIMP size_t __cdecl wcsspn(const wchar_t *, const wchar_t *)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP void __cdecl _free_locale(_locale_t)
_ACRTIMP _locale_t __cdecl _create_locale(int, const char *)
_ACRTIMP double __cdecl ceil(double)
_ACRTIMP double __cdecl fmod(double, double)
_ACRTIMP double __cdecl remainder(double, double)
_ACRTIMP double __cdecl floor(double)
_ACRTIMP __msvcrt_long __cdecl labs(__msvcrt_long)
_ACRTIMP div_t __cdecl div(int, int)
HRESULT WINAPI VarUI1FromI4(LONG iIn, BYTE *pbOut)
HRESULT WINAPI VarUI8FromUI2(USHORT usIn, ULONG64 *pui64Out)
HRESULT WINAPI VarI4FromUI8(ULONG64 ullIn, LONG *piOut)
HRESULT WINAPI VarBstrFromUI1(BYTE bIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarUI2FromCy(CY cyIn, USHORT *pusOut)
HRESULT WINAPI VarCyMul(CY cyLeft, CY cyRight, CY *pCyOut)
HRESULT WINAPI VarUI8FromCy(CY cyIn, ULONG64 *pui64Out)
static BOOL VARIANT_IsValidMonthDay(DWORD day, DWORD month, DWORD year)
static BOOL VARIANT_int_iszero(const DWORD *p, unsigned int n)
HRESULT WINAPI VarCyFromR8(double dblIn, CY *pCyOut)
HRESULT WINAPI VarCyInt(CY cyIn, CY *pCyOut)
HRESULT WINAPI VarI2FromUI1(BYTE bIn, SHORT *psOut)
HRESULT WINAPI VarR4FromI1(signed char cIn, float *pFltOut)
HRESULT WINAPI VarCyMulI4(CY cyLeft, LONG lRight, CY *pCyOut)
HRESULT WINAPI VarUI4FromI4(LONG iIn, ULONG *pulOut)
HRESULT WINAPI VarBstrFromBool(VARIANT_BOOL boolIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarCyFromUI1(BYTE bIn, CY *pCyOut)
HRESULT WINAPI VarR4FromUI8(ULONG64 ullIn, float *pFltOut)
HRESULT WINAPI VarI2FromBool(VARIANT_BOOL boolIn, SHORT *psOut)
HRESULT WINAPI VarDateFromStr(const OLECHAR *strIn, LCID lcid, ULONG dwFlags, DATE *pdateOut)
HRESULT WINAPI VarDecCmp(const DECIMAL *pDecLeft, const DECIMAL *pDecRight)
HRESULT WINAPI VarUI2FromDisp(IDispatch *pdispIn, LCID lcid, USHORT *pusOut)
HRESULT WINAPI VarBoolFromUI1(BYTE bIn, VARIANT_BOOL *pBoolOut)
HRESULT WINAPI VarUI1FromUI4(ULONG ulIn, BYTE *pbOut)
HRESULT WINAPI VarI1FromR8(double dblIn, signed char *pcOut)
HRESULT WINAPI VarI1FromR4(FLOAT fltIn, signed char *pcOut)
HRESULT WINAPI VarUI4FromDisp(IDispatch *pdispIn, LCID lcid, ULONG *pulOut)
HRESULT WINAPI VarCyFromUI2(USHORT usIn, CY *pCyOut)
HRESULT WINAPI VarI1FromDisp(IDispatch *pdispIn, LCID lcid, signed char *pcOut)
HRESULT WINAPI VarDecFromCy(CY cyIn, DECIMAL *pDecOut)
HRESULT WINAPI VarR8FromI2(SHORT sIn, double *pDblOut)
HRESULT WINAPI VarUI4FromUI2(USHORT usIn, ULONG *pulOut)
HRESULT WINAPI VarI1FromUI2(USHORT usIn, signed char *pcOut)
HRESULT WINAPI VarCyFix(CY cyIn, CY *pCyOut)
HRESULT WINAPI VarR8FromCy(CY cyIn, double *pDblOut)
HRESULT WINAPI VarI1FromUI4(ULONG ulIn, signed char *pcOut)
HRESULT WINAPI VarBstrFromR8(double dblIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarUI4FromI1(signed char cIn, ULONG *pulOut)
HRESULT WINAPI VarI4FromStr(const OLECHAR *strIn, LCID lcid, ULONG dwFlags, LONG *piOut)
HRESULT WINAPI VarI2FromUI8(ULONG64 ullIn, SHORT *psOut)
HRESULT WINAPI VarR4CmpR8(float fltLeft, double dblRight)
HRESULT WINAPI VarI8FromUI1(BYTE bIn, LONG64 *pi64Out)
HRESULT WINAPI VarDecCmpR8(const DECIMAL *pDecLeft, double dblRight)
HRESULT WINAPI VarDecAdd(const DECIMAL *pDecLeft, const DECIMAL *pDecRight, DECIMAL *pDecOut)
HRESULT WINAPI VarBstrFromI2(short sIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarCyAbs(CY cyIn, CY *pCyOut)
static ULONG VARIANT_Mul(ULONG ulLeft, ULONG ulRight, ULONG *pulHigh)
HRESULT WINAPI VarI4FromBool(VARIANT_BOOL boolIn, LONG *piOut)
static int output_int_len(int o, int min_len, WCHAR *date, int date_len)
HRESULT WINAPI VarUI8FromUI4(ULONG ulIn, ULONG64 *pui64Out)
HRESULT WINAPI VarI8FromDisp(IDispatch *pdispIn, LCID lcid, LONG64 *pi64Out)
#define BOTHTST(dest, src, func, lo, hi)
static int VARIANT_DI_mul(const VARIANT_DI *a, const VARIANT_DI *b, VARIANT_DI *result)
HRESULT WINAPI VarUI1FromR8(double dblIn, BYTE *pbOut)
HRESULT WINAPI VarI1FromI2(SHORT sIn, signed char *pcOut)
HRESULT WINAPI VarDateFromDisp(IDispatch *pdispIn, LCID lcid, DATE *pdateOut)
HRESULT WINAPI VarBstrFromI4(LONG lIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarDecFromI2(SHORT sIn, DECIMAL *pDecOut)
HRESULT WINAPI VarI8FromR8(double dblIn, LONG64 *pi64Out)
HRESULT WINAPI VarR8FromI8(LONG64 llIn, double *pDblOut)
HRESULT WINAPI VarDecRound(const DECIMAL *pDecIn, int cDecimals, DECIMAL *pDecOut)
static HRESULT VARIANT_DI_div(const VARIANT_DI *dividend, const VARIANT_DI *divisor, VARIANT_DI *quotient, BOOL round_remainder)
static void VARIANT_DIFromDec(const DECIMAL *from, VARIANT_DI *to)
HRESULT WINAPI VarR4FromDisp(IDispatch *pdispIn, LCID lcid, float *pFltOut)
HRESULT WINAPI VarDateFromI1(signed char cIn, DATE *pdateOut)
HRESULT WINAPI VarUI2FromI1(signed char cIn, USHORT *pusOut)
#define NEGTST(dest, src, func)
HRESULT WINAPI VarR8FromStr(const OLECHAR *strIn, LCID lcid, ULONG dwFlags, double *pDblOut)
HRESULT WINAPI VarDecFromUI1(BYTE bIn, DECIMAL *pDecOut)
HRESULT WINAPI VarUI2FromI4(LONG iIn, USHORT *pusOut)
HRESULT WINAPI VarUI1FromR4(FLOAT fltIn, BYTE *pbOut)
HRESULT WINAPI VarI1FromUI1(BYTE bIn, signed char *pcOut)
HRESULT WINAPI VarDecFromR8(double dblIn, DECIMAL *pDecOut)
HRESULT WINAPI VarI8FromUI8(ULONG64 ullIn, LONG64 *pi64Out)
HRESULT WINAPI VarI4FromI2(SHORT sIn, LONG *piOut)
HRESULT WINAPI VarDateFromUI8(ULONG64 ullIn, DATE *pdateOut)
HRESULT WINAPI VarDateFromR4(FLOAT fltIn, DATE *pdateOut)
HRESULT WINAPI VarBoolFromI8(LONG64 llIn, VARIANT_BOOL *pBoolOut)
HRESULT WINAPI VarCyMulI8(CY cyLeft, LONG64 llRight, CY *pCyOut)
static HRESULT VARIANT_do_division(const DECIMAL *pDecLeft, const DECIMAL *pDecRight, DECIMAL *pDecOut, BOOL round)
HRESULT WINAPI VarI1FromI4(LONG iIn, signed char *pcOut)
static ULONG VARIANT_Add(ULONG ulLeft, ULONG ulRight, ULONG *pulHigh)
HRESULT WINAPI VarI4FromUI2(USHORT usIn, LONG *piOut)
HRESULT WINAPI VarI8FromDate(DATE dateIn, LONG64 *pi64Out)
HRESULT WINAPI VarI4FromDate(DATE dateIn, LONG *piOut)
HRESULT WINAPI VarDecFix(const DECIMAL *pDecIn, DECIMAL *pDecOut)
HRESULT WINAPI VarI8FromCy(CY cyIn, LONG64 *pi64Out)
static WCHAR * VARIANT_WriteNumber(ULONG64 ulVal, WCHAR *szOut)
static HRESULT VARIANT_MakeDate(DATEPARSE *dp, DWORD iDate, DWORD offset, SYSTEMTIME *st)
static BSTR VARIANT_BstrReplaceDecimal(const WCHAR *buff, LCID lcid, ULONG dwFlags)
HRESULT WINAPI VarBstrFromCy(CY cyIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarUI8FromBool(VARIANT_BOOL boolIn, ULONG64 *pui64Out)
HRESULT WINAPI VarI1FromStr(const OLECHAR *strIn, LCID lcid, ULONG dwFlags, signed char *pcOut)
HRESULT WINAPI VarI8FromI2(SHORT sIn, LONG64 *pi64Out)
HRESULT WINAPI VarR8FromUI2(USHORT usIn, double *pDblOut)
HRESULT WINAPI VarUI8FromR4(FLOAT fltIn, ULONG64 *pui64Out)
HRESULT WINAPI VarUI1FromCy(CY cyIn, BYTE *pbOut)
HRESULT WINAPI VarBoolFromI2(SHORT sIn, VARIANT_BOOL *pBoolOut)
HRESULT WINAPI VarI2FromStr(const OLECHAR *strIn, LCID lcid, ULONG dwFlags, SHORT *psOut)
HRESULT WINAPI VarDateFromUI1(BYTE bIn, DATE *pdateOut)
HRESULT WINAPI VarR8FromDate(DATE dateIn, double *pDblOut)
HRESULT WINAPI VarDecFromDisp(IDispatch *pdispIn, LCID lcid, DECIMAL *pDecOut)
HRESULT WINAPI VarR4FromUI4(ULONG ulIn, float *pFltOut)
HRESULT WINAPI VarCyFromBool(VARIANT_BOOL boolIn, CY *pCyOut)
HRESULT WINAPI VarI4FromDisp(IDispatch *pdispIn, LCID lcid, LONG *piOut)
HRESULT WINAPI VarI2FromI1(signed char cIn, SHORT *psOut)
HRESULT WINAPI VarCyRound(CY cyIn, int cDecimals, CY *pCyOut)
HRESULT WINAPI VarUI4FromDec(const DECIMAL *pdecIn, ULONG *pulOut)
HRESULT WINAPI VarCyFromDate(DATE dateIn, CY *pCyOut)
HRESULT WINAPI VarI4FromR8(double dblIn, LONG *piOut)
HRESULT WINAPI VarI8FromR4(FLOAT fltIn, LONG64 *pi64Out)
HRESULT WINAPI VarBoolFromI4(LONG lIn, VARIANT_BOOL *pBoolOut)
HRESULT WINAPI VarR4FromUI1(BYTE bIn, float *pFltOut)
HRESULT WINAPI VarI4FromI1(signed char cIn, LONG *piOut)
HRESULT WINAPI VarBoolFromCy(CY cyIn, VARIANT_BOOL *pBoolOut)
static unsigned char VARIANT_int_add(DWORD *v, unsigned int nv, const DWORD *p, unsigned int np)
HRESULT WINAPI VarR4FromDec(const DECIMAL *pDecIn, float *pFltOut)
static int VARIANT_DecCmp(const DECIMAL *pDecLeft, const DECIMAL *pDecRight)
static void VARIANT_DI_clear(VARIANT_DI *i)
HRESULT WINAPI VarI2FromDate(DATE dateIn, SHORT *psOut)
HRESULT WINAPI VarUI1FromUI8(ULONG64 ullIn, BYTE *pbOut)
HRESULT WINAPI VarDecFromR4(FLOAT fltIn, DECIMAL *pDecOut)
HRESULT WINAPI VarUI4FromR8(double dblIn, ULONG *pulOut)
HRESULT WINAPI VarBstrFromDate(DATE dateIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarI2FromI8(LONG64 llIn, SHORT *psOut)
HRESULT WINAPI VarBoolFromR4(FLOAT fltIn, VARIANT_BOOL *pBoolOut)
HRESULT WINAPI VarDecSub(const DECIMAL *pDecLeft, const DECIMAL *pDecRight, DECIMAL *pDecOut)
HRESULT WINAPI VarUI2FromStr(const OLECHAR *strIn, LCID lcid, ULONG dwFlags, USHORT *pusOut)
HRESULT WINAPI VarR8FromUI8(ULONG64 ullIn, double *pDblOut)
HRESULT WINAPI VarUI4FromI2(SHORT sIn, ULONG *pulOut)
HRESULT WINAPI VarI2FromUI2(USHORT usIn, SHORT *psOut)
HRESULT WINAPI VarR4FromCy(CY cyIn, float *pFltOut)
HRESULT WINAPI VarUI2FromI8(LONG64 llIn, USHORT *pusOut)
HRESULT WINAPI VarCyFromDec(const DECIMAL *pdecIn, CY *pCyOut)
#define VARIANT_DutchRound(typ, value, res)
HRESULT WINAPI VarUI1FromI2(SHORT sIn, BYTE *pbOut)
HRESULT WINAPI VarI2FromDec(const DECIMAL *pdecIn, SHORT *psOut)
static HRESULT VARIANT_DI_normalize(VARIANT_DI *val, int exponent2, BOOL isDouble)
HRESULT WINAPI VarCyCmpR8(CY cyLeft, double dblRight)
HRESULT WINAPI VarI4FromI8(LONG64 llIn, LONG *piOut)
HRESULT WINAPI VarUI8FromR8(double dblIn, ULONG64 *pui64Out)
HRESULT WINAPI VarUI8FromDate(DATE dateIn, ULONG64 *pui64Out)
HRESULT WINAPI VarI8FromI1(signed char cIn, LONG64 *pi64Out)
#define POSTST(dest, src, func, tst)
HRESULT WINAPI VarDecNeg(const DECIMAL *pDecIn, DECIMAL *pDecOut)
HRESULT WINAPI VarR4FromI2(SHORT sIn, float *pFltOut)
HRESULT WINAPI VarI1FromUI8(ULONG64 ullIn, signed char *pcOut)
HRESULT WINAPI VarUI8FromStr(const OLECHAR *strIn, LCID lcid, ULONG dwFlags, ULONG64 *pui64Out)
static HRESULT VARIANT_DI_FromR4(float source, VARIANT_DI *dest)
HRESULT WINAPI VarR8Round(double dblIn, int nDig, double *pDblOut)
HRESULT WINAPI VarBstrCmp(BSTR pbstrLeft, BSTR pbstrRight, LCID lcid, DWORD dwFlags)
static HRESULT VARIANT_FromDisp(IDispatch *pdispIn, LCID lcid, void *pOut, VARTYPE vt, DWORD dwFlags)
HRESULT WINAPI VarUI8FromDisp(IDispatch *pdispIn, LCID lcid, ULONG64 *pui64Out)
HRESULT WINAPI VarUI4FromI8(LONG64 llIn, ULONG *pulOut)
HRESULT WINAPI VarR8FromUI4(ULONG ulIn, double *pDblOut)
HRESULT WINAPI VarUI1FromDec(const DECIMAL *pdecIn, BYTE *pbOut)
HRESULT WINAPI VarUI2FromDec(const DECIMAL *pdecIn, USHORT *pusOut)
HRESULT WINAPI VarI4FromDec(const DECIMAL *pdecIn, LONG *piOut)
static HRESULT VARIANT_DI_FromR8(double source, VARIANT_DI *dest)
HRESULT WINAPI VarUI2FromDate(DATE dateIn, USHORT *pusOut)
HRESULT WINAPI VarDecFromUI8(ULONG64 ullIn, DECIMAL *pDecOut)
HRESULT WINAPI VarI2FromDisp(IDispatch *pdispIn, LCID lcid, SHORT *psOut)
HRESULT WINAPI VarDateFromCy(CY cyIn, DATE *pdateOut)
HRESULT WINAPI VarUI2FromUI1(BYTE bIn, USHORT *pusOut)
HRESULT WINAPI VarBoolFromDate(DATE dateIn, VARIANT_BOOL *pBoolOut)
HRESULT WINAPI VarDateFromUI4(ULONG ulIn, DATE *pdateOut)
HRESULT WINAPI VarR8FromI4(LONG lIn, double *pDblOut)
HRESULT WINAPI VarDecFromUI2(USHORT usIn, DECIMAL *pDecOut)
HRESULT WINAPI VarCyFromI8(LONG64 llIn, CY *pCyOut)
HRESULT WINAPI VarDateFromBool(VARIANT_BOOL boolIn, DATE *pdateOut)
HRESULT WINAPI VarI1FromDec(const DECIMAL *pdecIn, signed char *pcOut)
HRESULT WINAPI VarI2FromR8(double dblIn, SHORT *psOut)
HRESULT WINAPI VarDecFromBool(VARIANT_BOOL bIn, DECIMAL *pDecOut)
HRESULT WINAPI VarCyCmp(CY cyLeft, CY cyRight)
HRESULT WINAPI VarI1FromBool(VARIANT_BOOL boolIn, signed char *pcOut)
HRESULT WINAPI VarR4FromUI2(USHORT usIn, float *pFltOut)
HRESULT WINAPI VarUI4FromUI8(ULONG64 ullIn, ULONG *pulOut)
HRESULT WINAPI VarBstrFromI8(LONG64 llIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarDecAbs(const DECIMAL *pDecIn, DECIMAL *pDecOut)
struct tagDATEPARSE DATEPARSE
static ULONG VARIANT_Sub(ULONG ulLeft, ULONG ulRight, ULONG *pulHigh)
HRESULT WINAPI VarUI4FromStr(const OLECHAR *strIn, LCID lcid, ULONG dwFlags, ULONG *pulOut)
HRESULT WINAPI VarUI2FromBool(VARIANT_BOOL boolIn, USHORT *pusOut)
HRESULT WINAPI VarUI1FromUI2(USHORT usIn, BYTE *pbOut)
static BSTR VARIANT_MakeBstr(LCID lcid, DWORD dwFlags, WCHAR *szOut)
RETTYP _VarR8FromCy(CY i, double *o)
HRESULT WINAPI VarDecFromUI4(ULONG ulIn, DECIMAL *pDecOut)
HRESULT WINAPI VarUI1FromI8(LONG64 llIn, BYTE *pbOut)
HRESULT WINAPI VarI2FromR4(FLOAT fltIn, SHORT *psOut)
HRESULT WINAPI VarDecFromI4(LONG lIn, DECIMAL *pDecOut)
HRESULT WINAPI VarBstrFromUI8(ULONG64 ullIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarI4FromCy(CY cyIn, LONG *piOut)
HRESULT WINAPI VarBoolFromUI8(ULONG64 ullIn, VARIANT_BOOL *pBoolOut)
HRESULT WINAPI VarUI4FromR4(FLOAT fltIn, ULONG *pulOut)
HRESULT WINAPI VarUI8FromI8(LONG64 llIn, ULONG64 *pui64Out)
HRESULT WINAPI VarR8FromDisp(IDispatch *pdispIn, LCID lcid, double *pDblOut)
static void VARIANT_int_div(DWORD *p, unsigned int n, const DWORD *divisor, unsigned int dn)
HRESULT WINAPI VarUI2FromUI4(ULONG ulIn, USHORT *pusOut)
HRESULT WINAPI VarBoolFromDec(const DECIMAL *pDecIn, VARIANT_BOOL *pBoolOut)
HRESULT WINAPI VarUI1FromDisp(IDispatch *pdispIn, LCID lcid, BYTE *pbOut)
HRESULT WINAPI VarUI1FromBool(VARIANT_BOOL boolIn, BYTE *pbOut)
HRESULT WINAPI VarBoolFromDisp(IDispatch *pdispIn, LCID lcid, VARIANT_BOOL *pBoolOut)
static void VARIANT_CopyData(const VARIANT *srcVar, VARTYPE vt, void *pOut)
HRESULT WINAPI VarDecInt(const DECIMAL *pDecIn, DECIMAL *pDecOut)
HRESULT WINAPI VarCyFromR4(FLOAT fltIn, CY *pCyOut)
HRESULT WINAPI VarR4FromDate(DATE dateIn, float *pFltOut)
HRESULT WINAPI VarI4FromUI1(BYTE bIn, LONG *piOut)
HRESULT WINAPI VarCyNeg(CY cyIn, CY *pCyOut)
HRESULT WINAPI VarR4FromI4(LONG lIn, float *pFltOut)
static HRESULT VARIANT_NumberFromBstr(const OLECHAR *pStrIn, LCID lcid, ULONG ulFlags, void *pOut, VARTYPE vt)
HRESULT WINAPI VarCyFromI4(LONG lIn, CY *pCyOut)
HRESULT WINAPI VarBoolFromUI2(USHORT usIn, VARIANT_BOOL *pBoolOut)
HRESULT WINAPI VarUI2FromUI8(ULONG64 ullIn, USHORT *pusOut)
static unsigned char VARIANT_int_divbychar(DWORD *p, unsigned int n, unsigned char divisor)
HRESULT WINAPI VarCySub(CY cyLeft, CY cyRight, CY *pCyOut)
HRESULT WINAPI VarCyFromDisp(IDispatch *pdispIn, LCID lcid, CY *pCyOut)
HRESULT WINAPI VarI2FromUI4(ULONG ulIn, SHORT *psOut)
HRESULT WINAPI VarUI4FromBool(VARIANT_BOOL boolIn, ULONG *pulOut)
HRESULT WINAPI VarDecMul(const DECIMAL *pDecLeft, const DECIMAL *pDecRight, DECIMAL *pDecOut)
static HRESULT VARIANT_DecScale(const DECIMAL **ppDecLeft, const DECIMAL **ppDecRight, DECIMAL pDecOut[2])
HRESULT WINAPI VarI8FromStr(const OLECHAR *strIn, LCID lcid, ULONG dwFlags, LONG64 *pi64Out)
HRESULT WINAPI VarCyFromUI8(ULONG64 ullIn, CY *pCyOut)
HRESULT WINAPI VarI8FromUI4(ULONG ulIn, LONG64 *pi64Out)
HRESULT WINAPI VarUI4FromCy(CY cyIn, ULONG *pulOut)
static const int CY_Divisors[5]
HRESULT WINAPI VarUI8FromUI1(BYTE bIn, ULONG64 *pui64Out)
HRESULT WINAPI VarR8FromI1(signed char cIn, double *pDblOut)
HRESULT WINAPI VarR4FromBool(VARIANT_BOOL boolIn, float *pFltOut)
HRESULT WINAPI VarI8FromDec(const DECIMAL *pdecIn, LONG64 *pi64Out)
HRESULT WINAPI VarR8FromDec(const DECIMAL *pDecIn, double *pDblOut)
HRESULT WINAPI VarUI8FromI2(SHORT sIn, ULONG64 *pui64Out)
HRESULT WINAPI VarBstrFromR4(FLOAT fltIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarUI1FromI1(signed char cIn, BYTE *pbOut)
HRESULT WINAPI VarBoolFromR8(double dblIn, VARIANT_BOOL *pBoolOut)
HRESULT WINAPI VarUI1FromDate(DATE dateIn, BYTE *pbOut)
HRESULT WINAPI VarBoolFromUI4(ULONG ulIn, VARIANT_BOOL *pBoolOut)
HRESULT WINAPI VarR8FromUI1(BYTE bIn, double *pDblOut)
HRESULT WINAPI VarDecFromDate(DATE dateIn, DECIMAL *pDecOut)
HRESULT WINAPI VarBstrFromDisp(IDispatch *pdispIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarDecDiv(const DECIMAL *pDecLeft, const DECIMAL *pDecRight, DECIMAL *pDecOut)
struct DECIMAL_internal VARIANT_DI
HRESULT WINAPI VarR4FromI8(LONG64 llIn, float *pFltOut)
HRESULT WINAPI VarR8FromBool(VARIANT_BOOL boolIn, double *pDblOut)
HRESULT WINAPI VarUI8FromDec(const DECIMAL *pdecIn, ULONG64 *pui64Out)
HRESULT WINAPI VarI1FromI8(LONG64 llIn, signed char *pcOut)
HRESULT WINAPI VarCyFromUI4(ULONG ulIn, CY *pCyOut)
HRESULT WINAPI VarDateFromUI2(USHORT uiIn, DATE *pdateOut)
HRESULT WINAPI VarDateFromR8(double dblIn, DATE *pdateOut)
HRESULT WINAPI VarUI2FromI2(SHORT sIn, USHORT *pusOut)
static BOOL VARIANT_DI_tostringW(const VARIANT_DI *a, WCHAR *s, unsigned int n)
HRESULT WINAPI VarBstrFromDec(const DECIMAL *pDecIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarI1FromDate(DATE dateIn, signed char *pcOut)
HRESULT WINAPI VarDateFromI2(short sIn, DATE *pdateOut)
HRESULT WINAPI VarI2FromCy(CY cyIn, SHORT *psOut)
HRESULT WINAPI VarI1FromCy(CY cyIn, signed char *pcOut)
static void VARIANT_int_shiftleft(DWORD *p, unsigned int n, unsigned int shift)
HRESULT WINAPI VarUI4FromDate(DATE dateIn, ULONG *pulOut)
HRESULT WINAPI VarDateFromI4(LONG lIn, DATE *pdateOut)
HRESULT WINAPI VarUI4FromUI1(BYTE bIn, ULONG *pulOut)
HRESULT WINAPI VarBstrFromUI2(USHORT usIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarI8FromBool(VARIANT_BOOL boolIn, LONG64 *pi64Out)
HRESULT WINAPI VarBstrCat(BSTR pbstrLeft, BSTR pbstrRight, BSTR *pbstrOut)
HRESULT WINAPI VarDecFromI1(signed char cIn, DECIMAL *pDecOut)
HRESULT WINAPI VarBoolFromStr(const OLECHAR *strIn, LCID lcid, ULONG dwFlags, VARIANT_BOOL *pBoolOut)
HRESULT WINAPI VarI8FromUI2(USHORT usIn, LONG64 *pi64Out)
HRESULT WINAPI VarDateFromI8(LONG64 llIn, DATE *pdateOut)
HRESULT WINAPI VarUI2FromR4(FLOAT fltIn, USHORT *pusOut)
HRESULT WINAPI VarCyFromStr(const OLECHAR *strIn, LCID lcid, ULONG dwFlags, CY *pCyOut)
HRESULT WINAPI VarUI2FromR8(double dblIn, USHORT *pusOut)
#define SIMPLE(dest, src, func)
HRESULT WINAPI VarR8Pow(double dblLeft, double dblPow, double *pDblOut)
HRESULT WINAPI VarI2FromI4(LONG iIn, SHORT *psOut)
HRESULT WINAPI VarDecFromStr(const OLECHAR *strIn, LCID lcid, ULONG dwFlags, DECIMAL *pDecOut)
HRESULT WINAPI VarUI1FromStr(const OLECHAR *strIn, LCID lcid, ULONG dwFlags, BYTE *pbOut)
HRESULT WINAPI VarBoolFromI1(signed char cIn, VARIANT_BOOL *pBoolOut)
HRESULT WINAPI VarI4FromUI4(ULONG ulIn, LONG *piOut)
HRESULT WINAPI VarUI8FromI1(signed char cIn, ULONG64 *pui64Out)
HRESULT WINAPI VarBstrFromUI4(ULONG ulIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarR4FromR8(double dblIn, float *pFltOut)
HRESULT WINAPI VarCyFromI2(SHORT sIn, CY *pCyOut)
HRESULT WINAPI VarDecFromI8(LONG64 llIn, DECIMAL *pDecOut)
BOOL get_date_format(LCID lcid, DWORD flags, const SYSTEMTIME *st, const WCHAR *fmt, WCHAR *date, int date_len)
static HRESULT VARIANT_BstrFromReal(DOUBLE dblIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut, int ndigits)
static BOOL VARIANT_GetLocalisedText(LANGID langId, DWORD dwId, WCHAR *lpszDest)
static unsigned char VARIANT_int_mulbychar(DWORD *p, unsigned int n, unsigned char m)
HRESULT WINAPI VarR4FromStr(const OLECHAR *strIn, LCID lcid, ULONG dwFlags, float *pFltOut)
HRESULT WINAPI VarR8FromR4(FLOAT fltIn, double *pDblOut)
static HRESULT VARIANT_BstrFromUInt(ULONG64 ulVal, LCID lcid, DWORD dwFlags, BSTR *pbstrOut)
static int VARIANT_int_addlossy(DWORD *a, int *ascale, unsigned int an, DWORD *b, int *bscale, unsigned int bn)
HRESULT WINAPI VarCyAdd(CY cyLeft, CY cyRight, CY *pCyOut)
HRESULT WINAPI VarCyFromI1(signed char cIn, CY *pCyOut)
static void VARIANT_DecFromDI(const VARIANT_DI *from, DECIMAL *to)
HRESULT WINAPI VarI4FromR4(FLOAT fltIn, LONG *piOut)
HRESULT WINAPI VarBstrFromI1(signed char cIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarDateFromDec(const DECIMAL *pdecIn, DATE *pdateOut)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
static const WCHAR month[12][4]
double pow(double x, double y)
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLint GLint GLint GLint GLint GLint y
GLdouble GLdouble GLdouble r
GLenum GLenum GLenum GLenum GLenum scale
GLboolean GLboolean GLboolean b
GLfloat GLfloat GLfloat GLfloat v3
GLboolean GLboolean GLboolean GLboolean a
GLfloat GLfloat GLfloat v2
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
struct task_struct * current
static size_t double int ndigits
static const char mbstate_t *static wchar_t const char mbstate_t *static const wchar_t int *static double
#define cmp(status, error)
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#define MAKELCID(lgid, srtid)
UINT WINAPI SysStringByteLen(BSTR str)
BSTR WINAPI SysAllocString(LPCOLESTR str)
UINT WINAPI SysStringLen(BSTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
BSTR WINAPI DECLSPEC_HOTPATCH SysAllocStringByteLen(LPCSTR str, UINT len)
#define VAR_CALENDAR_GREGORIAN
#define VAR_CALENDAR_THAI
#define VAR_DATEVALUEONLY
#define VAR_CALENDAR_HIJRI
#define DISPATCH_PROPERTYGET
#define VAR_TIMEVALUEONLY
_In_ DWORD _In_ DWORD dwOffset
__asm__(".p2align 4, 0x90\n" ".seh_proc __seh2_global_filter_func\n" "__seh2_global_filter_func:\n" "\tsub %rbp, %rax\n" "\tpush %rbp\n" "\t.seh_pushreg %rbp\n" "\tpush %rbx\n" "\t.seh_pushreg %rbx\n" "\tpush %rdi\n" "\t.seh_pushreg %rdi\n" "\tpush %rsi\n" "\t.seh_pushreg %rsi\n" "\tpush %r12\n" "\t.seh_pushreg %r12\n" "\tpush %r13\n" "\t.seh_pushreg %r13\n" "\tpush %r14\n" "\t.seh_pushreg %r14\n" "\tpush %r15\n" "\t.seh_pushreg %r15\n" "\tsub $40, %rsp\n" "\t.seh_stackalloc 40\n" "\t.seh_endprologue\n" "\tsub %rax, %rdx\n" "\tmov %rdx, %rbp\n" "\tjmp *%r8\n" "__seh2_global_filter_func_exit:\n" "\t.p2align 4\n" "\tadd $40, %rsp\n" "\tpop %r15\n" "\tpop %r14\n" "\tpop %r13\n" "\tpop %r12\n" "\tpop %rsi\n" "\tpop %rdi\n" "\tpop %rbx\n" "\tpop %rbp\n" "\tret\n" "\t.seh_endproc")
static int sum(int x_, int y_)
#define LANGIDFROMLCID(l)
static const char *static const char const char DWORD void DWORD *static const char const char DWORD void DWORD *static const char DWORD DWORD void * buff
HRESULT WINAPI VarParseNumFromStr(const OLECHAR *lpszStr, LCID lcid, ULONG dwFlags, NUMPARSE *pNumprs, BYTE *rgbDig)
INT WINAPI VariantTimeToSystemTime(double dateIn, LPSYSTEMTIME lpSt)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
HRESULT WINAPI VariantChangeTypeEx(VARIANTARG *pvargDest, const VARIANTARG *pvargSrc, LCID lcid, USHORT wFlags, VARTYPE vt)
HRESULT WINAPI VarNumFromParseNum(NUMPARSE *pNumprs, BYTE *rgbDig, ULONG dwVtBits, VARIANT *pVarDst)
void WINAPI VariantInit(VARIANTARG *pVarg)
INT WINAPI SystemTimeToVariantTime(LPSYSTEMTIME lpSt, double *pDateOut)
_In_ ULONG _In_ ULONG rgb
#define DISP_E_BADVARTYPE
#define DISP_E_TYPEMISMATCH
#define LOCALE_SABBREVMONTHNAME10
#define LOCALE_SMONTHNAME12
#define LOCALE_SMONTHNAME5
#define LOCALE_SABBREVMONTHNAME9
#define LOCALE_SABBREVMONTHNAME11
#define LOCALE_SABBREVDAYNAME5
#define LOCALE_SABBREVDAYNAME2
#define LOCALE_SABBREVMONTHNAME2
#define LOCALE_SMONTHNAME13
#define LOCALE_SMONTHNAME3
#define LOCALE_SMONTHNAME11
#define LOCALE_SMONTHNAME8
#define LOCALE_SMONTHNAME4
#define LOCALE_SABBREVMONTHNAME13
#define LOCALE_SMONTHNAME7
#define LOCALE_SSHORTDATE
#define LOCALE_SABBREVMONTHNAME4
#define LOCALE_SABBREVDAYNAME4
#define LOCALE_SMONTHNAME1
#define LOCALE_SABBREVMONTHNAME3
#define LOCALE_SABBREVMONTHNAME1
#define LOCALE_NOUSEROVERRIDE
#define LOCALE_SABBREVDAYNAME6
#define LOCALE_SMONTHNAME2
#define LOCALE_SABBREVDAYNAME1
#define LOCALE_SABBREVMONTHNAME6
#define LOCALE_SMONTHNAME6
#define LOCALE_SABBREVDAYNAME3
#define LOCALE_SABBREVMONTHNAME5
#define LOCALE_SABBREVMONTHNAME7
#define LOCALE_SABBREVMONTHNAME8
#define LOCALE_SMONTHNAME10
#define LOCALE_SMONTHNAME9
#define LOCALE_SABBREVMONTHNAME12
#define LOCALE_SABBREVDAYNAME7
#define MAKEINTRESOURCEW(i)