190075Sobrien/* 290075Sobrien * Copyright 1997 Massachusetts Institute of Technology 3132718Skan * 490075Sobrien * Permission to use, copy, modify, and distribute this software and 590075Sobrien * its documentation for any purpose and without fee is hereby 6132718Skan * granted, provided that both the above copyright notice and this 790075Sobrien * permission notice appear in all copies, that both the above 8132718Skan * copyright notice and this permission notice appear in all 9132718Skan * supporting documentation, and that the name of M.I.T. not be used 10132718Skan * in advertising or publicity pertaining to distribution of the 11132718Skan * software without specific, written prior permission. M.I.T. makes 1290075Sobrien * no representations about the suitability of this software for any 13132718Skan * purpose. It is provided "as is" without express or implied 14132718Skan * warranty. 15132718Skan * 16132718Skan * THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''. M.I.T. DISCLAIMS 1790075Sobrien * ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE, 18132718Skan * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19132718Skan * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT 20169689Skan * SHALL M.I.T. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21169689Skan * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2290075Sobrien * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 23132718Skan * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 2490075Sobrien * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 2590075Sobrien * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 2690075Sobrien * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2790075Sobrien * SUCH DAMAGE. 2890075Sobrien */ 2990075Sobrien 30132718Skan/* 3190075Sobrien * 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 69enum mode currentmode = display_RATE; 70 71static const char *const modes[] = { "rate", "delta", "since", "absolute" }; 72 73int 74cmdmode(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