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. -- Francois Gouget fgouget(a)free.fr http://fgouget.free.fr/ Avoid the Gates of Hell - use Linux.