102 lines
2.4 KiB
C
102 lines
2.4 KiB
C
/*
|
|
* Windows Exec & Help
|
|
*
|
|
*/
|
|
|
|
#include "win.h"
|
|
|
|
#define HELP_CONTEXT 0x0001
|
|
#define HELP_QUIT 0x0002
|
|
#define HELP_INDEX 0x0003
|
|
#define HELP_CONTENTS 0x0003
|
|
#define HELP_HELPONHELP 0x0004
|
|
#define HELP_SETINDEX 0x0005
|
|
#define HELP_SETCONTENTS 0x0005
|
|
#define HELP_CONTEXTPOPUP 0x0008
|
|
#define HELP_FORCEFILE 0x0009
|
|
#define HELP_KEY 0x0101
|
|
#define HELP_COMMAND 0x0102
|
|
#define HELP_PARTIALKEY 0x0105
|
|
#define HELP_MULTIKEY 0x0201
|
|
#define HELP_SETWINPOS 0x0203
|
|
|
|
|
|
WORD WinExec(LPSTR lpCmdLine, WORD nCmdShow)
|
|
{
|
|
int X, X2, C;
|
|
char *ArgV[20];
|
|
printf("WinExec(%s, %u)\n", lpCmdLine, nCmdShow);
|
|
for (X = X2 = C = 0; X < strlen(lpCmdLine) + 1; X++) {
|
|
if ((lpCmdLine[X] == ' ') || (lpCmdLine[X] == '\0')) {
|
|
ArgV[C] = (char *)malloc(X - X2 + 1);
|
|
strncpy(ArgV[C], &lpCmdLine[X2], X - X2);
|
|
ArgV[C][X - X2] = '\0';
|
|
C++; X2 = X + 1;
|
|
}
|
|
}
|
|
ArgV[C] = NULL;
|
|
for (C = 0; ; C++) {
|
|
if (ArgV[C] == NULL) break;
|
|
printf("--> '%s' \n", ArgV[C]);
|
|
}
|
|
switch(fork()) {
|
|
case -1:
|
|
printf("Can't 'fork' process !\n");
|
|
break;
|
|
case 0:
|
|
printf("New process started !\n");
|
|
execvp(ArgV[0], ArgV);
|
|
printf("Child process died !\n");
|
|
exit(1);
|
|
break;
|
|
default:
|
|
printf("Main process stay alive !\n");
|
|
break;
|
|
}
|
|
for (C = 0; ; C++) {
|
|
if (ArgV[C] == NULL) break;
|
|
free(ArgV[C]);
|
|
}
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
BOOL WinHelp(HWND hWnd, LPSTR lpHelpFile, WORD wCommand, DWORD dwData)
|
|
{
|
|
char *ArgV[6];
|
|
char str[32];
|
|
printf("WinHelp(%s, %u, %lu)\n", lpHelpFile, wCommand, dwData);
|
|
switch(fork()) {
|
|
case -1:
|
|
printf("Can't 'fork' process !\n");
|
|
break;
|
|
case 0:
|
|
printf("New process started !\n");
|
|
ArgV[0] = "wine";
|
|
ArgV[1] = "winhelp.exe";
|
|
ArgV[2] = lpHelpFile;
|
|
switch (wCommand) {
|
|
case HELP_CONTEXT:
|
|
case HELP_KEY:
|
|
case HELP_SETINDEX:
|
|
sprintf(str, "%lu", dwData);
|
|
ArgV[3] = str;
|
|
default:
|
|
ArgV[3] = NULL;
|
|
}
|
|
ArgV[4] = NULL;
|
|
if (wCommand == HELP_HELPONHELP) ArgV[2] = NULL;
|
|
/*
|
|
_WinMain(ArgV, 2);
|
|
*/
|
|
execvp(ArgV[0], ArgV);
|
|
printf("Child process died !\n");
|
|
exit(1);
|
|
break;
|
|
default:
|
|
printf("Main process stay alive !\n");
|
|
break;
|
|
}
|
|
return(TRUE);
|
|
}
|