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 60 #include <sys/types.h> 61 62 #include "systat.h" 63 #include "extern.h" 64 #include "mode.h" 65 66 enum mode currentmode = display_RATE; 67 68 static const char *const modes[] = { "rate", "delta", "since", "absolute" }; 69 70 int 71 cmdmode(const char *cmd, const char *args) 72 { 73 if (prefix(cmd, "mode")) { 74 if (args[0] == '\0') { 75 move(CMDLINE, 0); 76 clrtoeol(); 77 printw("%s", modes[currentmode]); 78 } else if (prefix(args, "rate")) { 79 currentmode = display_RATE; 80 } else if (prefix(args, "delta")) { 81 currentmode = display_DELTA; 82 } else if (prefix(args, "since")) { 83 currentmode = display_SINCE; 84 } else if (prefix(args, "absolute")) { 85 currentmode = display_ABS; 86 } else { 87 printw("unknown mode `%s'", args); 88 } 89 return 1; 90 } 91 if(prefix(cmd, "reset")) { 92 curcmd->c_reset(); 93 return 1; 94 } 95 return 0; 96 } 97