Mercurial > sdl-ios-xcode
annotate src/main/win32/SDL_win32_main.c @ 1348:40d0975c1769
Date: Mon, 6 Feb 2006 11:41:04 -0500
From: "mystml@adinet.com.uy"
Subject: [SDL] ALT-F4 using DirectX
My game isn't getting SDL_QUIT when I press ALT-F4 using the DirectX
driver; it does get SDL_QUIT when I press the red X in the window.
I tracked this down to DX5_HandleMessage() in SDL_dx5events.c;
WM_SYSKEYDOWN is being trapped and ignored which causes Windows not to post
a WM_CLOSE, hence no SDL_QUIT is being generated.
The relevant code is this :
/* The keyboard is handled via DirectInput */
case WM_SYSKEYUP:
case WM_SYSKEYDOWN:
case WM_KEYUP:
case WM_KEYDOWN: {
/* Ignore windows keyboard messages */;
}
return(0);
If I comment the WM_SYSKEYDOWN case, it falls through DefWindowProc() and
ALT-F4 starts working again.
I'm not sure about the best way to fix this. One option is handling ALT-F4
as a particular case somehow, but doesn't sound good. Another option would
be to handle WM_SYSKEYDOWN separately and breaking instead of returning 0,
so processing falls through and goes to DefWindowProc which does The Right
Thing (TM). This seems to be the minimal change that makes ALT-F4 work and
normal keyboard input continues to work.
Does this sound reasonable? Am I overlooking anything? Do I submit a patch?
--Gabriel
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Wed, 08 Feb 2006 17:19:43 +0000 |
parents | 3692456e7b0f |
children | c71e05b4dc2e |
rev | line source |
---|---|
754
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 SDL_main.c, placed in the public domain by Sam Lantinga 4/13/98 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
3 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 The WinMain function -- calls your program's main() function |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 #include <stdio.h> |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 #include <stdlib.h> |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1286
diff
changeset
|
10 #include "SDL_windows.h" |
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1286
diff
changeset
|
11 |
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1286
diff
changeset
|
12 #include "SDL_stdlib.h" |
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1286
diff
changeset
|
13 #include "SDL_string.h" |
754
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 #ifdef _WIN32_WCE |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 # define DIR_SEPERATOR TEXT("\\") |
766
ed57c876700d
Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents:
754
diff
changeset
|
17 # undef _getcwd |
ed57c876700d
Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents:
754
diff
changeset
|
18 # define _getcwd(str,len) wcscpy(str,TEXT("")) |
ed57c876700d
Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents:
754
diff
changeset
|
19 # define setbuf(f,b) |
ed57c876700d
Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents:
754
diff
changeset
|
20 # define setvbuf(w,x,y,z) |
754
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 # define fopen _wfopen |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 # define freopen _wfreopen |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 # define remove(x) DeleteFile(x) |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 # define strcat wcscat |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 #else |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 # define DIR_SEPERATOR TEXT("/") |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 # include <direct.h> |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
28 #endif |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
30 /* Include the SDL main definition header */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
31 #include "SDL.h" |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
32 #include "SDL_main.h" |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
33 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
34 #ifdef main |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
35 # ifndef _WIN32_WCE_EMULATION |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 # undef main |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
37 # endif /* _WIN32_WCE_EMULATION */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
38 #endif /* main */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
39 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
40 /* The standard output files */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
41 #define STDOUT_FILE TEXT("stdout.txt") |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
42 #define STDERR_FILE TEXT("stderr.txt") |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
43 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
44 #ifndef NO_STDIO_REDIRECT |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
45 # ifdef _WIN32_WCE |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 static wchar_t stdoutPath[MAX_PATH]; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
47 static wchar_t stderrPath[MAX_PATH]; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 # else |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
49 static char stdoutPath[MAX_PATH]; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
50 static char stderrPath[MAX_PATH]; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 # endif |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
52 #endif |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
53 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
54 #if defined(_WIN32_WCE) && _WIN32_WCE < 300 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
55 /* seems to be undefined in Win CE although in online help */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
56 #define isspace(a) (((CHAR)a == ' ') || ((CHAR)a == '\t')) |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
57 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
58 /* seems to be undefined in Win CE although in online help */ |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1286
diff
changeset
|
59 char *SDL_strrchr(char *str, int c) |
754
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
60 { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
61 char *p; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
62 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
63 /* Skip to the end of the string */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
64 p=str; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
65 while (*p) |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
66 p++; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
67 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
68 /* Look for the given character */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
69 while ( (p >= str) && (*p != (CHAR)c) ) |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
70 p--; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
71 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
72 /* Return NULL if character not found */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
73 if ( p < str ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
74 p = NULL; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
75 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
76 return p; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
77 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
78 #endif /* _WIN32_WCE < 300 */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
79 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
80 /* Parse a command line buffer into arguments */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
81 static int ParseCommandLine(char *cmdline, char **argv) |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
82 { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
83 char *bufp; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
84 int argc; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
85 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
86 argc = 0; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
87 for ( bufp = cmdline; *bufp; ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
88 /* Skip leading whitespace */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
89 while ( isspace(*bufp) ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
90 ++bufp; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
91 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
92 /* Skip over argument */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
93 if ( *bufp == '"' ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
94 ++bufp; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
95 if ( *bufp ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
96 if ( argv ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
97 argv[argc] = bufp; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
98 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
99 ++argc; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
100 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
101 /* Skip over word */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
102 while ( *bufp && (*bufp != '"') ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
103 ++bufp; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
104 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
105 } else { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
106 if ( *bufp ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
107 if ( argv ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
108 argv[argc] = bufp; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
109 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
110 ++argc; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
111 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
112 /* Skip over word */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
113 while ( *bufp && ! isspace(*bufp) ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
114 ++bufp; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
115 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
116 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
117 if ( *bufp ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
118 if ( argv ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
119 *bufp = '\0'; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
120 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
121 ++bufp; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
122 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
123 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
124 if ( argv ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
125 argv[argc] = NULL; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
126 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
127 return(argc); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
128 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
129 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
130 /* Show an error message */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
131 static void ShowError(const char *title, const char *message) |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
132 { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
133 /* If USE_MESSAGEBOX is defined, you need to link with user32.lib */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
134 #ifdef USE_MESSAGEBOX |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
135 MessageBox(NULL, message, title, MB_ICONEXCLAMATION|MB_OK); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
136 #else |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
137 fprintf(stderr, "%s: %s\n", title, message); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
138 #endif |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
139 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
140 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
141 /* Pop up an out of memory message, returns to Windows */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
142 static BOOL OutOfMemory(void) |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
143 { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
144 ShowError("Fatal Error", "Out of memory - aborting"); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
145 return FALSE; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
146 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
147 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
148 /* Remove the output files if there was no output written */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
149 static void __cdecl cleanup_output(void) |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
150 { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
151 #ifndef NO_STDIO_REDIRECT |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
152 FILE *file; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
153 int empty; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
154 #endif |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
155 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
156 /* Flush the output in case anything is queued */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
157 fclose(stdout); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
158 fclose(stderr); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
159 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
160 #ifndef NO_STDIO_REDIRECT |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
161 /* See if the files have any output in them */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
162 if ( stdoutPath[0] ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
163 file = fopen(stdoutPath, TEXT("rb")); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
164 if ( file ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
165 empty = (fgetc(file) == EOF) ? 1 : 0; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
166 fclose(file); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
167 if ( empty ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
168 remove(stdoutPath); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
169 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
170 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
171 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
172 if ( stderrPath[0] ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
173 file = fopen(stderrPath, TEXT("rb")); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
174 if ( file ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
175 empty = (fgetc(file) == EOF) ? 1 : 0; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
176 fclose(file); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
177 if ( empty ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
178 remove(stderrPath); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
179 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
180 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
181 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
182 #endif |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
183 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
184 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
185 #if defined(_MSC_VER) && !defined(_WIN32_WCE) |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
186 /* The VC++ compiler needs main defined */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
187 #define console_main main |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
188 #endif |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
189 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
190 /* This is where execution begins [console apps] */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
191 int console_main(int argc, char *argv[]) |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
192 { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
193 int n; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
194 char *bufp, *appname; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
195 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
196 /* Get the class name from argv[0] */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
197 appname = argv[0]; |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1286
diff
changeset
|
198 if ( (bufp=SDL_strrchr(argv[0], '\\')) != NULL ) { |
754
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
199 appname = bufp+1; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
200 } else |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1286
diff
changeset
|
201 if ( (bufp=SDL_strrchr(argv[0], '/')) != NULL ) { |
754
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
202 appname = bufp+1; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
203 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
204 |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1286
diff
changeset
|
205 if ( (bufp=SDL_strrchr(appname, '.')) == NULL ) |
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1286
diff
changeset
|
206 n = SDL_strlen(appname); |
754
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
207 else |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
208 n = (bufp-appname); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
209 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
210 bufp = (char *)alloca(n+1); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
211 if ( bufp == NULL ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
212 return OutOfMemory(); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
213 } |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1286
diff
changeset
|
214 SDL_strncpy(bufp, appname, n); |
754
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
215 bufp[n] = '\0'; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
216 appname = bufp; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
217 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
218 /* Load SDL dynamic link library */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
219 if ( SDL_Init(SDL_INIT_NOPARACHUTE) < 0 ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
220 ShowError("WinMain() error", SDL_GetError()); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
221 return(FALSE); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
222 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
223 atexit(cleanup_output); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
224 atexit(SDL_Quit); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
225 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
226 #ifndef DISABLE_VIDEO |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
227 #if 0 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
228 /* Create and register our class * |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
229 DJM: If we do this here, the user nevers gets a chance to |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
230 putenv(SDL_WINDOWID). This is already called later by |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
231 the (DIB|DX5)_CreateWindow function, so it should be |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
232 safe to comment it out here. |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
233 if ( SDL_RegisterApp(appname, CS_BYTEALIGNCLIENT, |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
234 GetModuleHandle(NULL)) < 0 ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
235 ShowError("WinMain() error", SDL_GetError()); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
236 exit(1); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
237 }*/ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
238 #else |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
239 /* Sam: |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
240 We still need to pass in the application handle so that |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
241 DirectInput will initialize properly when SDL_RegisterApp() |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
242 is called later in the video initialization. |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
243 */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
244 SDL_SetModuleHandle(GetModuleHandle(NULL)); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
245 #endif /* 0 */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
246 #endif /* !DISABLE_VIDEO */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
247 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
248 /* Run the application main() code */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
249 SDL_main(argc, argv); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
250 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
251 /* Exit cleanly, calling atexit() functions */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
252 exit(0); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
253 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
254 /* Hush little compiler, don't you cry... */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
255 return(0); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
256 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
257 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
258 /* This is where execution begins [windowed apps] */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
259 #ifdef _WIN32_WCE |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
260 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPWSTR szCmdLine, int sw) |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
261 #else |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
262 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw) |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
263 #endif |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
264 { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
265 HINSTANCE handle; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
266 char **argv; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
267 int argc; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
268 char *cmdline; |
1286
d7bca8c8161e
Use the executable directory, not the current directory, for stdio output files
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
269 DWORD pathlen; |
d7bca8c8161e
Use the executable directory, not the current directory, for stdio output files
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
270 #ifdef _WIN32_WCE |
d7bca8c8161e
Use the executable directory, not the current directory, for stdio output files
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
271 wchar_t path[MAX_PATH]; |
d7bca8c8161e
Use the executable directory, not the current directory, for stdio output files
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
272 #else |
d7bca8c8161e
Use the executable directory, not the current directory, for stdio output files
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
273 char path[MAX_PATH]; |
d7bca8c8161e
Use the executable directory, not the current directory, for stdio output files
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
274 #endif |
754
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
275 #ifdef _WIN32_WCE |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
276 wchar_t *bufp; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
277 int nLen; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
278 #else |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
279 char *bufp; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
280 #endif |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
281 #ifndef NO_STDIO_REDIRECT |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
282 FILE *newfp; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
283 #endif |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
284 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
285 /* Start up DDHELP.EXE before opening any files, so DDHELP doesn't |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
286 keep them open. This is a hack.. hopefully it will be fixed |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
287 someday. DDHELP.EXE starts up the first time DDRAW.DLL is loaded. |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
288 */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
289 handle = LoadLibrary(TEXT("DDRAW.DLL")); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
290 if ( handle != NULL ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
291 FreeLibrary(handle); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
292 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
293 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
294 #ifndef NO_STDIO_REDIRECT |
1286
d7bca8c8161e
Use the executable directory, not the current directory, for stdio output files
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
295 pathlen = GetModuleFileName(NULL, path, SDL_TABLESIZE(path)); |
d7bca8c8161e
Use the executable directory, not the current directory, for stdio output files
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
296 while ( pathlen > 0 && path[pathlen] != '\\' ) { |
d7bca8c8161e
Use the executable directory, not the current directory, for stdio output files
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
297 --pathlen; |
d7bca8c8161e
Use the executable directory, not the current directory, for stdio output files
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
298 } |
d7bca8c8161e
Use the executable directory, not the current directory, for stdio output files
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
299 path[pathlen] = '\0'; |
d7bca8c8161e
Use the executable directory, not the current directory, for stdio output files
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
300 |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1286
diff
changeset
|
301 SDL_strcpy( stdoutPath, path ); |
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1286
diff
changeset
|
302 SDL_strcat( stdoutPath, DIR_SEPERATOR STDOUT_FILE ); |
754
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
303 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
304 /* Redirect standard input and standard output */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
305 newfp = freopen(stdoutPath, TEXT("w"), stdout); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
306 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
307 #ifndef _WIN32_WCE |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
308 if ( newfp == NULL ) { /* This happens on NT */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
309 #if !defined(stdout) |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
310 stdout = fopen(stdoutPath, TEXT("w")); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
311 #else |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
312 newfp = fopen(stdoutPath, TEXT("w")); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
313 if ( newfp ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
314 *stdout = *newfp; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
315 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
316 #endif |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
317 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
318 #endif /* _WIN32_WCE */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
319 |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1286
diff
changeset
|
320 SDL_strcpy( stderrPath, path ); |
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1286
diff
changeset
|
321 SDL_strcat( stderrPath, DIR_SEPERATOR STDERR_FILE ); |
754
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
322 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
323 newfp = freopen(stderrPath, TEXT("w"), stderr); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
324 #ifndef _WIN32_WCE |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
325 if ( newfp == NULL ) { /* This happens on NT */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
326 #if !defined(stderr) |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
327 stderr = fopen(stderrPath, TEXT("w")); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
328 #else |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
329 newfp = fopen(stderrPath, TEXT("w")); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
330 if ( newfp ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
331 *stderr = *newfp; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
332 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
333 #endif |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
334 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
335 #endif /* _WIN32_WCE */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
336 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
337 setvbuf(stdout, NULL, _IOLBF, BUFSIZ); /* Line buffered */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
338 setbuf(stderr, NULL); /* No buffering */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
339 #endif /* !NO_STDIO_REDIRECT */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
340 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
341 #ifdef _WIN32_WCE |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
342 nLen = wcslen(szCmdLine)+128+1; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
343 bufp = (wchar_t *)alloca(nLen*2); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
344 wcscpy (bufp, TEXT("\"")); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
345 GetModuleFileName(NULL, bufp+1, 128-3); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
346 wcscpy (bufp+wcslen(bufp), TEXT("\" ")); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
347 wcsncpy(bufp+wcslen(bufp), szCmdLine,nLen-wcslen(bufp)); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
348 nLen = wcslen(bufp)+1; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
349 cmdline = (char *)alloca(nLen); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
350 if ( cmdline == NULL ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
351 return OutOfMemory(); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
352 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
353 WideCharToMultiByte(CP_ACP, 0, bufp, -1, cmdline, nLen, NULL, NULL); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
354 #else |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
355 /* Grab the command line (use alloca() on Windows) */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
356 bufp = GetCommandLine(); |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1286
diff
changeset
|
357 cmdline = (char *)alloca(SDL_strlen(bufp)+1); |
754
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
358 if ( cmdline == NULL ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
359 return OutOfMemory(); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
360 } |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1286
diff
changeset
|
361 SDL_strcpy(cmdline, bufp); |
754
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
362 #endif |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
363 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
364 /* Parse it into argv and argc */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
365 argc = ParseCommandLine(cmdline, NULL); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
366 argv = (char **)alloca((argc+1)*(sizeof *argv)); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
367 if ( argv == NULL ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
368 return OutOfMemory(); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
369 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
370 ParseCommandLine(cmdline, argv); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
371 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
372 /* Run the main program (after a little SDL initialization) */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
373 return(console_main(argc, argv)); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
374 } |