I'll add one more point to the above.
There is a true dependancy problem between different DLLs here. When calculating reordering, certain character order information is needed, that is not returned by GetCharacterPlacement. This means a new interface must be defined.
The way MS solved that problem was to implement a totally new DLL, that has everything (both EDIT control and reordering), and have all relevant DLLs dynamically load it (because statically loading it would cause circular dependancies).
If Alexander rules that no new DLLs be added at this stage, I can put the new code as non-exported functions into GDI.DLL, but it will only hold until BiDi Edit control is necessary. I think we might as well add the new DLL now.
Shachar