1 /* 2 * Copyright 1997 Massachusetts Institute of Technology 3 * 4 * Permission to use, copy, modify, and distribute this software and 5 * its documentation for any purpose and without fee is hereby 6 * granted, provided that both the above copyright notice and this 7 * permission notice appear in all copies, that both the above 8 * copyright notice and this permission notice appear in all 9 * supporting documentation, and that the name of M.I.T. not be used 10 * in advertising or publicity pertaining to distribution of the 11 * software without specific, written prior permission. M.I.T. makes 12 * no representations about the suitability of this software for any 13 * purpose. It is provided "as is" without express or implied 14 * warranty. 15 * 16 * THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''. M.I.T. DISCLAIMS 17 * ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE, 18 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT 20 * SHALL M.I.T. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 23 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 25 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 26 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 */ 29 30 /* 31 * mode.c - mechanisms for dealing with SGI-style modal displays. 32 * 33 * There are four generally-understood useful modes for status displays 34 * of the sort exemplified by the IRIX ``netstat -C'' and ``osview'' 35 * programs. We try to follow their example, although the user interface 36 * and terminology slightly differ. 37 * 38 * RATE - the default mode - displays the precise rate of change in 39 * each statistic in units per second, regardless of the actual display 40 * update interval. 41 * 42 * DELTA - displays the change in each statistic over the entire 43 * display update interval (i.e., RATE * interval). 44 * 45 * SINCE - displays the total change in each statistic since the module 46 * was last initialized or reset. 47 * 48 * ABSOLUTE - displays the current value of each statistic. 49 * 50 * In the SGI programs, these modes are selected by the single-character 51 * commands D, W, N, and A. In systat, they are the slightly-harder-to-type 52 * ``mode delta'', etc. The initial value for SINCE mode is initialized 53 * when the module is first started and can be reset using the ``reset'' 54 * command (as opposed to the SGI way where changing modes implicitly 55 * resets). A ``mode'' command with no arguments displays the current 56 * mode in the command line. 57 */ 58 59 #include <sys/cdefs.h> 60 61 __FBSDID("$FreeBSD$"); 62 63 #include <sys/types.h> 64 65 #include "systat.h" 66 #include "extern.h" 67 #include "mode.h" 68 69 enum mode currentmode = display_RATE; 70 71 static const char *const modes[] = { "rate", "delta", "since", "absolute" }; 72 73 int 74 cmdmode(const char *cmd, const char *args) 75 { 76 if (prefix(cmd, "mode")) { 77 if (args[0] == '\0') { 78 move(CMDLINE, 0); 79 clrtoeol(); 80 printw("%s", modes[currentmode]); 81 } else if (prefix(args, "rate")) { 82 currentmode = display_RATE; 83 } else if (prefix(args, "delta")) { 84 currentmode = display_DELTA; 85 } else if (prefix(args, "since")) { 86 currentmode = display_SINCE; 87 } else if (prefix(args, "absolute")) { 88 currentmode = display_ABS; 89 } else { 90 printw("unknown mode `%s'", args); 91 } 92 return 1; 93 } 94 if(prefix(cmd, "reset")) { 95 curcmd->c_reset(); 96 return 1; 97 } 98 return 0; 99 } 100