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