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