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