1/*	$NetBSD: fmt.c,v 1.21 2007/12/12 22:55:43 lukem Exp $	*/
2
3#include <sys/cdefs.h>
4__RCSID("$NetBSD: fmt.c,v 1.21 2007/12/12 22:55:43 lukem Exp $");
5
6#include <kvm.h>
7#include <stdio.h>
8#include <stdlib.h>
9#include <string.h>
10#include <unistd.h>
11#include <vis.h>
12#include <sys/time.h>
13#include <sys/resource.h>
14#include "ps.h"
15
16void
17fmt_puts(char *s, int *leftp)
18{
19	static char *v = 0;
20	static int maxlen = 0;
21	char *nv;
22	int len, nlen;
23
24	if (*leftp == 0)
25		return;
26	len = strlen(s) * 4 + 1;
27	if (len > maxlen) {
28		if (maxlen == 0)
29			nlen = getpagesize();
30		else
31			nlen = maxlen;
32		while (len > nlen)
33			nlen *= 2;
34		nv = realloc(v, nlen);
35		if (nv == 0)
36			return;
37		v = nv;
38		maxlen = nlen;
39	}
40	len = strvis(v, s, VIS_TAB | VIS_NL | VIS_CSTYLE);
41	if (*leftp != -1) {
42		if (len > *leftp) {
43			v[*leftp] = '\0';
44			*leftp = 0;
45		} else
46			*leftp -= len;
47	}
48	(void)printf("%s", v);
49}
50
51void
52fmt_putc(int c, int *leftp)
53{
54
55	if (*leftp == 0)
56		return;
57	if (*leftp != -1)
58		*leftp -= 1;
59	putchar(c);
60}
61