More documentation updates, and minor fixes to make things sync
authorErik Andersen <andersen@codepoet.org>
Sat, 15 Apr 2000 16:34:54 +0000 (16:34 -0000)
committerErik Andersen <andersen@codepoet.org>
Sat, 15 Apr 2000 16:34:54 +0000 (16:34 -0000)
up with the docs.
 -Erik

27 files changed:
TODO
applets/busybox.c
archival/gzip.c
busybox.c
busybox.def.h
coreutils/mkfifo.c
coreutils/mknod.c
coreutils/printf.c
coreutils/sort.c
coreutils/test.c
coreutils/tr.c
docs/busybox.pod
gzip.c
makedevs.c
math.c
miscutils/makedevs.c
miscutils/mt.c
mkfifo.c
mknod.c
mnc.c
mt.c
networking/nslookup.c
nslookup.c
printf.c
sort.c
test.c
tr.c

diff --git a/TODO b/TODO
index 872de4677fecaf712282d437eaefe1df4460153b..4d1b82874f7827ab1239634926f01da741723878 100644 (file)
--- a/TODO
+++ b/TODO
@@ -28,6 +28,11 @@ around to it some time. If you have any good ideas, please let me know.
 * ftp
 
 
+-----------------------
+
+Add a compile option to turn off all the compiled in help
+andusage information.  Some folks don't need or want it...
+
 -----------------------
 
 Compile with debugging on, run 'nm --size-sort ./busybox'
index a14711a6723a27228940787c3c47fb5802a71be0..15d53eb054dadc4abc429a272333f482bb58f790 100644 (file)
@@ -45,13 +45,13 @@ static const struct Applet applets[] = {
        {"cat", cat_main, _BB_DIR_BIN},
 #endif
 #ifdef BB_CHMOD_CHOWN_CHGRP
-       {"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN},
+       {"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN},
 #endif
 #ifdef BB_CHMOD_CHOWN_CHGRP
-       {"chown", chmod_chown_chgrp_main, _BB_DIR_BIN},
+       {"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN},
 #endif
 #ifdef BB_CHMOD_CHOWN_CHGRP
-       {"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN},
+       {"chown", chmod_chown_chgrp_main, _BB_DIR_BIN},
 #endif
 #ifdef BB_CHROOT
        {"chroot", chroot_main, _BB_DIR_SBIN},
@@ -65,9 +65,6 @@ static const struct Applet applets[] = {
 #ifdef BB_CP_MV
        {"cp", cp_mv_main, _BB_DIR_BIN},
 #endif
-#ifdef BB_CP_MV
-       {"mv", cp_mv_main, _BB_DIR_BIN},
-#endif
 #ifdef BB_DATE
        {"date", date_main, _BB_DIR_BIN},
 #endif
@@ -92,6 +89,9 @@ static const struct Applet applets[] = {
 #ifdef BB_ECHO
        {"echo", echo_main, _BB_DIR_BIN},
 #endif
+#ifdef BB_TRUE_FALSE
+       {"false", false_main, _BB_DIR_BIN},
+#endif
 #ifdef BB_FBSET
        {"fbset", fbset_main, _BB_DIR_USR_SBIN},
 #endif
@@ -113,12 +113,15 @@ static const struct Applet applets[] = {
 #ifdef BB_FSCK_MINIX
        {"fsck.minix", fsck_minix_main, _BB_DIR_SBIN},
 #endif
-#ifdef BB_MKFS_MINIX
-       {"mkfs.minix", mkfs_minix_main, _BB_DIR_SBIN},
-#endif
 #ifdef BB_GREP
        {"grep", grep_main, _BB_DIR_BIN},
 #endif
+#ifdef BB_GUNZIP
+       {"gunzip", gunzip_main, _BB_DIR_BIN},
+#endif
+#ifdef BB_GZIP
+       {"gzip", gzip_main, _BB_DIR_BIN},
+#endif
 #ifdef BB_HALT
        {"halt", halt_main, _BB_DIR_SBIN},
 #endif
@@ -137,9 +140,6 @@ static const struct Applet applets[] = {
 #ifdef BB_INSMOD
        {"insmod", insmod_main, _BB_DIR_SBIN},
 #endif
-#ifdef BB_FEATURE_LINUXRC              //
-       {"linuxrc", init_main, _BB_DIR_ROOT},
-#endif
 #ifdef BB_KILL
        {"kill", kill_main, _BB_DIR_BIN},
 #endif
@@ -149,6 +149,9 @@ static const struct Applet applets[] = {
 #ifdef BB_LENGTH
        {"length", length_main, _BB_DIR_USR_BIN},
 #endif
+#ifdef BB_FEATURE_LINUXRC              //
+       {"linuxrc", init_main, _BB_DIR_ROOT},
+#endif
 #ifdef BB_LN
        {"ln", ln_main, _BB_DIR_BIN},
 #endif
@@ -161,6 +164,12 @@ static const struct Applet applets[] = {
 #ifdef BB_LOADKMAP
        {"loadkmap", loadkmap_main, _BB_DIR_SBIN},
 #endif
+#ifdef BB_LOGGER
+       {"logger", logger_main, _BB_DIR_USR_BIN},
+#endif
+#ifdef BB_LOGNAME
+       {"logname", logname_main, _BB_DIR_USR_BIN},
+#endif
 #ifdef BB_LS
        {"ls", ls_main, _BB_DIR_BIN},
 #endif
@@ -179,6 +188,9 @@ static const struct Applet applets[] = {
 #ifdef BB_MKFIFO
        {"mkfifo", mkfifo_main, _BB_DIR_USR_BIN},
 #endif
+#ifdef BB_MKFS_MINIX
+       {"mkfs.minix", mkfs_minix_main, _BB_DIR_SBIN},
+#endif
 #ifdef BB_MKNOD
        {"mknod", mknod_main, _BB_DIR_BIN},
 #endif
@@ -197,6 +209,9 @@ static const struct Applet applets[] = {
 #ifdef BB_MT
        {"mt", mt_main, _BB_DIR_BIN},
 #endif
+#ifdef BB_CP_MV
+       {"mv", cp_mv_main, _BB_DIR_BIN},
+#endif
 #ifdef BB_NSLOOKUP
        {"nslookup", nslookup_main, _BB_DIR_USR_BIN},
 #endif
@@ -248,12 +263,6 @@ static const struct Applet applets[] = {
 #ifdef BB_SYSLOGD
        {"syslogd", syslogd_main, _BB_DIR_SBIN},
 #endif
-#ifdef BB_LOGGER
-       {"logger", logger_main, _BB_DIR_USR_BIN},
-#endif
-#ifdef BB_LOGNAME
-       {"logname", logname_main, _BB_DIR_USR_BIN},
-#endif
 #ifdef BB_SWAPONOFF
        {"swapon", swap_on_off_main, _BB_DIR_SBIN},
 #endif
@@ -269,9 +278,6 @@ static const struct Applet applets[] = {
 #ifdef BB_TELNET
        {"telnet", telnet_main, _BB_DIR_USR_BIN},
 #endif
-#ifdef BB_TEST
-       {"[", test_main, _BB_DIR_USR_BIN},
-#endif
 #ifdef BB_TEST
        {"test", test_main, _BB_DIR_USR_BIN},
 #endif
@@ -287,9 +293,6 @@ static const struct Applet applets[] = {
 #ifdef BB_TRUE_FALSE
        {"true", true_main, _BB_DIR_BIN},
 #endif
-#ifdef BB_TRUE_FALSE
-       {"false", false_main, _BB_DIR_BIN},
-#endif
 #ifdef BB_TTY
        {"tty", tty_main, _BB_DIR_USR_BIN},
 #endif
@@ -299,15 +302,15 @@ static const struct Applet applets[] = {
 #ifdef BB_UNAME
        {"uname", uname_main, _BB_DIR_BIN},
 #endif
-#ifdef BB_UPTIME
-       {"uptime", uptime_main, _BB_DIR_USR_BIN},
-#endif
 #ifdef BB_UNIQ
        {"uniq", uniq_main, _BB_DIR_BIN},
 #endif
 #ifdef BB_UPDATE
        {"update", update_main, _BB_DIR_SBIN},
 #endif
+#ifdef BB_UPTIME
+       {"uptime", uptime_main, _BB_DIR_USR_BIN},
+#endif
 #ifdef BB_USLEEP
        {"usleep", usleep_main, _BB_DIR_BIN},
 #endif
@@ -323,11 +326,8 @@ static const struct Applet applets[] = {
 #ifdef BB_GUNZIP
        {"zcat", gunzip_main, _BB_DIR_BIN},
 #endif
-#ifdef BB_GUNZIP
-       {"gunzip", gunzip_main, _BB_DIR_BIN},
-#endif
-#ifdef BB_GZIP
-       {"gzip", gzip_main, _BB_DIR_BIN},
+#ifdef BB_TEST
+       {"[", test_main, _BB_DIR_USR_BIN},
 #endif
        {0}
 };
index 55ec5bc4e16e310aae8e8e3568b087037a362027..a9d34aeb19ba9401d41a658c4bfecbf6d2ea06f8 100644 (file)
@@ -41,7 +41,7 @@
 static const char gzip_usage[] =
        "gzip [OPTION]... FILE\n\n"
        "Compress FILE with maximum compression.\n"
-       "When FILE is -, reads standard input.  Implies -c.\n\n"
+       "When FILE is '-', reads standard input.  Implies -c.\n\n"
 
        "Options:\n"
        "\t-c\tWrite output to standard output instead of FILE.gz\n";
index a14711a6723a27228940787c3c47fb5802a71be0..15d53eb054dadc4abc429a272333f482bb58f790 100644 (file)
--- a/busybox.c
+++ b/busybox.c
@@ -45,13 +45,13 @@ static const struct Applet applets[] = {
        {"cat", cat_main, _BB_DIR_BIN},
 #endif
 #ifdef BB_CHMOD_CHOWN_CHGRP
-       {"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN},
+       {"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN},
 #endif
 #ifdef BB_CHMOD_CHOWN_CHGRP
-       {"chown", chmod_chown_chgrp_main, _BB_DIR_BIN},
+       {"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN},
 #endif
 #ifdef BB_CHMOD_CHOWN_CHGRP
-       {"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN},
+       {"chown", chmod_chown_chgrp_main, _BB_DIR_BIN},
 #endif
 #ifdef BB_CHROOT
        {"chroot", chroot_main, _BB_DIR_SBIN},
@@ -65,9 +65,6 @@ static const struct Applet applets[] = {
 #ifdef BB_CP_MV
        {"cp", cp_mv_main, _BB_DIR_BIN},
 #endif
-#ifdef BB_CP_MV
-       {"mv", cp_mv_main, _BB_DIR_BIN},
-#endif
 #ifdef BB_DATE
        {"date", date_main, _BB_DIR_BIN},
 #endif
@@ -92,6 +89,9 @@ static const struct Applet applets[] = {
 #ifdef BB_ECHO
        {"echo", echo_main, _BB_DIR_BIN},
 #endif
+#ifdef BB_TRUE_FALSE
+       {"false", false_main, _BB_DIR_BIN},
+#endif
 #ifdef BB_FBSET
        {"fbset", fbset_main, _BB_DIR_USR_SBIN},
 #endif
@@ -113,12 +113,15 @@ static const struct Applet applets[] = {
 #ifdef BB_FSCK_MINIX
        {"fsck.minix", fsck_minix_main, _BB_DIR_SBIN},
 #endif
-#ifdef BB_MKFS_MINIX
-       {"mkfs.minix", mkfs_minix_main, _BB_DIR_SBIN},
-#endif
 #ifdef BB_GREP
        {"grep", grep_main, _BB_DIR_BIN},
 #endif
+#ifdef BB_GUNZIP
+       {"gunzip", gunzip_main, _BB_DIR_BIN},
+#endif
+#ifdef BB_GZIP
+       {"gzip", gzip_main, _BB_DIR_BIN},
+#endif
 #ifdef BB_HALT
        {"halt", halt_main, _BB_DIR_SBIN},
 #endif
@@ -137,9 +140,6 @@ static const struct Applet applets[] = {
 #ifdef BB_INSMOD
        {"insmod", insmod_main, _BB_DIR_SBIN},
 #endif
-#ifdef BB_FEATURE_LINUXRC              //
-       {"linuxrc", init_main, _BB_DIR_ROOT},
-#endif
 #ifdef BB_KILL
        {"kill", kill_main, _BB_DIR_BIN},
 #endif
@@ -149,6 +149,9 @@ static const struct Applet applets[] = {
 #ifdef BB_LENGTH
        {"length", length_main, _BB_DIR_USR_BIN},
 #endif
+#ifdef BB_FEATURE_LINUXRC              //
+       {"linuxrc", init_main, _BB_DIR_ROOT},
+#endif
 #ifdef BB_LN
        {"ln", ln_main, _BB_DIR_BIN},
 #endif
@@ -161,6 +164,12 @@ static const struct Applet applets[] = {
 #ifdef BB_LOADKMAP
        {"loadkmap", loadkmap_main, _BB_DIR_SBIN},
 #endif
+#ifdef BB_LOGGER
+       {"logger", logger_main, _BB_DIR_USR_BIN},
+#endif
+#ifdef BB_LOGNAME
+       {"logname", logname_main, _BB_DIR_USR_BIN},
+#endif
 #ifdef BB_LS
        {"ls", ls_main, _BB_DIR_BIN},
 #endif
@@ -179,6 +188,9 @@ static const struct Applet applets[] = {
 #ifdef BB_MKFIFO
        {"mkfifo", mkfifo_main, _BB_DIR_USR_BIN},
 #endif
+#ifdef BB_MKFS_MINIX
+       {"mkfs.minix", mkfs_minix_main, _BB_DIR_SBIN},
+#endif
 #ifdef BB_MKNOD
        {"mknod", mknod_main, _BB_DIR_BIN},
 #endif
@@ -197,6 +209,9 @@ static const struct Applet applets[] = {
 #ifdef BB_MT
        {"mt", mt_main, _BB_DIR_BIN},
 #endif
+#ifdef BB_CP_MV
+       {"mv", cp_mv_main, _BB_DIR_BIN},
+#endif
 #ifdef BB_NSLOOKUP
        {"nslookup", nslookup_main, _BB_DIR_USR_BIN},
 #endif
@@ -248,12 +263,6 @@ static const struct Applet applets[] = {
 #ifdef BB_SYSLOGD
        {"syslogd", syslogd_main, _BB_DIR_SBIN},
 #endif
-#ifdef BB_LOGGER
-       {"logger", logger_main, _BB_DIR_USR_BIN},
-#endif
-#ifdef BB_LOGNAME
-       {"logname", logname_main, _BB_DIR_USR_BIN},
-#endif
 #ifdef BB_SWAPONOFF
        {"swapon", swap_on_off_main, _BB_DIR_SBIN},
 #endif
@@ -269,9 +278,6 @@ static const struct Applet applets[] = {
 #ifdef BB_TELNET
        {"telnet", telnet_main, _BB_DIR_USR_BIN},
 #endif
-#ifdef BB_TEST
-       {"[", test_main, _BB_DIR_USR_BIN},
-#endif
 #ifdef BB_TEST
        {"test", test_main, _BB_DIR_USR_BIN},
 #endif
@@ -287,9 +293,6 @@ static const struct Applet applets[] = {
 #ifdef BB_TRUE_FALSE
        {"true", true_main, _BB_DIR_BIN},
 #endif
-#ifdef BB_TRUE_FALSE
-       {"false", false_main, _BB_DIR_BIN},
-#endif
 #ifdef BB_TTY
        {"tty", tty_main, _BB_DIR_USR_BIN},
 #endif
@@ -299,15 +302,15 @@ static const struct Applet applets[] = {
 #ifdef BB_UNAME
        {"uname", uname_main, _BB_DIR_BIN},
 #endif
-#ifdef BB_UPTIME
-       {"uptime", uptime_main, _BB_DIR_USR_BIN},
-#endif
 #ifdef BB_UNIQ
        {"uniq", uniq_main, _BB_DIR_BIN},
 #endif
 #ifdef BB_UPDATE
        {"update", update_main, _BB_DIR_SBIN},
 #endif
+#ifdef BB_UPTIME
+       {"uptime", uptime_main, _BB_DIR_USR_BIN},
+#endif
 #ifdef BB_USLEEP
        {"usleep", usleep_main, _BB_DIR_BIN},
 #endif
@@ -323,11 +326,8 @@ static const struct Applet applets[] = {
 #ifdef BB_GUNZIP
        {"zcat", gunzip_main, _BB_DIR_BIN},
 #endif
-#ifdef BB_GUNZIP
-       {"gunzip", gunzip_main, _BB_DIR_BIN},
-#endif
-#ifdef BB_GZIP
-       {"gzip", gzip_main, _BB_DIR_BIN},
+#ifdef BB_TEST
+       {"[", test_main, _BB_DIR_USR_BIN},
 #endif
        {0}
 };
index 1952dd3776bdeb2e96b360b5ff175787d4e95b8b..1880884f976174fbad688741c99ff9295830d8d3 100644 (file)
 #define BB_GREP
 #define BB_GUNZIP
 #define BB_GZIP
-//#define BB_HALT
+#define BB_HALT
 #define BB_HEAD
 #define BB_HOSTID
 #define BB_HOSTNAME
 #define BB_INIT
-// Don't bother turning BB_INSMOD on.  It doesn't work.
+// Don't bother turning BB_INSMOD on.  It doesn't work yet.
 //#define BB_INSMOD
 #define BB_KILL
 #define BB_KILLALL
 #define BB_MT
 #define BB_NSLOOKUP
 #define BB_PING
-//#define BB_POWEROFF
+#define BB_POWEROFF
 #define BB_PRINTF
 #define BB_PS
 #define BB_PWD
-//#define BB_REBOOT
+#define BB_REBOOT
 #define BB_RM
 #define BB_RMDIR
 #define BB_RMMOD
@@ -85,7 +85,7 @@
 #define BB_TAR
 #define BB_TEE
 #define BB_TEST
-// Don't turn BB_TELNET on.  It doesn't work.
+// Don't bother turning BB_TELNET on.  It doesn't work properly yet.
 //#define BB_TELNET
 #define BB_TOUCH
 #define BB_TR
 // the /proc filesystem and thereby saving lots and lots 
 // memory for more important things.
 // You can't use this and USE_PROCFS at the same time...
+// (BTW, I emailed Linus and this patch will not be going into the stock kernel)
 //#define BB_FEATURE_USE_DEVPS_PATCH
 //
 // enable features that use the /proc filesystem (apps that 
index c74402d4c992d14f4e02d0422a1f0c9f3c3729f5..b273df04633abc38665bffb0412d4999b8546bcd 100644 (file)
 #include <errno.h>
 
 static const char mkfifo_usage[] = "mkfifo [OPTIONS] name\n\n"
-       "Create the named fifo\n\n"
+       "Creates a named pipe (identical to 'mknod name p')\n\n"
 
        "Options:\n"
-       "\t-m\tcreate the fifo with the specified mode; default = a=rw-umask\n";
+       "\t-m\tcreate the pipe using the specified mode (default a=rw)\n";
 
 extern int mkfifo_main(int argc, char **argv)
 {
index 40f508d334c6dd8ce0a3beb0cf507c0581824d0d..0c93df64da3483e9c191513edc95f293942965d2 100644 (file)
 #include <fcntl.h>
 #include <unistd.h>
 
-static const char mknod_usage[] = "mknod NAME TYPE MAJOR MINOR\n\n"
-       "Make block or character special files.\n\n"
+static const char mknod_usage[] = "mknod [OPTIONS] NAME TYPE MAJOR MINOR\n\n"
+       "Create a special file (block, character, or pipe).\n\n"
+       "Options:\n"
+       "\t-m\tcreate the special file using the specified mode (default a=rw)\n\n"
        "TYPEs include:\n"
        "\tb:\tMake a block (buffered) device.\n"
-
        "\tc or u:\tMake a character (un-buffered) device.\n"
-       "\tp:\tMake a named pipe. Major and minor are ignored for named pipes.\n";
+       "\tp:\tMake a named pipe. MAJOR and MINOR are ignored for named pipes.\n";
 
 int mknod_main(int argc, char **argv)
 {
+       char *thisarg;
        mode_t mode = 0;
+       mode_t perm = 0666;
        dev_t dev = 0;
 
-       if (argc != 5 || **(argv + 1) == '-') {
+       argc--;
+       argv++;
+
+       /* Parse any options */
+       while (argc > 1) {
+               if (**argv != '-')
+                       break;
+               thisarg = *argv;
+               thisarg++;
+               switch (*thisarg) {
+               case 'm':
+                       argc--;
+                       argv++;
+                       parse_mode(*argv, &perm);
+                       break;
+               default:
+                       usage(mknod_usage);
+               }
+               argc--;
+               argv++;
+       }
+       if (argc != 4 && argc != 2) {
                usage(mknod_usage);
        }
-       switch (argv[2][0]) {
+       switch (argv[1][0]) {
        case 'c':
        case 'u':
                mode = S_IFCHR;
@@ -54,23 +78,22 @@ int mknod_main(int argc, char **argv)
                break;
        case 'p':
                mode = S_IFIFO;
+               if (argc!=2) {
+                       usage(mknod_usage);
+               }
                break;
        default:
                usage(mknod_usage);
        }
 
        if (mode == S_IFCHR || mode == S_IFBLK) {
-               dev = (atoi(argv[3]) << 8) | atoi(argv[4]);
-               if (argc != 5) {
-                       usage(mknod_usage);
-               }
+               dev = (atoi(argv[2]) << 8) | atoi(argv[1]);
        }
 
-       mode |= 0666;
+       mode |= perm;
 
-       if (mknod(argv[1], mode, dev) != 0) {
-               perror(argv[1]);
-               exit (FALSE);
-       }
+       if (mknod(argv[0], mode, dev) != 0)
+               fatalError("%s: %s\n", argv[0], strerror(errno));
        exit (TRUE);
 }
+
index 41ab2e4426e6c4ad88f157843ecc6ea138ed6465..bfe40817540c8a0979f6a85fbc682a61b4213132 100644 (file)
@@ -139,7 +139,7 @@ static void verify __P((char *s, char *end));
 /* The value to return to the calling program.  */
 static int exit_status;
 
-static const char printf_usage[] = "printf format [argument...]\n";
+static const char printf_usage[] = "printf format [argument...]\n\nFormats and prints the given data.\n";
 
 int printf_main(int argc, char **argv)
 {
index 6ee6f207e68f749482f656231428003c289446ba..4301f4303db6e63d06db40389cbc274e23e9a3f0 100644 (file)
@@ -33,7 +33,7 @@ static const char sort_usage[] = "sort [-n]"
 #ifdef BB_FEATURE_SORT_REVERSE
 " [-r]"
 #endif
-" [FILE]...\n\n";
+" [FILE]...\n\nSorts lines of text in the specified files\n";
 
 #ifdef BB_FEATURE_SORT_REVERSE
 #define APPLY_REVERSE(x) (reverse ? -(x) : (x))
@@ -320,4 +320,4 @@ int sort_main(int argc, char **argv)
        exit(0);
 }
 
-/* $Id: sort.c,v 1.13 2000/04/13 01:18:56 erik Exp $ */
+/* $Id: sort.c,v 1.14 2000/04/15 16:34:54 erik Exp $ */
index 85d06a83a7f8f0ec552cdd79bb2fde4757653bd8..0ed777194463130fb9e8cc92ec40513aaa2ef661 100644 (file)
@@ -1,6 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * echo implementation for busybox
+ * test implementation for busybox
  *
  * Copyright (c) by a whole pile of folks: 
  *
@@ -185,6 +185,12 @@ test_main(int argc, char** argv)
                        fatalError("missing ]");
                argv[argc] = NULL;
        }
+       if (strcmp(argv[1], "--help") == 0) {
+               usage("test EXPRESSION\n"
+                         "or   [ EXPRESSION ]\n\n"
+                               "Checks file types and compares values returning an exit\n"
+                               "code determined by the value of EXPRESSION.\n");
+       }
 
        /* Implement special cases from POSIX.2, section 4.62.4 */
        switch (argc) {
index 3bfa4808056d4dc0c694ee30bc886f4ce5814d66..b631b006559aafc0a0cb2b134ff5cfb81795ea44 100644 (file)
@@ -44,7 +44,7 @@ static char sccsid[] = "@(#)tr.c      8.2 (Berkeley) 5/4/95";
 #endif
 static const char rcsid[] =
 
-       "$Id: tr.c,v 1.2 2000/03/21 22:32:57 erik Exp $";
+       "$Id: tr.c,v 1.3 2000/04/15 16:34:54 erik Exp $";
 #endif                                                 /* not lint */
 #endif                                                 /* #if 0 */
 
@@ -138,12 +138,12 @@ int cflag;
 
 static void tr_usage()
 {
-       (void) fprintf(stderr, "%s\n%s\n%s\n%s\n",
-                                  "usage: tr [-csu] string1 string2",
-                                  "       tr [-cu] -d string1",
-                                  "       tr [-cu] -s string1",
-                                  "       tr [-cu] -ds string1 string2");
-       exit(1);
+       usage( "\ttr [-csu] string1 string2\n"
+                  "\ttr [-cu] -d string1\n"
+                  "\ttr [-cu] -s string1\n"
+                  "\ttr [-cu] -ds string1 string2\n\n"
+                  "Translate, squeeze, and/or delete characters from standard\n"
+                  "input, writing to standard output.\n");
 }
 
 
index 0e36e317255ae51e51b5b3a6758e04c584d8654f..7d185fa15a574dbbeba7707d7c96eb99a39604ba 100644 (file)
@@ -36,16 +36,15 @@ tries to make itself useful to small systems with limited resources.
 
 Currently defined functions include:
 
-basename, cat, chmod, chown, chgrp, chroot, clear, chvt, cp, date,
-dd, df, dirname, dmesg, du, dutmp, echo, false, fbset, fdflush, find, free,
-freeramdisk, deallocvt, fsck.minix, mkfs.minix, grep, gunzip, gzip,
-halt, head, hostid, hostname, init, kill, killall, length, ln, loadacm,
-loadfont, loadkmap, ls, lsmod, makedevs, math, mkdir, mkfifo, mknod,
-mkswap, mnc, more, mount, mt, mv, nslookup, poweroff, ping, printf, ps,
-pwd, reboot, rm, rmdir, rmmod, sed, sh, fdisk, sfdisk, sleep, sort,
-sync, syslogd, logger, logname, swapon, swapoff, tail, tar, [, test,
-tee, touch, tr, true, tty, umount, uname, uptime, uniq, update,
-usleep, wc, whoami, yes, zcat
+basename, cat, chgrp, chmod, chown, chroot, clear, chvt, cp, date, dd, df,
+dirname, dmesg, du, dutmp, echo, false, fbset, fdflush, find, free,
+freeramdisk, deallocvt, fsck.minix, grep, gunzip, gzip, halt, head, hostid,
+hostname, init, kill, killall, length, ln, loadacm, loadfont, loadkmap, logger,
+logname, ls, lsmod, makedevs, math, mkdir, mkfifo, mkfs.minix, mknod, mkswap,
+mnc, more, mount, mt, mv, nslookup, ping, poweroff, printf, ps, pwd, reboot,
+rm, rmdir, rmmod, sed, sh, sfdisk, sleep, sort, sync, syslogd, swapon, swapoff,
+tail, tar, test, tee, touch, tr, true, tty, umount, uname, uniq, update,
+uptime, usleep, wc, whoami, yes, zcat, [
 
 =head1 COMMON OPTIONS
 
@@ -82,6 +81,26 @@ Example:
 
 -------------------------------
 
+=item chgrp
+
+Usage: chgrp [OPTION]... GROUP FILE...
+
+Change the group membership of each FILE to GROUP.
+Options:
+
+       -R      change files and directories recursively
+Example:
+
+       $ ls -l /tmp/foo
+       -r--r--r--    1 andersen andersen        0 Apr 12 18:25 /tmp/foo
+       $ chgrp root /tmp/foo
+       $ ls -l /tmp/foo
+       -r--r--r--    1 andersen root            0 Apr 12 18:25 /tmp/foo
+
+-------------------------------
+
 =item chmod
 
 Usage: chmod [B<-R>] MODE[,MODE]... FILE...
@@ -165,26 +184,6 @@ Example:
 
 -------------------------------
 
-=item chgrp
-
-Usage: chgrp [OPTION]... GROUP FILE...
-
-Change the group membership of each FILE to GROUP.
-Options:
-
-       -R      change files and directories recursively
-Example:
-
-       $ ls -l /tmp/foo
-       -r--r--r--    1 andersen andersen        0 Apr 12 18:25 /tmp/foo
-       $ chgrp root /tmp/foo
-       $ ls -l /tmp/foo
-       -r--r--r--    1 andersen root            0 Apr 12 18:25 /tmp/foo
-
--------------------------------
-
 =item chroot
 
 Usage: chroot NEWROOT [COMMAND...]
@@ -391,6 +390,14 @@ Example:
 
 =item false
 
+Returns an exit code of FALSE (1)
+
+Example:
+
+       $ false
+       $ echo $?
+       1
+
 -------------------------------
 
 =item fbset
@@ -465,7 +472,7 @@ Displays the amount of free and used memory in the system.
 Example:
 
        $ free
-                     total         used         free       shared      buffers
+                                 total         used         free       shared      buffers
          Mem:       257628       248724         8904        59644        93124
         Swap:       128516         8404       120112
        Total:       386144       257128       129016
@@ -510,22 +517,6 @@ OPTIONS:
 
 -------------------------------
 
-=item mkfs.minix
-
-Usage: mkfs.minix [B<-c> | B<-l> filename] [B<-nXX>] [B<-iXX>] /dev/name [blocks]
-
-Make a MINIX filesystem.
-
-OPTIONS:
-
-       -c              Check the device for bad blocks
-       -n [14|30]      Specify the maximum length of filenames
-       -i              Specify the number of inodes for the filesystem
-       -l FILENAME     Read the bad blocks list from FILENAME
-       -v              Make a Minix version 2 filesystem
-
--------------------------------
-
 =item grep
 
 Usage: grep [OPTIONS]... PATTERN [FILE]...
@@ -552,16 +543,52 @@ Example:
 
 =item gunzip
 
+Usage: gunzip [OPTION]... FILE
+
+Uncompress FILE (or standard input if FILE is '-').
+
+Options:
+
+        -c      Write output to standard output
+        -t      Test compressed file integrity
+
+Example:
+
+       $ ls -la /tmp/busybox*
+       -rw-rw-r--    1 andersen andersen   557009 Apr 11 10:55 /tmp/busybox-0.43.tar.gz
+       $ gunzip /tmp/busybox-0.43.tar.gz
+       $ ls -la /tmp/busybox*
+       -rw-rw-r--    1 andersen andersen  1761280 Apr 14 17:47 /tmp/busybox-0.43.tar
 
 -------------------------------
 
 =item gzip
 
+Usage: gzip [OPTION]... FILE
+
+Compress FILE with maximum compression.
+When FILE is '-', reads standard input.  Implies -c.
+
+Options:
+
+        -c      Write output to standard output instead of FILE.gz
+
+Example:
+
+       $ ls -la /tmp/busybox*
+       -rw-rw-r--    1 andersen andersen  1761280 Apr 14 17:47 /tmp/busybox-0.43.tar
+       $ gzip /tmp/busybox-0.43.tar
+       $ ls -la /tmp/busybox*
+       -rw-rw-r--    1 andersen andersen   554058 Apr 14 17:49 /tmp/busybox-0.43.tar.gz
+
 
 -------------------------------
 
 =item halt
 
+Usage: halt
+
+This comand halts the system.
 
 -------------------------------
 
@@ -587,6 +614,11 @@ Example:
 
 =item hostid
 
+Usage: hostid
+
+Prints out a unique  32-bit  identifier  for  the  current
+machine.   The  32-bit identifier is intended to be unique
+among all UNIX systems in existence. 
 
 -------------------------------
 
@@ -613,6 +645,94 @@ Example:
 
 =item init
 
+Usage: init
+
+Init is the parent of all processes.
+
+This version of init is designed to be run only by the kernel.
+
+BusyBox init doesn't support multiple runlevels.  The runlevels field of
+the /etc/inittab file is completely ignored by BusyBox init. If you want 
+runlevels, use sysvinit.
+
+BusyBox init works just fine without an inittab.  If no inittab is found, 
+it has the following default behavior:
+
+       ::sysinit:/etc/init.d/rcS
+       ::askfirst:/bin/sh
+
+if it detects that /dev/console is _not_ a serial console, it will also run:
+
+       tty2::askfirst:/bin/sh
+
+If you choose to use an /etc/inittab file, the inittab entry format is as follows:
+
+       <id>:<runlevels>:<action>:<process>
+
+       <id>: 
+
+               WARNING: This field has a non-traditional meaning for BusyBox init!
+               The id field is used by BusyBox init to specify the controlling tty for
+               the specified process to run on.  The contents of this field are
+               appended to "/dev/" and used as-is.  There is no need for this field to
+               be unique, although if it isn't you may have strange results.  If this
+               field is left blank, it is completely ignored.  Also note that if
+               BusyBox detects that a serial console is in use, then all entries
+               containing non-empty id fields will _not_ be run.  BusyBox init does
+               nothing with utmp.  We don't need no stinkin' utmp.
+
+       <runlevels>: 
+
+               The runlevels field is completely ignored.
+
+       <action>: 
+
+               Valid actions include: sysinit, respawn, askfirst, wait, 
+               once, and ctrlaltdel.
+
+               askfirst acts just like respawn, but before running the specified
+               process it displays the line "Please press Enter to activate this
+               console." and then waits for the user to press enter before starting
+               the specified process.
+
+               Unrecognised actions (like initdefault) will cause init to emit
+               an error message, and then go along with its business.
+
+       <process>: 
+
+               Specifies the process to be executed and it's command line.
+
+
+Example /etc/inittab file:
+
+       # This is run first except when booting in single-user mode.
+       #
+       ::sysinit:/etc/init.d/rcS
+
+       # /bin/sh invocations on selected ttys
+       #
+       # Start an "askfirst" shell on the console (whatever that may be)
+       ::askfirst:/bin/sh
+       # Start an "askfirst" shell on /dev/tty2
+       tty2::askfirst:/bin/sh
+
+       # /sbin/getty invocations for selected ttys
+       #
+       tty4::respawn:/sbin/getty 38400 tty4
+       tty5::respawn:/sbin/getty 38400 tty5
+
+
+       # Example of how to put a getty on a serial line (for a terminal)
+       #
+       #ttyS0::respawn:/sbin/getty -L ttyS0 9600 vt100
+       #ttyS1::respawn:/sbin/getty -L ttyS1 9600 vt100
+       #
+       # Example how to put a getty on a modem line.
+       #ttyS2::respawn:/sbin/getty -x0 -s 57600 ttyS2
+
+       # Stuff to do before rebooting
+       ::ctrlaltdel:/bin/umount -a -r > /dev/null 2>&1
+       ::ctrlaltdel:/sbin/swapoff -a > /dev/null 2>&1
 
 -------------------------------
 
@@ -641,10 +761,28 @@ Example:
 
 =item killall
 
+Usage: killall [-signal] process-name [process-name ...]
+
+Send a signal (default is SIGTERM) to the specified process(es).
+
+Options:
+        -l      List all signal names and numbers.
+
+Example:
+
+       $ killall apache
+
 -------------------------------
 
 =item length
 
+Usage: length string
+
+Prints out the length of the specified string.
+
+Example:
+       $ length "Hello"
+       5
 
 -------------------------------
 
@@ -668,14 +806,52 @@ Example:
 
 =item loadacm
 
+FIXME
+
 -------------------------------
 
 =item loadfont
 
+FIXME
+
 -------------------------------
 
 =item loadkmap
 
+FIXME
+
+-------------------------------
+
+=item logger
+
+Usage: logger [OPTION]... [MESSAGE]
+
+Write MESSAGE to the system log.  If MESSAGE is '-', log stdin.
+
+Options:
+
+        -s      Log to stderr as well as the system log.
+        -t      Log using the specified tag (defaults to user name).
+        -p      Enter the message with the specified priority.
+                This may be numerical or a ``facility.level'' pair.
+
+Example:
+
+               $ logger "hello"
+
+-------------------------------
+
+=item logname
+
+Usage: logname
+
+Print the name of the current user.
+
+Example:
+
+       $ logname
+       root
+
 -------------------------------
 
 =item ls
@@ -705,16 +881,53 @@ Options:
 
 Usage: lsmod
 
-Shows information about all loaded modules.
+Shows a list of all currently loaded kernel modules.
 
 -------------------------------
 
 =item makedevs
 
+Usage: makedevs NAME TYPE MAJOR MINOR FIRST LAST [s]
+
+Creates a range of block or character special files
+
+TYPEs include:
+
+        b:      Make a block (buffered) device.
+        c or u: Make a character (un-buffered) device.
+        p:      Make a named pipe. MAJOR and MINOR are ignored for named pipes.
+
+FIRST specifies the number appended to NAME to create the first device.
+LAST specifies the number of the last item that should be created.
+If 's' is the last argument, the base device is created as well.
+
+Example:
+
+       $ makedevs /dev/ttyS c 4 66 2 63
+       [creates ttyS2-ttyS63]
+       $ makedevs /dev/hda b 3 0 0 8 s
+       [creates hda,hda1-hda8]
+
 -------------------------------
 
 =item math
 
+Usage: math expression ...
+
+This is a Tiny RPN calculator that understands the
+following operations: +, -, /, *, and, or, not, eor.
+
+Example:
+
+       $ math 2 2 add
+       4
+       $ math 8 8 \* 2 2 + /
+       16
+       $ math 0 1 and
+       0
+       $ math 0 1 or
+       1
+
 -------------------------------
 
 =item mkdir
@@ -741,23 +954,49 @@ Example:
 
 =item mkfifo
 
+Usage: mkfifo [OPTIONS] name
+
+Creates a named pipe (identical to 'mknod name p')
+
+Options:
+        -m      create the pipe using the specified mode (default a=rw)
+
+-------------------------------
+
+=item mkfs.minix
+
+Usage: mkfs.minix [B<-c> | B<-l> filename] [B<-nXX>] [B<-iXX>] /dev/name [blocks]
+
+Make a MINIX filesystem.
+
+OPTIONS:
+
+       -c              Check the device for bad blocks
+       -n [14|30]      Specify the maximum length of filenames
+       -i              Specify the number of inodes for the filesystem
+       -l FILENAME     Read the bad blocks list from FILENAME
+       -v              Make a Minix version 2 filesystem
+
 -------------------------------
 
 =item mknod
 
-Usage: mknod NAME TYPE MAJOR MINOR
+Usage: mknod [OPTIONS] NAME TYPE MAJOR MINOR
 
-Make block or character special files.
+Create a special file (block, character, or pipe).
 
-TYPEs include:
+Options:
+        -m      create the special file using the specified mode (default a=rw)
 
-       b:      Make a block (buffered) device.
-       c or u: Make a character (un-buffered) device.
-       p:      Make a named pipe. Major and minor are ignored for named pipes.
+TYPEs include:
+        b:      Make a block (buffered) device.
+        c or u: Make a character (un-buffered) device.
+        p:      Make a named pipe. MAJOR and MINOR are ignored for named pipes.
 
 Example:
 
        $ mknod /dev/fd0 b 2 0 
+       $ mknod -m 644 /tmp/pipe p
 
 -------------------------------
 
@@ -778,6 +1017,21 @@ Options:
 
 =item mnc
 
+Usage: mnc [IP] [port]
+
+mini-netcat opens a pipe to IP:port
+
+Example:
+
+       $ mnc foobar.somedomain.com 25
+       220 foobar ESMTP Exim 3.12 #1 Sat, 15 Apr 2000 00:03:02 -0600
+       help
+       214-Commands supported:
+       214-    HELO EHLO MAIL RCPT DATA AUTH
+       214     NOOP QUIT RSET HELP
+       quit
+       221 foobar closing connection
 -------------------------------
 
 =item more
@@ -830,6 +1084,10 @@ Example:
 
 =item mt
 
+Usage: mt [-f device] opcode value
+
+Control magnetic tape drive operation
+
 -------------------------------
 
 =item mv
@@ -848,9 +1106,18 @@ Example:
 
 =item nslookup
 
--------------------------------
+Usage: nslookup [HOST]
 
-=item poweroff
+Queries the nameserver for the IP address of the given HOST
+
+Example:
+
+       $ nslookup localhost
+       Server:     default
+       Address:    default
+
+       Name:       debian
+       Address:    127.0.0.1
 
 -------------------------------
 
@@ -877,116 +1144,478 @@ Example:
 
 -------------------------------
 
+=item poweroff
+
+Shuts down the system, and requests that the kernel turn off power upon halting.
+
+-------------------------------
+
 =item printf
 
+Usage: printf format [argument...]
+
+Formats and prints the given data in a manner similar to the C printf command.
+
+Example:
+
+       $ printf "Val=%d\n" 5
+       Val=5
+
 -------------------------------
 
 =item ps
 
+Usage: ps
+
+Report process status
+
+This version of ps accepts no options.
+
+Example:
+
+       $ ps
+  PID  Uid      Gid State Command
+    1 root     root     S init
+    2 root     root     S [kflushd]
+    3 root     root     S [kupdate]
+    4 root     root     S [kpiod]
+    5 root     root     S [kswapd]
+  742 andersen andersen S [bash]
+  743 andersen andersen S -bash
+  745 root     root     S [getty]
+ 2990 andersen andersen R ps
+
 -------------------------------
 
 =item pwd
 
+Prints the full filename of the current working directory.
+
+Example:
+
+       $ pwd
+       /root
+
 -------------------------------
 
 =item reboot
 
+Instructs the kernel to reboot the system.
+
 -------------------------------
 
 =item rm
 
+Usage: rm [OPTION]... FILE...
+
+Remove (unlink) the FILE(s).
+
+Options:
+
+        -f              remove existing destinations, never prompt
+        -r or -R        remove the contents of directories recursively
+
+Example:
+
+       $ rm -rf /tmp/foo
+
 -------------------------------
 
-=item syslogd
+=item rmdir
+
+Usage: rmdir [OPTION]... DIRECTORY...
+
+Remove the DIRECTORY(ies), if they are empty.
+
+Example:
+
+       # rmdir /tmp/foo
 
 -------------------------------
 
-=item logger
+=item rmmod
+
+Usage: rmmod [OPTION]... [MODULE]...
+
+Unloads the specified kernel modules from the kernel.
+
+Options:
+
+        -a      Try to remove all unused kernel modules.
+
+Example:
+
+       $ rmmod tulip
 
 -------------------------------
 
-=item logname
+=item sed
+
+Usage: sed [-n] -e script [file...]
+
+Allowed sed scripts come in the following form:
+
+       'ADDR [!] COMMAND'
+
+       where address ADDR can be:
+         NUMBER    Match specified line number
+         $         Match last line
+         /REGEXP/  Match specified regexp
+         (! inverts the meaning of the match)
+
+       and COMMAND can be:
+         s/regexp/replacement/[igp]
+                which attempt to match regexp against the pattern space
+                and if successful replaces the matched portion with replacement.
+
+         aTEXT
+                which appends TEXT after the pattern space
+
+Options:
+
+       -e      add the script to the commands to be executed
+       -n      suppress automatic printing of pattern space
+
+This version of sed matches full regular expresions.
+
+Example:
+
+       $ echo "foo" | sed -e 's/f[a-zA-Z]o/bar/g'
+       bar
+
+-------------------------------
+
+=item sh
+
+FIXME
+
+-------------------------------
+
+=item sfdisk
+
+Usage: sfdisk [options] device ...
+
+device: something like /dev/hda or /dev/sda
+
+useful options:
+
+    -s [or --show-size]: list size of a partition
+    -c [or --id]:        print or change partition Id
+    -l [or --list]:      list partitions of each device
+    -d [or --dump]:      idem, but in a format suitable for later input
+    -i [or --increment]: number cylinders etc. from 1 instead of from 0
+    -uS, -uB, -uC, -uM:  accept/report in units of sectors/blocks/cylinders/MB
+    -T [or --list-types]:list the known partition types
+    -D [or --DOS]:       for DOS-compatibility: waste a little space
+    -R [or --re-read]:   make kernel reread partition table
+    -N# :                change only the partition with number #
+    -n :                 do not actually write to disk
+    -O file :            save the sectors that will be overwritten to file
+    -I file :            restore these sectors again
+    -v [or --version]:   print version
+    -? [or --help]:      print this message
+
+dangerous options:
+
+    -g [or --show-geometry]: print the kernel's idea of the geometry
+    -x [or --show-extended]: also list extended partitions on output
+
+                             or expect descriptors for them on input
+    -L  [or --Linux]:      do not complain about things irrelevant for Linux
+    -q  [or --quiet]:      suppress warning messages
+    You can override the detected geometry using:
+    -C# [or --cylinders #]:set the number of cylinders to use
+    -H# [or --heads #]:    set the number of heads to use
+    -S# [or --sectors #]:  set the number of sectors to use
+
+You can disable all consistency checking with:
+
+    -f  [or --force]:      do what I say, even if it is stupid
+
+-------------------------------
+
+=item sleep
+
+Usage: sleep N
+
+Pause for N seconds.
+
+Example:
+
+       $ sleep 2
+       [2 second delay results]
+
+-------------------------------
+
+=item sort
+
+Usage: sort [-n] [-r] [FILE]...
+
+Sorts lines of text in the specified files
+
+Example:
+
+       $ echo -e "e\nf\nb\nd\nc\na" | sort
+       a
+       b
+       c
+       d
+       e
+       f
+
+-------------------------------
+
+=item sync
+
+Usage: sync
+
+Write all buffered filesystem blocks to disk.
+
+-------------------------------
+
+=item syslogd
+
+Usage: syslogd [OPTION]...
+
+Linux system and kernel (provides klogd) logging utility.
+Note that this version of syslogd/klogd ignores /etc/syslog.conf.
+
+Options:
+
+        -m      Change the mark timestamp interval. default=20min. 0=off
+        -n      Do not fork into the background (for when run by init)
+        -K      Do not start up the klogd process (by default syslogd spawns klogd).
+        -O      Specify an alternate log file.  default=/var/log/messages
 
 -------------------------------
 
 =item swapon
 
+Usage: swapon [OPTION] [device]
+
+Start swapping virtual memory pages on the given device.
+
+Options:
+
+        -a      Start swapping on all swap devices
+
 -------------------------------
 
 =item swapoff
 
+Usage: swapoff [OPTION] [device]
+
+Stop swapping virtual memory pages on the given device.
+
+Options:
+
+        -a      Stop swapping on all swap devices
+
 -------------------------------
 
 =item tail
 
+Usage: tail [OPTION] [FILE]...
+
+Print last 10 lines of each FILE to standard output.
+With more than one FILE, precede each with a header giving the
+file name. With no FILE, or when FILE is -, read standard input.
+
+Options:
+
+        -n NUM          Print last NUM lines instead of first 10
+        -f              Output data as the file grows.  This version
+                        of 'tail -f' supports only one file at a time.
+
+Example:
+
+       $ tail -n 1 /etc/resolv.conf
+       nameserver 10.0.0.1
+
 -------------------------------
 
 =item tar
 
+Usage: tar -[cxtvO] [--exclude File] [-f tarFile] [FILE] ...
+
+Create, extract, or list files from a tar file.  Note that
+this version of tar treats hard links as separate files.
+
+Main operation mode:
+
+        c               create
+        x               extract
+        t               list
+
+File selection:
+
+        f               name of tarfile or "-" for stdin
+        O               extract to stdout
+        --exclude       file to exclude
+
+Informative output:
+
+        v               verbosely list files processed
+
+Example:
+
+       $ zcat /tmp/tarball.tar.gz | tar -xf -
+       $ tar -cf /tmp/tarball.tar /usr/local
+
 -------------------------------
 
 =item test, [
 
+Usage: test EXPRESSION
+or   [ EXPRESSION ]
+
+Checks file types and compares values returning an exit
+code determined by the value of EXPRESSION.
+
+Example:
+
+       $ test 1 -eq 2
+       $ echo $?
+       1
+       $ test 1 -eq 1
+       $ echo $?
+       0
+       $ [ -d /etc ]
+       $ echo $?
+       0
+       $ [ -d /junk ]
+       $ echo $?
+       1
+
 -------------------------------
 
 =item tee
 
+Usage: tee [OPTION]... [FILE]...
+
+Copy standard input to each FILE, and also to standard output.
+
+Options:
+
+        -a      append to the given FILEs, do not overwrite
+
+Example:
+
+       $ echo "Hello" | tee /tmp/foo
+       $ cat /tmp/foo
+       Hello
+
 -------------------------------
 
 =item touch
 
+Usage: touch [-c] file [file ...]
+
+Update the last-modified date on (or create) the selected file[s].
+
+Example:
+
+       $ ls -l /tmp/foo
+       /bin/ls: /tmp/foo: No such file or directory
+       $ touch /tmp/foo
+       $ ls -l /tmp/foo
+       -rw-rw-r--    1 andersen andersen        0 Apr 15 01:11 /tmp/foo
+
 -------------------------------
 
 =item tr
 
+Usage:  tr [-csu] string1 string2
+        tr [-cu] -d string1
+        tr [-cu] -s string1
+        tr [-cu] -ds string1 string2
+
+Translate, squeeze, and/or delete characters from standard
+input, writing to standard output.
+
+Example:
+
+       $ echo "gdkkn vnqkc" | tr [a-y] [b-z]
+       hello world
+
 -------------------------------
 
 =item true
 
+Returns an exit code of TRUE (0)
+
+Example:
+
+       $ true
+       $ echo $?
+       0
+
 -------------------------------
 
 =item tty
 
+FIXME
+
 -------------------------------
 
 =item umount
 
+FIXME
+
 -------------------------------
 
 =item uname
 
--------------------------------
-
-=item uptime
+FIXME
 
 -------------------------------
 
 =item uniq
 
+FIXME
+
 -------------------------------
 
 =item update
 
+FIXME
+
+-------------------------------
+
+=item uptime
+
+FIXME
+
 -------------------------------
 
 =item usleep
 
+FIXME
+
 -------------------------------
 
 =item wc
 
+FIXME
+
 -------------------------------
 
 =item whoami
 
+FIXME
+
 -------------------------------
 
 =item yes
 
+FIXME
+
 -------------------------------
 
 =item zcat
 
+FIXME
+
 -------------------------------
 
 =back
@@ -1046,4 +1675,4 @@ Enrique Zanardi <ezanardi@ull.es>
 
 =cut
 
-# $Id: busybox.pod,v 1.9 2000/04/13 23:44:04 beppu Exp $
+# $Id: busybox.pod,v 1.10 2000/04/15 16:34:54 erik Exp $
diff --git a/gzip.c b/gzip.c
index 55ec5bc4e16e310aae8e8e3568b087037a362027..a9d34aeb19ba9401d41a658c4bfecbf6d2ea06f8 100644 (file)
--- a/gzip.c
+++ b/gzip.c
@@ -41,7 +41,7 @@
 static const char gzip_usage[] =
        "gzip [OPTION]... FILE\n\n"
        "Compress FILE with maximum compression.\n"
-       "When FILE is -, reads standard input.  Implies -c.\n\n"
+       "When FILE is '-', reads standard input.  Implies -c.\n\n"
 
        "Options:\n"
        "\t-c\tWrite output to standard output instead of FILE.gz\n";
index 5948bacc84ad177ba06650ada752c5cbb63804a1..c8206e020e5d3f8208b375402fe50ea32280fe07 100644 (file)
 #include <sys/stat.h>
 
 static const char makedevs_usage[] =
-       "makedevs 0.01 -- Create an entire range of device files\n\n"
-       "\tmakedevs /dev/ttyS c 4 64 0 63        (ttyS0-ttyS63)\n"
-
-       "\tmakedevs /dev/hda b 3 0 0 8 s         (hda,hda1-hda8)\n";
+       "makedevs NAME TYPE MAJOR MINOR FIRST LAST [s]\n\n"
+       "Creates a range of block or character special files\n\n"
+       "TYPEs include:\n"
+       "\tb:\tMake a block (buffered) device.\n"
+       "\tc or u:\tMake a character (un-buffered) device.\n"
+       "\tp:\tMake a named pipe. MAJOR and MINOR are ignored for named pipes.\n\n"
+       "FIRST specifies the number appended to NAME to create the first device.\n"
+       "LAST specifies the number of the last item that should be created.\n"
+       "If 's' is the last argument, the base device is created as well.\n\n"
+       "For example:\n"
+       "\tmakedevs /dev/ttyS c 4 66 2 63   ->  ttyS2-ttyS63\n"
+       "\tmakedevs /dev/hda b 3 0 0 8 s    ->  hda,hda1-hda8\n";
 
 int makedevs_main(int argc, char **argv)
 {
@@ -38,6 +46,9 @@ int makedevs_main(int argc, char **argv)
        char devname[255];
        char buf[255];
 
+       if (argc < 7 || *argv[1]=='-')
+               usage(makedevs_usage);
+
        switch (type[0]) {
        case 'c':
                mode = S_IFCHR;
diff --git a/math.c b/math.c
index 75b4cdeb590bc2e66724f2fda140d14d3be94ee1..3b459f62efb5c53319391bfd8f9f7bc4810afda3 100644 (file)
--- a/math.c
+++ b/math.c
@@ -7,7 +7,10 @@
 
 /* Tiny RPN calculator, because "expr" didn't give me bitwise operations. */
 
-static const char math_usage[] = "math expression ...";
+static const char math_usage[] = "math expression ...\n\n"
+               "This is a Tiny RPN calculator that understands the\n"
+               "following operations: +, -, /, *, and, or, not, eor.\n"
+               "i.e. 'math 2 2 add' -> 4, and 'math 8 8 \\* 2 2 + /' -> 16\n";
 
 static double stack[100];
 static unsigned int pointer;
@@ -85,14 +88,14 @@ struct op {
 };
 
 static const struct op operators[] = {
-       {"add", add},
+       {"+", add},
+       {"-", sub},
+       {"*", mul},
+       {"/", divide},
        {"and", and},
-       {"div", divide},
-       {"eor", eor},
-       {"mul", mul},
-       {"not", not},
        {"or", or},
-       {"sub", sub},
+       {"not", not},
+       {"eor", eor},
        {0, 0}
 };
 
@@ -127,11 +130,13 @@ static void stack_machine(const char *argument)
 
 int math_main(int argc, char **argv)
 {
+       if (argc < 1 || *argv[1]=='-')
+               usage(math_usage);
        while (argc >= 2) {
                stack_machine(argv[1]);
                argv++;
                argc--;
        }
        stack_machine(0);
-       return 0;
+       exit( TRUE);
 }
index 5948bacc84ad177ba06650ada752c5cbb63804a1..c8206e020e5d3f8208b375402fe50ea32280fe07 100644 (file)
 #include <sys/stat.h>
 
 static const char makedevs_usage[] =
-       "makedevs 0.01 -- Create an entire range of device files\n\n"
-       "\tmakedevs /dev/ttyS c 4 64 0 63        (ttyS0-ttyS63)\n"
-
-       "\tmakedevs /dev/hda b 3 0 0 8 s         (hda,hda1-hda8)\n";
+       "makedevs NAME TYPE MAJOR MINOR FIRST LAST [s]\n\n"
+       "Creates a range of block or character special files\n\n"
+       "TYPEs include:\n"
+       "\tb:\tMake a block (buffered) device.\n"
+       "\tc or u:\tMake a character (un-buffered) device.\n"
+       "\tp:\tMake a named pipe. MAJOR and MINOR are ignored for named pipes.\n\n"
+       "FIRST specifies the number appended to NAME to create the first device.\n"
+       "LAST specifies the number of the last item that should be created.\n"
+       "If 's' is the last argument, the base device is created as well.\n\n"
+       "For example:\n"
+       "\tmakedevs /dev/ttyS c 4 66 2 63   ->  ttyS2-ttyS63\n"
+       "\tmakedevs /dev/hda b 3 0 0 8 s    ->  hda,hda1-hda8\n";
 
 int makedevs_main(int argc, char **argv)
 {
@@ -38,6 +46,9 @@ int makedevs_main(int argc, char **argv)
        char devname[255];
        char buf[255];
 
+       if (argc < 7 || *argv[1]=='-')
+               usage(makedevs_usage);
+
        switch (type[0]) {
        case 'c':
                mode = S_IFCHR;
index 9791b64b204b796cce108027165a520b1a2cfd09..cf20d1711bbf11d695cc31bfeadaf4cc66b81d1e 100644 (file)
@@ -4,7 +4,8 @@
 #include <sys/mtio.h>
 #include <sys/fcntl.h>
 
-static const char mt_usage[] = "mt [-f device] opcode value\n";
+static const char mt_usage[] = "mt [-f device] opcode value\n\n"
+                       "Control magnetic tape drive operation\n";
 
 struct mt_opcodes {
        char *name;
@@ -56,6 +57,10 @@ extern int mt_main(int argc, char **argv)
        const struct mt_opcodes *code = opcodes;
        struct mtop op;
        int fd;
+       
+       if ((argc != 2 && argc != 3) || **(argv + 1) == '-') {
+               usage(mt_usage);
+       }
 
        if (strcmp(argv[1], "-f") == 0) {
                if (argc < 4) {
@@ -74,7 +79,7 @@ extern int mt_main(int argc, char **argv)
 
        if (code->name == 0) {
                fprintf(stderr, "mt: unrecognized opcode %s.\n", argv[1]);
-               return (FALSE);
+               exit (FALSE);
        }
 
        op.mt_op = code->value;
@@ -85,13 +90,13 @@ extern int mt_main(int argc, char **argv)
 
        if ((fd = open(file, O_RDONLY, 0)) < 0) {
                perror(file);
-               return (FALSE);
+               exit (FALSE);
        }
 
        if (ioctl(fd, MTIOCTOP, &op) != 0) {
                perror(file);
-               return (FALSE);
+               exit (FALSE);
        }
 
-       return (TRUE);
+       exit (TRUE);
 }
index c74402d4c992d14f4e02d0422a1f0c9f3c3729f5..b273df04633abc38665bffb0412d4999b8546bcd 100644 (file)
--- a/mkfifo.c
+++ b/mkfifo.c
 #include <errno.h>
 
 static const char mkfifo_usage[] = "mkfifo [OPTIONS] name\n\n"
-       "Create the named fifo\n\n"
+       "Creates a named pipe (identical to 'mknod name p')\n\n"
 
        "Options:\n"
-       "\t-m\tcreate the fifo with the specified mode; default = a=rw-umask\n";
+       "\t-m\tcreate the pipe using the specified mode (default a=rw)\n";
 
 extern int mkfifo_main(int argc, char **argv)
 {
diff --git a/mknod.c b/mknod.c
index 40f508d334c6dd8ce0a3beb0cf507c0581824d0d..0c93df64da3483e9c191513edc95f293942965d2 100644 (file)
--- a/mknod.c
+++ b/mknod.c
 #include <fcntl.h>
 #include <unistd.h>
 
-static const char mknod_usage[] = "mknod NAME TYPE MAJOR MINOR\n\n"
-       "Make block or character special files.\n\n"
+static const char mknod_usage[] = "mknod [OPTIONS] NAME TYPE MAJOR MINOR\n\n"
+       "Create a special file (block, character, or pipe).\n\n"
+       "Options:\n"
+       "\t-m\tcreate the special file using the specified mode (default a=rw)\n\n"
        "TYPEs include:\n"
        "\tb:\tMake a block (buffered) device.\n"
-
        "\tc or u:\tMake a character (un-buffered) device.\n"
-       "\tp:\tMake a named pipe. Major and minor are ignored for named pipes.\n";
+       "\tp:\tMake a named pipe. MAJOR and MINOR are ignored for named pipes.\n";
 
 int mknod_main(int argc, char **argv)
 {
+       char *thisarg;
        mode_t mode = 0;
+       mode_t perm = 0666;
        dev_t dev = 0;
 
-       if (argc != 5 || **(argv + 1) == '-') {
+       argc--;
+       argv++;
+
+       /* Parse any options */
+       while (argc > 1) {
+               if (**argv != '-')
+                       break;
+               thisarg = *argv;
+               thisarg++;
+               switch (*thisarg) {
+               case 'm':
+                       argc--;
+                       argv++;
+                       parse_mode(*argv, &perm);
+                       break;
+               default:
+                       usage(mknod_usage);
+               }
+               argc--;
+               argv++;
+       }
+       if (argc != 4 && argc != 2) {
                usage(mknod_usage);
        }
-       switch (argv[2][0]) {
+       switch (argv[1][0]) {
        case 'c':
        case 'u':
                mode = S_IFCHR;
@@ -54,23 +78,22 @@ int mknod_main(int argc, char **argv)
                break;
        case 'p':
                mode = S_IFIFO;
+               if (argc!=2) {
+                       usage(mknod_usage);
+               }
                break;
        default:
                usage(mknod_usage);
        }
 
        if (mode == S_IFCHR || mode == S_IFBLK) {
-               dev = (atoi(argv[3]) << 8) | atoi(argv[4]);
-               if (argc != 5) {
-                       usage(mknod_usage);
-               }
+               dev = (atoi(argv[2]) << 8) | atoi(argv[1]);
        }
 
-       mode |= 0666;
+       mode |= perm;
 
-       if (mknod(argv[1], mode, dev) != 0) {
-               perror(argv[1]);
-               exit (FALSE);
-       }
+       if (mknod(argv[0], mode, dev) != 0)
+               fatalError("%s: %s\n", argv[0], strerror(errno));
        exit (TRUE);
 }
+
diff --git a/mnc.c b/mnc.c
index 54cfdc602d7c7f87cd807f78801f55307d5df0a9..60c18a91a8f8037c571df881040d6100c828eedf 100644 (file)
--- a/mnc.c
+++ b/mnc.c
@@ -56,11 +56,11 @@ int mnc_main(int argc, char **argv)
 
        fd_set readfds, testfds;
 
-       if (argc <= 1 || **(argv + 1) == '-') {
-               usage(mnc_usage);
-       }
        argc--;
        argv++;
+       if (argc < 2 || **(argv + 1) == '-') {
+               usage(mnc_usage);
+       }
 
        sfd = socket(AF_INET, SOCK_STREAM, 0);
 
diff --git a/mt.c b/mt.c
index 9791b64b204b796cce108027165a520b1a2cfd09..cf20d1711bbf11d695cc31bfeadaf4cc66b81d1e 100644 (file)
--- a/mt.c
+++ b/mt.c
@@ -4,7 +4,8 @@
 #include <sys/mtio.h>
 #include <sys/fcntl.h>
 
-static const char mt_usage[] = "mt [-f device] opcode value\n";
+static const char mt_usage[] = "mt [-f device] opcode value\n\n"
+                       "Control magnetic tape drive operation\n";
 
 struct mt_opcodes {
        char *name;
@@ -56,6 +57,10 @@ extern int mt_main(int argc, char **argv)
        const struct mt_opcodes *code = opcodes;
        struct mtop op;
        int fd;
+       
+       if ((argc != 2 && argc != 3) || **(argv + 1) == '-') {
+               usage(mt_usage);
+       }
 
        if (strcmp(argv[1], "-f") == 0) {
                if (argc < 4) {
@@ -74,7 +79,7 @@ extern int mt_main(int argc, char **argv)
 
        if (code->name == 0) {
                fprintf(stderr, "mt: unrecognized opcode %s.\n", argv[1]);
-               return (FALSE);
+               exit (FALSE);
        }
 
        op.mt_op = code->value;
@@ -85,13 +90,13 @@ extern int mt_main(int argc, char **argv)
 
        if ((fd = open(file, O_RDONLY, 0)) < 0) {
                perror(file);
-               return (FALSE);
+               exit (FALSE);
        }
 
        if (ioctl(fd, MTIOCTOP, &op) != 0) {
                perror(file);
-               return (FALSE);
+               exit (FALSE);
        }
 
-       return (TRUE);
+       exit (TRUE);
 }
index 15019e935e6c75156235c656fd7d1b4e9ed415c7..3223b3b63b6f8d01b6d62296872890fce20ce4fa 100644 (file)
@@ -41,7 +41,7 @@
  |  + find out how the real nslookup gets the default name server
  */
 
-static const char nslookup_usage[] = "nslookup [HOST]\n\n";
+static const char nslookup_usage[] = "nslookup [HOST]\n\nQueries the nameserver for the IP address of the given HOST\n";
 
 
 /* I have to see how the real nslookup does this.
@@ -50,8 +50,8 @@ static const char nslookup_usage[] = "nslookup [HOST]\n\n";
  */
 static void server_fprint(FILE * dst)
 {
-       fprintf(dst, "Server:  %s\n", "something");
-       fprintf(dst, "Address:  %s\n\n", "something");
+       fprintf(dst, "Server:     %s\n", "default");
+       fprintf(dst, "Address:    %s\n\n", "default");
 }
 
 /* only works for IPv4 */
@@ -96,9 +96,9 @@ static int addr_list_fprint(char **h_addr_list, FILE * dst)
 {
        int i, j;
        char *addr_string = (h_addr_list[1])
-               ? "Addresses" : "Address";
+               ? "Addresses: " : "Address:   ";
 
-       fprintf(dst, "%s ", addr_string);
+       fprintf(dst, "%s ", addr_string);
        for (i = 0, j = 0; h_addr_list[i]; i++, j++) {
                addr_fprint(h_addr_list[i], dst);
 
@@ -132,7 +132,7 @@ static struct hostent *gethostbyaddr_wrapper(const char *address)
 static struct hostent *hostent_fprint(struct hostent *host, FILE * dst)
 {
        if (host) {
-               fprintf(dst, "Name:    %s\n", host->h_name);
+               fprintf(dst, "Name:       %s\n", host->h_name);
                addr_list_fprint(host->h_addr_list, dst);
        } else {
                fprintf(dst, "*** %s\n", hstrerror(h_errno));
@@ -159,7 +159,7 @@ int nslookup_main(int argc, char **argv)
 {
        struct hostent *host;
 
-       if (argc < 2) {
+       if (argc < 2 || *argv[1]=='-') {
                usage(nslookup_usage);
        }
 
@@ -170,7 +170,7 @@ int nslookup_main(int argc, char **argv)
                host = gethostbyname(argv[1]);
        }
        hostent_fprint(host, stdout);
-       return 0;
+       exit( TRUE);
 }
 
-/* $Id: nslookup.c,v 1.6 2000/04/13 01:18:56 erik Exp $ */
+/* $Id: nslookup.c,v 1.7 2000/04/15 16:34:54 erik Exp $ */
index 15019e935e6c75156235c656fd7d1b4e9ed415c7..3223b3b63b6f8d01b6d62296872890fce20ce4fa 100644 (file)
@@ -41,7 +41,7 @@
  |  + find out how the real nslookup gets the default name server
  */
 
-static const char nslookup_usage[] = "nslookup [HOST]\n\n";
+static const char nslookup_usage[] = "nslookup [HOST]\n\nQueries the nameserver for the IP address of the given HOST\n";
 
 
 /* I have to see how the real nslookup does this.
@@ -50,8 +50,8 @@ static const char nslookup_usage[] = "nslookup [HOST]\n\n";
  */
 static void server_fprint(FILE * dst)
 {
-       fprintf(dst, "Server:  %s\n", "something");
-       fprintf(dst, "Address:  %s\n\n", "something");
+       fprintf(dst, "Server:     %s\n", "default");
+       fprintf(dst, "Address:    %s\n\n", "default");
 }
 
 /* only works for IPv4 */
@@ -96,9 +96,9 @@ static int addr_list_fprint(char **h_addr_list, FILE * dst)
 {
        int i, j;
        char *addr_string = (h_addr_list[1])
-               ? "Addresses" : "Address";
+               ? "Addresses: " : "Address:   ";
 
-       fprintf(dst, "%s ", addr_string);
+       fprintf(dst, "%s ", addr_string);
        for (i = 0, j = 0; h_addr_list[i]; i++, j++) {
                addr_fprint(h_addr_list[i], dst);
 
@@ -132,7 +132,7 @@ static struct hostent *gethostbyaddr_wrapper(const char *address)
 static struct hostent *hostent_fprint(struct hostent *host, FILE * dst)
 {
        if (host) {
-               fprintf(dst, "Name:    %s\n", host->h_name);
+               fprintf(dst, "Name:       %s\n", host->h_name);
                addr_list_fprint(host->h_addr_list, dst);
        } else {
                fprintf(dst, "*** %s\n", hstrerror(h_errno));
@@ -159,7 +159,7 @@ int nslookup_main(int argc, char **argv)
 {
        struct hostent *host;
 
-       if (argc < 2) {
+       if (argc < 2 || *argv[1]=='-') {
                usage(nslookup_usage);
        }
 
@@ -170,7 +170,7 @@ int nslookup_main(int argc, char **argv)
                host = gethostbyname(argv[1]);
        }
        hostent_fprint(host, stdout);
-       return 0;
+       exit( TRUE);
 }
 
-/* $Id: nslookup.c,v 1.6 2000/04/13 01:18:56 erik Exp $ */
+/* $Id: nslookup.c,v 1.7 2000/04/15 16:34:54 erik Exp $ */
index 41ab2e4426e6c4ad88f157843ecc6ea138ed6465..bfe40817540c8a0979f6a85fbc682a61b4213132 100644 (file)
--- a/printf.c
+++ b/printf.c
@@ -139,7 +139,7 @@ static void verify __P((char *s, char *end));
 /* The value to return to the calling program.  */
 static int exit_status;
 
-static const char printf_usage[] = "printf format [argument...]\n";
+static const char printf_usage[] = "printf format [argument...]\n\nFormats and prints the given data.\n";
 
 int printf_main(int argc, char **argv)
 {
diff --git a/sort.c b/sort.c
index 6ee6f207e68f749482f656231428003c289446ba..4301f4303db6e63d06db40389cbc274e23e9a3f0 100644 (file)
--- a/sort.c
+++ b/sort.c
@@ -33,7 +33,7 @@ static const char sort_usage[] = "sort [-n]"
 #ifdef BB_FEATURE_SORT_REVERSE
 " [-r]"
 #endif
-" [FILE]...\n\n";
+" [FILE]...\n\nSorts lines of text in the specified files\n";
 
 #ifdef BB_FEATURE_SORT_REVERSE
 #define APPLY_REVERSE(x) (reverse ? -(x) : (x))
@@ -320,4 +320,4 @@ int sort_main(int argc, char **argv)
        exit(0);
 }
 
-/* $Id: sort.c,v 1.13 2000/04/13 01:18:56 erik Exp $ */
+/* $Id: sort.c,v 1.14 2000/04/15 16:34:54 erik Exp $ */
diff --git a/test.c b/test.c
index 85d06a83a7f8f0ec552cdd79bb2fde4757653bd8..0ed777194463130fb9e8cc92ec40513aaa2ef661 100644 (file)
--- a/test.c
+++ b/test.c
@@ -1,6 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * echo implementation for busybox
+ * test implementation for busybox
  *
  * Copyright (c) by a whole pile of folks: 
  *
@@ -185,6 +185,12 @@ test_main(int argc, char** argv)
                        fatalError("missing ]");
                argv[argc] = NULL;
        }
+       if (strcmp(argv[1], "--help") == 0) {
+               usage("test EXPRESSION\n"
+                         "or   [ EXPRESSION ]\n\n"
+                               "Checks file types and compares values returning an exit\n"
+                               "code determined by the value of EXPRESSION.\n");
+       }
 
        /* Implement special cases from POSIX.2, section 4.62.4 */
        switch (argc) {
diff --git a/tr.c b/tr.c
index 3bfa4808056d4dc0c694ee30bc886f4ce5814d66..b631b006559aafc0a0cb2b134ff5cfb81795ea44 100644 (file)
--- a/tr.c
+++ b/tr.c
@@ -44,7 +44,7 @@ static char sccsid[] = "@(#)tr.c      8.2 (Berkeley) 5/4/95";
 #endif
 static const char rcsid[] =
 
-       "$Id: tr.c,v 1.2 2000/03/21 22:32:57 erik Exp $";
+       "$Id: tr.c,v 1.3 2000/04/15 16:34:54 erik Exp $";
 #endif                                                 /* not lint */
 #endif                                                 /* #if 0 */
 
@@ -138,12 +138,12 @@ int cflag;
 
 static void tr_usage()
 {
-       (void) fprintf(stderr, "%s\n%s\n%s\n%s\n",
-                                  "usage: tr [-csu] string1 string2",
-                                  "       tr [-cu] -d string1",
-                                  "       tr [-cu] -s string1",
-                                  "       tr [-cu] -ds string1 string2");
-       exit(1);
+       usage( "\ttr [-csu] string1 string2\n"
+                  "\ttr [-cu] -d string1\n"
+                  "\ttr [-cu] -s string1\n"
+                  "\ttr [-cu] -ds string1 string2\n\n"
+                  "Translate, squeeze, and/or delete characters from standard\n"
+                  "input, writing to standard output.\n");
 }