--- a/WinWorkstation.st Sat Sep 15 16:21:39 2001 +0200
+++ b/WinWorkstation.st Sat Sep 15 16:45:51 2001 +0200
@@ -12625,11 +12625,76 @@
%{
HANDLE hClip;
HANDLE hData;
+ OBJ s;
+ unsigned char *src, *p;
+ WIDECHAR *w_src, *w_p;
+
+ if (IsClipboardFormatAvailable(CF_UNICODETEXT)) {
+ int n, len, realLen;
+
+ hClip = OpenClipboard(NULL);
+ if (hClip) {
+ int needUnicode = 0;
+
+ hData = GetClipboardData(CF_UNICODETEXT);
+ w_src = GlobalLock(hData);
+ len = w_src ? wcslen(w_src) : 0;
+
+ /* see how much we really need (when CRLF is replaced by LF)
+ * and if result is really Unicode ...
+ */
+ for (realLen = 0, n=len, w_p=w_src; n; ) {
+ WIDECHAR w_ch;
+
+ w_ch = *w_p++; n--; realLen++;
+ if ((unsigned) w_ch > 0xFF) {
+ needUnicode = 1;
+ }
+ if (w_ch == 0x0D) {
+ if (n && (*w_p == 0x0A)) {
+ w_p++; n--;
+ }
+ }
+ }
+ if (! needUnicode) {
+ s = __MKEMPTYSTRING(realLen);
+ for (n=0, p=__stringVal(s); len; ) {
+ unsigned char ch;
+
+ *p = ch = *w_src++;
+ len--;
+ if (len && (ch == 0x0D) && (*w_src == 0x0A)) {
+ *p = 0x0A;
+ w_src++;
+ len--;
+ }
+ p++;
+ }
+ *p++ = '\0';
+ } else {
+ s = __MKBYTEARRAY(realLen * 2);
+ __qClass(s) = @global(UnicodeString);
+ for (n=0, w_p=__stringVal(s); len; ) {
+ WIDECHAR w_ch;
+
+ *w_p = w_ch = *w_src++;
+ len--;
+ if (len && (w_ch == 0x0D) && (*w_src == 0x0A)) {
+ *w_p = 0x0A;
+ w_src++;
+ len--;
+ }
+ w_p++;
+ }
+ }
+ GlobalUnlock(hData);
+ CloseClipboard();
+ RETURN(s);
+ }
+ }
/* check for format CF_TEXT */
if (IsClipboardFormatAvailable(CF_TEXT)) {
- OBJ s;
- unsigned char *src, *p;
int n, len, realLen;
hClip = OpenClipboard(NULL);
@@ -12668,48 +12733,6 @@
RETURN(s);
}
}
-
- if (IsClipboardFormatAvailable(CF_UNICODETEXT)) {
- OBJ s;
- WIDECHAR *w_src, *w_p;
- int n, len, realLen;
-
- hClip = OpenClipboard(NULL);
- if (hClip) {
- hData = GetClipboardData(CF_UNICODETEXT);
- w_src = GlobalLock(hData);
- len = w_src ? wcslen(w_src) : 0;
-
- /* see how much we really need (when CRLF is replaced by LF) */
- for (realLen = 0, n=len, w_p=w_src; n; ) {
- WIDECHAR w_ch;
-
- w_ch = *w_p++; n--; realLen++;
- if (w_ch == 0x0D) {
- if (n && (*w_p == 0x0A)) {
- w_p++; n--;
- }
- }
- }
- s = __MKBYTEARRAY(realLen * 2);
- for (n=0, w_p=__stringVal(s); len; ) {
- WIDECHAR w_ch;
-
- *w_p = w_ch = *w_src++;
- len--;
- if (len && (w_ch == 0x0D) && (*w_src == 0x0A)) {
- *w_p = 0x0A;
- w_src++;
- len--;
- }
- w_p++;
- }
- GlobalUnlock(hData);
- CloseClipboard();
- __qClass(s) = @global(UnicodeString);
- RETURN(s);
- }
- }
RETURN(nil);
%}
!
@@ -13878,6 +13901,6 @@
!WinWorkstation class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libview/WinWorkstation.st,v 1.190 2001-09-15 14:21:39 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libview/WinWorkstation.st,v 1.191 2001-09-15 14:45:51 cg Exp $'
! !
WinWorkstation initialize!