1 #ifndef _WIN32_H_
2 #define _WIN32_H_
3 
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 
8 #define WIN32_LEAN_AND_MEAN
9 #define WIN32_EXTRA_LEAN
10 
11 #include <windows.h>
12 #include <windowsx.h>
13 #include <mmsystem.h>
14 #include <commdlg.h>
15 #include <stdlib.h>
16 #include <stdio.h>
17 #include <strstrea.h>
18 #include <fstream.h>
19 #include <time.h>
20 #include <assert.h>
21 #include <gl/gl.h>
22 #include <gl/glu.h>
23 #include <win32/glext.h>
24 
25 #ifndef __cplusplus
26 #include "math.h"
27 #define cosf (float)cos
28 #define sinf (float)sin
29 #define tanf (float)tan
30 #define sqrtf (float)sqrt
31 #define fabsf (float)fabs
32 #define acosf (float)acos
33 #define inline __inline
34 #endif
35 
36 #pragma warning (disable:4244) // (type conversion) Possible loss of data
37 #pragma warning (disable:4761) //
38 #pragma warning (disable:4018) // sign mismatch
39 #pragma warning (disable:4068) // unknown pragma
40 
41 void WinInit();
42 void WinSwapBuffers();
43 void WinDestroy();
44 
45 //PPC opcode that needs to be a function on win32
46 unsigned __int32 __cntlzw(unsigned __int32 d); //u32 NumLeadingZeros(u32 d) from DOLPHIN\build\libraries\gx\src\GXTexture.c(257)
47 
48 
49 typedef struct WinKey_Str {
50 	int button;
51 	int stickX; // -127 <= stickX    <= 127
52 	int stickY; // -127 <= stickY    <= 127
53 	int substickX; // -127 <= stickX    <= 127
54 	int substickY; // -127 <= stickY    <= 127
55 	int triggerLeft; // 0 - 255
56 	int triggerRight; // 0 - 255
57 	unsigned int down[64];
58 	int downCnt;
59 	unsigned int up[64];
60 	int upCnt;
61 } WinKey;
62 extern WinKey winKey;
63 
64 // change the byte order
65 void EndianSwap32(void* buffer);
66 void EndianSwap16(void* buffer);
67 unsigned __int32 EndianSwapReturn32(void* buffer);
68 unsigned __int16 EndianSwapReturn16(void* buffer);
69 
70 #ifndef NO_MULTI_TEX
71 	// OpenGL Extension Function Prototypes
72 	extern PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;
73 	extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
74 	extern PFNGLMULTITEXCOORD4FARBPROC glMultiTexCoord4fARB;
75 #endif
76 extern int multiTexOn;
77 
78 // Output Window Handle
79 extern HANDLE outputWinHandle;
80 extern HANDLE inputWinHandle;
81 extern FILE * outfile;
82 
83 // Paths
84 extern char initialPath[];
85 extern char installPath[];
86 
87 extern unsigned int retraceCount;
88 
89 #define APP_STRING "PC Dolphin Emulator 2.8"
90 #define KEY_STRING "Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\pcemu.Exe"
91 
92 #define WINKEY_PAD_BUTTON_LEFT			PAD_BUTTON_LEFT
93 #define WINKEY_PAD_BUTTON_RIGHT			PAD_BUTTON_RIGHT
94 #define WINKEY_PAD_BUTTON_DOWN			PAD_BUTTON_DOWN
95 #define WINKEY_PAD_BUTTON_UP			PAD_BUTTON_UP
96 #define WINKEY_PAD_TRIGGER_Z			PAD_TRIGGER_Z
97 #define WINKEY_PAD_TRIGGER_R			PAD_TRIGGER_R
98 #define WINKEY_PAD_TRIGGER_L			PAD_TRIGGER_L
99 #define WINKEY_PAD_BUTTON_A				PAD_BUTTON_A
100 #define WINKEY_PAD_BUTTON_B				PAD_BUTTON_B
101 #define WINKEY_PAD_BUTTON_X				PAD_BUTTON_X
102 #define WINKEY_PAD_BUTTON_Y				PAD_BUTTON_Y
103 #define WINKEY_PAD_BUTTON_MENU			PAD_BUTTON_MENU
104 #define WINKEY_PAD_ORIGIN				PAD_ORIGIN
105 
106 
107 /* Types of Pads */
108 #define PCPAD_TYPE_UNKNOWN		0
109 #define PCPAD_TYPE_GAMEPAD		1
110 #define PCPAD_TYPE_GAMEPADPRO	2
111 #define PCPAD_TYPE_FREESTYLEPRO	3
112 #define PCPAD_TYPE_3DPRO		4
113 #define PCPAD_TYPE_ISHOCK		5
114 #define PCPAD_TYPE_GRAVISPADPRO 6
115 
116 /* Joystate fields for each Gamepad button */
117 #define	PCPAD_GAMEPAD_BUTTON_A			0
118 #define PCPAD_GAMEPAD_BUTTON_B			1
119 #define PCPAD_GAMEPAD_BUTTON_C			2
120 #define PCPAD_GAMEPAD_BUTTON_X			3
121 #define PCPAD_GAMEPAD_BUTTON_Y			4
122 #define PCPAD_GAMEPAD_BUTTON_Z			5
123 #define PCPAD_GAMEPAD_BUTTON_L			6
124 #define PCPAD_GAMEPAD_BUTTON_R			7
125 #define PCPAD_GAMEPAD_BUTTON_START		8
126 #define PCPAD_GAMEPAD_BUTTON_SELECT		9
127 
128 /* Joystate fields for each Gamepadpro button */
129 #define PCPAD_GAMEPADPRO_BUTTON_A			0
130 #define PCPAD_GAMEPADPRO_BUTTON_B			1
131 #define PCPAD_GAMEPADPRO_BUTTON_C			2
132 #define PCPAD_GAMEPADPRO_BUTTON_X			3
133 #define PCPAD_GAMEPADPRO_BUTTON_Y			4
134 #define PCPAD_GAMEPADPRO_BUTTON_Z			5
135 #define PCPAD_GAMEPADPRO_BUTTON_L			6
136 #define PCPAD_GAMEPADPRO_BUTTON_R			7
137 #define PCPAD_GAMEPADPRO_BUTTON_START		8
138 
139 /* Joystate fields for each FreestylePro button */
140 #define	PCPAD_FREESTYLEPRO_BUTTON_A			0
141 #define PCPAD_FREESTYLEPRO_BUTTON_B			1
142 #define PCPAD_FREESTYLEPRO_BUTTON_C			2
143 #define PCPAD_FREESTYLEPRO_BUTTON_X			3
144 #define PCPAD_FREESTYLEPRO_BUTTON_Y			4
145 #define PCPAD_FREESTYLEPRO_BUTTON_Z			5
146 #define PCPAD_FREESTYLEPRO_BUTTON_L			6
147 #define PCPAD_FREESTYLEPRO_BUTTON_R			7
148 #define PCPAD_FREESTYLEPRO_BUTTON_START		8
149 #define PCPAD_FREESTYLEPRO_BUTTON_SELECT	9
150 
151 #define PCPAD_FREESTYLEPRO_UP			0
152 #define PCPAD_FREESTYLEPRO_UPRIGHT		4500
153 #define PCPAD_FREESTYLEPRO_RIGHT		9000
154 #define PCPAD_FREESTYLEPRO_DOWNRIGHT	13500
155 #define PCPAD_FREESTYLEPRO_DOWN			18000
156 #define PCPAD_FREESTYLEPRO_DOWNLEFT		22500
157 #define PCPAD_FREESTYLEPRO_LEFT			27000
158 #define PCPAD_FREESTYLEPRO_UPLEFT		31500
159 
160 /* Joystate fields for each 3DPro button */
161 #define	PCPAD_3DPRO_TRIGGER				0
162 #define PCPAD_3DPRO_BUTTON_THUMB		1
163 #define PCPAD_3DPRO_BUTTON_STICKTOP		2
164 #define PCPAD_3DPRO_BUTTON_STICKBOTTOM	3
165 #define PCPAD_3DPRO_BUTTON_BASEUL		4
166 #define PCPAD_3DPRO_BUTTON_BASEUR		5
167 #define PCPAD_3DPRO_BUTTON_BASELR		6
168 #define PCPAD_3DPRO_BUTTON_BASELL		7
169 #define PCPAD_3DPRO_UP			0
170 #define PCPAD_3DPRO_UPRIGHT		4500
171 #define PCPAD_3DPRO_RIGHT		9000
172 #define PCPAD_3DPRO_DOWNRIGHT	13500
173 #define PCPAD_3DPRO_DOWN		18000
174 #define PCPAD_3DPRO_DOWNLEFT	22500
175 #define PCPAD_3DPRO_LEFT		27000
176 #define PCPAD_3DPRO_UPLEFT		31500
177 
178 /* Joystate fields for each iShock button */
179 #define PCPAD_ISHOCK_BUTTON_DPAD_UP			0
180 #define PCPAD_ISHOCK_BUTTON_DPAD_DOWN		1
181 #define PCPAD_ISHOCK_BUTTON_DPAD_LEFT		2
182 #define PCPAD_ISHOCK_BUTTON_DPAD_RIGHT		3
183 #define PCPAD_ISHOCK_BUTTON_TRIANGLE		4
184 #define PCPAD_ISHOCK_BUTTON_CIRCLE			5
185 #define PCPAD_ISHOCK_BUTTON_X				6
186 #define PCPAD_ISHOCK_BUTTON_SQUARE			7
187 #define PCPAD_ISHOCK_BUTTON_C				8
188 #define PCPAD_ISHOCK_BUTTON_B				9
189 #define PCPAD_ISHOCK_BUTTON_A				10
190 #define PCPAD_ISHOCK_BUTTON_F				11
191 #define PCPAD_ISHOCK_BUTTON_R1				12
192 #define PCPAD_ISHOCK_BUTTON_R2				13
193 #define PCPAD_ISHOCK_BUTTON_L1				14
194 #define PCPAD_ISHOCK_BUTTON_L2				15
195 #define PCPAD_ISHOCK_BUTTON_JOY_L			16
196 #define PCPAD_ISHOCK_BUTTON_JOY_R			17
197 #define PCPAD_ISHOCK_BUTTON_D				18
198 #define PCPAD_ISHOCK_BUTTON_E				19
199 #define PCPAD_ISHOCK_BUTTON_SELECT			9
200 #define PCPAD_ISHOCK_BUTTON_START			10
201 
202 /* Joystate fields for each Gravis GamePad Pro button */
203 #define	PCPAD_GRAVISPADPRO_BUTTON_RED		0
204 #define PCPAD_GRAVISPADPRO_BUTTON_YELLOW	1
205 #define PCPAD_GRAVISPADPRO_BUTTON_GREEN		2
206 #define PCPAD_GRAVISPADPRO_BUTTON_BLUE		3
207 #define PCPAD_GRAVISPADPRO_BUTTON_L1		4
208 #define PCPAD_GRAVISPADPRO_BUTTON_R1		5
209 #define PCPAD_GRAVISPADPRO_BUTTON_L2		6
210 #define PCPAD_GRAVISPADPRO_BUTTON_R2		7
211 #define PCPAD_GRAVISPADPRO_BUTTON_SELECT	8
212 #define PCPAD_GRAVISPADPRO_BUTTON_START		9
213 
214 #ifdef __cplusplus
215 }
216 #endif
217 
218 #endif
219