1: /*
   2:  * Copyright (c) 1980 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  */
   6: 
   7: #ifndef lint
   8: static char sccsid[] = "@(#)getpar.c	4.4 (Berkeley) 1/29/86";
   9: #endif not lint
  10: 
  11: # include   <stdio.h>
  12: # include   "getpar.h"
  13: 
  14: /**
  15:  **	get integer parameter
  16:  **/
  17: 
  18: getintpar(s)
  19: char    *s;
  20: {
  21:     register int    i;
  22:     int     n;
  23: 
  24:     while (1)
  25:     {
  26:         if (testnl() && s)
  27:             printf("%s: ", s);
  28:         i = scanf("%d", &n);
  29:         if (i < 0)
  30:             exit(1);
  31:         if (i > 0 && testterm())
  32:             return (n);
  33:         printf("invalid input; please enter an integer\n");
  34:         skiptonl(0);
  35:     }
  36: }
  37: 
  38: /**
  39:  **	get floating parameter
  40:  **/
  41: 
  42: double getfltpar(s)
  43: char    *s;
  44: {
  45:     register int        i;
  46:     double          d;
  47: 
  48:     while (1)
  49:     {
  50:         if (testnl() && s)
  51:             printf("%s: ", s);
  52:         i = scanf("%lf", &d);
  53:         if (i < 0)
  54:             exit(1);
  55:         if (i > 0 && testterm())
  56:             return (d);
  57:         printf("invalid input; please enter a double\n");
  58:         skiptonl(0);
  59:     }
  60: }
  61: 
  62: /**
  63:  **	get yes/no parameter
  64:  **/
  65: 
  66: struct cvntab   Yntab[] =
  67: {
  68:     "y",    "es",   (int (*)())1,   0,
  69:     "n",    "o",    (int (*)())0,   0,
  70:     0
  71: };
  72: 
  73: getynpar(s)
  74: char    *s;
  75: {
  76:     struct cvntab       *r;
  77: 
  78:     r = getcodpar(s, Yntab);
  79:     return ((int) r->value);
  80: }
  81: 
  82: 
  83: /**
  84:  **	get coded parameter
  85:  **/
  86: 
  87: struct cvntab *getcodpar(s, tab)
  88: char        *s;
  89: struct cvntab   tab[];
  90: {
  91:     char                input[100];
  92:     register struct cvntab      *r;
  93:     int             flag;
  94:     register char           *p, *q;
  95:     int             c;
  96:     int             f;
  97: 
  98:     flag = 0;
  99:     while (1)
 100:     {
 101:         flag |= (f = testnl());
 102:         if (flag)
 103:             printf("%s: ", s);
 104:         if (f)
 105:             cgetc(0);       /* throw out the newline */
 106:         scanf("%*[ \t;]");
 107:         if ((c = scanf("%[^ \t;\n]", input)) < 0)
 108:             exit(1);
 109:         if (c == 0)
 110:             continue;
 111:         flag = 1;
 112: 
 113:         /* if command list, print four per line */
 114:         if (input[0] == '?' && input[1] == 0)
 115:         {
 116:             c = 4;
 117:             for (r = tab; r->abrev; r++)
 118:             {
 119:                 concat(r->abrev, r->full, input);
 120:                 printf("%14.14s", input);
 121:                 if (--c > 0)
 122:                     continue;
 123:                 c = 4;
 124:                 printf("\n");
 125:             }
 126:             if (c != 4)
 127:                 printf("\n");
 128:             continue;
 129:         }
 130: 
 131:         /* search for in table */
 132:         for (r = tab; r->abrev; r++)
 133:         {
 134:             p = input;
 135:             for (q = r->abrev; *q; q++)
 136:                 if (*p++ != *q)
 137:                     break;
 138:             if (!*q)
 139:             {
 140:                 for (q = r->full; *p && *q; q++, p++)
 141:                     if (*p != *q)
 142:                         break;
 143:                 if (!*p || !*q)
 144:                     break;
 145:             }
 146:         }
 147: 
 148:         /* check for not found */
 149:         if (!r->abrev)
 150:         {
 151:             printf("invalid input; ? for valid inputs\n");
 152:             skiptonl(0);
 153:         }
 154:         else
 155:             return (r);
 156:     }
 157: }
 158: 
 159: 
 160: /**
 161:  **	get string parameter
 162:  **/
 163: 
 164: getstrpar(s, r, l, t)
 165: char    *s;
 166: char    *r;
 167: int l;
 168: char    *t;
 169: {
 170:     register int    i;
 171:     char        format[20];
 172:     register int    f;
 173: 
 174:     if (t == 0)
 175:         t = " \t\n;";
 176:     sprintf(format, "%%%d[^%s]", l, t);
 177:     while (1)
 178:     {
 179:         if ((f = testnl()) && s)
 180:             printf("%s: ", s);
 181:         if (f)
 182:             cgetc(0);
 183:         scanf("%*[\t ;]");
 184:         i = scanf(format, r);
 185:         if (i < 0)
 186:             exit(1);
 187:         if (i != 0)
 188:             return;
 189:     }
 190: }
 191: 
 192: 
 193: /**
 194:  **	test if newline is next valid character
 195:  **/
 196: 
 197: testnl()
 198: {
 199:     register char       c;
 200: 
 201:     while ((c = cgetc(0)) != '\n')
 202:         if ((c >= '0' && c <= '9') || c == '.' || c == '!' ||
 203:                 (c >= 'A' && c <= 'Z') ||
 204:                 (c >= 'a' && c <= 'z') || c == '-')
 205:         {
 206:             ungetc(c, stdin);
 207:             return(0);
 208:         }
 209:     ungetc(c, stdin);
 210:     return (1);
 211: }
 212: 
 213: 
 214: /**
 215:  **	scan for newline
 216:  **/
 217: 
 218: skiptonl(c)
 219: char    c;
 220: {
 221:     while (c != '\n')
 222:         if (!(c = cgetc(0)))
 223:             return;
 224:     ungetc('\n', stdin);
 225:     return;
 226: }
 227: 
 228: 
 229: /**
 230:  **	test for valid terminator
 231:  **/
 232: 
 233: testterm()
 234: {
 235:     register char       c;
 236: 
 237:     if (!(c = cgetc(0)))
 238:         return (1);
 239:     if (c == '.')
 240:         return (0);
 241:     if (c == '\n' || c == ';')
 242:         ungetc(c, stdin);
 243:     return (1);
 244: }
 245: 
 246: 
 247: /*
 248: **  TEST FOR SPECIFIED DELIMETER
 249: **
 250: **	The standard input is scanned for the parameter.  If found,
 251: **	it is thrown away and non-zero is returned.  If not found,
 252: **	zero is returned.
 253: */
 254: 
 255: readdelim(d)
 256: char    d;
 257: {
 258:     register char   c;
 259: 
 260:     while (c = cgetc(0))
 261:     {
 262:         if (c == d)
 263:             return (1);
 264:         if (c == ' ')
 265:             continue;
 266:         ungetc(c, stdin);
 267:         break;
 268:     }
 269:     return (0);
 270: }

Defined functions

getstrpar defined in line 164; used 3 times
readdelim defined in line 255; used 1 times
testterm defined in line 233; used 2 times

Defined variables

Yntab defined in line 66; used 1 times
  • in line 78
sccsid defined in line 8; never used
Last modified: 1986-02-01
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1251
Valid CSS Valid XHTML 1.0 Strict