SDL.c
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:6k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.     SDL - Simple DirectMedia Layer
  3.     Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002  Sam Lantinga
  4.     This library is free software; you can redistribute it and/or
  5.     modify it under the terms of the GNU Library General Public
  6.     License as published by the Free Software Foundation; either
  7.     version 2 of the License, or (at your option) any later version.
  8.     This library is distributed in the hope that it will be useful,
  9.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  11.     Library General Public License for more details.
  12.     You should have received a copy of the GNU Library General Public
  13.     License along with this library; if not, write to the Free
  14.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  15.     Sam Lantinga
  16.     slouken@libsdl.org
  17. */
  18. #ifdef SAVE_RCSID
  19. static char rcsid =
  20.  "@(#) $Id: SDL.c,v 1.4 2002/04/22 21:38:01 wmay Exp $";
  21. #endif
  22. /* Initialization code for SDL */
  23. #include <stdlib.h> /* For getenv() */
  24. #include "SDL.h"
  25. #include "SDL_endian.h"
  26. #include "SDL_fatal.h"
  27. #ifndef DISABLE_VIDEO
  28. #include "SDL_leaks.h"
  29. #endif
  30. /* Initialization/Cleanup routines */
  31. #ifndef DISABLE_JOYSTICK
  32. extern int  SDL_JoystickInit(void);
  33. extern void SDL_JoystickQuit(void);
  34. #endif
  35. #ifndef DISABLE_CDROM
  36. extern int  SDL_CDROMInit(void);
  37. extern void SDL_CDROMQuit(void);
  38. #endif
  39. #ifndef DISABLE_TIMERS
  40. extern void SDL_StartTicks(void);
  41. extern int  SDL_TimerInit(void);
  42. extern void SDL_TimerQuit(void);
  43. #endif
  44. /* The current SDL version */
  45. static SDL_version version = 
  46. { SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL };
  47. /* The initialized subsystems */
  48. static Uint32 SDL_initialized = 0;
  49. static Uint32 ticks_started = 0;
  50. #ifdef CHECK_LEAKS
  51. int surfaces_allocated = 0;
  52. #endif
  53. int SDL_InitSubSystem(Uint32 flags)
  54. {
  55. #ifndef DISABLE_VIDEO
  56. /* Initialize the video/event subsystem */
  57. if ( (flags & SDL_INIT_VIDEO) && !(SDL_initialized & SDL_INIT_VIDEO) ) {
  58. if ( SDL_VideoInit(getenv("SDL_VIDEODRIVER"),
  59.                    (flags&SDL_INIT_EVENTTHREAD)) < 0 ) {
  60. return(-1);
  61. }
  62. SDL_initialized |= SDL_INIT_VIDEO;
  63. }
  64. #else
  65. if ( flags & SDL_INIT_VIDEO ) {
  66. SDL_SetError("SDL not built with video support");
  67. return(-1);
  68. }
  69. #endif
  70. #ifndef DISABLE_AUDIO
  71. /* Initialize the audio subsystem */
  72. if ( (flags & SDL_INIT_AUDIO) && !(SDL_initialized & SDL_INIT_AUDIO) ) {
  73. if ( SDL_AudioInit(getenv("SDL_AUDIODRIVER")) < 0 ) {
  74. return(-1);
  75. }
  76. SDL_initialized |= SDL_INIT_AUDIO;
  77. }
  78. #else
  79. if ( flags & SDL_INIT_AUDIO ) {
  80. SDL_SetError("SDL not built with audio support");
  81. return(-1);
  82. }
  83. #endif
  84. #ifndef DISABLE_TIMERS
  85. /* Initialize the timer subsystem */
  86. if ( ! ticks_started ) {
  87. SDL_StartTicks();
  88. ticks_started = 1;
  89. }
  90. if ( (flags & SDL_INIT_TIMER) && !(SDL_initialized & SDL_INIT_TIMER) ) {
  91. if ( SDL_TimerInit() < 0 ) {
  92. return(-1);
  93. }
  94. SDL_initialized |= SDL_INIT_TIMER;
  95. }
  96. #else
  97. if ( flags & SDL_INIT_TIMER ) {
  98. SDL_SetError("SDL not built with timer support");
  99. return(-1);
  100. }
  101. #endif
  102. #ifndef DISABLE_JOYSTICK
  103. /* Initialize the joystick subsystem */
  104. if ( (flags & SDL_INIT_JOYSTICK) &&
  105.      !(SDL_initialized & SDL_INIT_JOYSTICK) ) {
  106. if ( SDL_JoystickInit() < 0 ) {
  107. return(-1);
  108. }
  109. SDL_initialized |= SDL_INIT_JOYSTICK;
  110. }
  111. #else
  112. if ( flags & SDL_INIT_JOYSTICK ) {
  113. SDL_SetError("SDL not built with joystick support");
  114. return(-1);
  115. }
  116. #endif
  117. #ifndef DISABLE_CDROM
  118. /* Initialize the CD-ROM subsystem */
  119. if ( (flags & SDL_INIT_CDROM) && !(SDL_initialized & SDL_INIT_CDROM) ) {
  120. if ( SDL_CDROMInit() < 0 ) {
  121. return(-1);
  122. }
  123. SDL_initialized |= SDL_INIT_CDROM;
  124. }
  125. #else
  126. if ( flags & SDL_INIT_CDROM ) {
  127. SDL_SetError("SDL not built with cdrom support");
  128. return(-1);
  129. }
  130. #endif
  131. return(0);
  132. }
  133. int SDL_Init(Uint32 flags)
  134. {
  135. /* Clear the error message */
  136. SDL_ClearError();
  137. /* Initialize the desired subsystems */
  138. if ( SDL_InitSubSystem(flags) < 0 ) {
  139. return(-1);
  140. }
  141. /* Everything is initialized */
  142. if ( !(flags & SDL_INIT_NOPARACHUTE) ) {
  143. SDL_InstallParachute();
  144. }
  145. return(0);
  146. }
  147. void SDL_QuitSubSystem(Uint32 flags)
  148. {
  149. /* Shut down requested initialized subsystems */
  150. #ifndef DISABLE_CDROM
  151. if ( (flags & SDL_initialized & SDL_INIT_CDROM) ) {
  152. SDL_CDROMQuit();
  153. SDL_initialized &= ~SDL_INIT_CDROM;
  154. }
  155. #endif
  156. #ifndef DISABLE_JOYSTICK
  157. if ( (flags & SDL_initialized & SDL_INIT_JOYSTICK) ) {
  158. SDL_JoystickQuit();
  159. SDL_initialized &= ~SDL_INIT_JOYSTICK;
  160. }
  161. #endif
  162. #ifndef DISABLE_TIMERS
  163. if ( (flags & SDL_initialized & SDL_INIT_TIMER) ) {
  164. SDL_TimerQuit();
  165. SDL_initialized &= ~SDL_INIT_TIMER;
  166. }
  167. #endif
  168. #ifndef DISABLE_AUDIO
  169. if ( (flags & SDL_initialized & SDL_INIT_AUDIO) ) {
  170. SDL_AudioQuit();
  171. SDL_initialized &= ~SDL_INIT_AUDIO;
  172. }
  173. #endif
  174. #ifndef DISABLE_VIDEO
  175. if ( (flags & SDL_initialized & SDL_INIT_VIDEO) ) {
  176. SDL_VideoQuit();
  177. SDL_initialized &= ~SDL_INIT_VIDEO;
  178. }
  179. #endif
  180. }
  181. Uint32 SDL_WasInit(Uint32 flags)
  182. {
  183. if ( ! flags ) {
  184. flags = SDL_INIT_EVERYTHING;
  185. }
  186. return (SDL_initialized&flags);
  187. }
  188. void SDL_Quit(void)
  189. {
  190. /* Quit all subsystems */
  191. SDL_QuitSubSystem(SDL_INIT_EVERYTHING);
  192. #ifdef CHECK_LEAKS
  193. /* Print the number of surfaces not freed */
  194. if ( surfaces_allocated != 0 ) {
  195. fprintf(stderr, "SDL Warning: %d SDL surfaces extantn", 
  196. surfaces_allocated);
  197. }
  198. #endif
  199. /* Uninstall any parachute signal handlers */
  200. SDL_UninstallParachute();
  201. }
  202. /* Return the library version number */
  203. const SDL_version * SDL_Linked_Version(void)
  204. {
  205. return(&version);
  206. }
  207. #if defined(_WIN32_WCE)
  208. /* Need to include DllMain() on Windows CE for some reason.. */
  209. #include <windows.h>
  210. BOOL APIENTRY DllMain( HANDLE hModule, 
  211.                        DWORD  ul_reason_for_call, 
  212.                        LPVOID lpReserved )
  213. {
  214. switch (ul_reason_for_call) {
  215. case DLL_PROCESS_ATTACH:
  216. case DLL_THREAD_ATTACH:
  217. case DLL_THREAD_DETACH:
  218. case DLL_PROCESS_DETACH:
  219. break;
  220. }
  221. return TRUE;
  222. }
  223. #endif /* _WIN32_WCE */