blob: 722576cc246485446859a3470a8c37b0311729c9 [file] [log] [blame]
#ifdef WINELIB
#include <unistd.h>
#include <string.h>
#include "windows.h"
#include "winbase.h"
#include "options.h"
#include "dos_fs.h"
#include "debug.h"
#include "progman.h"
#define MAX_CMDLINE_SIZE 256
/* FIXME should use WinExec from -lwine */
HANDLE ProgmanWinExec( LPSTR lpCmdLine, WORD nCmdShow )
{
char wine[MAX_CMDLINE_SIZE];
char filename[MAX_CMDLINE_SIZE], *p;
char cmdline[MAX_CMDLINE_SIZE];
const char *argv[10], **argptr;
const char *unixfilename;
int simplename = 1;
if (fork()) return(INVALID_HANDLE_VALUE);
strncpy( filename, lpCmdLine, MAX_CMDLINE_SIZE );
filename[MAX_CMDLINE_SIZE-1] = '\0';
for (p = filename; *p && (*p != ' ') && (*p != '\t'); p++)
if ((*p == ':') || (*p == ':') || (*p == '/')) simplename = 0;
if (*p)
{
strncpy( cmdline, p + 1, 128 );
cmdline[127] = '\0';
}
else cmdline[0] = '\0';
*p = '\0';
if (simplename) unixfilename = filename;
else unixfilename = DOSFS_GetUnixFileName(filename, 0);
argptr = argv;
*argptr++ = unixfilename;
if (nCmdShow == SW_SHOWMINIMIZED) *argptr++ = "-iconic";
if (cmdline[0]) *argptr++ = cmdline;
*argptr++ = 0;
execvp(argv[0], (char**)argv);
PROFILE_GetWineIniString("progman", "wine", "wine",
wine, sizeof(wine));
argptr = argv;
*argptr++ = wine;
*argptr++ = "-language";
*argptr++ = Globals.lpszLanguage;
if (nCmdShow == SW_SHOWMINIMIZED) *argptr++ = "-iconic";
*argptr++ = lpCmdLine;
*argptr++ = 0;
execvp(argv[0] , (char**)argv);
printf("Cannot exec `%s %s %s%s %s'\n",
wine, "-language", Globals.lpszLanguage,
nCmdShow == SW_SHOWMINIMIZED ? " -iconic" : "",
lpCmdLine);
exit(1);
}
BOOL ProgmanWinHelp(HWND hWnd, LPSTR lpHelpFile, WORD wCommand, DWORD dwData)
{
char str[256];
dprintf_exec(stddeb,"WinHelp(%s, %u, %lu)\n",
lpHelpFile, wCommand, dwData);
switch(wCommand) {
case 0:
case HELP_HELPONHELP:
GetWindowsDirectory(str, sizeof(str));
strcat(str, "\\winhelp.exe winhelp.hlp");
dprintf_exec(stddeb,"'%s'\n", str);
break;
case HELP_INDEX:
GetWindowsDirectory(str, sizeof(str));
strcat(str, "\\winhelp.exe ");
strcat(str, lpHelpFile);
dprintf_exec(stddeb,"'%s'\n", str);
break;
default:
return FALSE;
}
WinExec(str, SW_SHOWNORMAL);
return(TRUE);
}
#endif