POSIX threads emulation, tricks glibc into being threadsafe.
[wine] / dlls / gdi / gdi_main.c
1 /*
2  * GDI initialization code
3  */
4
5 #include "windef.h"
6 #include "wingdi.h"
7 #include "wine/winbase16.h"
8
9 #include "gdi.h"
10 #include "global.h"
11 #include "module.h"
12 #include "psdrv.h"
13 #include "tweak.h"
14 #include "win16drv.h"
15
16
17 /***********************************************************************
18  *           GDI initialisation routine
19  */
20 BOOL WINAPI MAIN_GdiInit(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
21 {
22     NE_MODULE *pModule;
23
24     if ( GDI_HeapSel ) return TRUE;
25
26     /* Create GDI heap */
27     pModule = NE_GetPtr( GetModuleHandle16( "GDI" ) );
28     if ( pModule )
29     {
30         GDI_HeapSel = GlobalHandleToSel16( (NE_SEG_TABLE( pModule ) + 
31                                           pModule->dgroup - 1)->hSeg );
32     }
33     else
34     {
35         GDI_HeapSel = GlobalAlloc16( GMEM_FIXED, GDI_HEAP_SIZE );
36         LocalInit16( GDI_HeapSel, 0, GDI_HEAP_SIZE-1 );
37     }
38
39     if (!TWEAK_Init()) return FALSE;
40
41     /* GDI initialisation */
42     if(!GDI_Init()) return FALSE;
43
44     /* Create the Win16 printer driver */
45     if (!WIN16DRV_Init()) return FALSE;
46
47     /* PSDRV initialization */
48     if(!PSDRV_Init()) return FALSE;
49
50     return TRUE;
51 }