X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/77e3814f0c0e3dea4d0032e25666f77e6f83bfff..65dc63694f4b73fa9ab999ec34c932de770f8457:/trek/getpar.c diff --git a/trek/getpar.c b/trek/getpar.c index 70142013..4a271d32 100644 --- a/trek/getpar.c +++ b/trek/getpar.c @@ -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 @@ -10,11 +12,7 @@ * 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. * @@ -31,25 +29,34 @@ * SUCH DAMAGE. */ +#include #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 -# include "getpar.h" +#include +#include +#include +#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); }