Factor trim format function out
[mmh] / sbr / getans.c
index 80eeb71..f3cea27 100644 (file)
@@ -1,79 +1,77 @@
-
 /*
- * getans.c -- get an answer from the user and return a string array
- *
- * $Id$
- *
- * This code is Copyright (c) 2002, by the authors of nmh.  See the
- * COPYRIGHT file in the root directory of the nmh distribution for
- * complete copyright information.
- */
+** getans.c -- get an answer from the user and return a string array
+**
+** This code is Copyright (c) 2002, by the authors of nmh.  See the
+** COPYRIGHT file in the root directory of the nmh distribution for
+** complete copyright information.
+*/
 
 #include <h/mh.h>
 #include <h/signals.h>
 #include <setjmp.h>
 #include <signal.h>
+#include <unistd.h>
 
 static char ansbuf[BUFSIZ];
 static jmp_buf sigenv;
 
 /*
- * static prototypes
- */
-static RETSIGTYPE intrser (int);
+** static prototypes
+*/
+static void intrser(int);
 
 
 char **
-getans (char *prompt, struct swit *ansp)
+getans(char *prompt, struct swit *ansp)
 {
-    int i;
-    SIGNAL_HANDLER istat;
-    char *cp, **cpp;
-
-    if (!(setjmp (sigenv))) {
-       istat = SIGNAL (SIGINT, intrser);
-    } else {
-       SIGNAL (SIGINT, istat);
-       return NULL;
-    }
+       int i;
+       SIGNAL_HANDLER istat = NULL;
+       char *cp, **cpp;
 
-    for (;;) {
-       printf ("%s", prompt);
-       fflush (stdout);
-       cp = ansbuf;
-       while ((i = getchar ()) != '\n') {
-           if (i == EOF)
-               longjmp (sigenv, 1);
-           if (cp < &ansbuf[sizeof ansbuf - 1])
-               *cp++ = i;
+       if (!(setjmp(sigenv))) {
+               istat = SIGNAL(SIGINT, intrser);
+       } else {
+               SIGNAL(SIGINT, istat);
+               return NULL;
        }
-       *cp = '\0';
-       if (ansbuf[0] == '?' || cp == ansbuf) {
-           printf ("Options are:\n");
-           print_sw (ALL, ansp, "");
-           continue;
-       }
-       cpp = brkstring (ansbuf, " ", NULL);
-       switch (smatch (*cpp, ansp)) {
-           case AMBIGSW: 
-               ambigsw (*cpp, ansp);
-               continue;
-           case UNKWNSW: 
-               printf (" -%s unknown. Hit <CR> for help.\n", *cpp);
-               continue;
-           default: 
-               SIGNAL (SIGINT, istat);
-               return cpp;
+
+       for (;;) {
+               printf("%s", prompt);
+               fflush(stdout);
+               cp = ansbuf;
+               while ((i = getchar()) != '\n') {
+                       if (i == EOF)
+                               longjmp(sigenv, 1);
+                       if (cp < &ansbuf[sizeof ansbuf - 1])
+                               *cp++ = i;
+               }
+               *cp = '\0';
+               if (ansbuf[0] == '?' || cp == ansbuf) {
+                       printf("Options are:\n");
+                       print_sw(ALL, ansp, "", stdout);
+                       continue;
+               }
+               cpp = brkstring(ansbuf, " ", NULL);
+               switch (smatch(*cpp, ansp)) {
+               case AMBIGSW:
+                       ambigsw(*cpp, ansp);
+                       continue;
+               case UNKWNSW:
+                       printf(" -%s unknown. Hit <CR> for help.\n", *cpp);
+                       continue;
+               default:
+                       SIGNAL(SIGINT, istat);
+                       return cpp;
+               }
        }
-    }
 }
 
 
-static RETSIGTYPE
-intrser (int i)
+static void
+intrser(int i)
 {
-    /*
-     * should this be siglongjmp?
-     */
-    longjmp (sigenv, 1);
+       /*
+       ** should this be siglongjmp?
+       */
+       close(STDIN_FILENO);
 }