xref: /csrg-svn/usr.bin/pascal/libpc/READE.c (revision 1682)
1 /* Copyright (c) 1979 Regents of the University of California */
2 
3 static char sccsid[] = "@(#)READE.c 1.1 10/30/80";
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 }
50