Index: trunk/Ohana/src/opihi/lib.shell/interrupt.c
===================================================================
--- trunk/Ohana/src/opihi/lib.shell/interrupt.c	(revision 27611)
+++ trunk/Ohana/src/opihi/lib.shell/interrupt.c	(revision 39457)
@@ -7,9 +7,10 @@
 
 void handle_interrupt (int input) {
+  OHANA_UNUSED_PARAM(input);
   
   char string[64];
   int Nask;
 
-  signal (SIGINT, SIG_IGN);
+  // signal (SIGINT, SIG_IGN);
 
   Nask = 0;
@@ -31,5 +32,5 @@
     if ((string[0] == 'y') || (string[0] == 'Y')) {
       interrupt = FALSE;
-      signal (SIGINT, handle_interrupt);
+      // signal (SIGINT, handle_interrupt);
       Nint = 0;
       return;
@@ -38,5 +39,5 @@
     if ((string[0] == 'n') || (string[0] == 'N')) {
       interrupt = TRUE;
-      signal (SIGINT, handle_interrupt);
+      // signal (SIGINT, handle_interrupt);
       Nint = 0;
       return;
@@ -45,5 +46,5 @@
     if (Nask > 3) {
       interrupt = TRUE;
-      signal (SIGINT, handle_interrupt);
+      // signal (SIGINT, handle_interrupt);
       Nint = 0;
       return;
@@ -52,2 +53,41 @@
 
 }
+
+struct sigaction *SetInterrupt () {
+
+  struct sigaction  new_sigaction;
+  struct sigaction *old_sigaction;
+
+  ALLOCATE (old_sigaction, struct sigaction, 1);
+
+  new_sigaction.sa_handler = handle_interrupt;
+  new_sigaction.sa_flags = 0;
+
+  int sigstat = sigaction (SIGINT, &new_sigaction, old_sigaction);
+  if (sigstat) {
+    perror ("failed to set signal handler: ");
+    free (old_sigaction);
+    return NULL;
+  }
+
+  interrupt = FALSE;
+  return old_sigaction;
+}
+
+int ClearInterrupt (struct sigaction *old_sigaction) {
+
+  // interrupt = FALSE;
+
+  if (!old_sigaction) return TRUE;
+
+  struct sigaction new_sigaction;
+
+  if (sigaction (SIGINT, old_sigaction, &new_sigaction)) {
+    perror ("failed to reset signal handler: ");
+    FREE (old_sigaction);
+    return FALSE;
+  }
+  FREE (old_sigaction);
+
+  return TRUE;
+}
