- Added bootmenu.resource and bootloader.resource to Mingw32 build
[AROS.git] / arch / all-sdl / hidd / sdl_hostlib.c
blob00cdb1b6827dab99dff3c0ad82da5548e7be83ab
1 /*
2 * sdl.hidd - SDL graphics/sound/keyboard for AROS hosted
3 * Copyright (c) 2007 Robert Norris. All rights reserved.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the same terms as AROS itself.
7 */
9 #include <aros/symbolsets.h>
11 #include <exec/types.h>
12 #include <exec/semaphores.h>
14 #include <proto/exec.h>
15 #include <proto/hostlib.h>
17 #include LC_LIBDEFS_FILE
19 #include "sdl_intern.h"
21 #define DEBUG 0
22 #include <aros/debug.h>
24 void *sdl_handle = NULL;
26 struct sdl_funcs sdl_funcs;
28 static const char *sdl_func_names[] = {
29 "SDL_strlcpy",
30 "SDL_strlcat",
31 "SDL_strrev",
32 "SDL_strupr",
33 "SDL_strlwr",
34 "SDL_ltoa",
35 "SDL_ultoa",
36 "SDL_lltoa",
37 "SDL_ulltoa",
38 "SDL_iconv",
39 "SDL_iconv_string",
40 "SDL_SetError",
41 "SDL_GetError",
42 "SDL_ClearError",
43 "SDL_Error",
44 "SDL_CreateMutex",
45 "SDL_mutexP",
46 "SDL_mutexV",
47 "SDL_DestroyMutex",
48 "SDL_CreateSemaphore",
49 "SDL_DestroySemaphore",
50 "SDL_SemWait",
51 "SDL_SemTryWait",
52 "SDL_SemWaitTimeout",
53 "SDL_SemPost",
54 "SDL_SemValue",
55 "SDL_CreateCond",
56 "SDL_DestroyCond",
57 "SDL_CondSignal",
58 "SDL_CondBroadcast",
59 "SDL_CondWait",
60 "SDL_CondWaitTimeout",
61 "SDL_CreateThread",
62 "SDL_ThreadID",
63 "SDL_GetThreadID",
64 "SDL_WaitThread",
65 "SDL_KillThread",
66 "SDL_RWFromFile",
67 "SDL_RWFromFP",
68 "SDL_RWFromMem",
69 "SDL_RWFromConstMem",
70 "SDL_AllocRW",
71 "SDL_FreeRW",
72 "SDL_ReadLE16",
73 "SDL_ReadBE16",
74 "SDL_ReadLE32",
75 "SDL_ReadBE32",
76 "SDL_ReadLE64",
77 "SDL_ReadBE64",
78 "SDL_WriteLE16",
79 "SDL_WriteBE16",
80 "SDL_WriteLE32",
81 "SDL_WriteBE32",
82 "SDL_WriteLE64",
83 "SDL_WriteBE64",
84 "SDL_AudioInit",
85 "SDL_AudioQuit",
86 "SDL_AudioDriverName",
87 "SDL_OpenAudio",
88 "SDL_GetAudioStatus",
89 "SDL_PauseAudio",
90 "SDL_LoadWAV_RW",
91 "SDL_FreeWAV",
92 "SDL_BuildAudioCVT",
93 "SDL_ConvertAudio",
94 "SDL_MixAudio",
95 "SDL_LockAudio",
96 "SDL_UnlockAudio",
97 "SDL_CloseAudio",
98 "SDL_CDNumDrives",
99 "SDL_CDName",
100 "SDL_CDOpen",
101 "SDL_CDStatus",
102 "SDL_CDPlayTracks",
103 "SDL_CDPlay",
104 "SDL_CDPause",
105 "SDL_CDResume",
106 "SDL_CDStop",
107 "SDL_CDEject",
108 "SDL_CDClose",
109 "SDL_HasRDTSC",
110 "SDL_HasMMX",
111 "SDL_HasMMXExt",
112 "SDL_Has3DNow",
113 "SDL_Has3DNowExt",
114 "SDL_HasSSE",
115 "SDL_HasSSE2",
116 "SDL_HasAltiVec",
117 "SDL_GetAppState",
118 "SDL_EnableUNICODE",
119 "SDL_EnableKeyRepeat",
120 "SDL_GetKeyRepeat",
121 "SDL_GetKeyState",
122 "SDL_GetModState",
123 "SDL_SetModState",
124 "SDL_GetKeyName",
125 "SDL_VideoInit",
126 "SDL_VideoQuit",
127 "SDL_VideoDriverName",
128 "SDL_GetVideoSurface",
129 "SDL_GetVideoInfo",
130 "SDL_VideoModeOK",
131 "SDL_ListModes",
132 "SDL_SetVideoMode",
133 "SDL_UpdateRects",
134 "SDL_UpdateRect",
135 "SDL_Flip",
136 "SDL_SetGamma",
137 "SDL_SetGammaRamp",
138 "SDL_GetGammaRamp",
139 "SDL_SetColors",
140 "SDL_SetPalette",
141 "SDL_MapRGB",
142 "SDL_MapRGBA",
143 "SDL_GetRGB",
144 "SDL_GetRGBA",
145 "SDL_CreateRGBSurface",
146 "SDL_CreateRGBSurfaceFrom",
147 "SDL_FreeSurface",
148 "SDL_LockSurface",
149 "SDL_UnlockSurface",
150 "SDL_LoadBMP_RW",
151 "SDL_SaveBMP_RW",
152 "SDL_SetColorKey",
153 "SDL_SetAlpha",
154 "SDL_SetClipRect",
155 "SDL_GetClipRect",
156 "SDL_ConvertSurface",
157 "SDL_UpperBlit",
158 "SDL_LowerBlit",
159 "SDL_FillRect",
160 "SDL_DisplayFormat",
161 "SDL_DisplayFormatAlpha",
162 "SDL_CreateYUVOverlay",
163 "SDL_LockYUVOverlay",
164 "SDL_UnlockYUVOverlay",
165 "SDL_DisplayYUVOverlay",
166 "SDL_FreeYUVOverlay",
167 "SDL_GL_LoadLibrary",
168 "SDL_GL_GetProcAddress",
169 "SDL_GL_SetAttribute",
170 "SDL_GL_GetAttribute",
171 "SDL_GL_SwapBuffers",
172 "SDL_GL_UpdateRects",
173 "SDL_GL_Lock",
174 "SDL_GL_Unlock",
175 "SDL_WM_SetCaption",
176 "SDL_WM_GetCaption",
177 "SDL_WM_SetIcon",
178 "SDL_WM_IconifyWindow",
179 "SDL_WM_ToggleFullScreen",
180 "SDL_WM_GrabInput",
181 "SDL_SoftStretch",
182 "SDL_GetMouseState",
183 "SDL_GetRelativeMouseState",
184 "SDL_WarpMouse",
185 "SDL_CreateCursor",
186 "SDL_SetCursor",
187 "SDL_GetCursor",
188 "SDL_FreeCursor",
189 "SDL_ShowCursor",
190 "SDL_NumJoysticks",
191 "SDL_JoystickName",
192 "SDL_JoystickOpen",
193 "SDL_JoystickOpened",
194 "SDL_JoystickIndex",
195 "SDL_JoystickNumAxes",
196 "SDL_JoystickNumBalls",
197 "SDL_JoystickNumHats",
198 "SDL_JoystickNumButtons",
199 "SDL_JoystickUpdate",
200 "SDL_JoystickEventState",
201 "SDL_JoystickGetAxis",
202 "SDL_JoystickGetHat",
203 "SDL_JoystickGetBall",
204 "SDL_JoystickGetButton",
205 "SDL_JoystickClose",
206 "SDL_PumpEvents",
207 "SDL_PeepEvents",
208 "SDL_PollEvent",
209 "SDL_WaitEvent",
210 "SDL_PushEvent",
211 "SDL_SetEventFilter",
212 "SDL_GetEventFilter",
213 "SDL_EventState",
214 "SDL_LoadObject",
215 "SDL_LoadFunction",
216 "SDL_UnloadObject",
217 "SDL_GetTicks",
218 "SDL_Delay",
219 "SDL_SetTimer",
220 "SDL_AddTimer",
221 "SDL_RemoveTimer",
222 "SDL_Linked_Version",
223 "SDL_Init",
224 "SDL_InitSubSystem",
225 "SDL_QuitSubSystem",
226 "SDL_WasInit",
227 "SDL_Quit",
230 #define SDL_NUM_FUNCS (199)
232 APTR HostLibBase;
234 struct SignalSemaphore sdl_lock;
236 static void *sdl_hostlib_load_so(const char *sofile, const char **names, int nfuncs, void **funcptr) {
237 void *handle;
238 char *err;
239 int i;
241 D(bug("[sdl] loading %d functions from %s\n", nfuncs, sofile));
243 if ((handle = HostLib_Open(sofile, &err)) == NULL) {
244 kprintf("[sdl] couldn't open '%s': %s\n", sofile, err);
245 return NULL;
248 for (i = 0; i < nfuncs; i++) {
249 funcptr[i] = HostLib_GetPointer(handle, names[i], &err);
250 if (err != NULL) {
251 kprintf("[sdl] couldn't get symbol '%s' from '%s': %s\n");
252 HostLib_Close(handle, NULL);
253 return NULL;
257 D(bug("[sdl] done\n"));
259 return handle;
262 static int sdl_hostlib_init(LIBBASETYPEPTR LIBBASE) {
263 D(bug("[sdl] hostlib init\n"));
265 InitSemaphore(&sdl_lock);
267 if ((HostLibBase = OpenResource("hostlib.resource")) == NULL) {
268 kprintf("[sdl] couldn't open hostlib.resource\n");
269 return FALSE;
272 if ((sdl_handle = sdl_hostlib_load_so(SDL_SOFILE, sdl_func_names, SDL_NUM_FUNCS, (void **) &sdl_funcs)) == NULL)
273 return FALSE;
275 return TRUE;
278 static int sdl_hostlib_expunge(LIBBASETYPEPTR LIBBASE) {
279 D(bug("[sdl] hostlib expunge\n"));
281 if (sdl_handle != NULL)
282 HostLib_Close(sdl_handle, NULL);
284 return TRUE;
287 ADD2INITLIB(sdl_hostlib_init, 0)
288 ADD2EXPUNGELIB(sdl_hostlib_expunge, 0)