1 /* Copyright (c) 1979 Regents of the University of California */ 2 3 static char sccsid[] = "@(#)READE.c 1.2 01/24/81"; 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 int retval; 22 23 if (curfile->funit & FWRITE) { 24 ERROR(EREADIT, curfile->pfname); 25 return; 26 } 27 UNSYNC(curfile); 28 retval = fscanf(curfile->fbuf, 29 "%*[ \t\n]%74[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]", 30 namebuf); 31 if (retval == EOF) { 32 ERROR(EPASTEOF, curfile->pfname); 33 return; 34 } 35 if (retval == 0) { 36 ERROR(ENUMNTFD, namebuf); 37 return; 38 } 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 += nextlen; 53 } while (--cnt); 54 ERROR(ENUMNTFD, namebuf); 55 } 56