1 /* 2 * UAE - The Un*x Amiga Emulator 3 * 4 * Wrapper for platform-specific sleep routine 5 * 6 * Copyright 2003-2005 Richard Drummond 7 */ 8 9 #ifndef UAE_OD_FS_SLEEP_H 10 #define UAE_OD_FS_SLEEP_H 11 12 #ifdef __BEOS__ 13 # include <be/kernel/OS.h> 14 #else 15 # ifdef TARGET_AMIGAOS 16 # include <proto/dos.h> 17 # include <clib/alib_protos.h> 18 # else 19 # ifdef USE_SDL 20 # include <SDL_timer.h> 21 # endif 22 # endif 23 #endif 24 25 #define ONE_THOUSAND 1000 26 #define ONE_MILLION (1000 * 1000) 27 28 /* 29 * void msleep (int ms) 30 * 31 * Sleep for ms milliseconds using an appropriate system-dependent sleep 32 * functions. 33 */ 34 # if 0 35 #ifdef __BEOS__ 36 # define uae_msleep(msecs) snooze (msecs * ONE_THOUSAND) 37 #else 38 # if 0 //defined _WIN32 39 # define uae_msleep(msecs) Sleep (msecs) 40 # else 41 # if defined TARGET_AMIGAOS 42 # if defined __amigaos4__ || defined __MORPHOS__ 43 # define uae_msleep(msecs) TimeDelay (0, msecs / ONE_THOUSAND, (msecs % ONE_THOUSAND) * ONE_THOUSAND) 44 # else 45 # define uae_msleep(msecs) Delay (msecs <= 20 ? 1 : msecs/20); 46 # endif 47 # else 48 # ifdef HAVE_NANOSLEEP 49 # define uae_msleep(msecs) \ 50 { \ 51 if (msecs < 1000) { \ 52 struct timespec t = { 0, (msecs) * ONE_MILLION }; \ 53 nanosleep (&t, 0); \ 54 } else { \ 55 int secs = msecs / ONE_THOUSAND; \ 56 int millisecs = msecs % ONE_THOUSAND; \ 57 struct timespec t = { secs, millisecs * ONE_MILLION }; \ 58 nanosleep (&t, 0); \ 59 } \ 60 } 61 # else 62 # ifdef HAVE_USLEEP 63 # define uae_msleep(msecs) usleep (msecs * ONE_THOUSAND) 64 # else 65 # ifdef USE_SDL 66 # define uae_msleep(msecs) SDL_Delay (msecs) 67 # else 68 # error "No system sleep function found" 69 # endif 70 # endif 71 # endif 72 # endif 73 # endif 74 #endif 75 #endif 76 void sleep_test (void); 77 78 #endif // UAE_OD_FS_SLEEP_H 79