76 lines
1.0 KiB
C
76 lines
1.0 KiB
C
/* 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);
|
|
}
|
|
|
|
|