summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZachary T Welch <zw@superlucidity.net>2009-11-23 12:00:31 -0800
committerZachary T Welch <zw@superlucidity.net>2009-11-24 21:37:37 -0800
commitc297a14f7072d98bdad6bd7b9bac3a3069de9ed9 (patch)
treeefb46ad842c39e9e364aa6c7d033396e7b36cce6
parent6b066cd17073d868b88414556d1ca3f0580449ec (diff)
downloadopenocd+libswd-c297a14f7072d98bdad6bd7b9bac3a3069de9ed9.tar.gz
openocd+libswd-c297a14f7072d98bdad6bd7b9bac3a3069de9ed9.tar.bz2
openocd+libswd-c297a14f7072d98bdad6bd7b9bac3a3069de9ed9.tar.xz
openocd+libswd-c297a14f7072d98bdad6bd7b9bac3a3069de9ed9.zip
improve usage and help command output
Rewrite formatting code in C, removing last remenants of TCL help code. Sinificantly improves the readability by using smarter indent and wrap.
-rw-r--r--src/helper/command.c48
-rw-r--r--src/helper/startup.tcl34
2 files changed, 38 insertions, 44 deletions
diff --git a/src/helper/command.c b/src/helper/command.c
index 1263a931..a1ba3585 100644
--- a/src/helper/command.c
+++ b/src/helper/command.c
@@ -811,20 +811,48 @@ static COMMAND_HELPER(command_help_show_list, struct command *head, unsigned n,
CALL_COMMAND_HANDLER(command_help_show, c, n, show_help);
return ERROR_OK;
}
+
+#define HELP_LINE_WIDTH(_n) (int)(76 - (2 * _n))
+
+static void command_help_show_indent(unsigned n)
+{
+ for (unsigned i = 0; i < n; i++)
+ LOG_USER_N(" ");
+}
+static void command_help_show_wrap(const char *str, unsigned n, unsigned n2)
+{
+ const char *cp = str, *last = str;
+ while (*cp)
+ {
+ const char *next = last;
+ do {
+ cp = next;
+ do {
+ next++;
+ } while (*next != ' ' && *next != '\t' && *next != '\0');
+ } while ((next - last < HELP_LINE_WIDTH(n)) && *next != '\0');
+ if (next - last < HELP_LINE_WIDTH(n))
+ cp = next;
+ command_help_show_indent(n);
+ LOG_USER_N("%.*s", (int)(cp - last), last);
+ LOG_USER_N("\n");
+ last = cp + 1;
+ n = n2;
+ }
+}
static COMMAND_HELPER(command_help_show, struct command *c, unsigned n,
bool show_help)
{
- const char *usage = c->usage ? : "";
- const char *help = "";
- const char *sep = "";
- if (show_help && c->help)
- {
- help = c->help ? : "";
- sep = c->usage ? " | " : "";
+ command_help_show_indent(n);
+ LOG_USER_N("%s", command_name(c, ' '));
+ if (c->usage) {
+ LOG_USER_N(" ");
+ command_help_show_wrap(c->usage, 0, n + 5);
}
- command_run_linef(CMD_CTX, "cmd_help {%s} {%s%s%s} %d",
- command_name(c, ' '), usage, sep, help, n);
-
+ else
+ LOG_USER_N("\n");
+ if (show_help && c->help)
+ command_help_show_wrap(c->help, n + 3, n + 3);
if (++n >= 2)
return ERROR_OK;
diff --git a/src/helper/startup.tcl b/src/helper/startup.tcl
index 5969cfec..f11d5b68 100644
--- a/src/helper/startup.tcl
+++ b/src/helper/startup.tcl
@@ -10,40 +10,6 @@ proc exit {} {
ocd_throw exit
}
-# Help text list. A list of command + help text pairs.
-proc cmd_help {cmdname h indent} {
- set indent [expr $indent * 2]
-
- set fmt_str [format "%%%ds%%-%ds %%s" $indent [expr 25 - $indent]]
- set w [expr 50 - $indent]
- set n 0
-
- while 1 {
- if {$n > [string length $h]} {break}
-
- set next_a [expr $n + $w]
- if {[string length $h] > $n + $w} \
- {
- set xxxx [string range $h $n [expr $n + $w]]
- for {set lastpos [expr [string length $xxxx] - 1]} \
- {$lastpos >= 0 && [string compare \
- [string range $xxxx $lastpos $lastpos] " "] != 0} \
- {set lastpos [expr $lastpos - 1]} \
- {
- }
- #set next_a -1
- if {$lastpos != -1} {
- set next_a [expr $lastpos + $n + 1]
- }
- }
-
- puts [format $fmt_str "" $cmdname \
- [string range $h $n [expr $next_a - 1]] ]
- set cmdname ""
- set n [expr $next_a]
- }
-}
-
# Try flipping / and \ to find file if the filename does not
# match the precise spelling
proc find {filename} {