PATCH: Variant Time

Marcus Meissner marcus at jet.franken.de
Thu Aug 9 15:16:51 CDT 2001


Hi,

This adds a first implementation for VarParseNumFromStr and VarNumFromParseNum
(mostly incomplete) and SystemTimeToVariantTime (mostly complete).

The first two are used by my VB testapp, the third one used by BearShare.

Ciao, Marcus

Changelog:
	Implemented VarParseNumFromStr, VarNumFromParseNum,
	SystemTimeToVariantTime.
	

Index: variant.c
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/variant.c,v
retrieving revision 1.17
diff -u -r1.17 variant.c
--- variant.c	2001/07/02 19:59:42	1.17
+++ variant.c	2001/08/09 20:22:18
@@ -4331,3 +4331,76 @@
     return TmToDATE( &t, pvtime );
 }
 
+
+HRESULT WINAPI VarParseNumFromStr(OLECHAR * strIn, LCID lcid, ULONG dwFlags,
+    NUMPARSE * pnumprs, BYTE * rgbDig) {
+    int i,lastent=0;
+    int cDig;
+    FIXME("(%s,flags=%lx,....), partial stub!\n",debugstr_w(strIn),dwFlags);
+    FIXME("numparse: cDig=%d, InFlags=%lx\n",pnumprs->cDig,pnumprs->dwInFlags);
+
+    /* The other struct components are to be set by us */
+
+    memset(rgbDig,0,pnumprs->cDig);
+
+    cDig = 0;
+    for (i=0; strIn[i] ;i++) {
+	if ((strIn[i]>='0') && (strIn[i]<='9')) {
+	    if (pnumprs->cDig > cDig) {
+		*(rgbDig++)=strIn[i]-'0';
+		cDig++;
+		lastent = i;
+	    }
+	}
+    }
+    pnumprs->cDig	= cDig;
+
+    /* FIXME: Just patching some values in */
+    pnumprs->nPwr10	= 0;
+    pnumprs->nBaseShift	= 0;
+    pnumprs->cchUsed	= lastent;
+    pnumprs->dwOutFlags	= NUMPRS_DECIMAL;
+    return S_OK;
+}
+HRESULT WINAPI VarNumFromParseNum(NUMPARSE * pnumprs, BYTE * rgbDig,
+	            ULONG dwVtBits, VARIANT * pvar) {
+    DWORD xint;
+    int i;
+    FIXME("(,dwVtBits=%lx,....), partial stub!\n",dwVtBits);
+
+    xint = 0;
+    for (i=0;i<pnumprs->cDig;i++)
+	xint = xint*10 + rgbDig[i];
+
+    VariantInit(pvar);
+    if (dwVtBits & VTBIT_I4) {
+	pvar->vt = VT_I4;
+	pvar->u.intVal = xint;
+	return S_OK;
+    }
+    if (dwVtBits & VTBIT_R8) {
+	pvar->vt = VT_R8;
+	pvar->u.dblVal = xint;
+	return S_OK;
+    } else {
+	FIXME("vtbitmask is unsupported %lx\n",dwVtBits);
+	return E_FAIL;
+    }
+}
+
+HRESULT WINAPI
+SystemTimeToVariantTime(LPSYSTEMTIME lpSystemTime, DOUBLE *pvtime) {
+    struct tm xtm;
+
+    xtm.tm_year	= lpSystemTime->wYear + 1900;
+    xtm.tm_min	= lpSystemTime->wMinute;
+    xtm.tm_hour	= lpSystemTime->wHour;
+    xtm.tm_sec	= lpSystemTime->wSecond;
+    xtm.tm_mday	= lpSystemTime->wDay;
+    xtm.tm_mon	= lpSystemTime->wMonth;
+    xtm.tm_wday	= lpSystemTime->wDayOfWeek;
+    xtm.tm_wday	= lpSystemTime->wDayOfWeek;
+
+    TmToDATE(&xtm,pvtime);
+    return S_OK;
+}
Index: oleaut32.spec
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/oleaut32.spec,v
retrieving revision 1.27
diff -u -r1.27 oleaut32.spec
--- oleaut32.spec	2001/07/24 00:59:28	1.27
+++ oleaut32.spec	2001/08/09 20:22:18
@@ -52,8 +52,8 @@
 39 stdcall SafeArrayDestroyData(ptr) SafeArrayDestroyData
 40 stdcall SafeArrayRedim(ptr ptr) SafeArrayRedim
 41 stub OACreateTypeLib2
-46 stub VarParseNumFromStr
-47 stub VarNumFromParseNum
+46 stdcall VarParseNumFromStr(wstr long long ptr ptr) VarParseNumFromStr
+47 stdcall VarNumFromParseNum(ptr ptr long ptr) VarNumFromParseNum
 48 stdcall VarI2FromUI1(long ptr) VarI2FromUI1
 49 stdcall VarI2FromI4(long ptr) VarI2FromI4
 50 stdcall VarI2FromR4(long ptr) VarI2FromR4
@@ -152,7 +152,7 @@
 171 stub ClearCustData
 180 stub CreateTypeLib2
 183 stdcall LoadTypeLibEx (ptr long ptr) LoadTypeLibEx
-184 stub SystemTimeToVariantTime
+184 stdcall SystemTimeToVariantTime(ptr ptr) SystemTimeToVariantTime
 185 stub VariantTimeToSystemTime
 186 stdcall UnRegisterTypeLib (ptr long long long long) UnRegisterTypeLib
 190 stub VarDecFromUI1




More information about the wine-patches mailing list