blob: 3df8d445d4463329c46b451afbc6a8ea99279f0b [file] [log] [blame]
/* te.c: error message control, input line count */
# include "t.h"
void
error(char *s)
{
fprint(2, "\n%s:%d: %s\n", ifile, iline, s);
fprint(2, "tbl quits\n");
exits(s);
}
char *
gets1(char *s, int size)
{
char *p, *ns;
int nbl;
iline++;
ns = s;
p = Brdline(tabin, '\n');
while (p == 0) {
if (swapin() == 0)
return(0);
p = Brdline(tabin, '\n');
}
nbl = Blinelen(tabin)-1;
if(nbl >= size)
error("input buffer too small");
p[nbl] = 0;
strcpy(s, p);
s += nbl;
for (nbl = 0; *s == '\\' && s > ns; s--)
nbl++;
if (linstart && nbl % 2) /* fold escaped nl if in table */
gets1(s + 1, size - (s-ns));
return(p);
}
# define BACKMAX 500
char backup[BACKMAX];
char *backp = backup;
void
un1getc(int c)
{
if (c == '\n')
iline--;
*backp++ = c;
if (backp >= backup + BACKMAX)
error("too much backup");
}
int
get1char(void)
{
int c;
if (backp > backup)
c = *--backp;
else
c = Bgetc(tabin);
if (c == 0) /* EOF */ {
if (swapin() == 0)
error("unexpected EOF");
c = Bgetc(tabin);
}
if (c == '\n')
iline++;
return(c);
}