Home | History | Annotate | Download | only in RISCOS
      1 #include "oslib/osmodule.h"
      2 #include <stdio.h>
      3 #include "kernel.h"
      4 #include <limits.h>
      5 #include <errno.h>
      6 #include "oslib/taskwindow.h"
      7 #include "Python.h"
      8 
      9 
     10 int riscos_sleep(double delay)
     11 {
     12     os_t starttime, endtime, time; /* monotonic times (centiseconds) */
     13     int *pollword, ret;
     14     osbool claimed;
     15 
     16     /* calculate end time */
     17     starttime = os_read_monotonic_time();
     18     if (starttime + 100.0*delay >INT_MAX)
     19         endtime = INT_MAX;
     20     else
     21         endtime = (os_t)(starttime + 100.0*delay);
     22 
     23     /* allocate (in RMA) and set pollword for xupcall_sleep */
     24     pollword = osmodule_alloc(4);
     25     *pollword = 1;
     26 
     27     time = starttime;
     28     ret = 0;
     29     while ( time<endtime && time>=starttime ) {
     30         xupcall_sleep (pollword, &claimed);
     31         if (PyErr_CheckSignals()) {
     32             ret = 1;
     33             break;
     34         }
     35         time = os_read_monotonic_time();
     36     }
     37 
     38     /* deallocate pollword */
     39     osmodule_free(pollword);
     40     return ret;
     41 }
     42