Commit | Line | Data |
---|---|---|
0148435a KM |
1 | /* Copyright (c) 1979 Regents of the University of California */ |
2 | ||
e5053b93 | 3 | static char sccsid[] = "@(#)READE.c 1.3 %G%"; |
0148435a KM |
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]; | |
53909d1e | 21 | int retval; |
0148435a KM |
22 | |
23 | if (curfile->funit & FWRITE) { | |
24 | ERROR(EREADIT, curfile->pfname); | |
25 | return; | |
26 | } | |
27 | UNSYNC(curfile); | |
53909d1e | 28 | retval = fscanf(curfile->fbuf, |
0148435a | 29 | "%*[ \t\n]%74[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]", |
53909d1e KM |
30 | namebuf); |
31 | if (retval == EOF) { | |
32 | ERROR(EPASTEOF, curfile->pfname); | |
33 | return; | |
34 | } | |
35 | if (retval == 0) { | |
0148435a KM |
36 | ERROR(ENUMNTFD, namebuf); |
37 | return; | |
38 | } | |
e5053b93 | 39 | curfile->funit &= ~EOLN; |
0148435a KM |
40 | curfile->funit |= SYNC; |
41 | for (len = 0; len < NAMSIZ && namebuf[len]; len++) | |
42 | /* void */; | |
43 | len++; | |
44 | sptr = (short *)name; | |
45 | cnt = *sptr++; | |
46 | cp = name + sizeof (short) + *sptr; | |
47 | do { | |
48 | nextlen = *sptr++; | |
49 | nextlen = *sptr - nextlen; | |
50 | if (nextlen == len && RELEQ(len, namebuf, cp)) { | |
51 | return *((short *) name) - cnt; | |
52 | } | |
53 | cp += nextlen; | |
54 | } while (--cnt); | |
55 | ERROR(ENUMNTFD, namebuf); | |
56 | } |