blob: 267931857c62442d2072e71881ba2ee88170af6c [file] [log] [blame]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001/* Check for interrupts */
2
3#ifdef MSDOS
4
Guido van Rossum3f5da241990-12-20 15:06:42 +00005/* This might work for MS-DOS (untested though): */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00006
7void
8initintr()
9{
10}
11
12int
13intrcheck()
14{
15 int interrupted = 0;
16 while (kbhit()) {
17 if (getch() == '\003')
18 interrupted = 1;
19 }
20 return interrupted;
21}
22
23#define OK
24
25#endif
26
27
28#ifdef THINK_C
29
Guido van Rossum875eb7d1991-01-16 14:04:51 +000030/* This is for THINK C 4.0.
31 For 3.0, you may have to remove the signal stuff. */
32
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000033#include <MacHeaders>
Guido van Rossum875eb7d1991-01-16 14:04:51 +000034#include <signal.h>
35#include "sigtype.h"
36
37static int interrupted;
38
39static SIGTYPE
40intcatcher(sig)
41 int sig;
42{
43 interrupted = 1;
44 signal(SIGINT, intcatcher);
45}
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000046
47void
48initintr()
49{
Guido van Rossum875eb7d1991-01-16 14:04:51 +000050 if (signal(SIGINT, SIG_IGN) != SIG_IGN)
51 signal(SIGINT, intcatcher);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000052}
53
54int
55intrcheck()
56{
Guido van Rossum875eb7d1991-01-16 14:04:51 +000057 register EvQElPtr q;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000058
Guido van Rossum875eb7d1991-01-16 14:04:51 +000059 /* This is like THINK C 4.0's <console.h>.
60 I'm not sure why FlushEvents must be called from asm{}. */
61 for (q = (EvQElPtr)EventQueue.qHead; q; q = (EvQElPtr)q->qLink) {
62 if (q->evtQWhat == keyDown &&
63 (char)q->evtQMessage == '.' &&
64 (q->evtQModifiers & cmdKey) != 0) {
65
66 asm {
67 moveq #keyDownMask,d0
68 _FlushEvents
69 }
70 interrupted = 1;
71 break;
72 }
73 }
74 if (interrupted) {
75 interrupted = 0;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000076 return 1;
77 }
78 return 0;
79}
80
81#define OK
82
83#endif /* THINK_C */
84
85
86#ifndef OK
87
Guido van Rossum3f5da241990-12-20 15:06:42 +000088/* Default version -- for real operating systems and for Standard C */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000089
90#include <stdio.h>
91#include <signal.h>
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000092#include "sigtype.h"
93
94static int interrupted;
95
96static SIGTYPE
97intcatcher(sig)
98 int sig;
99{
100 interrupted = 1;
101 signal(SIGINT, intcatcher);
102}
103
104void
105initintr()
106{
107 if (signal(SIGINT, SIG_IGN) != SIG_IGN)
108 signal(SIGINT, intcatcher);
109}
110
111int
112intrcheck()
113{
114 if (!interrupted)
115 return 0;
116 interrupted = 0;
117 return 1;
118}
119
120#endif /* !OK */