Commit | Line | Data |
---|---|---|
0148435a KM |
1 | /* Copyright (c) 1979 Regents of the University of California */ |
2 | ||
3 | static char sccsid[] = "@(#)READE.c 1.1 %G%"; | |
4 | ||
5 | #include "h00vars.h" | |
6 | #include "h01errs.h" | |
7 | ||
8 | READE(curfile, name) | |
9 | ||
10 | register struct iorec *curfile; | |
11 | char *name; | |
12 | { | |
13 | long data; | |
14 | ||
15 | register short *sptr; | |
16 | register int len; | |
17 | register int nextlen; | |
18 | register int cnt; | |
19 | char *cp; | |
20 | char namebuf[NAMSIZ]; | |
21 | ||
22 | if (curfile->funit & FWRITE) { | |
23 | ERROR(EREADIT, curfile->pfname); | |
24 | return; | |
25 | } | |
26 | UNSYNC(curfile); | |
27 | if (fscanf(curfile->fbuf, | |
28 | "%*[ \t\n]%74[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]", | |
29 | namebuf) == 0) { | |
30 | ERROR(ENUMNTFD, namebuf); | |
31 | return; | |
32 | } | |
33 | curfile->funit |= SYNC; | |
34 | for (len = 0; len < NAMSIZ && namebuf[len]; len++) | |
35 | /* void */; | |
36 | len++; | |
37 | sptr = (short *)name; | |
38 | cnt = *sptr++; | |
39 | cp = name + sizeof (short) + *sptr; | |
40 | do { | |
41 | nextlen = *sptr++; | |
42 | nextlen = *sptr - nextlen; | |
43 | if (nextlen == len && RELEQ(len, namebuf, cp)) { | |
44 | return *((short *) name) - cnt; | |
45 | } | |
46 | cp += nextlen; | |
47 | } while (--cnt); | |
48 | ERROR(ENUMNTFD, namebuf); | |
49 | } |