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