module "/pliant/language/context.pli" module "/pliant/language/compiler.pli" module "/pliant/language/unsafe.pli" constant sdl_library "libSDL.so" public # This is the OS scheduler timeslice, in milliseconds constant SDL_TIMESLICE 10 # This is the maximum resolution of the SDL timer on all platforms constant SDL_TIMER_RESOLUTION 10 # Get the number of milliseconds since the SDL library initialization. # Note that this value wraps if the program runs for more than ~49 days. function SDL_GetTicks -> msecs arg uInt msecs external sdl_library "SDL_GetTicks" # Wait a specified number of milliseconds before returning function SDL_Delay ms arg uInt ms external sdl_library "SDL_Delay" # Function prototype for the timer callback function # You have to pass ((the_function <function_name> uInt -> uInt) executable) # as this returns a pointer to the executable part of the function. # Also, you must define the callback function with the # "external_calling_convention" attribute. #typedef Uint32 (SDLCALL *SDL_TimerCallback)(Uint32 interval); # Set a callback to run after the specified number of milliseconds has # elapsed. The callback function is passed the current timer interval # and returns the next timer interval. If the returned value is the # same as the one passed in, the periodic alarm continues, otherwise a # new alarm is scheduled. If the callback returns 0, the periodic alarm # is cancelled. # # To cancel a currently running timer, call SDL_SetTimer(0, NULL); # # The timer callback function may run in a different thread than your # main code, and so shouldn't call any functions from within itself. # # The maximum resolution of this timer is 10 ms, which means that if # you request a 16 ms timer, your callback will run approximately 20 ms # later on an unloaded system. If you wanted to set a flag signaling # a frame update at 30 frames per second (every 33 ms), you might set a # timer for 30 ms: # SDL_SetTimer((33/10)*10, flag_update); # # If you use this function, you need to pass SDL_INIT_TIMER to SDL_Init(). # # Under UNIX, you should not use raise or use SIGALRM and this function # in the same program, as it is implemented using setitimer(). You also # should not use this function in multi-threaded applications as signals # to multi-threaded apps have undefined behavior in some implementations. # function SDL_SetTimer interval callback -> ret arg uInt interval ; arg Int ret arg Address callback external sdl_library "SDL_SetTimer" # New timer API, supports multiple timers # Written by Stephane Peter <megastep@lokigames.com> # # Function prototype for the new timer callback function. # The callback function is passed the current timer interval and returns # the next timer interval. If the returned value is the same as the one # passed in, the periodic alarm continues, otherwise a new alarm is # scheduled. If the callback returns 0, the periodic alarm is cancelled. # This is how you would prototype a Pliant callback: # # function myNewCallback interval param -> retcode # arg uInt intervall retcode; arg Address param # ... # # Then when adding the callback, do not simply use the callback's name. # Use instead: # # Definition of the timer ID type type SDL_TimerID packed field Address info # Add a new timer to the pool of timers already running. # Returns a timer ID, or NULL when an error occurs. # The Timer must be passed as: # ((the_function <callback_name> uInt32 Address -> uInt) executable) # function SDL_AddTimer interval callback param -> id arg uInt interval; arg SDL_TimerID id arg Address callback param external sdl_library "SDL_AddTimer"