xref: /original-bsd/bin/ps/fmt.c (revision 0c72daad)
165136de7Smckusick /*-
2731b2947Spendry  * Copyright (c) 1992, 1993, 1994
306194916Sbostic  *	The Regents of the University of California.  All rights reserved.
465136de7Smckusick  *
565136de7Smckusick  * %sccs.include.redist.c%
665136de7Smckusick  */
765136de7Smckusick 
865136de7Smckusick #ifndef lint
9*0c72daadSbostic static char sccsid[] = "@(#)fmt.c	8.5 (Berkeley) 04/27/95";
1065136de7Smckusick #endif /* not lint */
1165136de7Smckusick 
1208b8aa43Sbostic #include <sys/param.h>
1308b8aa43Sbostic #include <sys/time.h>
1408b8aa43Sbostic #include <sys/resource.h>
15*0c72daadSbostic 
1665136de7Smckusick #include <ctype.h>
1765136de7Smckusick #include <stdio.h>
1865136de7Smckusick #include <stdlib.h>
1965136de7Smckusick #include <string.h>
20b364b044Smckusick #include <vis.h>
21*0c72daadSbostic 
2208b8aa43Sbostic #include "ps.h"
2308b8aa43Sbostic 
2408b8aa43Sbostic static char *cmdpart __P((char *));
2508b8aa43Sbostic static char *shquote __P((char **));
2665136de7Smckusick 
2765136de7Smckusick /*
2865136de7Smckusick  * XXX
2965136de7Smckusick  * This is a stub until marc does the real one.
3065136de7Smckusick  */
3165136de7Smckusick static char *
shquote(argv)3265136de7Smckusick shquote(argv)
33f45a138dSpendry 	char **argv;
3465136de7Smckusick {
35f45a138dSpendry 	char **p, *dst, *src;
36b364b044Smckusick 	static char buf[4096];		/* XXX */
3765136de7Smckusick 
3865136de7Smckusick 	if (*argv == 0) {
3965136de7Smckusick 		buf[0] = 0;
4065136de7Smckusick 		return (buf);
4165136de7Smckusick 	}
4265136de7Smckusick 	dst = buf;
4365136de7Smckusick 	for (p = argv; (src = *p++) != 0; ) {
4465136de7Smckusick 		if (*src == 0)
4565136de7Smckusick 			continue;
46b364b044Smckusick 		strvis(dst, src, VIS_NL | VIS_CSTYLE);
47b364b044Smckusick 		while (*dst)
48b364b044Smckusick 			dst++;
49b364b044Smckusick 		*dst++ = ' ';
5065136de7Smckusick 	}
51*0c72daadSbostic 	if (dst != buf)
52*0c72daadSbostic 		--dst;
53b364b044Smckusick 	*dst = '\0';
5465136de7Smckusick 	return (buf);
5565136de7Smckusick }
5665136de7Smckusick 
5765136de7Smckusick static char *
cmdpart(arg0)5865136de7Smckusick cmdpart(arg0)
5965136de7Smckusick 	char *arg0;
6065136de7Smckusick {
61f45a138dSpendry 	char *cp;
6265136de7Smckusick 
63485f8971Sbostic 	return ((cp = strrchr(arg0, '/')) != NULL ? cp + 1 : arg0);
6465136de7Smckusick }
6565136de7Smckusick 
6665136de7Smckusick char *
fmt_argv(argv,cmd,maxlen)6765136de7Smckusick fmt_argv(argv, cmd, maxlen)
68f45a138dSpendry 	char **argv;
69f45a138dSpendry 	char *cmd;
7065136de7Smckusick 	int maxlen;
7165136de7Smckusick {
72f45a138dSpendry 	int len;
73f45a138dSpendry 	char *ap, *cp;
7465136de7Smckusick 
7565136de7Smckusick 	if (argv == 0 || argv[0] == 0) {
7665136de7Smckusick 		if (cmd == NULL)
7765136de7Smckusick 			return ("");
7865136de7Smckusick 		ap = NULL;
7965136de7Smckusick 		len = maxlen + 3;
8065136de7Smckusick 	} else {
8165136de7Smckusick 		ap = shquote(argv);
8265136de7Smckusick 		len = strlen(ap) + maxlen + 4;
8365136de7Smckusick 	}
8465136de7Smckusick 	if ((cp = malloc(len)) == NULL)
8565136de7Smckusick 		return (NULL);
8665136de7Smckusick 	if (ap == NULL)
8765136de7Smckusick 		sprintf(cp, "(%.*s)", maxlen, cmd);
8865136de7Smckusick 	else if (strncmp(cmdpart(argv[0]), cmd, maxlen) != 0)
8965136de7Smckusick 		sprintf(cp, "%s (%.*s)", ap, maxlen, cmd);
9065136de7Smckusick 	else
9165136de7Smckusick 		(void) strcpy(cp, ap);
9265136de7Smckusick 	return (cp);
9365136de7Smckusick }
94