Skip to content

Commit 1b47ba6

Browse files
RyanGlScottsvenpanne
authored andcommitted
Use hs_GLUT_getProcAddress to load font symbols
1 parent f28dd1b commit 1b47ba6

File tree

2 files changed

+174
-65
lines changed

2 files changed

+174
-65
lines changed

GLUT.cabal

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,6 @@ library
105105
cc-options: "-DUSE_DLSYM"
106106
if os(darwin)
107107
frameworks: GLUT
108-
else
109-
extra-libraries: glut
110108

111109
executable BOGLGP01-OnYourOwn1
112110
if !flag(BuildExamples)

cbits/HsGLUT.c

Lines changed: 174 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -10,68 +10,6 @@
1010
*
1111
* -------------------------------------------------------------------------- */
1212

13-
#if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__WATCOMC__)
14-
15-
#define GLUT_STROKE_ROMAN ((void *)0x0000)
16-
#define GLUT_STROKE_MONO_ROMAN ((void *)0x0001)
17-
#define GLUT_BITMAP_9_BY_15 ((void *)0x0002)
18-
#define GLUT_BITMAP_8_BY_13 ((void *)0x0003)
19-
#define GLUT_BITMAP_TIMES_ROMAN_10 ((void *)0x0004)
20-
#define GLUT_BITMAP_TIMES_ROMAN_24 ((void *)0x0005)
21-
#define GLUT_BITMAP_HELVETICA_10 ((void *)0x0006)
22-
#define GLUT_BITMAP_HELVETICA_12 ((void *)0x0007)
23-
#define GLUT_BITMAP_HELVETICA_18 ((void *)0x0008)
24-
25-
#else
26-
27-
extern void* glutStrokeRoman;
28-
extern void* glutStrokeMonoRoman;
29-
extern void* glutBitmap9By15;
30-
extern void* glutBitmap8By13;
31-
extern void* glutBitmapTimesRoman10;
32-
extern void* glutBitmapTimesRoman24;
33-
extern void* glutBitmapHelvetica10;
34-
extern void* glutBitmapHelvetica12;
35-
extern void* glutBitmapHelvetica18;
36-
37-
#define GLUT_STROKE_ROMAN ((void *)&glutStrokeRoman)
38-
#define GLUT_STROKE_MONO_ROMAN ((void *)&glutStrokeMonoRoman)
39-
#define GLUT_BITMAP_9_BY_15 ((void *)&glutBitmap9By15)
40-
#define GLUT_BITMAP_8_BY_13 ((void *)&glutBitmap8By13)
41-
#define GLUT_BITMAP_TIMES_ROMAN_10 ((void *)&glutBitmapTimesRoman10)
42-
#define GLUT_BITMAP_TIMES_ROMAN_24 ((void *)&glutBitmapTimesRoman24)
43-
#define GLUT_BITMAP_HELVETICA_10 ((void *)&glutBitmapHelvetica10)
44-
#define GLUT_BITMAP_HELVETICA_12 ((void *)&glutBitmapHelvetica12)
45-
#define GLUT_BITMAP_HELVETICA_18 ((void *)&glutBitmapHelvetica18)
46-
47-
#endif
48-
49-
void*
50-
hs_GLUT_marshalBitmapFont(int fontID)
51-
{
52-
switch (fontID) {
53-
case 0 : return GLUT_BITMAP_8_BY_13;
54-
case 1 : return GLUT_BITMAP_9_BY_15;
55-
case 2 : return GLUT_BITMAP_TIMES_ROMAN_10;
56-
case 3 : return GLUT_BITMAP_TIMES_ROMAN_24;
57-
case 4 : return GLUT_BITMAP_HELVETICA_10;
58-
case 5 : return GLUT_BITMAP_HELVETICA_12;
59-
case 6 : return GLUT_BITMAP_HELVETICA_18;
60-
}
61-
return (void*)0;
62-
}
63-
64-
void*
65-
hs_GLUT_marshalStrokeFont(int fontID)
66-
{
67-
switch (fontID) {
68-
case 0 : return GLUT_STROKE_ROMAN;
69-
case 1 : return GLUT_STROKE_MONO_ROMAN;
70-
}
71-
return (void*)0;
72-
}
73-
74-
/* -------------------------------------------------------------------------- */
7513
#if defined(USE_GETPROCADDRESS)
7614

7715
#define WIN32_LEAN_AND_MEAN
@@ -153,7 +91,7 @@ hs_GLUT_getProcAddress(const char *name)
15391
if (firstTime) {
15492
firstTime = 0;
15593
/* Get a handle for our executable. */
156-
handle = dlopen(NULL, RTLD_LAZY);
94+
handle = dlopen("libglut.so", RTLD_LAZY);
15795
}
15896

15997
return handle ? dlsym(handle, name) : NULL;
@@ -165,3 +103,176 @@ hs_GLUT_getProcAddress(const char *name)
165103
#error "Don't know how to retrieve GLUT entries"
166104

167105
#endif
106+
107+
/* -------------------------------------------------------------------------- */
108+
#if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__WATCOMC__)
109+
110+
void*
111+
hs_GLUT_glutStrokeRoman(void)
112+
{
113+
return ((void *)0x0000);
114+
}
115+
116+
void*
117+
hs_GLUT_glutStrokeMonoRoman(void)
118+
{
119+
return ((void *)0x0001);
120+
}
121+
122+
void*
123+
hs_GLUT_glutBitmap9By15(void)
124+
{
125+
return ((void *)0x0002);
126+
}
127+
128+
void*
129+
hs_GLUT_glutBitmap8By13(void)
130+
{
131+
return ((void *)0x0003);
132+
}
133+
134+
void*
135+
hs_GLUT_glutBitmapTimesRoman10(void)
136+
{
137+
return ((void *)0x0004);
138+
}
139+
140+
void*
141+
hs_GLUT_glutBitmapTimesRoman24(void)
142+
{
143+
return ((void *)0x0005);
144+
}
145+
146+
void*
147+
hs_GLUT_glutBitmapHelvetica10(void)
148+
{
149+
return ((void *)0x0006);
150+
}
151+
152+
void*
153+
hs_GLUT_glutBitmapHelvetica12(void)
154+
{
155+
return ((void *)0x0007);
156+
}
157+
158+
void*
159+
hs_GLUT_glutBitmapHelvetica18(void)
160+
{
161+
return ((void *)0x0008);
162+
}
163+
164+
#else
165+
166+
void*
167+
hs_GLUT_glutStrokeRoman(void)
168+
{
169+
return hs_GLUT_getProcAddress("glutStrokeRoman");
170+
}
171+
172+
void*
173+
hs_GLUT_glutStrokeMonoRoman(void)
174+
{
175+
return hs_GLUT_getProcAddress("glutStrokeMonoRoman");
176+
}
177+
178+
void*
179+
hs_GLUT_glutBitmap9By15(void)
180+
{
181+
return hs_GLUT_getProcAddress("glutBitmap9By15");
182+
}
183+
184+
void*
185+
hs_GLUT_glutBitmap8By13(void)
186+
{
187+
return hs_GLUT_getProcAddress("glutBitmap8By13");
188+
}
189+
190+
void*
191+
hs_GLUT_glutBitmapTimesRoman10(void)
192+
{
193+
return hs_GLUT_getProcAddress("glutBitmapTimesRoman10");
194+
}
195+
196+
void*
197+
hs_GLUT_glutBitmapTimesRoman24(void)
198+
{
199+
return hs_GLUT_getProcAddress("glutBitmapTimesRoman24");
200+
}
201+
202+
void*
203+
hs_GLUT_glutBitmapHelvetica10(void)
204+
{
205+
return hs_GLUT_getProcAddress("glutBitmapHelvetica10");
206+
}
207+
208+
void*
209+
hs_GLUT_glutBitmapHelvetica12(void)
210+
{
211+
return hs_GLUT_getProcAddress("glutBitmapHelvetica12");
212+
}
213+
214+
void*
215+
hs_GLUT_glutBitmapHelvetica18(void)
216+
{
217+
return hs_GLUT_getProcAddress("glutBitmapHelvetica18");
218+
}
219+
220+
#endif
221+
222+
void*
223+
hs_GLUT_marshalBitmapFont(int fontID)
224+
{
225+
static int firstTime = 1;
226+
static void *h_glutBitmap9By15 = NULL;
227+
static void *h_glutBitmap8By13 = NULL;
228+
static void *h_glutBitmapTimesRoman10 = NULL;
229+
static void *h_glutBitmapTimesRoman24 = NULL;
230+
static void *h_glutBitmapHelvetica10 = NULL;
231+
static void *h_glutBitmapHelvetica12 = NULL;
232+
static void *h_glutBitmapHelvetica18 = NULL;
233+
234+
235+
if (firstTime) {
236+
firstTime = 0;
237+
238+
h_glutBitmap9By15 = hs_GLUT_glutBitmap9By15();
239+
h_glutBitmap8By13 = hs_GLUT_glutBitmap8By13();
240+
h_glutBitmapTimesRoman10 = hs_GLUT_glutBitmapTimesRoman10();
241+
h_glutBitmapTimesRoman24 = hs_GLUT_glutBitmapTimesRoman24();
242+
h_glutBitmapHelvetica10 = hs_GLUT_glutBitmapHelvetica10();
243+
h_glutBitmapHelvetica12 = hs_GLUT_glutBitmapHelvetica12();
244+
h_glutBitmapHelvetica18 = hs_GLUT_glutBitmapHelvetica18();
245+
}
246+
247+
switch (fontID) {
248+
case 0 : return h_glutBitmap8By13;
249+
case 1 : return h_glutBitmap9By15;
250+
case 2 : return h_glutBitmapTimesRoman10;
251+
case 3 : return h_glutBitmapTimesRoman24;
252+
case 4 : return h_glutBitmapHelvetica10;
253+
case 5 : return h_glutBitmapHelvetica12;
254+
case 6 : return h_glutBitmapHelvetica18;
255+
}
256+
return (void*)0;
257+
}
258+
259+
void*
260+
hs_GLUT_marshalStrokeFont(int fontID)
261+
{
262+
static int firstTime = 1;
263+
static void *h_glutStrokeRoman = NULL;
264+
static void *h_glutStrokeMonoRoman = NULL;
265+
266+
if (firstTime) {
267+
firstTime = 0;
268+
269+
h_glutStrokeRoman = hs_GLUT_glutStrokeRoman();
270+
h_glutStrokeMonoRoman = hs_GLUT_glutStrokeMonoRoman();
271+
}
272+
273+
switch (fontID) {
274+
case 0 : return h_glutStrokeRoman;
275+
case 1 : return h_glutStrokeMonoRoman;
276+
}
277+
return (void*)0;
278+
}

0 commit comments

Comments
 (0)