summaryrefslogtreecommitdiffstats
path: root/win
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2019-08-02 14:24:59 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2019-08-02 14:24:59 (GMT)
commitff1762b09549645184e14776a950e951d8ac2e9c (patch)
tree2532f2d2d468cb17a3eec5bca2ebd5f11c622cd6 /win
parent59a630e12ee451e274f030ce7b364351bd5434a1 (diff)
parent61ef69a2d84ae00685d204fed3d8eae694947bf3 (diff)
downloadtcl-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.c56
-rw-r--r--win/tclWinReg.c41
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);