Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 10 Jun 2018 08:59:57 +0000 (UTC)
From:      Eitan Adler <eadler@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r334919 - head/usr.bin/top
Message-ID:  <201806100859.w5A8xvlO082115@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: eadler
Date: Sun Jun 10 08:59:57 2018
New Revision: 334919
URL: https://svnweb.freebsd.org/changeset/base/334919

Log:
  top(1): bring some structure to commands
  
  Right now this is only used for help text but it'll eventually be used
  to build up long options array, dispatch commands, etc.

Modified:
  head/usr.bin/top/commands.c
  head/usr.bin/top/commands.h
  head/usr.bin/top/top.h

Modified: head/usr.bin/top/commands.c
==============================================================================
--- head/usr.bin/top/commands.c	Sun Jun 10 06:33:49 2018	(r334918)
+++ head/usr.bin/top/commands.c	Sun Jun 10 08:59:57 2018	(r334919)
@@ -51,61 +51,56 @@ static int str_addarg(char *str, int len, char *arg, b
  *		either 'h' or '?'.
  */
 
+static const struct command all_commands[] =
+{
+	{'C', "toggle the displaying of weighted CPU percentage", false },
+	{'d', "change number of displays to show", false},
+	{'e', "list errors generated by last \"kill\" or \"renice\" command", false},
+	{'H', "toggle the displaying of threads", false},
+	{'h', "show this help text", false},
+	{'i', "toggle the displaying of idle processes", false},
+	{'j', "toggle the displaying of jail ID", false},
+	{'J', "display processes for only one jail (+ selects all jails)", false},
+	{'k', "kill processes; send a signal to a list of processes", false},
+	{'q', "quit" , false},
+	{'m', "toggle the display between 'cpu' and 'io' modes", false},
+	{'n', "change number of processes to display", false},
+	{'o', "specify the sort order", false},
+	{'p', "display one process (+ selects all processes)", false},
+	{'P', "toggle the displaying of per-CPU statistics", false},
+	{'r', "renice a process", false},
+	{'s', "change number of seconds to delay between updates", false},
+	{'S', "toggle the displaying of system processes", false},
+	{'a', "toggle the displaying of process titles", false},
+	{'T', "toggle the displaying of thread IDs", false},
+	{'t', "toggle the display of this process", false},
+	{'u', "display processes for only one user (+ selects all users)", false},
+	{'w', "toggle the display of swap use for each process", false},
+	{'z', "toggle the displaying of the system idle process", false },
+	{0, NULL, true}
+};
+/* XXX: eventually remove command_chars, but assert they are the same for now */
+
 void
 show_help(void)
 {
-    printf("Top version FreeBSD, %s\n", copyright);
-    fputs("\n\n\
-A top users display for Unix\n\
-\n\
-These single-character commands are available:\n\
-\n\
-^L      - redraw screen\n\
-q       - quit\n\
-h or ?  - help; show this text\n", stdout);
+	const struct command *curcmd;
 
-    /* not all commands are available with overstrike terminals */
+    printf("Top version FreeBSD, %s\n", copyright);
+	curcmd = all_commands;
+	while (curcmd->c != 0) {
+		if (overstrike && !curcmd->available_to_dumb) {
+			++curcmd;
+			continue;
+		}
+		printf("%c\t- %s\n", curcmd->c, curcmd->desc);
+		++curcmd;
+	}
     if (overstrike)
     {
-	fputs("\n\
-Other commands are also available, but this terminal is not\n\
-sophisticated enough to handle those commands gracefully.\n\n", stdout);
-    }
-    else
-    {
-	fputs("\
-C       - toggle the displaying of weighted CPU percentage\n\
-d       - change number of displays to show\n\
-e       - list errors generated by last \"kill\" or \"renice\" command\n\
-H       - toggle the displaying of threads\n\
-i or I  - toggle the displaying of idle processes\n\
-j       - toggle the displaying of jail ID\n\
-J       - display processes for only one jail (+ selects all jails)\n\
-k       - kill processes; send a signal to a list of processes\n\
-m       - toggle the display between 'cpu' and 'io' modes\n\
-n or #  - change number of processes to display\n", stdout);
-	if (displaymode == DISP_CPU)
 		fputs("\
-o       - specify sort order (pri, size, res, cpu, time, threads, jid, pid)\n",
-	    stdout);
-	else
-		fputs("\
-o       - specify sort order (vcsw, ivcsw, read, write, fault, total, jid, pid)\n",
-	    stdout);
-	fputs("\
-p       - display one process (+ selects all processes)\n\
-P       - toggle the displaying of per-CPU statistics\n\
-r       - renice a process\n\
-s       - change number of seconds to delay between updates\n\
-S       - toggle the displaying of system processes\n\
-a       - toggle the displaying of process titles\n\
-T       - toggle the displaying of thread IDs\n\
-t       - toggle the display of this process\n\
-u       - display processes for only one user (+ selects all users)\n\
-w       - toggle the display of swap use for each process\n\
-z       - toggle the displaying of the system idle process\n\
-\n\
-\n", stdout);
+				Other commands are also available, but this terminal is not\n\
+				sophisticated enough to handle those commands gracefully.\n", stdout);
     }
 }
 
@@ -352,17 +347,17 @@ show_errors(void)
     }
 }
 
-static char no_proc_specified[] = " no processes specified";
-static char invalid_signal_number[] = " invalid_signal_number";
-static char bad_signal_name[] = " bad signal name";
-static char bad_pri_value[] = " bad priority value";
+static const char no_proc_specified[] = " no processes specified";
+static const char invalid_signal_number[] = " invalid_signal_number";
+static const char bad_signal_name[] = " bad signal name";
+static const char bad_pri_value[] = " bad priority value";
 
 /*
  *  kill_procs(str) - send signals to processes, much like the "kill"
  *		command does; invoked in response to 'k'.
  */
 
-char *
+const char *
 kill_procs(char *str)
 {
     char *nptr;
@@ -450,7 +445,7 @@ kill_procs(char *str)
  *		"renice" command does; invoked in response to 'r'.
  */
 
-char *
+const char *
 renice_procs(char *str)
 {
     char negate;

Modified: head/usr.bin/top/commands.h
==============================================================================
--- head/usr.bin/top/commands.h	Sun Jun 10 06:33:49 2018	(r334918)
+++ head/usr.bin/top/commands.h	Sun Jun 10 08:59:57 2018	(r334919)
@@ -18,4 +18,10 @@ void	show_errors(void);
 int	error_count(void);
 void	show_help(void);
 
+struct command {
+	char c;
+	const char * const desc;
+	bool available_to_dumb;
+};
+
 #endif /* COMMANDS_H */

Modified: head/usr.bin/top/top.h
==============================================================================
--- head/usr.bin/top/top.h	Sun Jun 10 06:33:49 2018	(r334918)
+++ head/usr.bin/top/top.h	Sun Jun 10 08:59:57 2018	(r334919)
@@ -43,8 +43,8 @@ extern const char * myname;
 
 extern int (*compares[])(const void*, const void*);
 
-char* kill_procs(char *);
-char* renice_procs(char *);
+const char* kill_procs(char *);
+const char* renice_procs(char *);
 
 extern char copyright[];
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201806100859.w5A8xvlO082115>