]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - trek/getpar.c
grammar fix
[bsdgames-darwin.git] / trek / getpar.c
index 701420133ee9590fb9ab62adbc73ca23ec38b710..4a271d326106ac2eb83669500f20ef3e89217d41 100644 (file)
@@ -1,6 +1,8 @@
+/*     $NetBSD: getpar.c,v 1.18 2009/08/12 08:54:54 dholland Exp $     */
+
 /*
- * Copyright (c) 1980 Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1980, 1993
+ *     The Regents of the University of California.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
  * SUCH DAMAGE.
  */
 
+#include <sys/cdefs.h>
 #ifndef lint
-static char sccsid[] = "@(#)getpar.c   4.8 (Berkeley) 6/1/90";
+#if 0
+static char sccsid[] = "@(#)getpar.c   8.1 (Berkeley) 5/31/93";
+#else
+__RCSID("$NetBSD: getpar.c,v 1.18 2009/08/12 08:54:54 dholland Exp $");
+#endif
 #endif /* not lint */
 
-# include      <stdio.h>
-# include      "getpar.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "getpar.h"
+#include "trek.h"
+
+static int testterm(void);
 
 /**
  **    get integer parameter
  **/
 
-getintpar(s)
-char   *s;
+int
+getintpar(const char *s)
 {
-       register int    i;
+       int     i;
        int             n;
 
-       while (1)
-       {
+       while (1) {
                if (testnl() && s)
                        printf("%s: ", s);
                i = scanf("%d", &n);
@@ -66,14 +73,13 @@ char        *s;
  **    get floating parameter
  **/
 
-double getfltpar(s)
-char   *s;
+double
+getfltpar(const char *s)
 {
-       register int            i;
+       int             i;
        double                  d;
 
-       while (1)
-       {
+       while (1) {
                if (testnl() && s)
                        printf("%s: ", s);
                i = scanf("%lf", &d);
@@ -90,20 +96,19 @@ char        *s;
  **    get yes/no parameter
  **/
 
-struct cvntab  Yntab[] =
-{
-       "y",    "es",   (int (*)())1,   0,
-       "n",    "o",    (int (*)())0,   0,
-       0
+static const struct cvntab Yntab[] = {
+       { "y",  "es",   (cmdfun)1,      1 },
+       { "n",  "o",    (cmdfun)0,      0 },
+       { NULL, NULL,   NULL,           0 }
 };
 
-getynpar(s)
-char   *s;
+int
+getynpar(const char *s)
 {
-       struct cvntab           *r;
+       const struct cvntab     *r;
 
        r = getcodpar(s, Yntab);
-       return ((int) r->value);
+       return r->value2;
 }
 
 
@@ -111,39 +116,38 @@ char      *s;
  **    get coded parameter
  **/
 
-struct cvntab *getcodpar(s, tab)
-char           *s;
-struct cvntab  tab[];
+const struct cvntab *
+getcodpar(const char *s, const struct cvntab tab[])
 {
        char                            input[100];
-       register struct cvntab          *r;
+       const struct cvntab             *r;
        int                             flag;
-       register char                   *p, *q;
+       const char                      *p, *q;
        int                             c;
        int                             f;
 
        flag = 0;
-       while (1)
-       {
+       while (1) {
                flag |= (f = testnl());
                if (flag)
                        printf("%s: ", s);
-               if (f)
-                       cgetc(0);               /* throw out the newline */
+               if (f) {
+                       /* throw out the newline */
+                       getchar();
+               }
                scanf("%*[ \t;]");
-               if ((c = scanf("%[^ \t;\n]", input)) < 0)
+               if ((c = scanf("%99[^ \t;\n]", input)) < 0)
                        exit(1);
                if (c == 0)
                        continue;
                flag = 1;
 
                /* if command list, print four per line */
-               if (input[0] == '?' && input[1] == 0)
-               {
+               if (input[0] == '?' && input[1] == 0) {
                        c = 4;
-                       for (r = tab; r->abrev; r++)
-                       {
-                               concat(r->abrev, r->full, input);
+                       for (r = tab; r->abbrev; r++) {
+                               strcpy(input, r->abbrev);
+                               strcat(input, r->full);
                                printf("%14.14s", input);
                                if (--c > 0)
                                        continue;
@@ -156,14 +160,12 @@ struct cvntab     tab[];
                }
 
                /* search for in table */
-               for (r = tab; r->abrev; r++)
-               {
+               for (r = tab; r->abbrev; r++) {
                        p = input;
-                       for (q = r->abrev; *q; q++)
+                       for (q = r->abbrev; *q; q++)
                                if (*p++ != *q)
                                        break;
-                       if (!*q)
-                       {
+                       if (!*q) {
                                for (q = r->full; *p && *q; q++, p++)
                                        if (*p != *q)
                                                break;
@@ -173,12 +175,10 @@ struct cvntab     tab[];
                }
 
                /* check for not found */
-               if (!r->abrev)
-               {
+               if (!r->abbrev) {
                        printf("invalid input; ? for valid inputs\n");
                        skiptonl(0);
-               }
-               else
+               } else
                        return (r);
        }
 }
@@ -188,25 +188,21 @@ struct cvntab     tab[];
  **    get string parameter
  **/
 
-getstrpar(s, r, l, t)
-char   *s;
-char   *r;
-int    l;
-char   *t;
+void
+getstrpar(const char *s, char *r, int l, const char *t)
 {
-       register int    i;
+       int     i;
        char            format[20];
-       register int    f;
+       int     f;
 
        if (t == 0)
                t = " \t\n;";
-       (void)sprintf(format, "%%%d[^%s]", l, t);
-       while (1)
-       {
+       (void)snprintf(format, sizeof(format), "%%%d[^%s]", l, t);
+       while (1) {
                if ((f = testnl()) && s)
                        printf("%s: ", s);
                if (f)
-                       cgetc(0);
+                       getchar();
                scanf("%*[\t ;]");
                i = scanf(format, r);
                if (i < 0)
@@ -221,18 +217,22 @@ char      *t;
  **    test if newline is next valid character
  **/
 
-testnl()
+int
+testnl(void)
 {
-       register char           c;
+       int c;
 
-       while ((c = cgetc(0)) != '\n')
+       while ((c = getchar()) != '\n') {
+               if (c == EOF) {
+                       exit(1);
+               }
                if ((c >= '0' && c <= '9') || c == '.' || c == '!' ||
-                               (c >= 'A' && c <= 'Z') ||
-                               (c >= 'a' && c <= 'z') || c == '-')
-               {
+                   (c >= 'A' && c <= 'Z') ||
+                   (c >= 'a' && c <= 'z') || c == '-') {
                        ungetc(c, stdin);
                        return(0);
                }
+       }
        ungetc(c, stdin);
        return (1);
 }
@@ -242,12 +242,15 @@ testnl()
  **    scan for newline
  **/
 
-skiptonl(c)
-char   c;
+void
+skiptonl(int c)
 {
-       while (c != '\n')
-               if (!(c = cgetc(0)))
-                       return;
+       while (c != '\n') {
+               c = getchar();
+               if (c == EOF) {
+                       exit(1);
+               }
+       }
        ungetc('\n', stdin);
        return;
 }
@@ -257,12 +260,15 @@ char      c;
  **    test for valid terminator
  **/
 
-testterm()
+static int
+testterm(void)
 {
-       register char           c;
+       int c;
 
-       if (!(c = cgetc(0)))
-               return (1);
+       c = getchar();
+       if (c == EOF) {
+               exit(1);
+       }
        if (c == '.')
                return (0);
        if (c == '\n' || c == ';')
@@ -272,26 +278,25 @@ testterm()
 
 
 /*
-**  TEST FOR SPECIFIED DELIMETER
+**  TEST FOR SPECIFIED DELIMITER
 **
 **     The standard input is scanned for the parameter.  If found,
 **     it is thrown away and non-zero is returned.  If not found,
 **     zero is returned.
 */
 
-readdelim(d)
-char   d;
+int
+readdelim(int d)
 {
-       register char   c;
+       int c;
 
-       while (c = cgetc(0))
-       {
+       while ((c = getchar()) != EOF) {
                if (c == d)
                        return (1);
                if (c == ' ')
                        continue;
                ungetc(c, stdin);
-               break;
+               return 0;
        }
-       return (0);
+       exit(1);
 }