- file renaming and includes done
[genesis3d.git] / G3D / Drivers / SoftDrv / SAL.H
1 /****************************************************************************************/\r
2 /*  sal.h                                                                               */\r
3 /*                                                                                      */\r
4 /*  Description:  GDI dib handling code                                                 */\r
5 /*                                                                                      */\r
6 /*                Code fragments contributed by John Miles                              */\r
7 /*                                                                                      */\r
8 /*  The contents of this file are subject to the Genesis3D Public License               */\r
9 /*  Version 1.01 (the "License"); you may not use this file except in                   */\r
10 /*  compliance with the License. You may obtain a copy of the License at                */\r
11 /*  http://www.genesis3d.com                                                            */\r
12 /*                                                                                      */\r
13 /*  Software distributed under the License is distributed on an "AS IS"                 */\r
14 /*  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See                */\r
15 /*  the License for the specific language governing rights and limitations              */\r
16 /*  under the License.                                                                  */\r
17 /*                                                                                      */\r
18 /*  The Original Code is Genesis3D, released March 25, 1999.                            */\r
19 /*  Genesis3D Version 1.1 released November 15, 1999                                 */\r
20 /*  Copyright (C) 1999 WildTangent, Inc. All Rights Reserved           */\r
21 /*                                                                                      */\r
22 /****************************************************************************************/\r
23 \r
24 #ifndef SAL_VERSION\r
25 \r
26 #define SAL_VERSION      "1.00"\r
27 #define SAL_VERSION_DATE "23-May-96"\r
28 \r
29 #endif\r
30 \r
31 #ifndef SAL_H\r
32 #define SAL_H\r
33 \r
34 #ifdef WIN32\r
35   #define IS_WIN32 1\r
36 #endif\r
37 \r
38 #ifdef _WIN32\r
39   #define IS_WIN32 1\r
40 #endif\r
41 \r
42 #ifdef __cplusplus\r
43 extern "C" {\r
44 #endif\r
45 \r
46 //\r
47 // If compiling SAL library, use __declspec(dllexport) for both \r
48 // declarations and definitions\r
49 //\r
50 // If compiling SAL application, use __declspec(dllimport) for\r
51 // declarations -- definitions don't matter\r
52 //\r
53 // (DOS, other system definitions to be added later)\r
54 //\r
55 /*\r
56 #ifdef IS_WIN32\r
57 \r
58   #define SALEXPORT WINAPI\r
59 \r
60   #ifdef BUILD_SAL\r
61     #define DXDEC __declspec(dllexport)\r
62     #define DXDEF __declspec(dllexport)\r
63   #else\r
64     #define DXDEC __declspec(dllimport)\r
65   #endif\r
66 \r
67 #else\r
68 \r
69   #define SALEXPORT\r
70   #define WINAPI\r
71 \r
72 #endif\r
73 */\r
74 \r
75 #define SALEXPORT WINAPI\r
76 #define DXDEC \r
77 #define DXDEF \r
78 \r
79 //\r
80 // Misc. constant definitions  \r
81 //\r
82 \r
83 //\r
84 // General type definitions for portability\r
85 // \r
86 \r
87 #ifndef US_TYPEDEFS\r
88 #define US_TYPEDEFS\r
89 \r
90   typedef unsigned char   U8 ;\r
91   typedef unsigned short  U16;\r
92   typedef unsigned long   U32;\r
93   typedef          char   C8 ;\r
94   typedef signed   char   S8 ;\r
95   typedef signed   short  S16;\r
96   typedef signed   long   S32;\r
97 \r
98 #endif\r
99 \r
100 #ifndef YES\r
101 #define YES 1\r
102 #endif\r
103 \r
104 #ifndef NO\r
105 #define NO  0\r
106 #endif\r
107 \r
108 #ifndef TRUE\r
109 #define TRUE 1\r
110 #endif\r
111 \r
112 #ifndef FALSE\r
113 #define FALSE  0\r
114 #endif\r
115 \r
116 #define SAL_FULLSCREEN     0               // Set fullscreen DDraw mode\r
117 #define SAL_WINDOW         1               // Set DIB windowed mode\r
118 #define SAL_TRY_FULLSCREEN 2               // Try fullscreen, fall back to DIB\r
119 \r
120 #define SAL_FRONT_SURFACE 0\r
121 #define SAL_BACK_SURFACE  1\r
122 \r
123 //\r
124 // Preference names and default values\r
125 //\r
126 \r
127 #define SAL_ALLOW_FRONT_LOCK         0     // Disregard request for front surface lock\r
128 #define DEFAULT_AFL                  NO\r
129                                      \r
130 #define SAL_BUFFER_IF_NO_LFB         1     // Use system RAM page buffer if no LFB available\r
131 #define DEFAULT_BINL                 YES   \r
132                                      \r
133 #define SAL_DOS_MONO_DEBUG           2     // Set up monochrome TTY debug monitor for DOS\r
134 #define DEFAULT_DMD                  YES\r
135 \r
136 #define SAL_MAX_VIDEO_PAGES          3     // Allocate up to 3 video pages if possible\r
137 #define DEFAULT_MVP                  3     \r
138 \r
139 #define SAL_ALLOW_WINDOW_RESIZE      4     // Allow window to be resized\r
140 #define DEFAULT_AWR                  YES\r
141 \r
142 #define SAL_PREVENT_ALT_MENU_POPUP   5     // Do not allow ALT to pause app\r
143 #define DEFAULT_PAMP                 YES\r
144 \r
145 #define SAL_ALWAYS_ON_TOP            6     // App has normal window Z order\r
146 #define DEFAULT_SAOT                 NO\r
147 \r
148 #define SAL_MAXIMIZE_TO_FULLSCREEN   7     // Maximize button switches to FS\r
149 #define DEFAULT_MTF                  YES   \r
150 \r
151 #define N_SAL_PREFS                  8     // # of preference types\r
152 \r
153 //\r
154 // Structures\r
155 //\r
156 \r
157 typedef struct\r
158 {\r
159    U32 r;\r
160    U32 g;\r
161    U32 b;\r
162    S32 alpha;\r
163 }\r
164 SAL_RGB32;\r
165 \r
166 typedef struct\r
167 {\r
168    S32 x0;\r
169    S32 y0;\r
170    S32 x1;\r
171    S32 y1;\r
172 }\r
173 SAL_REGION;\r
174 \r
175 typedef struct\r
176 {\r
177    S32 x;\r
178    S32 y;\r
179    S32 width;\r
180    S32 height;\r
181 }\r
182 SAL_WINAREA;\r
183 \r
184 //\r
185 // Function pointer types\r
186 //\r
187 \r
188 typedef void (SALEXPORT * SALFOCUSCB) (S32 status);\r
189 typedef void (SALEXPORT * SALEXITCB) (void);\r
190 \r
191 //\r
192 // Miscellaneous/support services (not system-specific)\r
193 //\r
194 \r
195 DXDEC void __cdecl SAL_debug_printf          (char *fmt, ...);\r
196 \r
197 DXDEC  S32 WINAPI  SAL_get_preference        (U32   number);\r
198                    \r
199 DXDEC  S32 WINAPI  SAL_set_preference        (U32   number, \r
200                                               S32   value);\r
201 \r
202 //\r
203 // General services (not system-specific)\r
204 //\r
205 \r
206 DXDEC void WINAPI SAL_set_palette_entry      (S32        index,\r
207                                               SAL_RGB32 *entry,\r
208                                               S32        wait_flag);\r
209                                              \r
210 DXDEC void WINAPI SAL_get_palette_entry      (S32        index,\r
211                                               SAL_RGB32 *entry);\r
212 \r
213 DXDEC void WINAPI SAL_set_palette_range      (S32        index,\r
214                                               S32        num_entries,\r
215                                               SAL_RGB32 *entry_list,\r
216                                               S32        wait_flag);\r
217                                              \r
218 DXDEC void WINAPI SAL_get_palette_range      (S32        index,\r
219                                               S32        num_entries,\r
220                                               SAL_RGB32 *entry_list);\r
221 \r
222 DXDEC void WINAPI SAL_get_pixel_format       (S32       *pixel_pitch,\r
223                                               S32       *bytes_per_pixel,\r
224                                               S32       *R_shift,\r
225                                               U32       *R_mask,\r
226                                               S32       *R_width,\r
227                                               S32       *G_shift,\r
228                                               U32       *G_mask,\r
229                                               S32       *G_width,\r
230                                               S32       *B_shift,\r
231                                               U32       *B_mask,\r
232                                               S32       *B_width);\r
233 \r
234 \r
235 DXDEC void WINAPI SAL_flip_surface           (void);\r
236 DXDEF void WINAPI SAL_blit_surface                              (void);\r
237 \r
238 DXDEC void WINAPI SAL_wipe_surface           (S32        surface,\r
239                                               U32        color);\r
240 \r
241 DXDEC void WINAPI SAL_lock_surface           (S32        surface,\r
242                                               U8       **ptr,\r
243                                               S32       *pitch);\r
244 \r
245 DXDEC void WINAPI SAL_release_surface        (S32        surface,\r
246                                               S32        perform_flip);\r
247 \r
248 DXDEC void WINAPI SAL_lock_region            (S32        surface,\r
249                                               SAL_REGION region,\r
250                                               U8       **ptr,\r
251                                               S32       *pitch);\r
252 \r
253 DXDEC void WINAPI SAL_release_region         (S32        surface,\r
254                                               SAL_REGION region);\r
255 \r
256 //\r
257 // Mouse services\r
258 //\r
259 \r
260 DXDEC void WINAPI SAL_show_system_mouse      (void);\r
261 DXDEC void WINAPI SAL_hide_system_mouse      (void);\r
262 \r
263 DXDEC void WINAPI SAL_constrain_mouse        (void);\r
264 DXDEC void WINAPI SAL_unconstrain_mouse      (void);\r
265 \r
266 //\r
267 // System-specific functions for Win32 version\r
268 //\r
269 \r
270 #ifdef IS_WIN32\r
271   \r
272   DXDEC S32        WINAPI SAL_startup                 (BOOL FileLog);\r
273   DXDEC void       WINAPI SAL_shutdown                (void);\r
274 \r
275   DXDEC BOOL WINAPI SAL_set_main_window(HWND hWindow);\r
276   // CHANGE! (12/18/96)\r
277   // Must have a menu in my app. \r
278   DXDEC HWND WINAPI SAL_create_main_window  (const char *MenuName);\r
279                                                       \r
280   DXDEC S32        WINAPI SAL_set_display_mode        (S32   display_size_X,\r
281                                                        S32   display_size_Y,\r
282                                                        S32   display_bpp,\r
283                                                        S32   initial_window_mode,\r
284                                                        S32   allow_mode_switch);\r
285 \r
286   DXDEC S32        WINAPI SAL_window_status           (void);\r
287   DXDEC void       WINAPI SAL_window_area             (SAL_WINAREA *area);\r
288   DXDEC void       WINAPI SAL_client_area             (SAL_WINAREA *area);\r
289   DXDEC S32        WINAPI SAL_set_window_area         (SAL_WINAREA *area);\r
290   DXDEC S32        WINAPI SAL_is_app_active           (void);\r
291   DXDEC SALFOCUSCB WINAPI SAL_register_focus_callback (SALFOCUSCB fn);\r
292   DXDEC WNDPROC    WINAPI SAL_register_WNDPROC        (WNDPROC fn);\r
293 \r
294   DXDEC void       WINAPI SAL_serve_message_queue     (void);\r
295 \r
296   DXDEC void      __cdecl SAL_error_box               (C8 *caption,\r
297                                                        C8 *fmt, ...);\r
298   // CHANGE! (12/18/96) John Pollard\r
299   DXDEC void WINAPI SAL_GetBackBufferDC(HDC *dc);\r
300   DXDEC void WINAPI SAL_ReleaseBackBufferDC(HDC dc);\r
301 \r
302 #endif\r
303 \r
304 #ifdef __cplusplus\r
305 }\r
306 #endif\r
307 \r
308 #endif\r