# 2.11BSD#431 - /usr/src/games/trek/getpar.c

##### Functions

    getcodpar         X
    getfltpar         X
    getintpar         X
    getstrpar         X
    getynpar          X
    readdelim         X
    skiptonl          X
    testnl            X
    testterm          X

##### Variables

    Yntab             X

       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

getcodpar defined in line 87; used 8 times

- in line 78
- in /usr/src/games/trek/computer.c line 92
- in /usr/src/games/trek/getpar.h line 18
- in /usr/src/games/trek/phaser.c line 113
- in /usr/src/games/trek/play.c line 78
- in /usr/src/games/trek/setup.c line 59, 69
- in /usr/src/games/trek/shield.c line 84

getfltpar defined in line 42; used 9 times

- in /usr/src/games/trek/computer.c line 193, 202-205(2), 215
- in /usr/src/games/trek/getcodi.c line 33
- in /usr/src/games/trek/getpar.h line 17
- in /usr/src/games/trek/phaser.c line 157
- in /usr/src/games/trek/rest.c line 34
- in /usr/src/games/trek/setwarp.c line 25

getintpar defined in line 18; used 11 times

- in /usr/src/games/trek/computer.c line 162-165(2), 171-174(2)
- in /usr/src/games/trek/getcodi.c line 28
- in /usr/src/games/trek/phaser.c line 139, 153, 174
- in /usr/src/games/trek/torped.c line 58, 85
- in /usr/src/games/trek/visual.c line 44

getstrpar defined in line 164; used 3 times

- in /usr/src/games/trek/destruct.c line 53
- in /usr/src/games/trek/setup.c line 72-75(2)

getynpar defined in line 73; used 11 times

- in /usr/src/games/trek/events.c line 411
- in /usr/src/games/trek/impulse.c line 37, 47
- in /usr/src/games/trek/main.c line 196, 203
- in /usr/src/games/trek/rest.c line 42
- in /usr/src/games/trek/shield.c line 93
- in /usr/src/games/trek/srscan.c line 58
- in /usr/src/games/trek/torped.c line 81
- in /usr/src/games/trek/warp.c line 65, 79

readdelim defined in line 255; used 1 times

- in /usr/src/games/trek/computer.c line 155

skiptonl defined in line 218; used 10 times

- in line 34, 58, 152
- in /usr/src/games/trek/destruct.c line 52
- in /usr/src/games/trek/lose.c line 56
- in /usr/src/games/trek/phaser.c line 119, 148, 180
- in /usr/src/games/trek/play.c line 77
- in /usr/src/games/trek/win.c line 60

testnl defined in line 197; used 8 times

- in line 26, 50, 101, 179
- in /usr/src/games/trek/phaser.c line 94
- in /usr/src/games/trek/shield.c line 82
- in /usr/src/games/trek/srscan.c line 57
- in /usr/src/games/trek/torped.c line 72

testterm defined in line 233; used 2 times

- in line 31, 55

#### 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: 793 |