| /* Sample winestub.c file for compiling programs with libwine.so. */ |
| |
| #include <string.h> |
| #include "windows.h" |
| #include "xmalloc.h" |
| |
| extern int WinMain(HINSTANCE32,HINSTANCE32,LPSTR,int); |
| extern int MAIN_Init(void); |
| extern BOOL32 MAIN_WineInit( int *argc, char *argv[] ); |
| extern void TASK_Reschedule(void); |
| |
| int main( int argc, char *argv [] ) |
| { |
| HINSTANCE16 hInstance; |
| LPSTR lpszCmdParam; |
| int i, len = 0; |
| |
| MAIN_WineInit( &argc, argv ); |
| |
| /* Alloc szCmdParam */ |
| for (i = 1; i < argc; i++) len += strlen(argv[i]) + 1; |
| lpszCmdParam = (LPSTR) xmalloc(len + 1); |
| /* Concatenate arguments */ |
| if (argc > 1) strcpy(lpszCmdParam, argv[1]); |
| else lpszCmdParam[0] = '\0'; |
| for (i = 2; i < argc; i++) strcat(strcat(lpszCmdParam, " "), argv[i]); |
| |
| if(!MAIN_Init()) return 0; /* JBP: Needed for DosDrives[] structure, etc. */ |
| hInstance = WinExec32( *argv, SW_SHOWNORMAL ); |
| TASK_Reschedule(); |
| InitApp( hInstance ); |
| |
| return WinMain (hInstance, /* hInstance */ |
| 0, /* hPrevInstance */ |
| lpszCmdParam, /* lpszCmdParam */ |
| SW_NORMAL); /* nCmdShow */ |
| } |
| |
| #if 0 |
| |
| extern int WinMain(HINSTANCE32,HINSTANCE32,LPSTR,int); |
| /* This is the renamed main() subroutine in misc/main.c. */ |
| /* Note that the libdll `init()' won't work: */ |
| extern HINSTANCE32 _wine_main(int, char *[]); |
| |
| int main (int argc, char *argv []) |
| { |
| HINSTANCE32 hInstance; |
| char szCmdParam[256] = {0}; |
| int index, buffer_pos; |
| char *arg_holder; |
| /* "Wired-in" command-line options for Wine: */ |
| /*char *wine_argv[] = {argv[0], "-managed", "-dll", "+commdlg", |
| "-dll", "+shell", ""};*/ |
| char *wine_argv[] = {argv[0], ""}; |
| |
| /* Initialize the library dll: */ |
| hInstance = (HINSTANCE32)_wine_main((sizeof(wine_argv)/sizeof(char *))-1, wine_argv); |
| |
| #ifdef WIN_DEBUG |
| fprintf(stderr,"In winestub, reporting hInstance = %d\n", hInstance); |
| #endif |
| |
| /* Move things from argv to the szCmdParam that WinMain expects: */ |
| for (index = 1, buffer_pos = 0; |
| (index < argc) && (buffer_pos < 255); |
| index++, buffer_pos++) |
| { |
| for (arg_holder = argv[index]; ; buffer_pos++, arg_holder++) |
| if ((szCmdParam[buffer_pos] = *arg_holder) == '\0') break; |
| szCmdParam[buffer_pos] = ' '; |
| }; |
| szCmdParam[buffer_pos] = '\0'; |
| |
| #ifdef WIN_DEBUG |
| fprintf(stderr,"In winestub, Program Name: %s, Parameters: %s\n", |
| progname, szCmdParam); |
| #endif |
| |
| return WinMain (hInstance, /* hInstance */ |
| 0, /* hPrevInstance */ |
| (LPSTR)szCmdParam, /* lpszCmdParam */ |
| SW_NORMAL); /* nCmdShow */ |
| } |
| #endif |