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