Mercurial > sdl-ios-xcode
annotate src/main/win32/SDL_win32_main.c @ 1199:2d6dc7de1145
From: Mike Frysinger <vapier@gentoo.org>
To: sdl@libsdl.org
Date: Sun, 11 Dec 2005 22:57:37 -0500
Subject: [SDL] exec stack in libsdl update
i posted back in September a patch to remove executable stacks:
http://www.devolution.com/pipermail/sdl/2005-September/070626.html
later in November, a similar patch was merged it seems:
http://www.libsdl.org/cgi/cvsweb.cgi/SDL12/src/hermes/mmx_main.asm
however, this lacks the additional output format checks that i posted in my
patch ... this isnt a problem if the hermes asm code is only ever used to
produce ELF objects, but if this is not true, then the additional checks in
my original patch will need to be merged
-mike
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Mon, 12 Dec 2005 09:13:12 +0000 |
parents | ed57c876700d |
children | d7bca8c8161e |
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 <string.h> |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 #include <ctype.h> |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 #include <stdlib.h> |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 #include <windows.h> |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 #include <malloc.h> /* For _alloca() */ |
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 */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
59 char *strrchr(char *str, int c) |
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]; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
198 if ( (bufp=strrchr(argv[0], '\\')) != NULL ) { |
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 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
201 if ( (bufp=strrchr(argv[0], '/')) != NULL ) { |
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 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
205 if ( (bufp=strrchr(appname, '.')) == NULL ) |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
206 n = strlen(appname); |
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 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
214 strncpy(bufp, appname, n); |
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; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
269 #ifdef _WIN32_WCE |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
270 wchar_t *bufp; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
271 int nLen; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
272 #else |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
273 char *bufp; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
274 #endif |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
275 #ifndef NO_STDIO_REDIRECT |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
276 FILE *newfp; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
277 #endif |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
278 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
279 /* 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
|
280 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
|
281 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
|
282 */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
283 handle = LoadLibrary(TEXT("DDRAW.DLL")); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
284 if ( handle != NULL ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
285 FreeLibrary(handle); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
286 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
287 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
288 #ifndef NO_STDIO_REDIRECT |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
289 _getcwd( stdoutPath, sizeof( stdoutPath ) ); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
290 strcat( stdoutPath, DIR_SEPERATOR STDOUT_FILE ); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
291 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
292 /* Redirect standard input and standard output */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
293 newfp = freopen(stdoutPath, TEXT("w"), stdout); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
294 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
295 #ifndef _WIN32_WCE |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
296 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
|
297 #if !defined(stdout) |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
298 stdout = fopen(stdoutPath, TEXT("w")); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
299 #else |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
300 newfp = fopen(stdoutPath, TEXT("w")); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
301 if ( newfp ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
302 *stdout = *newfp; |
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 #endif |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
305 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
306 #endif /* _WIN32_WCE */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
307 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
308 _getcwd( stderrPath, sizeof( stderrPath ) ); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
309 strcat( stderrPath, DIR_SEPERATOR STDERR_FILE ); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
310 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
311 newfp = freopen(stderrPath, TEXT("w"), stderr); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
312 #ifndef _WIN32_WCE |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
313 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
|
314 #if !defined(stderr) |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
315 stderr = fopen(stderrPath, TEXT("w")); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
316 #else |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
317 newfp = fopen(stderrPath, TEXT("w")); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
318 if ( newfp ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
319 *stderr = *newfp; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
320 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
321 #endif |
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 #endif /* _WIN32_WCE */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
324 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
325 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
|
326 setbuf(stderr, NULL); /* No buffering */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
327 #endif /* !NO_STDIO_REDIRECT */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
328 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
329 #ifdef _WIN32_WCE |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
330 nLen = wcslen(szCmdLine)+128+1; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
331 bufp = (wchar_t *)alloca(nLen*2); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
332 wcscpy (bufp, TEXT("\"")); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
333 GetModuleFileName(NULL, bufp+1, 128-3); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
334 wcscpy (bufp+wcslen(bufp), TEXT("\" ")); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
335 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
|
336 nLen = wcslen(bufp)+1; |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
337 cmdline = (char *)alloca(nLen); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
338 if ( cmdline == NULL ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
339 return OutOfMemory(); |
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 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
|
342 #else |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
343 /* 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
|
344 bufp = GetCommandLine(); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
345 cmdline = (char *)alloca(strlen(bufp)+1); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
346 if ( cmdline == NULL ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
347 return OutOfMemory(); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
348 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
349 strcpy(cmdline, bufp); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
350 #endif |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
351 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
352 /* Parse it into argv and argc */ |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
353 argc = ParseCommandLine(cmdline, NULL); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
354 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
|
355 if ( argv == NULL ) { |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
356 return OutOfMemory(); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
357 } |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
358 ParseCommandLine(cmdline, argv); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
359 |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
360 /* 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
|
361 return(console_main(argc, argv)); |
623b453a3219
Fixed "dist" make target for newer versions of automake
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
362 } |