]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - battlestar/getcom.c
de-register
[bsdgames-darwin.git] / battlestar / getcom.c
index d6726de06708095e47529c89b9e3d6f84fd14650..85cee2e540cda9820331a672ec7f9690340ea151 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: getcom.c,v 1.3 1995/03/21 15:07:30 cgd Exp $   */
+/*     $NetBSD: getcom.c,v 1.10 2000/09/24 15:51:40 jsm Exp $  */
 
 /*
  * Copyright (c) 1983, 1993
  * SUCH DAMAGE.
  */
 
+#include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)getcom.c   8.1 (Berkeley) 5/31/93";
 #else
-static char rcsid[] = "$NetBSD: getcom.c,v 1.3 1995/03/21 15:07:30 cgd Exp $";
+__RCSID("$NetBSD: getcom.c,v 1.10 2000/09/24 15:51:40 jsm Exp $");
 #endif
-#endif /* not lint */
+#endif                         /* not lint */
 
-#include <stdio.h>
-#include <ctype.h>
+#include "extern.h"
 
-char *
+char   *
 getcom(buf, size, prompt, error)
-       char *buf;
-       int size;
-       char *prompt, *error;
+       char   *buf;
+       int     size;
+       const char   *prompt, *error;
 {
        for (;;) {
-               fputs(prompt, stdout); 
+               fputs(prompt, stdout);
                if (fgets(buf, size, stdin) == 0) {
+                       if (feof(stdin))
+                               die();
                        clearerr(stdin);
                        continue;
                }
@@ -63,6 +65,12 @@ getcom(buf, size, prompt, error)
                if (error)
                        puts(error);
        }
+       /* If we didn't get to the end of the line, don't read it in next time. */
+       if (buf[strlen(buf) - 1] != '\n') {
+               int i;
+               while ((i = getchar()) != '\n' && i != EOF)
+                       continue;
+       }
        return (buf);
 }
 
@@ -71,11 +79,14 @@ getcom(buf, size, prompt, error)
  * shifts to UPPERCASE if flag > 0, lowercase if flag < 0,
  * and leaves it unchanged if flag = 0
  */
-char *
+char   *
 getword(buf1, buf2, flag)
-       register char *buf1, *buf2;
-       register flag;
+       char   *buf1, *buf2;
+       int     flag;
 {
+       int cnt;
+
+       cnt = 1;
        while (isspace(*buf1))
                buf1++;
        if (*buf1 != ',') {
@@ -83,23 +94,34 @@ getword(buf1, buf2, flag)
                        *buf2 = 0;
                        return (0);
                }
-               while (*buf1 && !isspace(*buf1) && *buf1 != ',')
-                       if (flag < 0)
-                               if (isupper(*buf1))
+               while (cnt < WORDLEN && *buf1 && !isspace(*buf1) && *buf1 != ',')
+                       if (flag < 0) {
+                               if (isupper(*buf1)) {
                                        *buf2++ = tolower(*buf1++);
-                               else
+                                       cnt++;
+                               } else {
                                        *buf2++ = *buf1++;
-                       else if (flag > 0)
-                               if (islower(*buf1))
+                                       cnt++;
+                               }
+                       } else if (flag > 0) {
+                               if (islower(*buf1)) {
                                        *buf2++ = toupper(*buf1++);
-                               else
+                                       cnt++;
+                               } else {
                                        *buf2++ = *buf1++;
-                       else
+                                       cnt++;
+                               }
+                       } else {
                                *buf2++ = *buf1++;
+                               cnt++;
+                       }
+               if (cnt == WORDLEN)
+                       while (*buf1 && !isspace(*buf1))
+                               buf1++;
        } else
                *buf2++ = *buf1++;
-       *buf2 = 0;
+       *buf2 = '\0';
        while (isspace(*buf1))
                buf1++;
-       return (*buf1 ? buf1 : 0);
+       return (*buf1 ? buf1 : NULL);
 }