BSD 4 release
[unix-history] / usr / src / lib / libpc / READE.c
CommitLineData
0148435a
KM
1/* Copyright (c) 1979 Regents of the University of California */
2
31cef89c 3static char sccsid[] = "@(#)READE.c 1.1 10/29/80";
0148435a
KM
4
5#include "h00vars.h"
6#include "h01errs.h"
7
8READE(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}