blob: ee14ecaf1eaab3995e08cafa5b985a472a04bbf6 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001/***********************************************************
2Copyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The
3Netherlands.
4
5 All Rights Reserved
6
7Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
9provided that the above copyright notice appear in all copies and that
10both that copyright notice and this permission notice appear in
11supporting documentation, and that the names of Stichting Mathematisch
12Centrum or CWI not be used in advertising or publicity pertaining to
13distribution of the software without specific, written prior permission.
14
15STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
16THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
17FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
18FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
21OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22
23******************************************************************/
24
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000025/* Check for interrupts */
26
Guido van Rossumd6a15ad1991-06-24 22:30:42 +000027#ifdef THINK_C
28#define macintosh
29#endif
30
31
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000032#ifdef MSDOS
33
Guido van Rossum3f5da241990-12-20 15:06:42 +000034/* This might work for MS-DOS (untested though): */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000035
36void
37initintr()
38{
39}
40
41int
42intrcheck()
43{
44 int interrupted = 0;
45 while (kbhit()) {
46 if (getch() == '\003')
47 interrupted = 1;
48 }
49 return interrupted;
50}
51
52#define OK
53
54#endif
55
56
Guido van Rossumd6a15ad1991-06-24 22:30:42 +000057#ifdef macintosh
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000058
Guido van Rossumd6a15ad1991-06-24 22:30:42 +000059#ifdef THINK_C
Guido van Rossum875eb7d1991-01-16 14:04:51 +000060/* This is for THINK C 4.0.
61 For 3.0, you may have to remove the signal stuff. */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000062#include <MacHeaders>
Guido van Rossumd6a15ad1991-06-24 22:30:42 +000063#else
64/* This is for MPW 3.1 */
65/* XXX Untested */
66#include <OSEvents.h>
67#include <SysEqu.h>
68#endif
69
Guido van Rossum875eb7d1991-01-16 14:04:51 +000070#include <signal.h>
71#include "sigtype.h"
72
73static int interrupted;
74
75static SIGTYPE
Guido van Rossumd6a15ad1991-06-24 22:30:42 +000076intcatcher(ig)
Guido van Rossum875eb7d1991-01-16 14:04:51 +000077 int sig;
78{
79 interrupted = 1;
80 signal(SIGINT, intcatcher);
81}
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000082
83void
84initintr()
85{
Guido van Rossum875eb7d1991-01-16 14:04:51 +000086 if (signal(SIGINT, SIG_IGN) != SIG_IGN)
87 signal(SIGINT, intcatcher);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000088}
89
90int
91intrcheck()
92{
Guido van Rossum875eb7d1991-01-16 14:04:51 +000093 register EvQElPtr q;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000094
Guido van Rossumd6a15ad1991-06-24 22:30:42 +000095 /* This is like THINK C 4.0's <console.h> */
96 /* q = (EvQElPtr) EventQueue.qHead; */
97 q = (EvQElPtr) GetEvQHdr()->qHead;
98
99 for (; q; q = (EvQElPtr)q->qLink) {
Guido van Rossum875eb7d1991-01-16 14:04:51 +0000100 if (q->evtQWhat == keyDown &&
101 (char)q->evtQMessage == '.' &&
102 (q->evtQModifiers & cmdKey) != 0) {
Guido van Rossumd6a15ad1991-06-24 22:30:42 +0000103 FlushEvents(keyDownMask, 0);
Guido van Rossum875eb7d1991-01-16 14:04:51 +0000104 interrupted = 1;
105 break;
106 }
107 }
108 if (interrupted) {
109 interrupted = 0;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000110 return 1;
111 }
112 return 0;
113}
114
115#define OK
116
Guido van Rossumd6a15ad1991-06-24 22:30:42 +0000117#endif /* macintosh */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000118
119
120#ifndef OK
121
Guido van Rossum3f5da241990-12-20 15:06:42 +0000122/* Default version -- for real operating systems and for Standard C */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000123
124#include <stdio.h>
125#include <signal.h>
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000126#include "sigtype.h"
127
128static int interrupted;
129
130static SIGTYPE
131intcatcher(sig)
132 int sig;
133{
134 interrupted = 1;
135 signal(SIGINT, intcatcher);
136}
137
138void
139initintr()
140{
141 if (signal(SIGINT, SIG_IGN) != SIG_IGN)
142 signal(SIGINT, intcatcher);
143}
144
145int
146intrcheck()
147{
148 if (!interrupted)
149 return 0;
150 interrupted = 0;
151 return 1;
152}
153
154#endif /* !OK */