summaryrefslogtreecommitdiffstats
path: root/RISCOS/sleep.c
diff options
context:
space:
mode:
Diffstat (limited to 'RISCOS/sleep.c')
-rw-r--r--RISCOS/sleep.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/RISCOS/sleep.c b/RISCOS/sleep.c
new file mode 100644
index 0000000..0aeba55
--- /dev/null
+++ b/RISCOS/sleep.c
@@ -0,0 +1,41 @@
+#include "osmodule.h"
+#include <stdio.h>
+#include "kernel.h"
+#include <limits.h>
+#include <errno.h>
+#include "taskwindow.h"
+#include "Python.h"
+
+
+int sleep(double delay)
+{
+ os_t starttime, endtime, time; /* monotonic times (centiseconds) */
+ int *pollword, ret;
+ bool claimed;
+
+ /* calculate end time */
+ starttime = os_read_monotonic_time();
+ if (starttime + 100.0*delay >INT_MAX)
+ endtime = INT_MAX;
+ else
+ endtime = (os_t)(starttime + 100.0*delay);
+
+ /* allocate (in RMA) and set pollword for xupcall_sleep */
+ pollword = osmodule_alloc(4);
+ *pollword = 1;
+
+ time = starttime;
+ ret = 0;
+ while ( time<endtime && time>=starttime ) {
+ xupcall_sleep (pollword, &claimed);
+ if (PyErr_CheckSignals()) {
+ ret = 1;
+ break;
+ }
+ time = os_read_monotonic_time();
+ }
+
+ /* deallocate pollword */
+ osmodule_free(pollword);
+ return ret;
+}