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