Mercurial > sdl-ios-xcode
diff src/timer/unix/SDL_systimer.c @ 1662:782fd950bd46 SDL-1.3
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
WARNING: None of the video drivers have been updated for the new API yet! The API is still under design and very fluid.
The code is now run through a consistent indent format:
indent -i4 -nut -nsc -br -ce
The headers are being converted to automatically generate doxygen documentation.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 28 May 2006 13:04:16 +0000 |
parents | 92947e3a18db |
children | 4da1ee79c9af |
line wrap: on
line diff
--- a/src/timer/unix/SDL_systimer.c Sun May 21 17:27:13 2006 +0000 +++ b/src/timer/unix/SDL_systimer.c Sun May 28 13:04:16 2006 +0000 @@ -58,132 +58,145 @@ #endif /* HAVE_CLOCK_GETTIME */ -void SDL_StartTicks(void) +void +SDL_StartTicks (void) { - /* Set first ticks value */ + /* Set first ticks value */ #if HAVE_CLOCK_GETTIME - clock_gettime(CLOCK_MONOTONIC,&start); + clock_gettime (CLOCK_MONOTONIC, &start); #else - gettimeofday(&start, NULL); + gettimeofday (&start, NULL); #endif } -Uint32 SDL_GetTicks (void) +Uint32 +SDL_GetTicks (void) { #if HAVE_CLOCK_GETTIME - Uint32 ticks; - struct timespec now; - clock_gettime(CLOCK_MONOTONIC,&now); - ticks=(now.tv_sec-start.tv_sec)*1000+(now.tv_nsec-start.tv_nsec)/1000000; - return(ticks); + Uint32 ticks; + struct timespec now; + clock_gettime (CLOCK_MONOTONIC, &now); + ticks = + (now.tv_sec - start.tv_sec) * 1000 + (now.tv_nsec - + start.tv_nsec) / 1000000; + return (ticks); #else - Uint32 ticks; - struct timeval now; - gettimeofday(&now, NULL); - ticks=(now.tv_sec-start.tv_sec)*1000+(now.tv_usec-start.tv_usec)/1000; - return(ticks); + Uint32 ticks; + struct timeval now; + gettimeofday (&now, NULL); + ticks = + (now.tv_sec - start.tv_sec) * 1000 + (now.tv_usec - + start.tv_usec) / 1000; + return (ticks); #endif } -void SDL_Delay (Uint32 ms) +void +SDL_Delay (Uint32 ms) { #if SDL_THREAD_PTH - pth_time_t tv; - tv.tv_sec = ms/1000; - tv.tv_usec = (ms%1000)*1000; - pth_nap(tv); + pth_time_t tv; + tv.tv_sec = ms / 1000; + tv.tv_usec = (ms % 1000) * 1000; + pth_nap (tv); #else - int was_error; + int was_error; #if HAVE_NANOSLEEP - struct timespec elapsed, tv; + struct timespec elapsed, tv; #else - struct timeval tv; - Uint32 then, now, elapsed; + struct timeval tv; + Uint32 then, now, elapsed; #endif - /* Set the timeout interval */ + /* Set the timeout interval */ #if HAVE_NANOSLEEP - elapsed.tv_sec = ms/1000; - elapsed.tv_nsec = (ms%1000)*1000000; + elapsed.tv_sec = ms / 1000; + elapsed.tv_nsec = (ms % 1000) * 1000000; #else - then = SDL_GetTicks(); + then = SDL_GetTicks (); #endif - do { - errno = 0; + do { + errno = 0; #if HAVE_NANOSLEEP - tv.tv_sec = elapsed.tv_sec; - tv.tv_nsec = elapsed.tv_nsec; - was_error = nanosleep(&tv, &elapsed); + tv.tv_sec = elapsed.tv_sec; + tv.tv_nsec = elapsed.tv_nsec; + was_error = nanosleep (&tv, &elapsed); #else - /* Calculate the time interval left (in case of interrupt) */ - now = SDL_GetTicks(); - elapsed = (now-then); - then = now; - if ( elapsed >= ms ) { - break; - } - ms -= elapsed; - tv.tv_sec = ms/1000; - tv.tv_usec = (ms%1000)*1000; + /* Calculate the time interval left (in case of interrupt) */ + now = SDL_GetTicks (); + elapsed = (now - then); + then = now; + if (elapsed >= ms) { + break; + } + ms -= elapsed; + tv.tv_sec = ms / 1000; + tv.tv_usec = (ms % 1000) * 1000; - was_error = select(0, NULL, NULL, NULL, &tv); + was_error = select (0, NULL, NULL, NULL, &tv); #endif /* HAVE_NANOSLEEP */ - } while ( was_error && (errno == EINTR) ); + } + while (was_error && (errno == EINTR)); #endif /* SDL_THREAD_PTH */ } #ifdef USE_ITIMER -static void HandleAlarm(int sig) +static void +HandleAlarm (int sig) { - Uint32 ms; + Uint32 ms; + + if (SDL_alarm_callback) { + ms = (*SDL_alarm_callback) (SDL_alarm_interval); + if (ms != SDL_alarm_interval) { + SDL_SetTimer (ms, SDL_alarm_callback); + } + } +} - if ( SDL_alarm_callback ) { - ms = (*SDL_alarm_callback)(SDL_alarm_interval); - if ( ms != SDL_alarm_interval ) { - SDL_SetTimer(ms, SDL_alarm_callback); - } - } +int +SDL_SYS_TimerInit (void) +{ + struct sigaction action; + + /* Set the alarm handler (Linux specific) */ + SDL_memset (&action, 0, sizeof (action)); + action.sa_handler = HandleAlarm; + action.sa_flags = SA_RESTART; + sigemptyset (&action.sa_mask); + sigaction (SIGALRM, &action, NULL); + return (0); } -int SDL_SYS_TimerInit(void) +void +SDL_SYS_TimerQuit (void) { - struct sigaction action; - - /* Set the alarm handler (Linux specific) */ - SDL_memset(&action, 0, sizeof(action)); - action.sa_handler = HandleAlarm; - action.sa_flags = SA_RESTART; - sigemptyset(&action.sa_mask); - sigaction(SIGALRM, &action, NULL); - return(0); -} - -void SDL_SYS_TimerQuit(void) -{ - SDL_SetTimer(0, NULL); + SDL_SetTimer (0, NULL); } -int SDL_SYS_StartTimer(void) +int +SDL_SYS_StartTimer (void) { - struct itimerval timer; + struct itimerval timer; - timer.it_value.tv_sec = (SDL_alarm_interval/1000); - timer.it_value.tv_usec = (SDL_alarm_interval%1000)*1000; - timer.it_interval.tv_sec = (SDL_alarm_interval/1000); - timer.it_interval.tv_usec = (SDL_alarm_interval%1000)*1000; - setitimer(ITIMER_REAL, &timer, NULL); - return(0); + timer.it_value.tv_sec = (SDL_alarm_interval / 1000); + timer.it_value.tv_usec = (SDL_alarm_interval % 1000) * 1000; + timer.it_interval.tv_sec = (SDL_alarm_interval / 1000); + timer.it_interval.tv_usec = (SDL_alarm_interval % 1000) * 1000; + setitimer (ITIMER_REAL, &timer, NULL); + return (0); } -void SDL_SYS_StopTimer(void) +void +SDL_SYS_StopTimer (void) { - struct itimerval timer; + struct itimerval timer; - SDL_memset(&timer, 0, (sizeof timer)); - setitimer(ITIMER_REAL, &timer, NULL); + SDL_memset (&timer, 0, (sizeof timer)); + setitimer (ITIMER_REAL, &timer, NULL); } #else /* USE_ITIMER */ @@ -194,47 +207,53 @@ static int timer_alive = 0; static SDL_Thread *timer = NULL; -static int RunTimer(void *unused) +static int +RunTimer (void *unused) { - while ( timer_alive ) { - if ( SDL_timer_running ) { - SDL_ThreadedTimerCheck(); - } - SDL_Delay(1); - } - return(0); + while (timer_alive) { + if (SDL_timer_running) { + SDL_ThreadedTimerCheck (); + } + SDL_Delay (1); + } + return (0); } /* This is only called if the event thread is not running */ -int SDL_SYS_TimerInit(void) +int +SDL_SYS_TimerInit (void) { - timer_alive = 1; - timer = SDL_CreateThread(RunTimer, NULL); - if ( timer == NULL ) - return(-1); - return(SDL_SetTimerThreaded(1)); + timer_alive = 1; + timer = SDL_CreateThread (RunTimer, NULL); + if (timer == NULL) + return (-1); + return (SDL_SetTimerThreaded (1)); } -void SDL_SYS_TimerQuit(void) +void +SDL_SYS_TimerQuit (void) { - timer_alive = 0; - if ( timer ) { - SDL_WaitThread(timer, NULL); - timer = NULL; - } + timer_alive = 0; + if (timer) { + SDL_WaitThread (timer, NULL); + timer = NULL; + } } -int SDL_SYS_StartTimer(void) +int +SDL_SYS_StartTimer (void) { - SDL_SetError("Internal logic error: Linux uses threaded timer"); - return(-1); + SDL_SetError ("Internal logic error: Linux uses threaded timer"); + return (-1); } -void SDL_SYS_StopTimer(void) +void +SDL_SYS_StopTimer (void) { - return; + return; } #endif /* USE_ITIMER */ #endif /* SDL_TIMER_UNIX */ +/* vi: set ts=4 sw=4 expandtab: */