/* $OpenBSD: fmt.c,v 1.2 1996/06/23 14:20:49 deraadt Exp $ */ #include #include #include #include #include void fmt_puts(s, leftp) char *s; int *leftp; { static char *v = 0, *nv; static int maxlen = 0; int len; if (*leftp == 0) return; len = strlen(s) * 4 + 1; if (len > maxlen) { if (maxlen == 0) maxlen = getpagesize(); while (len > maxlen) maxlen *= 2; nv = realloc(v, maxlen); if (nv == 0) return; v = nv; } 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); }