1 /* 2 * Part of Scheme 48 1.9. See file COPYING for notices and license. 3 * 4 * Authors: Richard Kelsey, Jonathan Rees, Mike Sperber 5 */ 6 7 /* must be synchronized with EVENTS enumeration in ps-channel.scm and s48-channel.scm */ 8 enum event_enum { KEYBOARD_INTERRUPT_EVENT, IO_COMPLETION_EVENT, IO_ERROR_EVENT, 9 ALARM_EVENT, OS_SIGNAL_EVENT, ERROR_EVENT, EXTERNAL_EVENT, NO_EVENT }; 10 11 S48_EXTERN psbool s48_add_pending_fd(int fd, psbool is_input); 12 S48_EXTERN psbool s48_remove_fd(int fd); 13 14 S48_EXTERN long s48_schedule_alarm_interrupt(long delta); 15 S48_EXTERN void s48_start_alarm_interrupts(void); 16 S48_EXTERN void s48_stop_alarm_interrupts(void); 17 18 #ifndef _WIN32 19 S48_EXTERN void s48_add_os_signal(long); 20 S48_EXTERN void s48_when_keyboard_interrupt(int ign); 21 S48_EXTERN void s48_when_alarm_interrupt(int ign); 22 S48_EXTERN void s48_when_external_event_interrupt(int ign); 23 #endif 24 25 extern long s48_run_time(long *mseconds); 26 extern long s48_real_time(long *mseconds); 27 extern int s48_wait_for_event(long max_wait, psbool is_minutes); 28 extern int s48_get_next_event(long *ready_fd, long *status); 29 extern long s48_dequeue_external_event(char *pendingp); 30 31 /* these are here only for the CHEAP_TIME() macro */ 32 #define TICKS_PER_SECOND 1000 /* clock resolution */ 33 #define POLLS_PER_SECOND 20 /* how often we poll */ 34 #define TICKS_PER_POLL (TICKS_PER_SECOND / POLLS_PER_SECOND) 35 36 extern long s48_current_time; 37 #define CHEAP_TIME() (s48_current_time * TICKS_PER_POLL) 38 39 #ifndef _WIN32 40 S48_EXTERN char s48_Spending_interruptPS; 41 S48_EXTERN char s48_Spending_eventsPS; 42 S48_EXTERN char *s48_Sstack_limitS; 43 #endif 44 45 /* 46 * Fix (HCC) NOTE_EVENT so that it will act like a single 47 * statement. 48 */ 49 #define NOTE_EVENT \ 50 do { \ 51 s48_Spending_eventsPS = 1; \ 52 s48_Sstack_limitS = (((char *) -1)); \ 53 } while (0) 54 55 /* 56 * For Unix. 57 */ 58 #ifdef SIGUSR1 59 #define SIG_EXTERNAL_EVENT SIGUSR1 60 #endif 61