Commit | Line | Data |
---|---|---|
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 | 35 | static 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 | 40 | long |
0148435a KM |
41 | READE(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 |
81 | ename: |
82 | ERROR("Unknown name \"%s\" found on enumerated type read\n", namebuf); | |
a745d566 | 83 | return 0; |
0148435a | 84 | } |