|
|
1.1 root 1: /*-
2: * Copyright (c) 1979 The Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted
6: * provided that: (1) source distributions retain this entire copyright
7: * notice and comment, and (2) distributions including binaries display
8: * the following acknowledgement: ``This product includes software
9: * developed by the University of California, Berkeley and its contributors''
10: * in the documentation or other materials provided with the distribution
11: * and in all advertising materials mentioning features or use of this
12: * software. Neither the name of the University nor the names of its
13: * contributors may be used to endorse or promote products derived
14: * from this software without specific prior written permission.
15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
16: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
17: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18: */
19:
20: #ifndef lint
21: static char sccsid[] = "@(#)READE.c 1.8 (Berkeley) 4/9/90";
22: #endif /* not lint */
23:
24: #include "h00vars.h"
25:
26: long
27: READE(curfile, name)
28:
29: register struct iorec *curfile;
30: char *name;
31: {
32: register short *sptr;
33: register int len;
34: register int nextlen;
35: register int cnt;
36: char *cp;
37: char namebuf[NAMSIZ];
38: int retval;
39:
40: if (curfile->funit & FWRITE) {
41: ERROR("%s: Attempt to read, but open for writing\n",
42: curfile->pfname);
43: }
44: UNSYNC(curfile);
45: retval = fscanf(curfile->fbuf,
46: "%*[ \t\n]%74[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]",
47: namebuf);
48: if (retval == EOF) {
49: ERROR("%s: Tried to read past end of file\n", curfile->pfname);
50: }
51: if (retval == 0)
52: goto ename;
53: for (len = 0; len < NAMSIZ && namebuf[len]; len++)
54: /* void */;
55: len++;
56: sptr = (short *)name;
57: cnt = *sptr++;
58: cp = name + sizeof (short) + *sptr;
59: do {
60: nextlen = *sptr++;
61: nextlen = *sptr - nextlen;
62: if (nextlen == len && RELEQ(len, namebuf, cp)) {
63: return *((short *) name) - cnt;
64: }
65: cp += (int)nextlen;
66: } while (--cnt);
67: ename:
68: ERROR("Unknown name \"%s\" found on enumerated type read\n", namebuf);
69: return 0;
70: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.