Ok i am trying to brake down the
clipboard-responsible code so that i can add unicode clipboard support.. the
news are not so good.
First, i saw that the code for sending text to the
clipboard is
int clipboardWriteFromAt(int
count, int byteArrayIndex, int startIndex)
in
sqWin32Window.c
The thing is that we are trying to create a fully
Unicode VM...this means that the characters that are sent to the VM are Unicode
(> 256) and we are using a unicode TT font to render them.
Now... when i evaluate this
c:=Clipboard new.
c
primitiveClipboardText:'α' "α is unicode char
945"
the clipboardWriteFromAt is never invoked.
That's because in
interp.c
at
sqInt
primitiveClipboardText(void)
the following expression is evaluated to
TRUE
if (!(((s & 1) == 0) && (((((usqInt)
(longAt(s))) >> 8) & 15) >= 8))) {
/* begin
primitiveFail */
successFlag =
0;
printf("primitive failed 1\n"); "This
printf is mine"
return null;
}
Now what in earth is THIS?
(!(((s & 1) == 0) &&
(((((usqInt) (longAt(s))) >> 8) & 15) >= 8)))
Also further down it has
if (successFlag) {
sz =
stSizeOf(s);
clipboardWriteFromAt(sz, s + BaseHeaderSize,
0);
/* begin pop: */
stackPointer -= 1
* BytesPerWord;
}
where stSizeOf goes down to
assembly...
I think i am starting to abandon the fully-unicode
vision and follow your instructions from the start to use code pages and
preserve the internal representation of Squeak...
I don't think that i will be able to make
everything unicode in a life time (does it worth it?)...
Christos.