1 /* Copyright (c) 1979 Regents of the University of California */ 2 3 static char sccsid[] = "@(#)READE.c 1.7 01/09/89"; 4 5 #include "h00vars.h" 6 7 long 8 READE(curfile, name) 9 10 register struct iorec *curfile; 11 char *name; 12 { 13 register short *sptr; 14 register int len; 15 register int nextlen; 16 register int cnt; 17 char *cp; 18 char namebuf[NAMSIZ]; 19 int retval; 20 21 if (curfile->funit & FWRITE) { 22 ERROR("%s: Attempt to read, but open for writing\n", 23 curfile->pfname); 24 } 25 UNSYNC(curfile); 26 retval = fscanf(curfile->fbuf, 27 "%*[ \t\n]%74[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]", 28 namebuf); 29 if (retval == EOF) { 30 ERROR("%s: Tried to read past end of file\n", curfile->pfname); 31 } 32 if (retval == 0) 33 goto ename; 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 += (int)nextlen; 47 } while (--cnt); 48 ename: 49 ERROR("Unknown name \"%s\" found on enumerated type read\n", namebuf); 50 return 0; 51 } 52