summaryrefslogtreecommitdiff
path: root/src
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 /src
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.
Diffstat (limited to 'src')
-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} {