/* $NetBSD: fmt.c,v 1.16 2001/03/23 01:06:02 enami Exp $ */ #include #include #include #include #include #include #include #include #include "ps.h" void fmt_puts(s, leftp) char *s; int *leftp; { static char *v = 0, *nv; static int maxlen = 0; int len, nlen; if (*leftp == 0) return; len = strlen(s) * 4 + 1; if (len > maxlen) { if (maxlen == 0) nlen = getpagesize(); else nlen = maxlen; while (len > nlen) nlen *= 2; nv = realloc(v, nlen); if (nv == 0) return; v = nv; maxlen = nlen; } strvis(v, s, VIS_TAB | VIS_NL | VIS_CSTYLE); if (*leftp != -1) { len = strlen(v); if (len > *leftp) { v[*leftp] = '\0'; *leftp = 0; } else *leftp -= len; } printf("%s", v); } void fmt_putc(c, leftp) int c; int *leftp; { if (*leftp == 0) return; if (*leftp != -1) *leftp -= 1; putchar(c); }