/* $NetBSD: fmt.c,v 1.21 2007/12/12 22:55:43 lukem Exp $ */ #include __RCSID("$NetBSD: fmt.c,v 1.21 2007/12/12 22:55:43 lukem Exp $"); #include #include #include #include #include #include #include #include #include "ps.h" void fmt_puts(char *s, int *leftp) { static char *v = 0; static int maxlen = 0; char *nv; 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; } len = strvis(v, s, VIS_TAB | VIS_NL | VIS_CSTYLE); if (*leftp != -1) { if (len > *leftp) { v[*leftp] = '\0'; *leftp = 0; } else *leftp -= len; } (void)printf("%s", v); } void fmt_putc(int c, int *leftp) { if (*leftp == 0) return; if (*leftp != -1) *leftp -= 1; putchar(c); }