Offset xxxincoff(Offset p) /* get next blist[] block */ { p++; if (pastend(p)) { /* off the end of this block */ if ((p = blist[bindex(p-1)].nextoff) == -1) { /* and nothing was allocated after it */ ERROR "Bad storage allocation" WARN; done2(-5); } } return(p); }
void wbf(Tchar i) /* store i into offset, get ready for next one */ { int j, off; if (!offset) return; j = bindex(offset); if (i == 0) contabp[savslot].emx = offset; off = boffset(offset); blist[j].bp[off++] = i; offset++; if (pastend(offset)) { /* off the end of this block */ if (blist[j].nextoff == -1) { if ((nextb = alloc()) == -1) { ERROR "Out of temp file space" WARN; done2(01); } blist[j].nextoff = nextb; } offset = blist[j].nextoff; } }
Tchar getch0(void) { Tchar i; again: if (pbp > lastpbp) i = *--pbp; else if (ip) { /* i = rbf(); */ i = rbf0(ip); if (i == 0) i = rbf(); else { ++ip; if (pastend(ip)) { --ip; rbf(); } } } else { if (donef || ndone) done(0); if (nx || 1) { /* BUG: was ibufp >= eibuf, so EOF test is wrong */ if (nfo < 0) ERROR "in getch0, nfo = %d", nfo WARN; if (nfo == 0) { g0: if (nextfile()) { if (ip) goto again; } } nx = 0; #ifdef UNICODE if (MB_CUR_MAX > 1) i = get1ch(ifile); else #endif /*UNICODE*/ i = getc(ifile); if (i == EOF) goto g0; if (ip) goto again; } if (i >= 040) /* zapped: && i < 0177 */ goto g4; i = ifilt[i]; } if (cbits(i) == IMP && !raw) goto again; if (i == 0 && !init && !raw) { /* zapped: || i == 0177 */ goto again; } g4: if (ismot(i)) return i; if (copyf == 0 && sfbits(i) == 0) i |= chbits; if (cbits(i) == eschar && !raw) setcbits(i, ESC); return(i); }