int wrd(void) { static int nlines; char *l, *src[13]; int n; l = Brdline(wr, '\n'); if(l == 0) return -1; ++nlines; l[BLINELEN(wr)-1] = 0; n = strparse(l, src, 13, " "); if(n != 12 || src[0][0] == 0 || src[0][1] != 0){ fprint(2, "wrap file format error, line %d\n", nlines); exits("format"); } wbuf.stype = src[0][0]; wbuf.mark = strtol(src[1], 0, 10); strncpy(wbuf.sname, src[2], sizeof wbuf.sname); wbuf.slen = strtol(src[3], 0, 10); coord(&wbuf.pent[0], &src[4]); coord(&wbuf.pent[1], &src[8]); return 0; }
int getc(void){ if(peekc>=0){ lastc=peekc; peekc=-1; return lastc; } if(lbuf==0){ File *f; if(file->next==0) return lastc=-1; free(file->name); Bterm(file->b); free(file->b); close(file->fd); f=file->next; free((char *)file); file=f; line=file->line; lbuf=file->lbuf; if(lbuf==0) lbuf=(unsigned char *)""; --nfile; } if(*lbuf==0){ file->line++; line=file->line; if(file->lbuf){ free((char *)file->lbuf); file->lbuf=0; } lbuf=(unsigned char *)Brdline(file->b, '\n'); if(lbuf) lbuf[BLINELEN(file->b)-1] = 0; return lastc='\n'; } return lastc=*lbuf++; }