diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2019-08-02 14:24:59 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2019-08-02 14:24:59 (GMT) |
commit | ff1762b09549645184e14776a950e951d8ac2e9c (patch) | |
tree | 2532f2d2d468cb17a3eec5bca2ebd5f11c622cd6 /win | |
parent | 59a630e12ee451e274f030ce7b364351bd5434a1 (diff) | |
parent | 61ef69a2d84ae00685d204fed3d8eae694947bf3 (diff) | |
download | tcl-ff1762b09549645184e14776a950e951d8ac2e9c.zip tcl-ff1762b09549645184e14776a950e951d8ac2e9c.tar.gz tcl-ff1762b09549645184e14776a950e951d8ac2e9c.tar.bz2 |
Merge core-8-branch. Use tclWinDde.c and tclWinReg.c to show how the *WChar* functions could be used in Win32 extensions.
Diffstat (limited to 'win')
-rw-r--r-- | win/tclWinDde.c | 56 | ||||
-rw-r--r-- | win/tclWinReg.c | 41 |
2 files changed, 59 insertions, 38 deletions
diff --git a/win/tclWinDde.c b/win/tclWinDde.c index 9c04c2d..8c76cdb 100644 --- a/win/tclWinDde.c +++ b/win/tclWinDde.c @@ -119,6 +119,11 @@ static int DdeObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); +#if (TCL_MAJOR_VERSION < 9) && (TCL_MAJOR_VERSION < 7) +# define Tcl_WCharToUtfDString Tcl_UniCharToUtfDString +# define Tcl_UtfToWCharDString Tcl_UtfToUniCharDString +#endif + static unsigned char * getByteArrayFromObj( Tcl_Obj *objPtr, @@ -138,8 +143,14 @@ getByteArrayFromObj( return result; } +#ifdef __cplusplus +extern "C" { +#endif DLLEXPORT int Dde_Init(Tcl_Interp *interp); DLLEXPORT int Dde_SafeInit(Tcl_Interp *interp); +#ifdef __cplusplus +} +#endif /* *---------------------------------------------------------------------- @@ -358,8 +369,7 @@ DdeSetServerName( } if (r != TCL_OK) { Tcl_DStringInit(&dString); - Tcl_UtfToUniCharDString(Tcl_GetString(Tcl_GetObjResult(interp)), -1, &dString); - OutputDebugString((WCHAR *) Tcl_DStringValue(&dString)); + OutputDebugString(Tcl_UtfToWCharDString(Tcl_GetString(Tcl_GetObjResult(interp)), -1, &dString)); Tcl_DStringFree(&dString); return NULL; } @@ -397,7 +407,7 @@ DdeSetServerName( Tcl_ListObjIndex(interp, srvPtrPtr[n], 1, &namePtr); Tcl_DStringInit(&ds); - Tcl_UtfToUniCharDString(Tcl_GetString(namePtr), -1, &ds); + Tcl_UtfToWCharDString(Tcl_GetString(namePtr), -1, &ds); if (wcscmp(actualName, (WCHAR *)Tcl_DStringValue(&ds)) == 0) { suffix++; Tcl_DStringFree(&ds); @@ -757,7 +767,7 @@ DdeServerProc( len = convPtr->returnPackagePtr->length; if (uFmt != CF_TEXT) { Tcl_DStringInit(&dsBuf); - Tcl_UtfToUniCharDString(returnString, len, &dsBuf); + Tcl_UtfToWCharDString(returnString, len, &dsBuf); returnString = Tcl_DStringValue(&dsBuf); len = Tcl_DStringLength(&dsBuf) + sizeof(WCHAR) - 1; } @@ -771,7 +781,7 @@ DdeServerProc( Tcl_Obj *variableObjPtr; Tcl_DStringInit(&ds); - Tcl_UniCharToUtfDString((Tcl_UniChar *)utilString, wcslen(utilString), &ds); + Tcl_WCharToUtfDString(utilString, wcslen(utilString), &ds); variableObjPtr = Tcl_GetVar2Ex( convPtr->riPtr->interp, Tcl_DStringValue(&ds), NULL, TCL_GLOBAL_ONLY); @@ -780,7 +790,7 @@ DdeServerProc( len = variableObjPtr->length; if (uFmt != CF_TEXT) { Tcl_DStringInit(&dsBuf); - Tcl_UtfToUniCharDString(returnString, len, &dsBuf); + Tcl_UtfToWCharDString(returnString, len, &dsBuf); returnString = Tcl_DStringValue(&dsBuf); len = Tcl_DStringLength(&dsBuf) + sizeof(WCHAR) - 1; } @@ -830,12 +840,12 @@ DdeServerProc( DdeQueryString(ddeInstance, ddeItem, utilString, (DWORD) len + 1, CP_WINUNICODE); Tcl_DStringInit(&ds); - Tcl_UniCharToUtfDString((Tcl_UniChar *)utilString, wcslen(utilString), &ds); + Tcl_WCharToUtfDString(utilString, wcslen(utilString), &ds); utilString = (WCHAR *) DdeAccessData(hData, &len2); len = len2; if (uFmt != CF_TEXT) { Tcl_DStringInit(&ds2); - Tcl_UniCharToUtfDString((Tcl_UniChar *)utilString, wcslen(utilString), &ds2); + Tcl_WCharToUtfDString(utilString, wcslen(utilString), &ds2); utilString = (WCHAR *) Tcl_DStringValue(&ds2); } variableObjPtr = Tcl_NewStringObj((char *)utilString, -1); @@ -887,7 +897,7 @@ DdeServerProc( Tcl_DString dsBuf; Tcl_DStringInit(&dsBuf); - Tcl_UniCharToUtfDString((Tcl_UniChar *)utilString, (dlen>>1) - 1, &dsBuf); + Tcl_WCharToUtfDString(utilString, (dlen>>1) - 1, &dsBuf); ddeObjectPtr = Tcl_NewStringObj(Tcl_DStringValue(&dsBuf), Tcl_DStringLength(&dsBuf)); Tcl_DStringFree(&dsBuf); @@ -1021,7 +1031,7 @@ MakeDdeConnection( Tcl_DString dString; Tcl_DStringInit(&dString); - Tcl_UniCharToUtfDString((Tcl_UniChar *)name, wcslen(name), &dString); + Tcl_WCharToUtfDString(name, wcslen(name), &dString); Tcl_SetObjResult(interp, Tcl_ObjPrintf( "no registered server named \"%s\"", Tcl_DStringValue(&dString))); Tcl_DStringFree(&dString); @@ -1131,12 +1141,12 @@ DdeServicesOnAck( GlobalGetAtomName(service, sz, 255); Tcl_DStringInit(&dString); - Tcl_UniCharToUtfDString((Tcl_UniChar *)sz, wcslen(sz), &dString); + Tcl_WCharToUtfDString(sz, wcslen(sz), &dString); Tcl_ListObjAppendElement(NULL, matchPtr, Tcl_NewStringObj(Tcl_DStringValue(&dString), -1)); Tcl_DStringFree(&dString); GlobalGetAtomName(topic, sz, 255); Tcl_DStringInit(&dString); - Tcl_UniCharToUtfDString((Tcl_UniChar *)sz, wcslen(sz), &dString); + Tcl_WCharToUtfDString(sz, wcslen(sz), &dString); Tcl_ListObjAppendElement(NULL, matchPtr, Tcl_NewStringObj(Tcl_DStringValue(&dString), -1)); Tcl_DStringFree(&dString); @@ -1476,7 +1486,7 @@ DdeObjCmd( length = objv[firstArg]->length; Tcl_DStringInit(&serviceBuf); - Tcl_UtfToUniCharDString(src, length, &serviceBuf); + Tcl_UtfToWCharDString(src, length, &serviceBuf); serviceName = (WCHAR *) Tcl_DStringValue(&serviceBuf); length = Tcl_DStringLength(&serviceBuf) / sizeof(WCHAR); } else { @@ -1495,7 +1505,7 @@ DdeObjCmd( length = objv[firstArg + 1]->length; Tcl_DStringInit(&topicBuf); - topicName = (const WCHAR *)Tcl_UtfToUniCharDString(src, length, &topicBuf); + topicName = Tcl_UtfToWCharDString(src, length, &topicBuf); length = Tcl_DStringLength(&topicBuf) / sizeof(WCHAR); if (length == 0) { topicName = NULL; @@ -1513,7 +1523,7 @@ DdeObjCmd( Tcl_DString dsBuf; Tcl_DStringInit(&dsBuf); - Tcl_UniCharToUtfDString((Tcl_UniChar *)serviceName, wcslen(serviceName), &dsBuf); + Tcl_WCharToUtfDString(serviceName, wcslen(serviceName), &dsBuf); Tcl_SetObjResult(interp, Tcl_NewStringObj(Tcl_DStringValue(&dsBuf), Tcl_DStringLength(&dsBuf))); Tcl_DStringFree(&dsBuf); @@ -1537,8 +1547,8 @@ DdeObjCmd( src = Tcl_GetString(objv[firstArg + 2]); dataLength = objv[firstArg + 2]->length; Tcl_DStringInit(&dsBuf); - dataString = (const WCHAR *) - Tcl_UtfToUniCharDString(src, dataLength, &dsBuf); + dataString = + Tcl_UtfToWCharDString(src, dataLength, &dsBuf); dataLength = Tcl_DStringLength(&dsBuf) + sizeof(WCHAR); } @@ -1591,7 +1601,7 @@ DdeObjCmd( src = Tcl_GetString(objv[firstArg + 2]); length = objv[firstArg + 2]->length; Tcl_DStringInit(&itemBuf); - itemString = (const WCHAR *)Tcl_UtfToUniCharDString(src, length, &itemBuf); + itemString = Tcl_UtfToWCharDString(src, length, &itemBuf); length = Tcl_DStringLength(&itemBuf) / sizeof(WCHAR); if (length == 0) { @@ -1633,7 +1643,7 @@ DdeObjCmd( tmp -= sizeof(WCHAR); } Tcl_DStringInit(&dsBuf); - Tcl_UniCharToUtfDString((Tcl_UniChar *)dataString, tmp>>1, &dsBuf); + Tcl_WCharToUtfDString(dataString, tmp>>1, &dsBuf); returnObjPtr = Tcl_NewStringObj(Tcl_DStringValue(&dsBuf), Tcl_DStringLength(&dsBuf)); @@ -1659,7 +1669,7 @@ DdeObjCmd( src = Tcl_GetString(objv[firstArg + 2]); length = objv[firstArg + 2]->length; Tcl_DStringInit(&itemBuf); - itemString = (const WCHAR *)Tcl_UtfToUniCharDString(src, length, &itemBuf); + itemString = Tcl_UtfToWCharDString(src, length, &itemBuf); length = Tcl_DStringLength(&itemBuf) / sizeof(WCHAR); if (length == 0) { Tcl_SetObjResult(interp, @@ -1678,7 +1688,7 @@ DdeObjCmd( length = objv[firstArg + 3]->length; Tcl_DStringInit(&dsBuf); dataString = (BYTE *) - Tcl_UtfToUniCharDString(data, length, &dsBuf); + Tcl_UtfToWCharDString(data, length, &dsBuf); length = Tcl_DStringLength(&dsBuf) + sizeof(WCHAR); } @@ -1842,7 +1852,7 @@ DdeObjCmd( string = Tcl_GetString(objPtr); length = objPtr->length; Tcl_DStringInit(&dsBuf); - Tcl_UtfToUniCharDString(string, length, &dsBuf); + Tcl_UtfToWCharDString(string, length, &dsBuf); string = Tcl_DStringValue(&dsBuf); length = Tcl_DStringLength(&dsBuf) + sizeof(WCHAR); ddeItemData = DdeCreateDataHandle(ddeInstance, (BYTE *) string, @@ -1894,7 +1904,7 @@ DdeObjCmd( length -= sizeof(WCHAR); } Tcl_DStringInit(&dsBuf); - Tcl_UniCharToUtfDString((Tcl_UniChar *)ddeDataString, length>>1, &dsBuf); + Tcl_WCharToUtfDString(ddeDataString, length>>1, &dsBuf); resultPtr = Tcl_NewStringObj(Tcl_DStringValue(&dsBuf), Tcl_DStringLength(&dsBuf)); Tcl_DStringFree(&dsBuf); diff --git a/win/tclWinReg.c b/win/tclWinReg.c index b95cbcd..e73707e 100644 --- a/win/tclWinReg.c +++ b/win/tclWinReg.c @@ -126,6 +126,11 @@ static int SetValue(Tcl_Interp *interp, Tcl_Obj *keyNameObj, Tcl_Obj *valueNameObj, Tcl_Obj *dataObj, Tcl_Obj *typeObj, REGSAM mode); +#if (TCL_MAJOR_VERSION < 9) && (TCL_MAJOR_VERSION < 7) +# define Tcl_WCharToUtfDString Tcl_UniCharToUtfDString +# define Tcl_UtfToWCharDString Tcl_UtfToUniCharDString +#endif + static unsigned char * getByteArrayFromObj( Tcl_Obj *objPtr, @@ -145,8 +150,14 @@ getByteArrayFromObj( return result; } +#ifdef __cplusplus +extern "C" { +#endif DLLEXPORT int Registry_Init(Tcl_Interp *interp); DLLEXPORT int Registry_Unload(Tcl_Interp *interp, int flags); +#ifdef __cplusplus +} +#endif /* *---------------------------------------------------------------------- @@ -471,7 +482,7 @@ DeleteKey( */ Tcl_DStringInit(&buf); - nativeTail = (const WCHAR *)Tcl_UtfToUniCharDString(tail, -1, &buf); + nativeTail = Tcl_UtfToWCharDString(tail, -1, &buf); result = RecursiveDeleteKey(subkey, nativeTail, saveMode); Tcl_DStringFree(&buf); @@ -528,7 +539,7 @@ DeleteValue( valueName = Tcl_GetString(valueNameObj); Tcl_DStringInit(&ds); - Tcl_UtfToUniCharDString(valueName, valueNameObj->length, &ds); + Tcl_UtfToWCharDString(valueName, valueNameObj->length, &ds); result = RegDeleteValue(key, (const WCHAR *)Tcl_DStringValue(&ds)); Tcl_DStringFree(&ds); if (result != ERROR_SUCCESS) { @@ -618,7 +629,7 @@ GetKeyNames( break; } Tcl_DStringInit(&ds); - name = Tcl_UniCharToUtfDString((const Tcl_UniChar *)buffer, bufSize, &ds); + name = Tcl_WCharToUtfDString(buffer, bufSize, &ds); if (pattern && !Tcl_StringMatch(name, pattern)) { Tcl_DStringFree(&ds); continue; @@ -685,7 +696,7 @@ GetType( valueName = Tcl_GetString(valueNameObj); Tcl_DStringInit(&ds); - nativeValue = (const WCHAR *)Tcl_UtfToUniCharDString(valueName, valueNameObj->length, &ds); + nativeValue = Tcl_UtfToWCharDString(valueName, valueNameObj->length, &ds); result = RegQueryValueEx(key, nativeValue, NULL, &type, NULL, NULL); Tcl_DStringFree(&ds); @@ -767,7 +778,7 @@ GetValue( valueName = Tcl_GetString(valueNameObj); Tcl_DStringInit(&buf); - nativeValue = (const WCHAR *)Tcl_UtfToUniCharDString(valueName, valueNameObj->length, &buf); + nativeValue = Tcl_UtfToWCharDString(valueName, valueNameObj->length, &buf); result = RegQueryValueEx(key, nativeValue, NULL, &type, (BYTE *) Tcl_DStringValue(&data), &length); @@ -819,7 +830,7 @@ GetValue( WCHAR *wp = (WCHAR *) p; Tcl_DStringInit(&buf); - Tcl_UniCharToUtfDString((const Tcl_UniChar *)wp, wcslen(wp), &buf); + Tcl_WCharToUtfDString(wp, wcslen(wp), &buf); Tcl_ListObjAppendElement(interp, resultPtr, Tcl_NewStringObj(Tcl_DStringValue(&buf), Tcl_DStringLength(&buf))); @@ -832,7 +843,7 @@ GetValue( } else if ((type == REG_SZ) || (type == REG_EXPAND_SZ)) { WCHAR *wp = (WCHAR *) Tcl_DStringValue(&data); Tcl_DStringInit(&buf); - Tcl_UniCharToUtfDString((const Tcl_UniChar *)Tcl_DStringValue(&data), wcslen(wp), &buf); + Tcl_WCharToUtfDString((const WCHAR *)Tcl_DStringValue(&data), wcslen(wp), &buf); Tcl_DStringResult(interp, &buf); } else { /* @@ -910,7 +921,7 @@ GetValueNames( &size, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) { Tcl_DStringInit(&ds); - Tcl_UniCharToUtfDString((const Tcl_UniChar *)Tcl_DStringValue(&buffer), size, &ds); + Tcl_WCharToUtfDString((const WCHAR *)Tcl_DStringValue(&buffer), size, &ds); name = Tcl_DStringValue(&ds); if (!pattern || Tcl_StringMatch(name, pattern)) { result = Tcl_ListObjAppendElement(interp, resultPtr, @@ -1017,7 +1028,7 @@ OpenSubKey( if (hostName) { Tcl_DStringInit(&buf); - hostName = (char *) Tcl_UtfToUniCharDString(hostName, -1, &buf); + hostName = (char *) Tcl_UtfToWCharDString(hostName, -1, &buf); result = RegConnectRegistry((WCHAR *)hostName, rootKey, &rootKey); Tcl_DStringFree(&buf); @@ -1033,7 +1044,7 @@ OpenSubKey( if (keyName) { Tcl_DStringInit(&buf); - keyName = (char *) Tcl_UtfToUniCharDString(keyName, -1, &buf); + keyName = (char *) Tcl_UtfToWCharDString(keyName, -1, &buf); } if (flags & REG_CREATE) { DWORD create; @@ -1286,7 +1297,7 @@ SetValue( valueName = Tcl_GetString(valueNameObj); Tcl_DStringInit(&nameBuf); - valueName = (char *) Tcl_UtfToUniCharDString(valueName, valueNameObj->length, &nameBuf); + valueName = (char *) Tcl_UtfToWCharDString(valueName, valueNameObj->length, &nameBuf); if (type == REG_DWORD || type == REG_DWORD_BIG_ENDIAN) { int value; @@ -1331,7 +1342,7 @@ SetValue( } Tcl_DStringInit(&buf); - Tcl_UtfToUniCharDString(Tcl_DStringValue(&data), Tcl_DStringLength(&data)+1, + Tcl_UtfToWCharDString(Tcl_DStringValue(&data), Tcl_DStringLength(&data)+1, &buf); result = RegSetValueEx(key, (WCHAR *) valueName, 0, (DWORD) type, (BYTE *) Tcl_DStringValue(&buf), @@ -1343,7 +1354,7 @@ SetValue( const char *data = Tcl_GetString(dataObj); Tcl_DStringInit(&buf); - data = (char *) Tcl_UtfToUniCharDString(data, dataObj->length, &buf); + data = (char *) Tcl_UtfToWCharDString(data, dataObj->length, &buf); /* * Include the null in the length, padding if needed for WCHAR. @@ -1424,7 +1435,7 @@ BroadcastValue( str = Tcl_GetString(objv[0]); Tcl_DStringInit(&ds); - wstr = (WCHAR *) Tcl_UtfToUniCharDString(str, objv[0]->length, &ds); + wstr = Tcl_UtfToWCharDString(str, objv[0]->length, &ds); if (Tcl_DStringLength(&ds) == 0) { wstr = NULL; } @@ -1488,7 +1499,7 @@ AppendSystemError( char *msgPtr; Tcl_DStringInit(&ds); - Tcl_UniCharToUtfDString((const Tcl_UniChar *)tMsgPtr, wcslen(tMsgPtr), &ds); + Tcl_WCharToUtfDString(tMsgPtr, wcslen(tMsgPtr), &ds); LocalFree(tMsgPtr); msgPtr = Tcl_DStringValue(&ds); |