1 /*
2  * (c) Copyright 1993, Silicon Graphics, Inc.
3  * ALL RIGHTS RESERVED
4  * Permission to use, copy, modify, and distribute this software for
5  * any purpose and without fee is hereby granted, provided that the above
6  * copyright notice appear in all copies and that both the copyright notice
7  * and this permission notice appear in supporting documentation, and that
8  * the name of Silicon Graphics, Inc. not be used in advertising
9  * or publicity pertaining to distribution of the software without specific,
10  * written prior permission.
11  *
12  * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
13  * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
14  * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
15  * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
16  * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
17  * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
18  * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
19  * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
20  * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
21  * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
22  * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
23  * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
24  *
25  * US Government Users Restricted Rights
26  * Use, duplication, or disclosure by the Government is subject to
27  * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
28  * (c)(1)(ii) of the Rights in Technical Data and Computer Software
29  * clause at DFARS 252.227-7013 and/or in similar or successor
30  * clauses in the FAR or the DOD or NASA FAR Supplement.
31  * Unpublished-- rights reserved under the copyright laws of the
32  * United States.  Contractor/manufacturer is Silicon Graphics,
33  * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
34  *
35  * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
36  */
37 #include <windows.h>
38 #include <GL/gl.h>
39 #include <GL/glu.h>
40 
41 
42 /*
43 ** Window Types
44 */
45 
46 #define TK_RGB		0
47 #define TK_INDEX	1
48 #define TK_SINGLE	0
49 #define TK_DOUBLE	2
50 #define TK_DIRECT	0
51 #define TK_INDIRECT	4
52 #define TK_ACCUM	8
53 #define TK_ALPHA	16
54 #define TK_DEPTH        32      /* 32-bit depth buffer */
55 #define TK_STENCIL      64
56 #define TK_DEPTH16      256     /* 16-bit depth buffer */
57 #define TK_FIXED_332_PAL    512
58 
59 /*
60 ** Display Mode Selection Criteria
61 */
62 
63 enum {
64     TK_USE_ID = 1,
65     TK_EXACT_MATCH,
66     TK_MINIMUM_CRITERIA
67 };
68 
69 /*
70 ** Window Masks
71 */
72 
73 #define TK_IS_RGB(x)		(((x) & TK_INDEX) == 0)
74 #define TK_IS_INDEX(x)		(((x) & TK_INDEX) != 0)
75 #define TK_IS_SINGLE(x)		(((x) & TK_DOUBLE) == 0)
76 #define TK_IS_DOUBLE(x)		(((x) & TK_DOUBLE) != 0)
77 #define TK_HAS_ACCUM(x)		(((x) & TK_ACCUM) != 0)
78 #define TK_HAS_ALPHA(x)		(((x) & TK_ALPHA) != 0)
79 #define TK_HAS_DEPTH(x)         (((x) & (TK_DEPTH | TK_DEPTH16)) != 0)
80 #define TK_HAS_STENCIL(x)	(((x) & TK_STENCIL) != 0)
81 #define TK_IS_DIRECT(x)		(((x) & TK_INDIRECT) == 0)
82 #define TK_IS_INDIRECT(x)       (((x) & TK_INDIRECT) != 0)
83 #define TK_USE_FIXED_332_PAL(x) (((x) & TK_FIXED_332_PAL) != 0)
84 #define TK_IS_DEPTH16(x)        (((x) & TK_DEPTH16) != 0)
85 
86 /*
87 ** Event Status
88 */
89 
90 #define	TK_LEFTBUTTON		1
91 #define	TK_RIGHTBUTTON		2
92 #define	TK_MIDDLEBUTTON		4
93 #define	TK_SHIFT		1
94 #define	TK_CONTROL		2
95 
96 /*
97 ** Key Codes
98 */
99 
100 #define TK_RETURN		0x0D
101 #define TK_ESCAPE		0x1B
102 #define TK_SPACE		0x20
103 #define TK_LEFT			0x25
104 #define TK_UP			0x26
105 #define TK_RIGHT		0x27
106 #define TK_DOWN			0x28
107 #define TK_A			'A'
108 #define TK_B			'B'
109 #define TK_C			'C'
110 #define TK_D			'D'
111 #define TK_E			'E'
112 #define TK_F			'F'
113 #define TK_G			'G'
114 #define TK_H			'H'
115 #define TK_I			'I'
116 #define TK_J			'J'
117 #define TK_K			'K'
118 #define TK_L			'L'
119 #define TK_M			'M'
120 #define TK_N			'N'
121 #define TK_O			'O'
122 #define TK_P			'P'
123 #define TK_Q			'Q'
124 #define TK_R			'R'
125 #define TK_S			'S'
126 #define TK_T			'T'
127 #define TK_U			'U'
128 #define TK_V			'V'
129 #define TK_W			'W'
130 #define TK_X			'X'
131 #define TK_Y			'Y'
132 #define TK_Z			'Z'
133 #define TK_a			'a'
134 #define TK_b			'b'
135 #define TK_c			'c'
136 #define TK_d			'd'
137 #define TK_e			'e'
138 #define TK_f			'f'
139 #define TK_g			'g'
140 #define TK_h			'h'
141 #define TK_i			'i'
142 #define TK_j			'j'
143 #define TK_k			'k'
144 #define TK_l			'l'
145 #define TK_m			'm'
146 #define TK_n			'n'
147 #define TK_o			'o'
148 #define TK_p			'p'
149 #define TK_q			'q'
150 #define TK_r			'r'
151 #define TK_s			's'
152 #define TK_t			't'
153 #define TK_u			'u'
154 #define TK_v			'v'
155 #define TK_w			'w'
156 #define TK_x			'x'
157 #define TK_y			'y'
158 #define TK_z			'z'
159 #define TK_0			'0'
160 #define TK_1			'1'
161 #define TK_2			'2'
162 #define TK_3			'3'
163 #define TK_4			'4'
164 #define TK_5			'5'
165 #define TK_6			'6'
166 #define TK_7			'7'
167 #define TK_8			'8'
168 #define TK_9			'9'
169 
170 /*
171 ** Color Macros - Default Windows Logical palette
172 */
173 
174 enum {
175     TK_BLACK = 0,
176     TK_RED = 13,
177     TK_GREEN,
178     TK_YELLOW,
179     TK_BLUE,
180     TK_MAGENTA,
181     TK_CYAN,
182     TK_WHITE
183 };
184 
185 extern float auxRGBMap[20][3];
186 #define tkRGBMap auxRGBMap
187 
188 #define TK_SETCOLOR(x, y) (TK_IS_RGB((x)) ? \
189 		           glColor3fv(auxRGBMap[(y)]) : glIndexf((y)))
190 
191 /*
192 ** RGB Image Structure
193 */
194 
195 typedef struct _TK_RGBImageRec {
196     GLint sizeX, sizeY;
197     unsigned char *data;
198 } TK_RGBImageRec;
199 
200 /*
201 ** Prototypes
202 */
203 
204 extern void tkInitDisplayMode(GLenum);
205 extern void tkInitPosition(int, int, int, int);
206 extern void tkInitDisplayModePolicy(GLenum);
207 extern GLenum tkInitDisplayModeID(GLint);
208 extern GLenum tkInitWindow(char *);
209 extern GLenum tkInitWindowAW(char *, BOOL);
210 extern void tkCloseWindow(void);
211 extern void tkQuit(void);
212 
213 extern void tkExec(void);
214 extern void tkExposeFunc(void (*)(int, int));
215 extern void tkReshapeFunc(void (*)(GLsizei, GLsizei));
216 extern void tkDisplayFunc(void (*)(void));
217 extern void tkKeyDownFunc(GLenum (*)(int, GLenum));
218 extern void tkMouseDownFunc(GLenum (*)(int, int, GLenum));
219 extern void tkMouseUpFunc(GLenum (*)(int, int, GLenum));
220 extern void tkMouseMoveFunc(GLenum (*)(int, int, GLenum));
221 extern void tkIdleFunc(void (*)(void));
222 
223 extern void tkSwapBuffers(void);
224 
225 extern GLint tkGetColorMapSize(void);
226 extern void tkGetMouseLoc(int *, int *);
227 extern GLint tkGetDisplayModeID(void);
228 extern GLenum tkGetDisplayModePolicy(void);
229 extern GLenum tkGetDisplayMode(void);
230 
231 extern void tkSetOneColor(int, float, float, float);
232 extern void tkSetFogRamp(int, int);
233 extern void tkSetGreyRamp(void);
234 extern void tkSetRGBMap(int, float *);
235 
236 extern TK_RGBImageRec *tkRGBImageLoad(char *);
237 extern TK_RGBImageRec *tkRGBImageLoadAW(char *, BOOL);
238 
239 extern TK_RGBImageRec *tkDIBImageLoad(char *);
240 extern TK_RGBImageRec *tkDIBImageLoadAW(char *, BOOL);
241 
242 extern GLenum tkCreateStrokeFont(GLuint);
243 extern GLenum tkCreateOutlineFont(GLuint);
244 extern GLenum tkCreateFilledFont(GLuint);
245 extern GLenum tkCreateBitmapFont(GLuint);
246 extern void tkDrawStr(GLuint, char *);
247 
248 /* Windows specific routines */
249 extern HWND  tkGetHWND(void);
250 extern HDC   tkGetHDC(void);
251 extern HGLRC tkGetHRC(void);
252 
253 /* Error popup control */
254 extern void tkErrorPopups(GLboolean);
255 extern GLboolean tkPopupEnable;
256 #define MESSAGEBOX(a, b, c, d)  if (tkPopupEnable) MessageBoxA((a), (b), (c), (d))
257