BTW, does anyone have an idea how to get rid of the remaining LOCAL_xxx() calls in gdiobj.c ? We need those because we do GDI_HeapSel = instance | 7; , so we directly use the GDI instance plus 7 as the heap selector for GDI objects (thus we can't do a standard LocalInit, as this would allocate a *new* selector for the new heap instead of using the implicit GDI module one, and thus we need to pass the GDI_HeapSel to LOCAL_Alloc instead)
I'd say: write a wrapper in gdi which 1/ sets DS to the GDI_HeapSel value 2/ calls LocalAlloc16 (for instance) (the call has to be a 16 bit call), so you need the relay to be generated for this 16 bit call 3/ restores old DS value (before 1)
this sounds hacky, but it was a standard way of using the LocalXXX on several 64k buckets at the same time
you may also create a new type of 32 => 16 relay stub, which sets DS to a passed value... (that'd be IMO the cleanest way...)
A+