| /* |
| * 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] = "/C:/windows/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); |
| } |
| |
| |