xref: /freebsd/usr.bin/systat/ifcmds.c (revision b3e7694832e81d7a904a10f525f8797b753bf0d3)
11de7b4b8SPedro F. Giffuni /*-
21de7b4b8SPedro F. Giffuni  * SPDX-License-Identifier: BSD-3-Clause
31de7b4b8SPedro F. Giffuni  *
4b59ba7dfSPoul-Henning Kamp  * Copyright (c) 2003, Trent Nelson, <trent@arpa.com>.
5b59ba7dfSPoul-Henning Kamp  * All rights reserved.
6b59ba7dfSPoul-Henning Kamp  *
7b59ba7dfSPoul-Henning Kamp  * Redistribution and use in source and binary forms, with or without
8b59ba7dfSPoul-Henning Kamp  * modification, are permitted provided that the following conditions
9b59ba7dfSPoul-Henning Kamp  * are met:
10b59ba7dfSPoul-Henning Kamp  * 1. Redistributions of source code must retain the above copyright
11b59ba7dfSPoul-Henning Kamp  *    notice, this list of conditions and the following disclaimer.
12b59ba7dfSPoul-Henning Kamp  * 2. Redistributions in binary form must reproduce the above copyright
13b59ba7dfSPoul-Henning Kamp  *    notice, this list of conditions and the following disclaimer in the
14b59ba7dfSPoul-Henning Kamp  *    documentation and/or other materials provided with the distribution.
15b59ba7dfSPoul-Henning Kamp  * 3. The name of the author may not be used to endorse or promote products
16b59ba7dfSPoul-Henning Kamp  *    derived from this software without specific prior written permission.
17b59ba7dfSPoul-Henning Kamp  *
18b59ba7dfSPoul-Henning Kamp  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19b59ba7dfSPoul-Henning Kamp  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20b59ba7dfSPoul-Henning Kamp  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21b59ba7dfSPoul-Henning Kamp  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22b59ba7dfSPoul-Henning Kamp  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23b59ba7dfSPoul-Henning Kamp  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24b59ba7dfSPoul-Henning Kamp  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25b59ba7dfSPoul-Henning Kamp  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26b59ba7dfSPoul-Henning Kamp  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27b59ba7dfSPoul-Henning Kamp  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28b59ba7dfSPoul-Henning Kamp  * SUCH DAMAGE.
29b59ba7dfSPoul-Henning Kamp  */
30b59ba7dfSPoul-Henning Kamp 
31b0214723SAlexander V. Chernikov #include <sys/types.h>
32b0214723SAlexander V. Chernikov 
33b59ba7dfSPoul-Henning Kamp #include "systat.h"
34b59ba7dfSPoul-Henning Kamp #include "extern.h"
35b59ba7dfSPoul-Henning Kamp #include "convtbl.h"
36b59ba7dfSPoul-Henning Kamp 
37b0214723SAlexander V. Chernikov #include <stdlib.h>
38b0214723SAlexander V. Chernikov #include <string.h>
39b0214723SAlexander V. Chernikov 
40b59ba7dfSPoul-Henning Kamp int curscale = SC_AUTO;
41b0214723SAlexander V. Chernikov char *matchline = NULL;
42b0214723SAlexander V. Chernikov int showpps = 0;
43b0214723SAlexander V. Chernikov int needsort = 0;
44b59ba7dfSPoul-Henning Kamp 
45b59ba7dfSPoul-Henning Kamp int
ifcmd(const char * cmd,const char * args)46b59ba7dfSPoul-Henning Kamp ifcmd(const char *cmd, const char *args)
47b59ba7dfSPoul-Henning Kamp {
48aee371e3SYaroslav Tykhiy 	int scale;
49f3014885SYaroslav Tykhiy 
5033dc5491SDavid Malone 	if (prefix(cmd, "scale")) {
51aee371e3SYaroslav Tykhiy 		if ((scale = get_scale(args)) != -1)
52aee371e3SYaroslav Tykhiy 			curscale = scale;
53b59ba7dfSPoul-Henning Kamp 		else {
54b59ba7dfSPoul-Henning Kamp 			move(CMDLINE, 0);
55b59ba7dfSPoul-Henning Kamp 			clrtoeol();
56aee371e3SYaroslav Tykhiy 			addstr("what scale? ");
57aee371e3SYaroslav Tykhiy 			addstr(get_helplist());
58b59ba7dfSPoul-Henning Kamp 		}
59b0214723SAlexander V. Chernikov 	} else if (prefix(cmd, "match")) {
60b0214723SAlexander V. Chernikov 		if (args != NULL && *args != '\0' && memcmp(args, "*", 2) != 0) {
61b0214723SAlexander V. Chernikov 			/* We got a valid match line */
62297c1ec1SAlexander V. Chernikov 			if (matchline != NULL)
63b0214723SAlexander V. Chernikov 				free(matchline);
64b0214723SAlexander V. Chernikov 			needsort = 1;
65b0214723SAlexander V. Chernikov 			matchline = strdup(args);
66b0214723SAlexander V. Chernikov 		} else {
67b0214723SAlexander V. Chernikov 			/* Empty or * pattern, turn filtering off */
68297c1ec1SAlexander V. Chernikov 			if (matchline != NULL)
69b0214723SAlexander V. Chernikov 				free(matchline);
70b0214723SAlexander V. Chernikov 			needsort = 1;
71b0214723SAlexander V. Chernikov 			matchline = NULL;
72b0214723SAlexander V. Chernikov 		}
73b0214723SAlexander V. Chernikov 	} else if (prefix(cmd, "pps"))
74b0214723SAlexander V. Chernikov 		showpps = !showpps;
75*4b9ac8a0SMichael Reifenberger 	else
76*4b9ac8a0SMichael Reifenberger 		return (0);
77b0214723SAlexander V. Chernikov 
78f3014885SYaroslav Tykhiy 	return (1);
79b59ba7dfSPoul-Henning Kamp }
80