Start development on 386BSD 0.0
[unix-history] / .ref-BSD-4_3_Net_2 / usr / src / usr.bin / pascal / libpc / READE.c
CommitLineData
0d78ca85
KB
1/*-
2 * Copyright (c) 1979 The Regents of the University of California.
3 * All rights reserved.
4 *
c0567266
KB
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by the University of
16 * California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
0d78ca85 32 */
0148435a 33
0d78ca85 34#ifndef lint
af359dea 35static char sccsid[] = "@(#)READE.c 1.8 (Berkeley) 4/9/90";
0d78ca85 36#endif /* not lint */
0148435a
KM
37
38#include "h00vars.h"
0148435a 39
492cc5d3 40long
0148435a
KM
41READE(curfile, name)
42
43 register struct iorec *curfile;
44 char *name;
45{
0148435a
KM
46 register short *sptr;
47 register int len;
48 register int nextlen;
49 register int cnt;
50 char *cp;
51 char namebuf[NAMSIZ];
53909d1e 52 int retval;
0148435a
KM
53
54 if (curfile->funit & FWRITE) {
86997b19
KM
55 ERROR("%s: Attempt to read, but open for writing\n",
56 curfile->pfname);
0148435a
KM
57 }
58 UNSYNC(curfile);
53909d1e 59 retval = fscanf(curfile->fbuf,
0148435a 60 "%*[ \t\n]%74[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]",
53909d1e
KM
61 namebuf);
62 if (retval == EOF) {
86997b19 63 ERROR("%s: Tried to read past end of file\n", curfile->pfname);
0148435a 64 }
86997b19
KM
65 if (retval == 0)
66 goto ename;
0148435a
KM
67 for (len = 0; len < NAMSIZ && namebuf[len]; len++)
68 /* void */;
69 len++;
70 sptr = (short *)name;
71 cnt = *sptr++;
72 cp = name + sizeof (short) + *sptr;
73 do {
74 nextlen = *sptr++;
75 nextlen = *sptr - nextlen;
76 if (nextlen == len && RELEQ(len, namebuf, cp)) {
77 return *((short *) name) - cnt;
78 }
492cc5d3 79 cp += (int)nextlen;
0148435a 80 } while (--cnt);
86997b19
KM
81ename:
82 ERROR("Unknown name \"%s\" found on enumerated type read\n", namebuf);
a745d566 83 return 0;
0148435a 84}