On Fri, 22 Aug 2003, Shachar Shemesh wrote:
To add to Jim's idea:
What if the entire Wine code runs natively, but in little endian
Here's the code of InflateRect:
void WINAPI InflateRect16( LPRECT16 rect, INT16 x, INT16 y ) { rect->left -= x; rect->top -= y; rect->right += x; rect->bottom += y; }
Please rewrite it so that it takes a little endian RECT struct on a both big endian architectures and little endian architecture. Then, tell me what you would do about the approximately 70 places in Wine where we call it. For instance (from dlls/comctl32/toolbar.c):
myrect.left = lpRect->left; myrect.right = lpRect->right; myrect.top = lpRect->top + (lpRect->bottom - lpRect->top - 2)/2; myrect.bottom = myrect.top + 1;
InflateRect (&myrect, -2, 0);
Rewrite the above code snippet so that myrect contains integers in the little endian format expected by InflateRect. Finally, make sure the -2 and 0 parameters arrive in little endian format in InflateRect.
When all the above is done, tell me honestly: is the code still readable? Is it still maintainable? Would you do the same for the 15000 other API calls now?
(possibly for winelib too - that would actually help with binary compatibility between the Unix and the windows versions of programs)?
Further exercise: how are you going to explain to Winelib users that they have to do the same modifications in their application code?
This way lies madness.
PS: Please accept my apologies if this was a joke.