int SDL_InitSubSystem(Uint32 flags) { #if !SDL_VIDEO_DISABLED /* Initialize the video/event subsystem */ if ((flags & SDL_INIT_VIDEO) && !(SDL_initialized & SDL_INIT_VIDEO)) { if (SDL_VideoInit(NULL) < 0) { return (-1); } SDL_initialized |= SDL_INIT_VIDEO; } #else if (flags & SDL_INIT_VIDEO) { SDL_SetError("SDL not built with video support"); return (-1); } #endif #if !SDL_AUDIO_DISABLED /* Initialize the audio subsystem */ if ((flags & SDL_INIT_AUDIO) && !(SDL_initialized & SDL_INIT_AUDIO)) { if (SDL_AudioInit(NULL) < 0) { return (-1); } SDL_initialized |= SDL_INIT_AUDIO; } #else if (flags & SDL_INIT_AUDIO) { SDL_SetError("SDL not built with audio support"); return (-1); } #endif #if !SDL_TIMERS_DISABLED /* Initialize the timer subsystem */ if (!ticks_started) { SDL_StartTicks(); ticks_started = 1; } if ((flags & SDL_INIT_TIMER) && !(SDL_initialized & SDL_INIT_TIMER)) { if (SDL_TimerInit() < 0) { return (-1); } SDL_initialized |= SDL_INIT_TIMER; } #else if (flags & SDL_INIT_TIMER) { SDL_SetError("SDL not built with timer support"); return (-1); } #endif #if !SDL_JOYSTICK_DISABLED /* Initialize the joystick subsystem */ if ((flags & SDL_INIT_JOYSTICK) && !(SDL_initialized & SDL_INIT_JOYSTICK)) { if (SDL_JoystickInit() < 0) { return (-1); } SDL_initialized |= SDL_INIT_JOYSTICK; } #else if (flags & SDL_INIT_JOYSTICK) { SDL_SetError("SDL not built with joystick support"); return (-1); } #endif #if !SDL_HAPTIC_DISABLED /* Initialize the haptic subsystem */ if ((flags & SDL_INIT_HAPTIC) && !(SDL_initialized & SDL_INIT_HAPTIC)) { if (SDL_HapticInit() < 0) { return (-1); } SDL_initialized |= SDL_INIT_HAPTIC; } #else if (flags & SDL_INIT_HAPTIC) { SDL_SetError("SDL not built with haptic (force feedback) support"); return (-1); } #endif return (0); }
int SDL_InitSubSystem(Uint32 flags) { if (!SDL_MainIsReady) { SDL_SetError("Application didn't initialize properly, did you include SDL_main.h in the file containing your main() function?"); return -1; } /* Clear the error message */ SDL_ClearError(); if ((flags & SDL_INIT_GAMECONTROLLER)) { /* game controller implies joystick */ flags |= SDL_INIT_JOYSTICK; } if ((flags & (SDL_INIT_VIDEO|SDL_INIT_JOYSTICK))) { /* video or joystick implies events */ flags |= SDL_INIT_EVENTS; } #if SDL_VIDEO_DRIVER_WINDOWS if ((flags & (SDL_INIT_HAPTIC|SDL_INIT_JOYSTICK))) { if (SDL_HelperWindowCreate() < 0) { return -1; } } #endif #if !SDL_TIMERS_DISABLED SDL_TicksInit(); #endif /* Initialize the event subsystem */ if ((flags & SDL_INIT_EVENTS)) { #if !SDL_EVENTS_DISABLED if (SDL_PrivateShouldInitSubsystem(SDL_INIT_EVENTS)) { if (SDL_StartEventLoop() < 0) { return (-1); } SDL_QuitInit(); } SDL_PrivateSubsystemRefCountIncr(SDL_INIT_EVENTS); #else return SDL_SetError("SDL not built with events support"); #endif } /* Initialize the timer subsystem */ if ((flags & SDL_INIT_TIMER)){ #if !SDL_TIMERS_DISABLED if (SDL_PrivateShouldInitSubsystem(SDL_INIT_TIMER)) { if (SDL_TimerInit() < 0) { return (-1); } } SDL_PrivateSubsystemRefCountIncr(SDL_INIT_TIMER); #else return SDL_SetError("SDL not built with timer support"); #endif } /* Initialize the video subsystem */ if ((flags & SDL_INIT_VIDEO)){ #if !SDL_VIDEO_DISABLED if (SDL_PrivateShouldInitSubsystem(SDL_INIT_VIDEO)) { if (SDL_VideoInit(NULL) < 0) { return (-1); } } SDL_PrivateSubsystemRefCountIncr(SDL_INIT_VIDEO); #else return SDL_SetError("SDL not built with video support"); #endif } /* Initialize the audio subsystem */ if ((flags & SDL_INIT_AUDIO)){ #if !SDL_AUDIO_DISABLED if (SDL_PrivateShouldInitSubsystem(SDL_INIT_AUDIO)) { if (SDL_AudioInit(NULL) < 0) { return (-1); } } SDL_PrivateSubsystemRefCountIncr(SDL_INIT_AUDIO); #else return SDL_SetError("SDL not built with audio support"); #endif } /* Initialize the joystick subsystem */ if ((flags & SDL_INIT_JOYSTICK)){ #if !SDL_JOYSTICK_DISABLED if (SDL_PrivateShouldInitSubsystem(SDL_INIT_JOYSTICK)) { if (SDL_JoystickInit() < 0) { return (-1); } } SDL_PrivateSubsystemRefCountIncr(SDL_INIT_JOYSTICK); #else return SDL_SetError("SDL not built with joystick support"); #endif } if ((flags & SDL_INIT_GAMECONTROLLER)){ #if !SDL_JOYSTICK_DISABLED if (SDL_PrivateShouldInitSubsystem(SDL_INIT_GAMECONTROLLER)) { if (SDL_GameControllerInit() < 0) { return (-1); } } SDL_PrivateSubsystemRefCountIncr(SDL_INIT_GAMECONTROLLER); #else return SDL_SetError("SDL not built with joystick support"); #endif } /* Initialize the haptic subsystem */ if ((flags & SDL_INIT_HAPTIC)){ #if !SDL_HAPTIC_DISABLED if (SDL_PrivateShouldInitSubsystem(SDL_INIT_HAPTIC)) { if (SDL_HapticInit() < 0) { return (-1); } } SDL_PrivateSubsystemRefCountIncr(SDL_INIT_HAPTIC); #else return SDL_SetError("SDL not built with haptic (force feedback) support"); #endif } return (0); }
int SDL_InitSubSystem(Uint32 flags) { #ifndef DISABLE_VIDEO /* Initialize the video/event subsystem */ if ( (flags & SDL_INIT_VIDEO) && !(SDL_initialized & SDL_INIT_VIDEO) ) { if ( SDL_VideoInit(getenv("SDL_VIDEODRIVER"), (flags&SDL_INIT_EVENTTHREAD)) < 0 ) { return(-1); } SDL_initialized |= SDL_INIT_VIDEO; } #else if ( flags & SDL_INIT_VIDEO ) { SDL_SetError("SDL not built with video support"); return(-1); } #endif #ifndef DISABLE_AUDIO /* Initialize the audio subsystem */ if ( (flags & SDL_INIT_AUDIO) && !(SDL_initialized & SDL_INIT_AUDIO) ) { if ( SDL_AudioInit(getenv("SDL_AUDIODRIVER")) < 0 ) { return(-1); } SDL_initialized |= SDL_INIT_AUDIO; } #else if ( flags & SDL_INIT_AUDIO ) { SDL_SetError("SDL not built with audio support"); return(-1); } #endif #ifndef DISABLE_TIMERS /* Initialize the timer subsystem */ if ( ! ticks_started ) { SDL_StartTicks(); ticks_started = 1; } if ( (flags & SDL_INIT_TIMER) && !(SDL_initialized & SDL_INIT_TIMER) ) { if ( SDL_TimerInit() < 0 ) { return(-1); } SDL_initialized |= SDL_INIT_TIMER; } #else if ( flags & SDL_INIT_TIMER ) { SDL_SetError("SDL not built with timer support"); return(-1); } #endif #ifndef DISABLE_JOYSTICK /* Initialize the joystick subsystem */ if ( (flags & SDL_INIT_JOYSTICK) && !(SDL_initialized & SDL_INIT_JOYSTICK) ) { if ( SDL_JoystickInit() < 0 ) { return(-1); } SDL_initialized |= SDL_INIT_JOYSTICK; } #else if ( flags & SDL_INIT_JOYSTICK ) { SDL_SetError("SDL not built with joystick support"); return(-1); } #endif #ifndef DISABLE_CDROM /* Initialize the CD-ROM subsystem */ if ( (flags & SDL_INIT_CDROM) && !(SDL_initialized & SDL_INIT_CDROM) ) { if ( SDL_CDROMInit() < 0 ) { return(-1); } SDL_initialized |= SDL_INIT_CDROM; } #else if ( flags & SDL_INIT_CDROM ) { SDL_SetError("SDL not built with cdrom support"); return(-1); } #endif return(0); }
SDL_TimerID SDL_AddTimer(Uint32 interval, SDL_TimerCallback callback, void *param) { SDL_TimerData *data = &SDL_timer_data; SDL_Timer *timer; SDL_TimerMap *entry; if (!data->active) { int status = 0; SDL_AtomicLock(&data->lock); if (!data->active) { status = SDL_TimerInit(); } SDL_AtomicUnlock(&data->lock); if (status < 0) { return 0; } } SDL_AtomicLock(&data->lock); timer = data->freelist; if (timer) { data->freelist = timer->next; } SDL_AtomicUnlock(&data->lock); if (timer) { SDL_RemoveTimer(timer->timerID); } else { timer = (SDL_Timer *)SDL_malloc(sizeof(*timer)); if (!timer) { SDL_OutOfMemory(); return 0; } } timer->timerID = SDL_AtomicIncRef(&data->nextID); timer->callback = callback; timer->param = param; timer->interval = interval; timer->scheduled = SDL_GetTicks() + interval; timer->canceled = SDL_FALSE; entry = (SDL_TimerMap *)SDL_malloc(sizeof(*entry)); if (!entry) { SDL_free(timer); SDL_OutOfMemory(); return 0; } entry->timer = timer; entry->timerID = timer->timerID; SDL_mutexP(data->timermap_lock); entry->next = data->timermap; data->timermap = entry; SDL_mutexV(data->timermap_lock); /* Add the timer to the pending list for the timer thread */ SDL_AtomicLock(&data->lock); timer->next = data->pending; data->pending = timer; SDL_AtomicUnlock(&data->lock); /* Wake up the timer thread if necessary */ SDL_SemPost(data->sem); return entry->timerID; }
int SDL_InitSubSystem(Uint32 flags) { #if !SDL_TIMERS_DISABLED if (!ticks_started) { SDL_StartTicks(); ticks_started = 1; } #endif /* Initialize the timer subsystem */ if ((flags & SDL_INIT_TIMER) ){ #if !SDL_TIMERS_DISABLED if (SDL_PrivateShouldInitSubsystem(SDL_INIT_TIMER)) { if (SDL_TimerInit() < 0) { return (-1); } } SDL_PrivateSubsystemRefCountIncr(SDL_INIT_TIMER); #else SDL_SetError("SDL not built with timer support"); return (-1); #endif } /* Initialize the video/event subsystem */ if ((flags & SDL_INIT_VIDEO) ){ #if !SDL_VIDEO_DISABLED if (SDL_PrivateShouldInitSubsystem(SDL_INIT_VIDEO)) { if (SDL_VideoInit(NULL) < 0) { return (-1); } } SDL_PrivateSubsystemRefCountIncr(SDL_INIT_VIDEO); #else SDL_SetError("SDL not built with video support"); return (-1); #endif } /* Initialize the audio subsystem */ if ((flags & SDL_INIT_AUDIO) ){ #if !SDL_AUDIO_DISABLED if (SDL_PrivateShouldInitSubsystem(SDL_INIT_AUDIO)) { if (SDL_AudioInit(NULL) < 0) { return (-1); } } SDL_PrivateSubsystemRefCountIncr(SDL_INIT_AUDIO); #else SDL_SetError("SDL not built with audio support"); return (-1); #endif } if ((flags & SDL_INIT_GAMECONTROLLER)) { // Game controller implies Joystick. flags |= SDL_INIT_JOYSTICK; } /* Initialize the joystick subsystem */ if ((flags & SDL_INIT_JOYSTICK) ){ #if !SDL_JOYSTICK_DISABLED if (SDL_PrivateShouldInitSubsystem(SDL_INIT_JOYSTICK)) { if (SDL_JoystickInit() < 0) { return (-1); } } SDL_PrivateSubsystemRefCountIncr(SDL_INIT_JOYSTICK); #else SDL_SetError("SDL not built with joystick support"); return (-1); #endif } if ((flags & SDL_INIT_GAMECONTROLLER) ){ #if !SDL_JOYSTICK_DISABLED if (SDL_PrivateShouldInitSubsystem(SDL_INIT_GAMECONTROLLER)) { if (SDL_GameControllerInit() < 0) { return (-1); } } SDL_PrivateSubsystemRefCountIncr(SDL_INIT_GAMECONTROLLER); #else SDL_SetError("SDL not built with joystick support"); return (-1); #endif } /* Initialize the haptic subsystem */ if ((flags & SDL_INIT_HAPTIC) ){ #if !SDL_HAPTIC_DISABLED if (SDL_PrivateShouldInitSubsystem(SDL_INIT_HAPTIC)) { if (SDL_HapticInit() < 0) { return (-1); } } SDL_PrivateSubsystemRefCountIncr(SDL_INIT_HAPTIC); #else SDL_SetError("SDL not built with haptic (force feedback) support"); return (-1); #endif } return (0); }