1 /* Copyright (c) 1979 Regents of the University of California */ 2 3 static char sccsid[] = "@(#)READE.c 1.4 03/07/81"; 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 } 56