1*bcf893f4Slukem /* $NetBSD: fmt.c,v 1.21 2007/12/12 22:55:43 lukem Exp $ */
2*bcf893f4Slukem
3*bcf893f4Slukem #include <sys/cdefs.h>
4*bcf893f4Slukem __RCSID("$NetBSD: fmt.c,v 1.21 2007/12/12 22:55:43 lukem Exp $");
50a9d9a55Sperry
6e7f8f72dSsimonb #include <kvm.h>
78465d5c1Smycroft #include <stdio.h>
88465d5c1Smycroft #include <stdlib.h>
98465d5c1Smycroft #include <string.h>
108465d5c1Smycroft #include <unistd.h>
118465d5c1Smycroft #include <vis.h>
122850c7f9Sperry #include <sys/time.h>
1378295c8bSchristos #include <sys/resource.h>
1478295c8bSchristos #include "ps.h"
158465d5c1Smycroft
168465d5c1Smycroft void
fmt_puts(char * s,int * leftp)1753474900Ssimonb fmt_puts(char *s, int *leftp)
188465d5c1Smycroft {
194c30ea4aSenami static char *v = 0;
208465d5c1Smycroft static int maxlen = 0;
214c30ea4aSenami char *nv;
2258a95739Sitojun int len, nlen;
238465d5c1Smycroft
248465d5c1Smycroft if (*leftp == 0)
258465d5c1Smycroft return;
268465d5c1Smycroft len = strlen(s) * 4 + 1;
278465d5c1Smycroft if (len > maxlen) {
288465d5c1Smycroft if (maxlen == 0)
2958a95739Sitojun nlen = getpagesize();
304aa8283eSenami else
314aa8283eSenami nlen = maxlen;
3258a95739Sitojun while (len > nlen)
3358a95739Sitojun nlen *= 2;
3458a95739Sitojun nv = realloc(v, nlen);
358465d5c1Smycroft if (nv == 0)
368465d5c1Smycroft return;
378465d5c1Smycroft v = nv;
3858a95739Sitojun maxlen = nlen;
398465d5c1Smycroft }
40b127ec26Senami len = strvis(v, s, VIS_TAB | VIS_NL | VIS_CSTYLE);
418465d5c1Smycroft if (*leftp != -1) {
428465d5c1Smycroft if (len > *leftp) {
4302513843Smycroft v[*leftp] = '\0';
448465d5c1Smycroft *leftp = 0;
4502513843Smycroft } else
468465d5c1Smycroft *leftp -= len;
478465d5c1Smycroft }
48abb32017Ssimonb (void)printf("%s", v);
498465d5c1Smycroft }
508465d5c1Smycroft
518465d5c1Smycroft void
fmt_putc(int c,int * leftp)5253474900Ssimonb fmt_putc(int c, int *leftp)
538465d5c1Smycroft {
548465d5c1Smycroft
558465d5c1Smycroft if (*leftp == 0)
568465d5c1Smycroft return;
578465d5c1Smycroft if (*leftp != -1)
588465d5c1Smycroft *leftp -= 1;
598465d5c1Smycroft putchar(c);
608465d5c1Smycroft }
61