sed: unbreak multiple -e, -f option handling (my fault)
[oweals/busybox.git] / include / usage.h
index 239bbb373805666db9278ad42bdb8b5ee63e3824..1da436ad4dbd02a9502790a42ba9d4cfb8063a20 100644 (file)
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
 #ifndef __BB_USAGE_H__
 #define __BB_USAGE_H__
 
 #define bbconfig_full_usage \
        "Print the config file which built busybox"
 
+#define bbsh_trivial_usage \
+       "[FILE]...\n" \
+       "or: bbsh -c command [args]..."
+#define bbsh_full_usage \
+       "The bbsh shell (command interpreter)"
+
 #define cp_trivial_usage \
        "[OPTION]... SOURCE DEST"
 #define cp_full_usage \
@@ -405,17 +412,17 @@ USE_FEATURE_DATE_ISOFMT( \
 #define deallocvt_trivial_usage \
        "[N]"
 #define deallocvt_full_usage \
-        "Deallocate unused virtual terminal /dev/ttyN"
+       "Deallocate unused virtual terminal /dev/ttyN"
 
 #define delgroup_trivial_usage \
        "GROUP"
 #define delgroup_full_usage \
-        "Deletes group GROUP from the system"
+       "Deletes group GROUP from the system"
 
 #define deluser_trivial_usage \
        "USER"
 #define deluser_full_usage \
-        "Deletes user USER from the system"
+       "Deletes user USER from the system"
 
 #define devfsd_trivial_usage \
        "mntpnt [-v]" \
@@ -492,9 +499,9 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t-s SIZE\t\tUse a buffer of size SIZE"
 
 #define dnsd_trivial_usage \
-        "[-c config] [-t seconds] [-p port] [-i iface-ip] [-d]"
+       "[-c config] [-t seconds] [-p port] [-i iface-ip] [-d]"
 #define dnsd_full_usage \
-        "Small and static DNS server daemon\n\n" \
+       "Small and static DNS server daemon\n\n" \
        "Options:\n" \
        "\t-c\t\tconfig filename\n" \
        "\t-t\t\tTTL in seconds\n" \
@@ -920,7 +927,7 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t-H login_host\tLog login_host into the utmp file as the hostname"
 
 #define grep_trivial_usage \
-       "[-ihHnqvs" \
+       "[-ihHnqvso" \
        USE_FEATURE_GREP_EGREP_ALIAS("E") \
        USE_FEATURE_GREP_CONTEXT("ABC") \
        "] PATTERN [FILEs...]"
@@ -938,6 +945,7 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t-s\tsuppress file open/read error messages\n" \
        "\t-c\tonly print count of matching lines\n" \
        "\t-f\tread PATTERN from file\n" \
+       "\t-o\tshow only the part of a line that matches PATTERN\n" \
        "\t-e\tPATTERN is a regular expression\n" \
        "\t-F\tPATTERN is a set of newline-separated strings" \
        USE_FEATURE_GREP_EGREP_ALIAS("\n\t-E\tPATTERN is an extended regular expression") \
@@ -994,7 +1002,7 @@ USE_FEATURE_DATE_ISOFMT( \
 #define hdparm_trivial_usage \
        "[options] [device] .."
 #define hdparm_full_usage \
-       USE_FEATURE_HDPARM_GET_IDENTITY("\tIf no device name is specified read from stdin.\n") \
+       USE_FEATURE_HDPARM_GET_IDENTITY("\tIf no device name is specified try to read from stdin.\n") \
        "\nOptions:\n" \
        "\t-a   get/set fs readahead\n" \
        "\t-A   set drive read-lookahead flag (0/1)\n" \
@@ -1122,18 +1130,12 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t-u\tthe hardware clock is kept in coordinated universal time\n" \
        "\t-l\tthe hardware clock is kept in local time"
 
-#ifdef CONFIG_SELINUX
-#  define USAGE_SELINUX(a) a
-#else
-#  define USAGE_SELINUX(a)
-#endif
-
 #define id_trivial_usage \
        "[OPTIONS]... [USERNAME]"
 #define id_full_usage \
        "Print information for USERNAME or the current user\n\n" \
        "Options:\n" \
-       USAGE_SELINUX("\t-c\tprints only the security context\n") \
+       USE_SELINUX("\t-c\tprints only the security context\n") \
        "\t-g\tprints only the group ID\n" \
        "\t-u\tprints only the user ID\n" \
        "\t-n\tprint a name instead of a number\n" \
@@ -1142,47 +1144,21 @@ USE_FEATURE_DATE_ISOFMT( \
        "$ id\n" \
        "uid=1000(andersen) gid=1000(andersen)\n"
 
-#ifdef CONFIG_FEATURE_IFCONFIG_SLIP
-#  define USAGE_SIOCSKEEPALIVE(a) a
-#else
-#  define USAGE_SIOCSKEEPALIVE(a)
-#endif
-#ifdef CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ
-#  define USAGE_IFCONFIG_MII(a) a
-#else
-#  define USAGE_IFCONFIG_MII(a)
-#endif
-#ifdef CONFIG_FEATURE_IFCONFIG_HW
-#  define USAGE_IFCONFIG_HW(a) a
-#else
-#  define USAGE_IFCONFIG_HW(a)
-#endif
-#ifdef CONFIG_FEATURE_IFCONFIG_STATUS
-#  define USAGE_IFCONFIG_OPT_A(a) a
-#else
-#  define USAGE_IFCONFIG_OPT_A(a)
-#endif
-#ifdef CONFIG_FEATURE_IPV6
-#  define USAGE_IPV6(a) a
-#else
-#  define USAGE_IPV6(a)
-#endif
-
 #define ifconfig_trivial_usage \
-       USAGE_IFCONFIG_OPT_A("[-a]") " <interface> [<address>]"
+       USE_FEATURE_IFCONFIG_STATUS("[-a]") " <interface> [<address>]"
 #define ifconfig_full_usage \
        "configure a network interface\n\n" \
        "Options:\n" \
-       USAGE_IPV6("\t[add <address>[/<prefixlen>]]\n") \
-       USAGE_IPV6("\t[del <address>[/<prefixlen>]]\n") \
+       USE_FEATURE_IPV6("\t[add <address>[/<prefixlen>]]\n") \
+       USE_FEATURE_IPV6("\t[del <address>[/<prefixlen>]]\n") \
        "\t[[-]broadcast [<address>]]  [[-]pointopoint [<address>]]\n" \
        "\t[netmask <address>]  [dstaddr <address>]\n" \
-       USAGE_SIOCSKEEPALIVE("\t[outfill <NN>] [keepalive <NN>]\n") \
-       "\t" USAGE_IFCONFIG_HW("[hw ether <address>]  ") \
+       USE_FEATURE_IFCONFIG_SLIP("\t[outfill <NN>] [keepalive <NN>]\n") \
+       "\t" USE_FEATURE_IFCONFIG_HW("[hw ether <address>]  ") \
        "[metric <NN>]  [mtu <NN>]\n" \
        "\t[[-]trailers]  [[-]arp]  [[-]allmulti]\n" \
        "\t[multicast]  [[-]promisc]  [txqueuelen <NN>]  [[-]dynamic]\n" \
-       USAGE_IFCONFIG_MII("\t[mem_start <NN>]  [io_addr <NN>]  [irq <NN>]\n") \
+       USE_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ("\t[mem_start <NN>]  [io_addr <NN>]  [irq <NN>]\n") \
        "\t[up|down] ..."
 
 #define ifup_trivial_usage \
@@ -1353,11 +1329,6 @@ USE_FEATURE_DATE_ISOFMT( \
 "      ::shutdown:/bin/umount -a -r\n" \
 "      ::shutdown:/sbin/swapoff -a\n"
 
-#ifdef CONFIG_FEATURE_INSMOD_LOAD_MAP
-#  define USAGE_INSMOD_MAP(a) a
-#else
-#  define USAGE_INSMOD_MAP(a)
-#endif
 #define insmod_trivial_usage \
        "[OPTION]... MODULE [symbol=value]..."
 #define insmod_full_usage \
@@ -1368,7 +1339,7 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t-v\tverbose output\n"  \
        "\t-q\tquiet output\n" \
        "\t-L\tLock to prevent simultaneous loads of a module\n" \
-       USAGE_INSMOD_MAP("\t-m\tOutput load map to stdout\n") \
+       USE_FEATURE_INSMOD_LOAD_MAP("\t-m\tOutput load map to stdout\n") \
        "\t-o NAME\tSet internal module name to NAME\n" \
        "\t-x\tdo not export externs"
 
@@ -1404,11 +1375,6 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t\t\t[ label STRING ] [ scope SCOPE-ID ]\n" \
        "\t\t\tSCOPE-ID := [ host | link | global | NUMBER ]"
 
-#ifdef CONFIG_FEATURE_IPCALC_FANCY
-#  define XUSAGE_IPCALC_FANCY(a) a
-#else
-#  define XUSAGE_IPCALC_FANCY(a)
-#endif
 #define ipcalc_trivial_usage \
        "[OPTION]... <ADDRESS>[[/]<NETMASK>] [NETMASK]"
 #define ipcalc_full_usage \
@@ -1417,7 +1383,7 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t-b\t--broadcast\tDisplay calculated broadcast address\n" \
        "\t-n\t--network\tDisplay calculated network address\n" \
        "\t-m\t--netmask\tDisplay default netmask for IP" \
-       XUSAGE_IPCALC_FANCY( \
+       USE_FEATURE_IPCALC_FANCY( \
        "\n\t-p\t--prefix\tDisplay the prefix for IP/NETMASK\n" \
        "\t-h\t--hostname\tDisplay first resolved host name\n" \
        "\t-s\t--silent\tDon't ever display error messages")
@@ -1425,15 +1391,15 @@ USE_FEATURE_DATE_ISOFMT( \
 #define ipcrm_trivial_usage \
        "[-[MQS] key] [-[mqs] id]"
 #define ipcrm_full_usage \
-       "The upper-case options MQS are used to remove a shared memory\n" \
-       "segment by an shmkey value. The lower-case options mqs are used\n" \
+       "The upper-case options MQS are used to remove a shared memory segment by a\n" \
+       "segment by a shmkey value. The lower-case options mqs are used\n" \
        "to remove a segment by shmid value.\n" \
-       "\t-m | -M\tRemove the memory segment after the last detach\n" \
-       "\t-q | -Q\tRemove the message queue\n" \
-       "\t-s | -S\tRemove the semaphore"
+       "\t-[mM]\tRemove the memory segment after the last detach\n" \
+       "\t-[qQ]\tRemove the message queue\n" \
+       "\t-[sS]\tRemove the semaphore"
 
 #define ipcs_trivial_usage \
-       "[[-smq] -i shmid] | [[-asmq] [-tclup]]"
+       "[[-smq] -i shmid] | [[-asmq] [-tcplu]]"
 #define ipcs_full_usage \
        "\t-i\tspecify a specific resource id\n" \
        "Resource specification:\n" \
@@ -1443,10 +1409,10 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t-a\tall (default)\n" \
        "Output format:\n" \
        "\t-t\ttime\n" \
+       "\t-c\tcreator\n" \
        "\t-p\tpid\n" \
-       "\t-s\tcreator\n" \
-       "\t-a\tlimits\n" \
-       "\t-i\tsummary"
+       "\t-l\tlimits\n" \
+       "\t-u\tsummary"
 
 #define iplink_trivial_usage \
        "{ set DEVICE { up | down | arp { on | off } | show [ DEVICE ] }"
@@ -1478,9 +1444,9 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t\t\t[ ttl TTL ] [ tos TOS ] [ [no]pmtudisc ] [ dev PHYS_DEV ]"
 
 #define kill_trivial_usage \
-       "[-signal] process-id [process-id ...]"
+       "[-l] [-signal] process-id [process-id ...]"
 #define kill_full_usage \
-       "Send a signal (default is SIGTERM) to the specified process(es).\n\n" \
+       "Send a signal (default is TERM) to the specified process(es).\n\n" \
        "Options:\n" \
        "\t-l\tList all signal names and numbers"
 #define kill_example_usage \
@@ -1494,15 +1460,22 @@ USE_FEATURE_DATE_ISOFMT( \
        "$ kill 252\n"
 
 #define killall_trivial_usage \
-       "[-q] [-signal] process-name [process-name ...]"
+       "[-l] [-q] [-signal] process-name [process-name ...]"
 #define killall_full_usage \
-       "Send a signal (default is SIGTERM) to the specified process(es).\n\n" \
+       "Send a signal (default is TERM) to the specified process(es).\n\n" \
        "Options:\n" \
        "\t-l\tList all signal names and numbers\n" \
        "\t-q\tDo not complain if no processes were killed"
 #define killall_example_usage \
        "$ killall apache\n"
 
+#define killall5_trivial_usage \
+       "[-l] [-signal]"
+#define killall5_full_usage \
+       "Send a signal (default is TERM) to all processes outside current session.\n\n" \
+       "Options:\n" \
+       "\t-l\tList all signal names and numbers\n" \
+
 #define klogd_trivial_usage \
        "[-c n] [-n]"
 #define klogd_full_usage \
@@ -1609,57 +1582,29 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t-f\t\toutput data as the log grows"
 
 #define losetup_trivial_usage \
-       "[-od] LOOPDEVICE [FILE]"
+       "[-o OFFSET] [-d] LOOPDEVICE [FILE]]"
 #define losetup_full_usage \
-       "Associate LOOPDEVICE with FILE, or display current association.\n\n" \
+       "(Dis)associate LOOPDEVICE with FILE, or display current associations.\n\n" \
        "Options:\n" \
        "\t-d\t\tDisassociate LOOPDEVICE\n" \
        "\t-o OFFSET\tStart OFFSET bytes into FILE"
 #define losetup_notes_usage \
+       "No arguments will display all current associations.\n" \
        "One argument (losetup /dev/loop1) will display the current association\n" \
        "(if any), or disassociate it (with -d).  The display shows the offset\n" \
        "and filename of the file the loop device is currently bound to.\n\n" \
        "Two arguments (losetup /dev/loop1 file.img) create a new association,\n" \
        "with an optional offset (-o 12345).  Encryption is not yet supported.\n\n"
 
-#ifdef CONFIG_FEATURE_LS_TIMESTAMPS
-#  define USAGE_LS_TIMESTAMPS(a) a
-#else
-#  define USAGE_LS_TIMESTAMPS(a)
-#endif
-#ifdef CONFIG_FEATURE_LS_FILETYPES
-#  define USAGE_LS_FILETYPES(a) a
-#else
-#  define USAGE_LS_FILETYPES(a)
-#endif
-#ifdef CONFIG_FEATURE_LS_FOLLOWLINKS
-#  define USAGE_LS_FOLLOWLINKS(a) a
-#else
-#  define USAGE_LS_FOLLOWLINKS(a)
-#endif
-#ifdef CONFIG_FEATURE_LS_RECURSIVE
-#  define USAGE_LS_RECURSIVE(a) a
-#else
-#  define USAGE_LS_RECURSIVE(a)
-#endif
-#ifdef CONFIG_FEATURE_LS_SORTFILES
-#  define USAGE_LS_SORTFILES(a) a
-#else
-#  define USAGE_LS_SORTFILES(a)
-#endif
-#ifdef CONFIG_FEATURE_AUTOWIDTH
-#  define USAGE_AUTOWIDTH(a) a
-#else
-#  define USAGE_AUTOWIDTH(a)
-#endif
-#ifdef CONFIG_FEATURE_LS_COLOR
-  #define USAGE_LS_COLOR(a) a
-#else
-  #define USAGE_LS_COLOR(a)
-#endif
-
 #define ls_trivial_usage \
-       "[-1Aa" USAGE_LS_TIMESTAMPS("c") "Cd" USAGE_LS_TIMESTAMPS("e") USAGE_LS_FILETYPES("F") "iln" USAGE_LS_FILETYPES("p") USAGE_LS_FOLLOWLINKS("L") USAGE_LS_RECURSIVE("R") USAGE_LS_SORTFILES("rS") "s" USAGE_AUTOWIDTH("T") USAGE_LS_TIMESTAMPS("tu") USAGE_LS_SORTFILES("v") USAGE_AUTOWIDTH("w") "x" USAGE_LS_SORTFILES("X") USE_FEATURE_HUMAN_READABLE("h") "k" USAGE_SELINUX("K") "] [filenames...]"
+       "[-1Aa" USE_FEATURE_LS_TIMESTAMPS("c") "Cd" \
+       USE_FEATURE_LS_TIMESTAMPS("e")  USE_FEATURE_LS_FILETYPES("F") "iln" \
+       USE_FEATURE_LS_FILETYPES("p") USE_FEATURE_LS_FOLLOWLINKS("L") \
+       USE_FEATURE_LS_RECURSIVE("R") USE_FEATURE_LS_SORTFILES("rS") "s" \
+       USE_FEATURE_AUTOWIDTH("T") USE_FEATURE_LS_TIMESTAMPS("tu") \
+       USE_FEATURE_LS_SORTFILES("v") USE_FEATURE_AUTOWIDTH("w") "x" \
+       USE_FEATURE_LS_SORTFILES("X") USE_FEATURE_HUMAN_READABLE("h") "k" \
+       USE_SELINUX("K") "] [filenames...]"
 #define ls_full_usage \
        "List directory contents\n\n" \
        "Options:\n" \
@@ -1667,31 +1612,31 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t-A\tdo not list implied . and ..\n" \
        "\t-a\tdo not hide entries starting with .\n" \
        "\t-C\tlist entries by columns\n" \
-       USAGE_LS_TIMESTAMPS("\t-c\twith -l: show ctime\n") \
-       USAGE_LS_COLOR("\t--color[={always,never,auto}]\tto control coloring\n") \
+       USE_FEATURE_LS_TIMESTAMPS("\t-c\twith -l: show ctime\n") \
+       USE_FEATURE_LS_COLOR("\t--color[={always,never,auto}]\tto control coloring\n") \
        "\t-d\tlist directory entries instead of contents\n" \
-       USAGE_LS_TIMESTAMPS("\t-e\tlist both full date and full time\n") \
-       USAGE_LS_FILETYPES("\t-F\tappend indicator (one of */=@|) to entries\n") \
+       USE_FEATURE_LS_TIMESTAMPS("\t-e\tlist both full date and full time\n") \
+       USE_FEATURE_LS_FILETYPES("\t-F\tappend indicator (one of */=@|) to entries\n") \
        "\t-i\tlist the i-node for each file\n" \
        "\t-l\tuse a long listing format\n" \
        "\t-n\tlist numeric UIDs and GIDs instead of names\n" \
-       USAGE_LS_FILETYPES("\t-p\tappend indicator (one of /=@|) to entries\n") \
-       USAGE_LS_FOLLOWLINKS("\t-L\tlist entries pointed to by symbolic links\n") \
-       USAGE_LS_RECURSIVE("\t-R\tlist subdirectories recursively\n") \
-       USAGE_LS_SORTFILES("\t-r\tsort the listing in reverse order\n") \
-       USAGE_LS_SORTFILES("\t-S\tsort the listing by file size\n") \
+       USE_FEATURE_LS_FILETYPES("\t-p\tappend indicator (one of /=@|) to entries\n") \
+       USE_FEATURE_LS_FOLLOWLINKS("\t-L\tlist entries pointed to by symbolic links\n") \
+       USE_FEATURE_LS_RECURSIVE("\t-R\tlist subdirectories recursively\n") \
+       USE_FEATURE_LS_SORTFILES("\t-r\tsort the listing in reverse order\n") \
+       USE_FEATURE_LS_SORTFILES("\t-S\tsort the listing by file size\n") \
        "\t-s\tlist the size of each file, in blocks\n" \
-       USAGE_AUTOWIDTH("\t-T NUM\tassume Tabstop every NUM columns\n") \
-       USAGE_LS_TIMESTAMPS("\t-t\twith -l: show modification time\n") \
-       USAGE_LS_TIMESTAMPS("\t-u\twith -l: show access time\n") \
-       USAGE_LS_SORTFILES("\t-v\tsort the listing by version\n") \
-       USAGE_AUTOWIDTH("\t-w NUM\tassume the terminal is NUM columns wide\n") \
+       USE_FEATURE_AUTOWIDTH("\t-T NUM\tassume Tabstop every NUM columns\n") \
+       USE_FEATURE_LS_TIMESTAMPS("\t-t\twith -l: show modification time\n") \
+       USE_FEATURE_LS_TIMESTAMPS("\t-u\twith -l: show access time\n") \
+       USE_FEATURE_LS_SORTFILES("\t-v\tsort the listing by version\n") \
+       USE_FEATURE_AUTOWIDTH("\t-w NUM\tassume the terminal is NUM columns wide\n") \
        "\t-x\tlist entries by lines instead of by columns\n" \
-       USAGE_LS_SORTFILES("\t-X\tsort the listing by extension\n") \
+       USE_FEATURE_LS_SORTFILES("\t-X\tsort the listing by extension\n") \
        USE_FEATURE_HUMAN_READABLE( \
        "\t-h\tprint sizes in human readable format (e.g., 1K 243M 2G )\n") \
-       USAGE_SELINUX("\t-k\tprint security context\n") \
-       USAGE_SELINUX("\t-K\tprint security context in long format\n")
+       USE_SELINUX("\t-k\tprint security context\n") \
+       USE_SELINUX("\t-K\tprint security context in long format\n")
 
 #define lsattr_trivial_usage \
        "[-Radlv] [files...]"
@@ -1765,24 +1710,18 @@ USE_FEATURE_DATE_ISOFMT( \
        "/dev/hda[0-15]\n"
 #endif
 
-#ifdef CONFIG_FEATURE_MD5_SHA1_SUM_CHECK
-#define USAGE_MD5_SHA1_SUM_CHECK(a) a
-#else
-#define USAGE_MD5_SHA1_SUM_CHECK(a)
-#endif
-
 #define md5sum_trivial_usage \
        "[OPTION] [FILEs...]" \
-       USAGE_MD5_SHA1_SUM_CHECK("\n   or: md5sum [OPTION] -c [FILE]")
+       USE_FEATURE_MD5_SHA1_SUM_CHECK("\n   or: md5sum [OPTION] -c [FILE]")
 #define md5sum_full_usage \
-       "Print" USAGE_MD5_SHA1_SUM_CHECK(" or check") " MD5 checksums.\n\n" \
+       "Print" USE_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " MD5 checksums.\n\n" \
        "Options:\n" \
        "With no FILE, or when FILE is -, read standard input." \
-       USAGE_MD5_SHA1_SUM_CHECK("\n\n" \
+       USE_FEATURE_MD5_SHA1_SUM_CHECK("\n\n" \
        "\t-c\tcheck MD5 sums against given list\n" \
        "\nThe following two options are useful only when verifying checksums:\n" \
        "\t-s\tdon't output anything, status code shows success\n" \
-       "\t-w\twarn about improperly formated MD5 checksum lines")
+       "\t-w\twarn about improperly formatted MD5 checksum lines")
 #define md5sum_example_usage \
        "$ md5sum < busybox\n" \
        "6fd11e98b98a58f64ff3398d7b324003\n" \
@@ -1799,19 +1738,25 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t-s\tScan /sys and populate /dev during system boot\n\n" \
        "Called with no options (via hotplug) it uses environment variables\n" \
        "to determine which device to add/remove."
-#ifdef CONFIG_FEATURE_MDEV_CONFIG
-#define mdev_notes_usage \
+#define mdev_notes_usage "" \
+USE_FEATURE_MDEV_CONFIG( \
        "The mdev config file contains lines that look like:\n" \
        "  hd[a-z][0-9]* 0:3 660\n\n" \
        "That's device name (with regex match), uid:gid, and permissions.\n\n" \
-       "Optionally, that can be followed (on the same line) by an asterisk\n" \
-       "and a command line to run after creating the corresponding device(s),\n"\
-       "ala:\n\n" \
-       "  hdc root:cdrom 660  *ln -s hdc cdrom\n\n" \
+       USE_FEATURE_MDEV_EXEC( \
+               "Optionally, that can be followed (on the same line) by a special character\n" \
+               "and a command line to run after creating/before deleting the corresponding\n" \
+               "device(s).  The environment variable $MDEV indicates the active device node\n" \
+               "(which is useful if it's a regex match).  For example:\n\n" \
+               "  hdc root:cdrom 660  *ln -s $MDEV cdrom\n\n" \
+               "The special characters are @ (run after creating), $ (run before deleting),\n" \
+               "and * (run both after creating and before deleting).  The commands run in\n" \
+               "the /dev directory, and use system() which calls /bin/sh.\n\n" \
+       ) \
        "Config file parsing stops on the first matching line.  If no config\n"\
        "entry is matched, devices are created with default 0:0 660.  (Make\n"\
-       "the last line match .* to override this.)\n\n"
-#endif
+       "the last line match .* to override this.)\n\n" \
+)
 
 #define mesg_trivial_usage \
        "[y|n]"
@@ -1999,25 +1944,15 @@ USE_FEATURE_DATE_ISOFMT( \
 #define more_example_usage \
        "$ dmesg | more\n"
 
-#ifdef CONFIG_FEATURE_MOUNT_LOOP
-#  define USAGE_MOUNT_LOOP(a) a
-#else
-#  define USAGE_MOUNT_LOOP(a)
-#endif
-#ifdef CONFIG_FEATURE_MTAB_SUPPORT
-#  define USAGE_MTAB(a) a
-#else
-#  define USAGE_MTAB(a)
-#endif
 #define mount_trivial_usage \
        "[flags] DEVICE NODE [-o options,more-options]"
 #define mount_full_usage \
        "Mount a filesystem.  Filesystem autodetection requires /proc be mounted.\n\n" \
        "Flags:\n"  \
        "\t-a:\t\tMount all filesystems in fstab\n" \
-       USAGE_MTAB( \
-       "\t-f:\t\t\"Fake\" Add entry to mount table but don't mount it\n" \
-       "\t-n:\t\tDon't write a mount table entry\n" \
+       USE_FEATURE_MTAB_SUPPORT( \
+               "\t-f:\t\t\"Fake\" Add entry to mount table but don't mount it\n" \
+               "\t-n:\t\tDon't write a mount table entry\n" \
        ) \
        "\t-o option:\tOne of many filesystem options, listed below\n" \
        "\t-r:\t\tMount the filesystem read-only\n" \
@@ -2025,18 +1960,25 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t-w:\t\tMount for reading and writing (default)\n" \
        "\n" \
        "Options for use with the \"-o\" flag:\n" \
-       "\tasync/sync:\tWrites are asynchronous / synchronous\n" \
-       "\tatime/noatime:\tEnable / disable updates to inode access times\n" \
-       "\tdev/nodev:\tAllow use of special device files / disallow them\n" \
-       "\texec/noexec:\tAllow use of executable files / disallow them\n" \
-       USAGE_MOUNT_LOOP( \
-       "\tloop:\t\t Ignored (loop devices are autodetected)\n" \
+       USE_FEATURE_MOUNT_LOOP( \
+               "\tloop:\t\tIgnored (loop devices are autodetected)\n" \
+       ) \
+       USE_FEATURE_MOUNT_FLAGS( \
+               "\t[a]sync:\tWrites are asynchronous / synchronous\n" \
+               "\t[no]atime:\tDisable / enable updates to inode access times\n" \
+               "\t[no]diratime:\tDisable / enable atime updates to directories\n" \
+               "\t[no]dev:\tAllow use of special device files / disallow them\n" \
+               "\t[no]exec:\tAllow use of executable files / disallow them\n" \
+               "\t[no]suid:\tAllow set-user-id-root programs / disallow them\n" \
+               "\t[r]shared:\tConvert [recursively] to a shared subtree.\n" \
+               "\t[r]slave:\tConvert [recursively] to a slave subtree.\n" \
+               "\t[r]private:\tConvert [recursively] to a private subtree\n" \
+               "\t[un]bindable:\tMake mount point [un]able to be bind mounted.\n" \
+               "\tbind:\t\tBind a directory to an additional location\n" \
+               "\tmove:\t\tRelocate an existing mount point.\n" \
        ) \
-       "\tsuid/nosuid:\tAllow set-user-id-root programs / disallow them\n" \
        "\tremount:\tRe-mount a mounted filesystem, changing its flags\n" \
        "\tro/rw:\t\tMount for read-only / read-write\n" \
-       "\tbind:\t\tBind a directory to an additional location\n" \
-       "\tmove:\t\tRelocate an existing mount point.\n" \
        "\nThere are EVEN MORE flags that are specific to each filesystem\n" \
        "You'll have to see the written documentation for those filesystems"
 #define mount_example_usage \
@@ -2047,6 +1989,8 @@ USE_FEATURE_DATE_ISOFMT( \
        "$ mount /dev/fd0 /mnt -t msdos -o ro\n" \
        "$ mount /tmp/diskimage /opt -t ext2 -o loop\n" \
        "$ mount cd_image.iso mydir\n"
+#define mount_notes_usage \
+       "Returns 0 for success, number of failed mounts for -a, or errno for one mount."
 
 #define mountpoint_trivial_usage \
        "[-q] <[-d] DIR | -x DEVICE>"
@@ -2086,7 +2030,7 @@ USE_FEATURE_DATE_ISOFMT( \
 #define nameif_trivial_usage \
        "[-s] [-c FILE] [{IFNAME MACADDR}]"
 #define nameif_full_usage \
-       "Nameif renaming network interface while it in the down state.\n\n" \
+       "Nameif renames network interface while it in the down state.\n\n" \
        "Options:\n" \
        "\t-c FILE\t\tUse configuration file (default is /etc/mactab)\n" \
        "\t-s\t\tUse syslog (LOCAL0 facility)\n" \
@@ -2096,23 +2040,41 @@ USE_FEATURE_DATE_ISOFMT( \
        " or\n" \
        "$ nameif -c /etc/my_mactab_file\n" \
 
-#ifdef CONFIG_NC_GAPING_SECURITY_HOLE
-#  define USAGE_NC_EXEC(a) a
+#if ENABLE_NC_SERVER || ENABLE_NC_EXTRA
+#define NC_BR1 "["
+#define NC_BR2 "]"
 #else
-#  define USAGE_NC_EXEC(a)
+#define NC_BR1
+#define NC_BR2
 #endif
+
 #define nc_trivial_usage \
-       "[OPTIONS] [IP] [port]"
+       "[" \
+       NC_BR1 USE_NC_SERVER("-lp")USE_NC_EXTRA("iwf") NC_BR2 \
+       " ["USE_NC_EXTRA("FILENAME|")"{IPADDR PORTNUM}]"USE_NC_EXTRA(" [-e COMMAND]")
 #define nc_full_usage \
-       "Netcat opens a pipe to IP:port\n\n" \
-       "Options:\n" \
-       "\t-l\t\tlisten mode, for inbound connects\n" \
-       "\t-p PORT\t\tlocal port number\n" \
-       "\t-i SECS\t\tdelay interval for lines sent\n" \
-       USAGE_NC_EXEC( \
-       "\t-e PROG\t\tprogram to exec after connect (dangerous!)\n" \
+       "Netcat opens a pipe, either to IP:port\n\n" \
+       "Options:" \
+       USE_NC_EXTRA( \
+               "\n\t-e\t\texec rest of command line after connect\n" \
+               "\t-i SECS\t\tdelay interval for lines sent\n" \
+               "\t-w SECS\t\ttimeout for connect\n" \
+               "\t-f filename\tuse file (ala /dev/ttyS0) instead of network" \
        ) \
-       "\t-w SECS\t\ttimeout for connects and final net reads"
+       USE_NC_SERVER( \
+               "\n\t-l\t\tlisten mode, for inbound connects\n" \
+               USE_NC_EXTRA("\t\t\t(use -l twice with -e for persistent server)\n") \
+               "\t-p PORT\t\tlocal port number" \
+       )
+
+
+#define nc_notes_usage "" \
+       USE_NC_EXTRA( \
+               "To use netcat as a terminal emulator on a serial port:\n\n" \
+               "$ stty 115200 -F /dev/ttyS0\n" \
+               "$ stty raw -echo -ctlecho && nc -f /dev/ttyS0\n" \
+       ) ""
+
 #define nc_example_usage \
        "$ nc foobar.somedomain.com 25\n" \
        "220 foobar ESMTP Exim 3.12 #1 Sat, 15 Apr 2000 00:03:02 -0600\n" \
@@ -2178,11 +2140,6 @@ USE_FEATURE_DATE_ISOFMT( \
 #define openvt_example_usage \
        "openvt 2 /bin/ash\n"
 
-#ifdef CONFIG_FEATURE_SHA1_PASSWORDS
-#  define PASSWORD_ALG_TYPES(a) a
-#else
-#  define PASSWORD_ALG_TYPES(a)
-#endif
 #define passwd_trivial_usage \
        "[OPTION] [name]"
 #define passwd_full_usage \
@@ -2190,19 +2147,18 @@ USE_FEATURE_DATE_ISOFMT( \
        "changes the password for the current user.\n" \
        "Options:\n" \
        "\t-a\tDefine which algorithm shall be used for the password\n" \
-       "\t\t\t(Choices: des, md5" \
-       PASSWORD_ALG_TYPES(", sha1") \
-       ")\n\t-d\tDelete the password for the specified user account\n" \
+       "\t\t\t(Choices: des, md5, sha1)\n" \
+       "\t-d\tDelete the password for the specified user account\n" \
        "\t-l\tLocks (disables) the specified user account\n" \
        "\t-u\tUnlocks (re-enables) the specified user account"
 
 #define patch_trivial_usage \
-       "[-p<num>] [-i<patch.diff>]"
+       "[-p<num>] [-i <diff>]"
 #define patch_full_usage \
-       "[-p<num>]\n" \
-       "[-i<diff>]"
+       "\t-p <num>\tStrip <num> leading components from file names\n" \
+       "\t-i <diff>\tRead <diff> instead of stdin"
 #define patch_example_usage \
-       "$ patch -p1 <example.diff\n" \
+       "$ patch -p1 < example.diff\n" \
        "$ patch -p0 -i example.diff"
 
 #if ENABLE_FEATURE_PIDOF_SINGLE
@@ -2248,6 +2204,7 @@ USE_FEATURE_DATE_ISOFMT( \
        "Options:\n" \
        "\t-c COUNT\tSend only COUNT pings\n" \
        "\t-s SIZE\t\tSend SIZE data bytes in packets (default=56)\n" \
+       "\t-I IPADDR\tUse IPADDR as source address\n" \
        "\t-q\t\tQuiet mode, only displays output at start\n" \
        "\t\t\tand when finished"
 #endif
@@ -2329,7 +2286,7 @@ USE_FEATURE_DATE_ISOFMT( \
 #define ps_full_usage \
        "Report process status\n" \
        USAGE_PS \
-       USAGE_SELINUX("\n\t-c\tshow SE Linux context") \
+       USE_SELINUX("\n\t-c\tshow SE Linux context") \
        USAGE_PS_WIDE("\n\tw\twide output")
 
 #define ps_example_usage \
@@ -2361,17 +2318,17 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t-s\tSet the system date and time (default)\n" \
        "\t-p\tPrint the date and time"
 
-#ifdef CONFIG_FEATURE_READLINK_FOLLOW
-#define USAGE_READLINK_FOLLOW(a) a
-#else
-#define USAGE_READLINK_FOLLOW(a)
-#endif
+#define readahead_trivial_usage \
+       "[FILE]..."
+#define readahead_full_usage \
+       "Preloads FILE(s) in RAM cache so that subsequent reads for those" \
+       "files do not block on disk I/O."
 
 #define readlink_trivial_usage \
-       USAGE_READLINK_FOLLOW("[-f] ") "FILE"
+       USE_FEATURE_READLINK_FOLLOW("[-f] ") "FILE"
 #define readlink_full_usage \
        "Displays the value of a symbolic link." \
-       USAGE_READLINK_FOLLOW("\n\nOptions:\n" \
+       USE_FEATURE_READLINK_FOLLOW("\n\nOptions:\n" \
        "\t-f\tcanonicalize by following all symlinks")
 
 #define readprofile_trivial_usage \
@@ -2446,21 +2403,14 @@ USE_FEATURE_DATE_ISOFMT( \
 #define rmmod_example_usage \
        "$ rmmod tulip\n"
 
-#ifdef CONFIG_FEATURE_IPV6
-#  define USAGE_ROUTE_IPV6(a) a
-#else
-#  define USAGE_ROUTE_IPV6(a) "\t"
-#endif
-
-
 #define route_trivial_usage \
        "[{add|del|delete}]"
 #define route_full_usage \
        "Edit the kernel's routing tables.\n\n" \
        "Options:\n" \
-       "\t-n\t\tDont resolve names\n" \
-       "\t-e\t\tDisplay other/more information\n" \
-       "\t-A inet" USAGE_ROUTE_IPV6("{6}") "\tSelect address family"
+       "\t-n\tDont resolve names\n" \
+       "\t-e\tDisplay other/more information\n" \
+       "\t-A inet" USE_FEATURE_IPV6("{6}") "\tSelect address family"
 
 #define rpm_trivial_usage \
        "-i -q[ildc]p package.rpm"
@@ -2585,36 +2535,28 @@ USE_FEATURE_DATE_ISOFMT( \
 
 #define sha1sum_trivial_usage \
        "[OPTION] [FILEs...]" \
-       USAGE_MD5_SHA1_SUM_CHECK("\n   or: sha1sum [OPTION] -c [FILE]")
+       USE_FEATURE_MD5_SHA1_SUM_CHECK("\n   or: sha1sum [OPTION] -c [FILE]")
 #define sha1sum_full_usage \
-       "Print" USAGE_MD5_SHA1_SUM_CHECK(" or check") " SHA1 checksums.\n\n" \
+       "Print" USE_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA1 checksums.\n\n" \
        "Options:\n" \
        "With no FILE, or when FILE is -, read standard input." \
-       USAGE_MD5_SHA1_SUM_CHECK("\n\n" \
+       USE_FEATURE_MD5_SHA1_SUM_CHECK("\n\n" \
        "\t-c\tcheck SHA1 sums against given list\n" \
        "\nThe following two options are useful only when verifying checksums:\n" \
        "\t-s\tdon't output anything, status code shows success\n" \
-       "\t-w\twarn about improperly formated SHA1 checksum lines")
-
-#ifdef CONFIG_FEATURE_FANCY_SLEEP
-#  define USAGE_FANCY_SLEEP(a) a
-#  define USAGE_NOT_FANCY_SLEEP(a)
-#else
-#  define USAGE_FANCY_SLEEP(a)
-#  define USAGE_NOT_FANCY_SLEEP(a) a
-#endif
+       "\t-w\twarn about improperly formatted SHA1 checksum lines")
 
 #define sleep_trivial_usage \
-       USAGE_FANCY_SLEEP("[") "N" USAGE_FANCY_SLEEP("]...")
+       USE_FEATURE_FANCY_SLEEP("[") "N" USE_FEATURE_FANCY_SLEEP("]...")
 #define sleep_full_usage \
-       USAGE_NOT_FANCY_SLEEP("Pause for N seconds.") \
-       USAGE_FANCY_SLEEP( \
+       SKIP_FEATURE_FANCY_SLEEP("Pause for N seconds.") \
+       USE_FEATURE_FANCY_SLEEP( \
        "Pause for a time equal to the total of the args given, where each arg can\n" \
        "\t\thave an optional suffix of (s)econds, (m)inutes, (h)ours, or (d)ays.")
 #define sleep_example_usage \
        "$ sleep 2\n" \
        "[2 second delay results]\n" \
-       USAGE_FANCY_SLEEP("$ sleep 1d 3h 22m 8s\n" \
+       USE_FEATURE_FANCY_SLEEP("$ sleep 1d 3h 22m 8s\n" \
        "[98528 second delay results]\n")
 
 #if ENABLE_FEATURE_SORT_BIG
@@ -2677,27 +2619,27 @@ USE_FEATURE_DATE_ISOFMT( \
        "\n\t-b|--background\t\t\tforce process into background" \
        "\n\t-u|--user <username>|<uid>\tstop this user's processes" \
        "\n\t-x|--exec <executable>\t\tprogram to either start or check" \
-       "\n\t-m|--make-pidfile <filename>\tcreate the -p file and enter pid in it" \
+       "\n\t-m|--make-pidfile\tcreate the -p file and enter pid in it" \
        "\n\t-n|--name <process-name>\tstop processes with this name" \
        "\n\t-p|--pidfile <pid-file>\t\tsave or load pid using a pid-file" \
        "\n\t-q|--quiet\t\t\tbe quiet" \
-       "\n\t-s|--signal <signal>\t\tsignal to send (default TERM)"
+USE_FEATURE_START_STOP_DAEMON_FANCY( \
+       "\n\t-o|--oknodo\t\t\texit status 0 if nothing done" \
+       "\n\t-v|--verbose\t\t\tbe verbose" \
+) \
+       "\n\t-s|--signal <signal>\t\tsignal to send (default TERM)" \
+       "\n\t-U|--chuid <username>|<uid>\tstart process with this name"
 
-#ifdef CONFIG_FEATURE_STAT_FORMAT
-#  define USAGE_STAT_FORMAT(a) a
-#else
-#  define USAGE_STAT_FORMAT(a)
-#endif
 #define stat_trivial_usage \
        "[OPTION] FILE..."
 #define stat_full_usage \
        "display file (default) or filesystem status.\n\n" \
        "Options:\n" \
-       USAGE_STAT_FORMAT("\t-c fmt\tuse the specified format\n") \
+       USE_FEATURE_STAT_FORMAT("\t-c fmt\tuse the specified format\n") \
        "\t-f\tdisplay filesystem status\n" \
        "\t-L,-l\tdereference links\n" \
        "\t-t\tdisplay info in terse form\n" \
-       USAGE_STAT_FORMAT( \
+       USE_FEATURE_STAT_FORMAT( \
        "\nValid format sequences for files:\n" \
        "  %a   Access rights in octal\n" \
        "  %A   Access rights in human readable form\n" \
@@ -2775,9 +2717,7 @@ USE_FEATURE_DATE_ISOFMT( \
 #define sulogin_full_usage \
        "Single user login\n" \
        "Options:\n" \
-       "\t-f\tDo not authenticate (user already authenticated)\n" \
-       "\t-h\tName of the remote host for this login\n" \
-       "\t-p\tPreserve environment"
+       "\t-t\tTimeout"
 
 #define sum_trivial_usage \
        "[rs] [files...]"
@@ -2814,23 +2754,6 @@ USE_FEATURE_DATE_ISOFMT( \
 #define sync_full_usage \
        "Write all buffered filesystem blocks to disk."
 
-
-#ifdef CONFIG_FEATURE_ROTATE_LOGFILE
-#  define USAGE_ROTATE_LOGFILE(a) a
-#else
-#  define USAGE_ROTATE_LOGFILE(a)
-#endif
-#ifdef CONFIG_FEATURE_REMOTE_LOG
-#  define USAGE_REMOTE_LOG(a) a
-#else
-#  define USAGE_REMOTE_LOG(a)
-#endif
-#ifdef CONFIG_FEATURE_IPC_SYSLOG
-#  define USAGE_IPC_LOG(a) a
-#else
-#  define USAGE_IPC_LOG(a)
-#endif
-
 #define sysctl_trivial_usage \
        "[OPTIONS]... [VALUE]..."
 #define sysctl_full_usage \
@@ -2857,25 +2780,20 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t-m MIN\t\tMinutes between MARK lines (default=20, 0=off)\n" \
        "\t-n\t\tRun as a foreground process\n" \
        "\t-O FILE\t\tUse an alternate log file (default=/var/log/messages)\n" \
-       "\t-S\t\tMake logging output smaller." \
-       USAGE_ROTATE_LOGFILE( \
+       "\t-l n\tSets the local log level of messages to n\n" \
+       "\t-S\t\tMake logging output smaller" \
+       USE_FEATURE_ROTATE_LOGFILE( \
        "\n\t-s SIZE\t\tMax size (KB) before rotate (default=200KB, 0=off)\n" \
        "\t-b NUM\t\tNumber of rotated logs to keep (default=1, max=99, 0=purge)") \
-       USAGE_REMOTE_LOG( \
+       USE_FEATURE_REMOTE_LOG( \
        "\n\t-R HOST[:PORT]\tLog to IP or hostname on PORT (default PORT=514/UDP)\n" \
        "\t-L\t\tLog locally and via network logging (default is network only)") \
-       USAGE_IPC_LOG( \
+       USE_FEATURE_IPC_SYSLOG( \
        "\n\t-C [size(KiB)]\tLog to a circular buffer (read the buffer using logread)")
 #define syslogd_example_usage \
        "$ syslogd -R masterlog:514\n" \
        "$ syslogd -R 192.168.1.1:601\n"
 
-
-#ifndef CONFIG_FEATURE_FANCY_TAIL
-#  define USAGE_UNSIMPLE_TAIL(a)
-#else
-#  define USAGE_UNSIMPLE_TAIL(a) a
-#endif
 #define tail_trivial_usage \
        "[OPTION]... [FILE]..."
 #define tail_full_usage \
@@ -2883,10 +2801,10 @@ USE_FEATURE_DATE_ISOFMT( \
        "With more than one FILE, precede each with a header giving the\n" \
        "file name. With no FILE, or when FILE is -, read standard input.\n\n" \
        "Options:\n" \
-       USAGE_UNSIMPLE_TAIL("\t-c N[kbm]\toutput the last N bytes\n") \
+       USE_FEATURE_FANCY_TAIL("\t-c N[kbm]\toutput the last N bytes\n") \
        "\t-n N[kbm]\tprint last N lines instead of last 10\n" \
        "\t-f\t\toutput data as the file grows" \
-       USAGE_UNSIMPLE_TAIL( "\n\t-q\t\tnever output headers giving file names\n" \
+       USE_FEATURE_FANCY_TAIL( "\n\t-q\t\tnever output headers giving file names\n" \
        "\t-s SEC\t\twait SEC seconds between reads with -f\n" \
        "\t-v\t\talways output headers giving file names\n\n" \
        "If the first character of N (bytes or lines) is a '+', output begins with \n" \
@@ -2896,58 +2814,29 @@ USE_FEATURE_DATE_ISOFMT( \
        "$ tail -n 1 /etc/resolv.conf\n" \
        "nameserver 10.0.0.1\n"
 
-#ifdef CONFIG_FEATURE_TAR_CREATE
-#  define USAGE_TAR_CREATE(a) a
-#else
-#  define USAGE_TAR_CREATE(a)
-#endif
-#ifdef CONFIG_FEATURE_TAR_EXCLUDE
-#  define USAGE_TAR_EXCLUDE(a) a
-#else
-#  define USAGE_TAR_EXCLUDE(a)
-#endif
-#ifdef CONFIG_FEATURE_TAR_GZIP
-#  define USAGE_TAR_GZIP(a) a
-#else
-#  define USAGE_TAR_GZIP(a)
-#endif
-#ifdef CONFIG_FEATURE_TAR_BZIP2
-#  define USAGE_TAR_BZIP2(a) a
-#else
-#  define USAGE_TAR_BZIP2(a)
-#endif
-#ifdef CONFIG_FEATURE_TAR_LZMA
-#  define USAGE_TAR_LZMA(a) a
-#else
-#  define USAGE_TAR_LZMA(a)
-#endif
-#ifdef CONFIG_FEATURE_TAR_COMPRESS
-#  define USAGE_TAR_COMPRESS(a) a
-#else
-#  define USAGE_TAR_COMPRESS(a)
-#endif
-
 #define tar_trivial_usage \
-       "-[" USAGE_TAR_CREATE("c") USAGE_TAR_GZIP("z") USAGE_TAR_BZIP2("j") USAGE_TAR_LZMA("a") USAGE_TAR_COMPRESS("Z") "xtvO] " \
-       USAGE_TAR_EXCLUDE("[-X FILE]") \
+       "-[" USE_FEATURE_TAR_CREATE("c") USE_FEATURE_TAR_GZIP("z") \
+       USE_FEATURE_TAR_BZIP2("j") USE_FEATURE_TAR_LZMA("a") \
+       USE_FEATURE_TAR_COMPRESS("Z") "xtvO] " \
+       USE_FEATURE_TAR_FROM("[-X FILE]") \
        "[-f TARFILE] [-C DIR] [FILE(s)] ..."
 #define tar_full_usage \
        "Create, extract, or list files from a tar file.\n\n" \
        "Options:\n" \
-       USAGE_TAR_CREATE("\tc\t\tcreate\n") \
+       USE_FEATURE_TAR_CREATE("\tc\t\tcreate\n") \
        "\tx\t\textract\n" \
        "\tt\t\tlist\n" \
        "\nArchive format selection:\n" \
-       USAGE_TAR_GZIP("\tz\t\tFilter the archive through gzip\n") \
-       USAGE_TAR_BZIP2("\tj\t\tFilter the archive through bzip2\n") \
-       USAGE_TAR_LZMA("\ta\t\tFilter the archive through lzma\n") \
-       USAGE_TAR_COMPRESS("\tZ\t\tFilter the archive through compress\n") \
+       USE_FEATURE_TAR_GZIP("\tz\t\tFilter the archive through gzip\n") \
+       USE_FEATURE_TAR_BZIP2("\tj\t\tFilter the archive through bzip2\n") \
+       USE_FEATURE_TAR_LZMA("\ta\t\tFilter the archive through lzma\n") \
+       USE_FEATURE_TAR_COMPRESS("\tZ\t\tFilter the archive through compress\n") \
        "\nFile selection:\n" \
        "\tf\t\tname of TARFILE or \"-\" for stdin\n" \
        "\tO\t\textract to stdout\n" \
-       USAGE_TAR_EXCLUDE( \
+       USE_FEATURE_TAR_FROM( \
        "\texclude\t\tfile to exclude\n" \
-        "\tX\t\tfile with names to exclude\n" \
+       "\tX\t\tfile with names to exclude\n" \
        ) \
        "\tC\t\tchange to directory DIR before operation\n" \
        "\tv\t\tverbosely list files processed"
@@ -3026,22 +2915,6 @@ USE_FEATURE_DATE_ISOFMT( \
        "$ echo $?\n" \
        "1\n"
 
-#ifdef CONFIG_FEATURE_TFTP_GET
-#  define USAGE_TFTP_GET(a) a
-#else
-#  define USAGE_TFTP_GET(a)
-#endif
-#ifdef CONFIG_FEATURE_TFTP_PUT
-#  define USAGE_TFTP_PUT(a) a
-#else
-#  define USAGE_TFTP_PUT(a)
-#endif
-#ifdef CONFIG_FEATURE_TFTP_BLOCKSIZE
-#  define USAGE_TFTP_BS(a) a
-#else
-#  define USAGE_TFTP_BS(a)
-#endif
-
 #define tftp_trivial_usage \
        "[OPTION]... HOST [PORT]"
 #define tftp_full_usage \
@@ -3049,13 +2922,13 @@ USE_FEATURE_DATE_ISOFMT( \
        "Options:\n" \
        "\t-l FILE\tLocal FILE\n" \
        "\t-r FILE\tRemote FILE" \
-       USAGE_TFTP_GET( \
+       USE_FEATURE_TFTP_GET( \
        "\n\t-g\tGet file" \
        ) \
-       USAGE_TFTP_PUT( \
+       USE_FEATURE_TFTP_PUT( \
        "\n\t-p\tPut file" \
        ) \
-       USAGE_TFTP_BS( \
+       USE_FEATURE_TFTP_BLOCKSIZE( \
        "\n\t-b SIZE\tTransfer blocks of SIZE octets" \
        )
 #define time_trivial_usage \
@@ -3067,13 +2940,11 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t-v\tDisplays verbose resource usage information"
 
 #define top_trivial_usage \
-       "[-d <seconds>]"
+       "[-b] [-n count] [-d seconds]"
 #define top_full_usage \
-       "top provides an view of processor activity in real time.\n" \
-       "This utility reads the status for all processes in /proc each <seconds>\n" \
-       "and shows the status for however many processes will fit on the screen.\n" \
-       "This utility will not show processes that are started after program startup,\n" \
-       "but it will show the EXIT status for and PIDs that exit while it is running."
+       "top provides a view of process activity in real time.\n" \
+       "It reads the status of all processes from /proc each <seconds>\n" \
+       "and shows the status for however many processes will fit on the screen."
 
 #define touch_trivial_usage \
        "[-c] FILE [FILE ...]"
@@ -3171,6 +3042,7 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t-n,\t--now\tExit with failure if lease cannot be immediately negotiated\n" \
        "\t-p,\t--pidfile=file\tStore process ID of daemon in file\n" \
        "\t-q,\t--quit\tQuit after obtaining lease\n" \
+       "\t-R,\t--release\tRelease IP on quit\n" \
        "\t-r,\t--request=IP\tIP address to request (default: none)\n" \
        "\t-s,\t--script=file\tRun file at dhcp events (default: /usr/share/udhcpc/default.script)\n" \
        "\t-t,\t--retries=NUM\tSend up to NUM request packets\n"\
@@ -3182,21 +3054,16 @@ USE_FEATURE_DATE_ISOFMT( \
 #define udhcpd_full_usage \
        ""
 
-#ifdef CONFIG_FEATURE_MOUNT_FORCE
-#  define USAGE_MOUNT_FORCE(a) a
-#else
-#  define USAGE_MOUNT_FORCE(a)
-#endif
 #define umount_trivial_usage \
        "[flags] FILESYSTEM|DIRECTORY"
 #define umount_full_usage \
        "Unmount file systems\n" \
        "\nFlags:\n" "\t-a\tUnmount all file systems" \
-       USAGE_MTAB(" in /etc/mtab\n\t-n\tDon't erase /etc/mtab entries") \
+       USE_FEATURE_MTAB_SUPPORT(" in /etc/mtab\n\t-n\tDon't erase /etc/mtab entries") \
        "\n\t-r\tTry to remount devices as read-only if mount is busy" \
        "\n\t-l\tLazy umount (detach filesystem)" \
        "\n\t-f\tForce umount (i.e., unreachable NFS server)" \
-       USAGE_MOUNT_LOOP("\n\t-D\tDo not free loop device (if a loop device has been used)")
+       USE_FEATURE_MOUNT_LOOP("\n\t-D\tDo not free loop device (if a loop device has been used)")
 #define umount_example_usage \
        "$ umount /dev/hdc1 \n"
 
@@ -3343,11 +3210,12 @@ USE_FEATURE_DATE_ISOFMT( \
        "Mon Dec 17 10:31:44 GMT 2000"
 
 #define watchdog_trivial_usage \
-       "[-t <seconds>] DEV"
+       "[-t <seconds>] [-F] DEV"
 #define watchdog_full_usage \
        "Periodically write to watchdog device DEV.\n" \
        "Options:\n" \
-       "\t-t\tTimer period in seconds - default is 30"
+       "\t-t\tTimer period in seconds - default is 30\n" \
+       "\t-F\tStay in the foreground and don't fork"
 
 #define wc_trivial_usage \
        "[OPTION]... [FILE]..."
@@ -3365,7 +3233,8 @@ USE_FEATURE_DATE_ISOFMT( \
 
 #define wget_trivial_usage \
        "[-c|--continue] [-q|--quiet] [-O|--output-document file]\n" \
-       "\t\t[--header 'header: value'] [-Y|--proxy on/off] [-P DIR] url"
+       "\t\t[--header 'header: value'] [-Y|--proxy on/off] [-P DIR]\n" \
+       "\t\t[-U|--user-agent agent] url"
 #define wget_full_usage \
        "wget retrieves files via HTTP or FTP\n\n" \
        "Options:\n" \
@@ -3373,6 +3242,7 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t-q\tquiet mode - do not print\n" \
        "\t-P\tSet directory prefix to DIR\n" \
        "\t-O\tsave to filename ('-' for stdout)\n" \
+       "\t-U\tadjust 'User-Agent' field\n" \
        "\t-Y\tuse proxy ('on' or 'off')"
 
 #define which_trivial_usage \
@@ -3393,32 +3263,15 @@ USE_FEATURE_DATE_ISOFMT( \
 #define whoami_full_usage \
        "Prints the user name associated with the current effective user id."
 
-#ifdef CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION
-#define USAGE_XARGS_CONFIRMATION(a) a
-#else
-#define USAGE_XARGS_CONFIRMATION(a)
-#endif
-#ifdef CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT
-#define USAGE_XARGS_TERMOPT(a) a
-#else
-#define USAGE_XARGS_TERMOPT(a)
-#endif
-#ifdef CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM
-#define USAGE_XARGS_ZERO_TERM(a) a
-#else
-#define USAGE_XARGS_ZERO_TERM(a)
-#endif
-
-
 #define xargs_trivial_usage \
-       "[COMMAND] [OPTIONS] [ARGS...]"
+       "[OPTIONS] [COMMAND] [ARGS...]"
 #define xargs_full_usage \
        "Executes COMMAND on every item given by standard input.\n\n" \
        "Options:\n" \
-       USAGE_XARGS_CONFIRMATION("\t-p\tPrompt the user about whether to run each command\n") \
+       USE_FEATURE_XARGS_SUPPORT_CONFIRMATION("\t-p\tPrompt the user about whether to run each command\n") \
        "\t-r\tDo not run command for empty read lines\n" \
-       USAGE_XARGS_TERMOPT("\t-x\tExit if the size is exceeded\n") \
-       USAGE_XARGS_ZERO_TERM("\t-0\tInput filenames are terminated by a null character\n") \
+       USE_FEATURE_XARGS_SUPPORT_TERMOPT("\t-x\tExit if the size is exceeded\n") \
+       USE_FEATURE_XARGS_SUPPORT_ZERO_TERM("\t-0\tInput filenames are terminated by a null character\n") \
        "\t-t\tPrint the command line on stderr before executing it"
 #define xargs_example_usage \
        "$ ls | xargs gzip\n" \
@@ -3442,6 +3295,6 @@ USE_FEATURE_DATE_ISOFMT( \
        "\t-f              foreground mode\n" \
        "\t-q              quit after address (no daemon)\n" \
        "\t-r 169.254.x.x  request this address first\n" \
-       "\t-v              verbose; show version"
+       "\t-v              verbose"
 
 #endif /* __BB_USAGE_H__ */