Release 971130
[wine] / library / winestub.c
1 /* Sample winestub.c file for compiling programs with libwine.so. */
2
3 #include <string.h>
4 #include "windows.h"
5 #include "xmalloc.h"
6
7 /* Stub needed for linking with Winelib */
8 /* FIXME: this should not be necessary */
9 HMODULE32 BUILTIN_LoadModule( LPCSTR name, BOOL32 force ) { return 0; }
10
11
12 extern int PASCAL WinMain(HINSTANCE32,HINSTANCE32,LPSTR,int);
13 extern int MAIN_WinelibInit(void);
14 extern BOOL32 MAIN_WineInit( int *argc, char *argv[] );
15 extern void TASK_Reschedule(void);
16
17 /* Most Windows C/C++ compilers use something like this to */
18 /* access argc and argv globally: */
19 int _ARGC;
20 char **_ARGV;
21
22 int main( int argc, char *argv [] )
23 {
24   HINSTANCE16 hInstance;
25   LPSTR lpszCmdParam;
26   int i, len = 0;
27   _ARGC = argc;
28   _ARGV = (char **)argv;
29
30   MAIN_WineInit( &argc, argv );
31
32   /* Alloc szCmdParam */
33   for (i = 1; i < argc; i++) len += strlen(argv[i]) + 1;
34   lpszCmdParam = (LPSTR) xmalloc(len + 1);
35   /* Concatenate arguments */
36   if (argc > 1) strcpy(lpszCmdParam, argv[1]);
37   else lpszCmdParam[0] = '\0';
38   for (i = 2; i < argc; i++) strcat(strcat(lpszCmdParam, " "), argv[i]);
39
40   if(!MAIN_WinelibInit()) return 0;
41   hInstance = WinExec32( *argv, SW_SHOWNORMAL );
42   TASK_Reschedule();
43   InitApp( hInstance );
44
45   return WinMain (hInstance,    /* hInstance */
46                   0,            /* hPrevInstance */
47                   lpszCmdParam, /* lpszCmdParam */
48                   SW_NORMAL);   /* nCmdShow */
49 }