Define __fastcall.
[wine] / dlls / user / user_main.c
1 /*
2  * USER initialization code
3  */
4
5 #include "windef.h"
6 #include "wingdi.h"
7 #include "winuser.h"
8 #include "wine/winbase16.h"
9
10 #include "dce.h"
11 #include "dialog.h"
12 #include "display.h"
13 #include "global.h"
14 #include "input.h"
15 #include "keyboard.h"
16 #include "menu.h"
17 #include "message.h"
18 #include "module.h"
19 #include "mouse.h"
20 #include "queue.h"
21 #include "spy.h"
22 #include "sysmetrics.h"
23 #include "user.h"
24 #include "win.h"
25
26
27 /***********************************************************************
28  *           USER initialisation routine
29  */
30 BOOL WINAPI USER_Init(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
31 {
32     NE_MODULE *pModule;
33     int queueSize;
34
35     if ( USER_HeapSel ) return TRUE;
36
37     /* Create USER heap */
38     pModule = NE_GetPtr( GetModuleHandle16( "USER" ) );
39     if ( pModule )
40     {
41         USER_HeapSel = GlobalHandleToSel16( (NE_SEG_TABLE( pModule ) + 
42                                            pModule->dgroup - 1)->hSeg );
43     }
44     else
45     {
46         USER_HeapSel = GlobalAlloc16( GMEM_FIXED, 0x10000 );
47         LocalInit16( USER_HeapSel, 0, 0xffff );
48     }
49
50      /* Global atom table initialisation */
51     if (!ATOM_Init( USER_HeapSel )) return FALSE;
52
53     /* Initialize window handling (critical section) */
54     WIN_Init();
55
56     /* Initialize system colors and metrics*/
57     SYSMETRICS_Init();
58     SYSCOLOR_Init();
59
60     /* Create the DCEs */
61     DCE_Init();
62
63     /* Initialize window procedures */
64     if (!WINPROC_Init()) return FALSE;
65
66     /* Initialize built-in window classes */
67     if (!WIDGETS_Init()) return FALSE;
68
69     /* Initialize dialog manager */
70     if (!DIALOG_Init()) return FALSE;
71
72     /* Initialize menus */
73     if (!MENU_Init()) return FALSE;
74
75     /* Initialize message spying */
76     if (!SPY_Init()) return FALSE;
77
78     /* Create system message queue */
79     queueSize = GetProfileIntA( "windows", "TypeAhead", 120 );
80     if (!QUEUE_CreateSysMsgQueue( queueSize )) return FALSE;
81
82     /* Set double click time */
83     SetDoubleClickTime( GetProfileIntA("windows","DoubleClickSpeed",452) );
84
85     /* Create message queue of initial thread */
86     InitThreadInput16( 0, 0 );
87
88     /* Create desktop window */
89     if (!WIN_CreateDesktopWindow()) return FALSE;
90
91     /* Initialize keyboard driver */
92     KEYBOARD_Enable( keybd_event, InputKeyStateTable );
93
94     /* Initialize mouse driver */
95     MOUSE_Enable( mouse_event );
96
97     /* Start processing X events */
98     UserRepaintDisable16( FALSE );
99
100     return TRUE;
101 }