]> code.delx.au - gnu-emacs/blobdiff - src/blockinput.h
(re_match_2_internal): Correct matching of eight bit
[gnu-emacs] / src / blockinput.h
index 6d4fde2c9b91ee68b90563f1f9b7b0e0fa364a7f..cb352231f943fc4d0713ae90ae9c25e6468f7a0d 100644 (file)
@@ -1,11 +1,12 @@
 /* blockinput.h - interface to blocking complicated interrupt-driven input.
 /* blockinput.h - interface to blocking complicated interrupt-driven input.
-   Copyright (C) 1989, 1993 Free Software Foundation, Inc.
+   Copyright (C) 1989, 1993, 2001, 2002, 2003, 2004,
+                 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
 GNU Emacs is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 
 This file is part of GNU Emacs.
 
 GNU Emacs is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
+the Free Software Foundation; either version 3, or (at your option)
 any later version.
 
 GNU Emacs is distributed in the hope that it will be useful,
 any later version.
 
 GNU Emacs is distributed in the hope that it will be useful,
@@ -15,8 +16,8 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with GNU Emacs; see the file COPYING.  If not, write to
 
 You should have received a copy of the GNU General Public License
 along with GNU Emacs; see the file COPYING.  If not, write to
-the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA.  */
 
 #ifndef EMACS_BLOCKINPUT_H
 #define EMACS_BLOCKINPUT_H
 
 #ifndef EMACS_BLOCKINPUT_H
 #define EMACS_BLOCKINPUT_H
@@ -42,13 +43,13 @@ Boston, MA 02111-1307, USA.  */
    BLOCK_INPUT and UNBLOCK_INPUT may be nested.
 
    * Any complicated interrupt handling code should test
    BLOCK_INPUT and UNBLOCK_INPUT may be nested.
 
    * Any complicated interrupt handling code should test
-   interrupt_input_blocked, and put off its work until later.  
+   interrupt_input_blocked, and put off its work until later.
 
    * If the interrupt handling code wishes, it may set
    interrupt_input_pending to a non-zero value.  If that flag is set
    when input becomes unblocked, UNBLOCK_INPUT will send a new SIGIO.  */
 
 
    * If the interrupt handling code wishes, it may set
    interrupt_input_pending to a non-zero value.  If that flag is set
    when input becomes unblocked, UNBLOCK_INPUT will send a new SIGIO.  */
 
-extern int interrupt_input_blocked;
+extern volatile int interrupt_input_blocked;
 
 /* Nonzero means an input interrupt has arrived
    during the current critical section.  */
 
 /* Nonzero means an input interrupt has arrived
    during the current critical section.  */
@@ -94,11 +95,38 @@ extern int pending_atimers;
     }                                          \
   while (0)
 
     }                                          \
   while (0)
 
-#define TOTALLY_UNBLOCK_INPUT (interrupt_input_blocked = 0)
+/* Undo any number of BLOCK_INPUT calls,
+   and also reinvoke any pending signal.  */
+
+#define TOTALLY_UNBLOCK_INPUT                  \
+  do if (interrupt_input_blocked != 0)         \
+    {                                          \
+      interrupt_input_blocked = 1;             \
+      UNBLOCK_INPUT;                           \
+    }                                          \
+  while (0)
+
+/* Undo any number of BLOCK_INPUT calls down to level LEVEL,
+   and also (if the level is now 0) reinvoke any pending signal.  */
+
+#define UNBLOCK_INPUT_TO(LEVEL)                                \
+  do                                                   \
+    {                                                  \
+      interrupt_input_blocked = (LEVEL) + 1;           \
+      UNBLOCK_INPUT;                                   \
+    }                                                  \
+  while (0)
+
 #define UNBLOCK_INPUT_RESIGNAL UNBLOCK_INPUT
 
 #define UNBLOCK_INPUT_RESIGNAL UNBLOCK_INPUT
 
+/* In critical section ? */
+#define INPUT_BLOCKED_P (interrupt_input_blocked > 0)
+
 /* Defined in keyboard.c */
 /* Don't use a prototype here; it causes trouble in some files.  */
 extern void reinvoke_input_signal ();
 
 #endif /* EMACS_BLOCKINPUT_H */
 /* Defined in keyboard.c */
 /* Don't use a prototype here; it causes trouble in some files.  */
 extern void reinvoke_input_signal ();
 
 #endif /* EMACS_BLOCKINPUT_H */
+
+/* arch-tag: 51a9ec86-945a-4966-8f04-2d1341250e03
+   (do not change this comment) */