2 static char RCSId[] = "$Id: wine.c,v 1.2 1993/07/04 04:04:21 root Exp root $";
3 static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
15 #include "selectors.h"
21 #include "directory.h"
25 #include "sysmetrics.h"
43 /* Winelib run-time flag */
50 HANDLE32 SystemHeap = 0;
51 HANDLE32 SegptrHeap = 0;
53 /***********************************************************************
54 * Main initialisation routine
58 extern BOOL32 RELAY_Init(void);
59 extern BOOL32 SIGNAL_Init(void);
60 extern BOOL32 WIDGETS_Init(void);
61 extern int KERN32_Init(void);
65 /* Create the system and SEGPTR heaps */
66 if (!(SystemHeap = HeapCreate( HEAP_GROWABLE, 0x10000, 0 ))) return 0;
67 if (!(SegptrHeap = HeapCreate( HEAP_WINE_SEGPTR, 0, 0 ))) return 0;
69 /* Load the configuration file */
70 if (!PROFILE_LoadWineIni()) return 0;
73 /* Create USER and GDI heap */
74 USER_HeapSel = GlobalAlloc16( GMEM_FIXED, 0x10000 );
75 LocalInit( USER_HeapSel, 0, 0xffff );
76 GDI_HeapSel = GlobalAlloc16( GMEM_FIXED, GDI_HEAP_SIZE );
77 LocalInit( GDI_HeapSel, 0, GDI_HEAP_SIZE-1 );
79 /* Initialize relay code */
80 if (!RELAY_Init()) return 0;
82 /* Create built-in modules */
83 if (!BUILTIN_Init()) return 0;
85 /* Initialize interrupt vectors */
86 if (!INT_Init()) return 0;
88 /* Initialize DOS memory */
89 if (!DOSMEM_Init()) return 0;
91 /* Initialize the DOS interrupt */
92 if (!INT21_Init()) return 0;
94 /* Initialize signal handling */
95 if (!SIGNAL_Init()) return 0;
98 /* Initialise DOS drives */
99 if (!DRIVE_Init()) return 0;
101 /* Initialise DOS directories */
102 if (!DIR_Init()) return 0;
104 /* Initialize tasks */
105 if (!TASK_Init()) return 0;
107 /* Initialize communications */
110 /* registry initialisation */
111 SHELL_LoadRegistry();
113 /* Global atom table initialisation */
114 if (!ATOM_Init()) return 0;
116 /* GDI initialisation */
117 if (!GDI_Init()) return 0;
119 /* Initialize system colors and metrics*/
123 /* Create the DCEs */
126 /* Initialize window procedures */
127 if (!WINPROC_Init()) return 0;
129 /* Initialize built-in window classes */
130 if (!WIDGETS_Init()) return 0;
132 /* Initialize dialog manager */
133 if (!DIALOG_Init()) return 0;
135 /* Initialize menus */
136 if (!MENU_Init()) return 0;
138 /* Create desktop window */
139 if (!WIN_CreateDesktopWindow()) return 0;
141 /* Initialize message spying */
142 if (!SPY_Init()) return 0;
144 /* Initialize Win32 data structures */
145 if (!KERN32_Init()) return 0;
147 /* Create system message queue */
148 queueSize = GetProfileInt( "windows", "TypeAhead", 120 );
149 if (!QUEUE_CreateSysMsgQueue( queueSize )) return 0;
151 /* Set double click time */
152 SetDoubleClickTime( GetProfileInt( "windows", "DoubleClickSpeed", 452 ) );
159 /**********************************************************************
162 int _WinMain(int argc, char **argv)
167 if (!MAIN_Init()) return 0;
169 for (i = 1; i < argc; i++)
171 if ((handle = WinExec( argv[i], SW_SHOWNORMAL )) < 32)
173 fprintf(stderr, "wine: can't exec '%s': ", argv[i]);
176 case 2: fprintf( stderr, "file not found\n" ); break;
177 case 11: fprintf( stderr, "invalid exe file\n" ); break;
178 case 21: fprintf( stderr, "win32 executable\n" ); break;
179 default: fprintf( stderr, "error=%d\n", handle ); break;
185 if (Options.debug) DEBUG_SetBreakpoints( TRUE ); /* Setup breakpoints */
187 Yield(); /* Start the first task */
188 fprintf( stderr, "WinMain: Should never happen: returned from Yield()\n" );
192 #endif /* #ifndef WINELIB */