Lots of updates. Finished implementing BB_FEATURE_TRIVIAL_HELP
authorErik Andersen <andersen@codepoet.org>
Fri, 12 May 2000 19:41:47 +0000 (19:41 -0000)
committerErik Andersen <andersen@codepoet.org>
Fri, 12 May 2000 19:41:47 +0000 (19:41 -0000)
which lets you compile out most of the "--help" output, saving
up to 17k.

Renamed mnc to nc.
 -Erik

137 files changed:
Changelog
Makefile
applets/busybox.c
archival/gunzip.c
archival/gzip.c
archival/tar.c
busybox.c
busybox.def.h
console-tools/loadacm.c
console-tools/loadfont.c
console-tools/loadkmap.c
coreutils/cut.c [new file with mode: 0644]
coreutils/head.c
coreutils/id.c
coreutils/length.c
coreutils/ln.c
coreutils/logname.c
coreutils/ls.c
coreutils/mkdir.c
coreutils/mkfifo.c
coreutils/mknod.c
coreutils/printf.c
coreutils/pwd.c
coreutils/rm.c
coreutils/rmdir.c
coreutils/sleep.c
coreutils/sort.c
coreutils/sync.c
coreutils/tail.c
coreutils/tee.c
coreutils/test.c
coreutils/touch.c
coreutils/tty.c
coreutils/uniq.c
coreutils/usleep.c
coreutils/wc.c
coreutils/whoami.c
coreutils/yes.c
cut.c [new file with mode: 0644]
docs/busybox.pod
editors/sed.c
fbset.c
fdflush.c
find.c
findutils/find.c
findutils/grep.c
free.c
freeramdisk.c
fsck_minix.c
grep.c
gunzip.c
gzip.c
head.c
hostname.c
id.c
insmod.c
internal.h
kill.c
lash.c
length.c
ln.c
loadacm.c
loadfont.c
loadkmap.c
logger.c
logname.c
ls.c
makedevs.c
math.c
messages.c
miscutils/makedevs.c
miscutils/mt.c
miscutils/update.c
mkdir.c
mkfifo.c
mkfs_minix.c
mknod.c
mkswap.c
mnc.c [deleted file]
modutils/insmod.c
modutils/rmmod.c
more.c
mount.c
mt.c
nc.c [new file with mode: 0644]
networking/hostname.c
networking/nc.c [new file with mode: 0644]
networking/nslookup.c
networking/ping.c
networking/telnet.c
nslookup.c
ping.c
printf.c
procps/free.c
procps/kill.c
procps/ps.c
ps.c
pwd.c
rm.c
rmdir.c
rmmod.c
sed.c
sfdisk.c
sh.c
shell/lash.c
sleep.c
sort.c
swaponoff.c
sync.c
sysklogd/logger.c
sysklogd/syslogd.c
syslogd.c
tail.c
tar.c
tee.c
telnet.c
test.c
touch.c
tty.c
umount.c
uniq.c
update.c
usleep.c
util-linux/fbset.c
util-linux/fdflush.c
util-linux/freeramdisk.c
util-linux/fsck_minix.c
util-linux/mkfs_minix.c
util-linux/mkswap.c
util-linux/more.c
util-linux/mount.c
util-linux/swaponoff.c
util-linux/umount.c
utility.c
wc.c
whoami.c
yes.c

index 0cd58ef31cda923a8aef8a69c072ae44be1689de..54ec8d62eac31e24514d9642c0be099c890c0eac 100644 (file)
--- a/Changelog
+++ b/Changelog
@@ -3,6 +3,8 @@
             updated docs/busybox.pod accordingly.  -beppu
        * Added mktemp, contributed by Daniel Jacobowitz <dan@debian.org>
        * Added setkeycodes, for those that have wierd keyboard buttons.
+       * Added cut and tr from minix, since due to the license change, 
+           we can now use minix code.  Minix tr saves 4k. 
        * Fix for ping warnings from Sascha Ziemann <szi@aibon.ping.de>
        * Fixed update segfault
        * Fixed mknod -- minor number was always 0
@@ -18,9 +20,6 @@
            * added a simple id implementation; doesn't support sup. groups yet
        * logname used getlogin(3) which uses utmp.  Now it doesn't. 
        * whoami used getpwuid(3) which uses libc NSS.  Now it behaves. 
-       * Due to the license change, I can now use minix code.  Minux tr 
-           replaces the BSD derived tr, saving 4k and eliminating bsearch(3) 
-           from the list of used Libc symbols.
        * Add support for "noatime" and "nodiratime" mount flags to mount.
        * Changed 'umount -f' to mean force, and actually use umount2.
        * Changed 'umount -l' to mean "Do not free loop device".
@@ -29,6 +28,9 @@
        * More doc updates
        * cp -fa now works as expected for symlinks (it didn't before)
        * zcat now works (wasn't working since option parsing was broken)
+       * Renamed "mnc" to the more correct "nc".
+       * Added BB_FEATURE_TRIVIAL_HELP which compiles out most all of the
+           help messages (i.e --help).  Saves 17k over a full compile.
 
 
         -Erik
index 1ea5368d08c468dc5f7b47197cd3fc1f019bcd80..6323bd3378c5151dd8c662363d0e36c7da2da2ce 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -26,7 +26,7 @@ export VERSION
 # Set the following to `true' to make a debuggable build.
 # Leave this set to `false' for production use.
 # eg: `make DODEBUG=true tests'
-DODEBUG = true
+DODEBUG = false
 
 # If you want a static binary, turn this on.
 DOSTATIC = false
index d8a38ada31fde659fd1809481faa253e80fbc789..85b42df238f05d690fa9944d757c92c48e580e37 100644 (file)
@@ -65,6 +65,9 @@ static const struct Applet applets[] = {
 #ifdef BB_CP_MV
        {"cp", cp_mv_main, _BB_DIR_BIN},
 #endif
+#ifdef BB_CUT
+       {"cut", cut_main, _BB_DIR_USR_BIN},
+#endif
 #ifdef BB_DATE
        {"date", date_main, _BB_DIR_BIN},
 #endif
@@ -203,8 +206,8 @@ static const struct Applet applets[] = {
 #ifdef BB_MKTEMP
        {"mktemp", mktemp_main, _BB_DIR_BIN},
 #endif
-#ifdef BB_MNC
-       {"mnc", mnc_main, _BB_DIR_USR_BIN},
+#ifdef BB_NC
+       {"nc", nc_main, _BB_DIR_USR_BIN},
 #endif
 #ifdef BB_MORE
        {"more", more_main, _BB_DIR_BIN},
index bdf8dc293b620d9aabaf5f44a8ee231857f1f212..11fc3a8f9ca96a8cf297185354223920994c1d53 100644 (file)
  */
 
 #include "internal.h"
+
 static const char gunzip_usage[] =
-       "gunzip [OPTION]... FILE\n\n"
-       "Uncompress FILE (or standard input if FILE is '-').\n\n"
+       "gunzip [OPTION]... FILE\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nUncompress FILE (or standard input if FILE is '-').\n\n"
        "Options:\n"
 
        "\t-c\tWrite output to standard output\n"
-       "\t-t\tTest compressed file integrity\n";
+       "\t-t\tTest compressed file integrity\n"
+#endif
+       ;
 
        
        /* These defines are very important for BusyBox.  Without these,
@@ -43,8 +47,9 @@ static const char gunzip_usage[] =
 #define SMALL_MEM
 #define DYN_ALLOC
 
-#define bb_need_name_too_long
 #define BB_DECLARE_EXTERN
+#define bb_need_memory_exhausted
+#define bb_need_name_too_long
 #include "messages.c"
 
 
@@ -206,7 +211,7 @@ extern int method;                          /* compression method */
 #  define DECLARE(type, array, size)  type * array
 #  define ALLOC(type, array, size) { \
       array = (type*)calloc((size_t)(((size)+1L)/2), 2*sizeof(type)); \
-      if (array == NULL) errorMsg("insufficient memory"); \
+      if (array == NULL) errorMsg(memory_exhausted, "gunzip"); \
    }
 #  define FREE(array) {if (array != NULL) free(array), array=NULL;}
 #else
@@ -1053,7 +1058,7 @@ int in, out;                                      /* input and output file descriptors */
                int res = inflate();
 
                if (res == 3) {
-                       errorMsg("out of memory");
+                       errorMsg(memory_exhausted, "gunzip");
                } else if (res != 0) {
                        errorMsg("invalid compressed data--format violated");
                }
index cc6868b535056642d4509e8a609899a73e5c0e75..17ebf6cb781395772580cfc2dfba6b828aae4e3f 100644 (file)
@@ -30,6 +30,9 @@
  */
 
 #include "internal.h"
+#define BB_DECLARE_EXTERN
+#define bb_need_memory_exhausted
+#include "messages.c"
 
 /* These defines are very important for BusyBox.  Without these,
  * huge chunks of ram are pre-allocated making the BusyBox bss 
 
 
 static const char gzip_usage[] =
-       "gzip [OPTION]... FILE\n\n"
-       "Compress FILE with maximum compression.\n"
+       "gzip [OPTION]... FILE\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nCompress FILE with maximum compression.\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";
+       "\t-c\tWrite output to standard output instead of FILE.gz\n"
+#endif
+       ;
 
 
 /* I don't like nested includes, but the string and io functions are used
@@ -121,7 +127,7 @@ extern int method;                          /* compression method */
 #  define DECLARE(type, array, size)  type * array
 #  define ALLOC(type, array, size) { \
       array = (type*)calloc((size_t)(((size)+1L)/2), 2*sizeof(type)); \
-      if (array == NULL) errorMsg("insufficient memory"); \
+      if (array == NULL) errorMsg(memory_exhausted, "gzip"); \
    }
 #  define FREE(array) {if (array != NULL) free(array), array=NULL;}
 #else
@@ -1778,7 +1784,6 @@ int part_nb;                                      /* number of parts in .gz file */
 long time_stamp;                               /* original time stamp (modification time) */
 long ifile_size;                               /* input file size, -1 for devices (debug only) */
 char *env;                                             /* contents of GZIP env variable */
-char **args = NULL;                            /* argv pointer if GZIP env variable defined */
 char z_suffix[MAX_SUFFIX + 1]; /* default suffix (can be set with --suffix) */
 int z_len;                                             /* strlen(z_suffix) */
 
@@ -3248,7 +3253,7 @@ char *env;                                                /* name of environment variable */
        nargv = (char **) calloc(*argcp + 1, sizeof(char *));
 
        if (nargv == NULL)
-               errorMsg("out of memory");
+               errorMsg(memory_exhausted, "gzip");
        oargv = *argvp;
        *argvp = nargv;
 
index c82e51fe97fd98a6d5500a0cbdc3df91fb0cf763..6784d80ff0cd2ee05a5ca3f78233687267656ba5 100644 (file)
@@ -60,8 +60,9 @@ static const char tar_usage[] =
 #if defined BB_FEATURE_TAR_EXCLUDE
        "[--exclude File] "
 #endif
-       "[-f tarFile] [FILE] ...\n\n"
-       "Create, extract, or list files from a tar file.  Note that\n"
+       "[-f tarFile] [FILE] ...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nCreate, extract, or list files from a tar file.  Note that\n"
        "this version of tar treats hard links as separate files.\n\n"
        "Main operation mode:\n"
 #ifdef BB_FEATURE_TAR_CREATE
@@ -77,6 +78,7 @@ static const char tar_usage[] =
 #endif
        "\nInformative output:\n"
        "\tv\t\tverbosely list files processed\n"
+#endif
        ;
 
 /* Tar file constants  */
index d8a38ada31fde659fd1809481faa253e80fbc789..85b42df238f05d690fa9944d757c92c48e580e37 100644 (file)
--- a/busybox.c
+++ b/busybox.c
@@ -65,6 +65,9 @@ static const struct Applet applets[] = {
 #ifdef BB_CP_MV
        {"cp", cp_mv_main, _BB_DIR_BIN},
 #endif
+#ifdef BB_CUT
+       {"cut", cut_main, _BB_DIR_USR_BIN},
+#endif
 #ifdef BB_DATE
        {"date", date_main, _BB_DIR_BIN},
 #endif
@@ -203,8 +206,8 @@ static const struct Applet applets[] = {
 #ifdef BB_MKTEMP
        {"mktemp", mktemp_main, _BB_DIR_BIN},
 #endif
-#ifdef BB_MNC
-       {"mnc", mnc_main, _BB_DIR_USR_BIN},
+#ifdef BB_NC
+       {"nc", nc_main, _BB_DIR_USR_BIN},
 #endif
 #ifdef BB_MORE
        {"more", more_main, _BB_DIR_BIN},
index a2d216ff7083b8f83b0ea2d33792ca8d39a86849..744db85e8b08c9aa6a434e3eed2500b5522e5321 100644 (file)
@@ -14,6 +14,7 @@
 #define BB_CHVT
 #define BB_CLEAR
 #define BB_CP_MV
+#define BB_CUT
 #define BB_DATE
 #define BB_DD
 #define BB_DEALLOCVT
@@ -60,7 +61,7 @@
 #define BB_MKNOD
 #define BB_MKSWAP
 #define BB_MKTEMP
-#define BB_MNC
+#define BB_NC
 #define BB_MORE
 #define BB_MOUNT
 #define BB_MT
 //
 // This compiles out everything but the most 
 // trivial --help usage information (i.e. reduces binary size)
-//#define BB_FEATURE_TRIVIAL_HELP
+#define BB_FEATURE_TRIVIAL_HELP
 //
 // Use termios to manipulate the screen ('more' is prettier with this on)
 //#define BB_FEATURE_USE_TERMIOS
index 8f6923478f075f726cd016013d369e16b493e536..cca5406ee3a7fe4bac9934306599144bdb7a7016 100644 (file)
 #include <sys/ioctl.h>
 #include <sys/kd.h>
 
-static const char loadacm_usage[] = "loadacm\n\n"
-       "Loads an acm from standard input.\n";
+static const char loadacm_usage[] = "loadacm\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nLoads an acm from standard input.\n"
+#endif
+       ;
 
 typedef unsigned short unicode;
 
index 5e1f04d76e596c8e3f9623798b08392ed3719e0a..7eaf40e82715b75621921fbe82b6b5c4055a3e4b 100644 (file)
 #define PSF_MAXMODE    0x03
 #define PSF_SEPARATOR  0xFFFF
 
-static const char loadfont_usage[] = "loadfont\n\n"
-       "Loads a console font from standard input.\n";
+static const char loadfont_usage[] = "loadfont\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "Loads a console font from standard input.\n"
+#endif
+       ;
 
 struct psf_header {
        unsigned char magic1, magic2;   /* Magic number */
index 75e52e148f8cdbd1b75352e682ad82b53ca44906..99efc510179a1dfa9d8641b2370955e1cb350899 100644 (file)
 #include <sys/ioctl.h>
 
 
-static const char loadkmap_usage[] = "loadkmap\n\n"
-       "Loads a binary keyboard translation table from standard input.\n";
+static const char loadkmap_usage[] = "loadkmap\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "Loads a binary keyboard translation table from standard input.\n"
+#endif
+       ;
 
 
 int loadkmap_main(int argc, char **argv)
diff --git a/coreutils/cut.c b/coreutils/cut.c
new file mode 100644 (file)
index 0000000..89a934e
--- /dev/null
@@ -0,0 +1,372 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * cut implementation for busybox
+ *
+ * Copyright (c) Michael J. Holme
+ *
+ * This version of cut is adapted from Minix cut and was modified 
+ * by Erik Andersen <andersee@debian.org> to be used in busybox.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * 
+ * Original copyright notice is retained at the end of this file.
+ */
+
+#include "internal.h"
+#include <sys/types.h>
+#include <ctype.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#define BB_DECLARE_EXTERN
+#define bb_need_help
+#include "messages.c"
+
+#define MAX_FIELD      80                      /* Pointers to the beginning of each field
+                                                                  * are stored in columns[], if a line holds
+                                                                  * more than MAX_FIELD columns the array
+                                                                  * boundary is exceed. But unlikely at 80 */
+
+#define MAX_ARGS       32                      /* Maximum number of fields following -f or
+                                                                  * -c switches                                                      */
+int args[MAX_ARGS * 2];
+int num_args;
+
+/* Lots of new defines, should easen maintainance...                   */
+#define DUMP_STDIN     0                       /* define for mode: no options   */
+#define OPTIONF                1                       /* define for mode: option -f    */
+#define OPTIONC                2                       /* define for mode: option -c    */
+#define OPTIONB                3                       /* define for mode: option -b    */
+#define NOTSET         0                       /* option not selected       */
+#define SET            1                               /* option selected       */
+
+/* Defines for the warnings                                            */
+#define DELIMITER_NOT_APPLICABLE       0
+#define OVERRIDING_PREVIOUS_MODE       1
+#define OPTION_NOT_APPLICABLE          2
+#define UNKNOWN_OPTION                 3
+#define FILE_NOT_READABLE              4
+
+/* Defines for the fatal errors                                                */
+#define SYNTAX_ERROR                           101
+#define POSITION_ERROR                         102
+#define LINE_TO_LONG_ERROR                     103
+#define RANGE_ERROR                                    104
+#define MAX_FIELDS_EXEEDED_ERROR       105
+#define MAX_ARGS_EXEEDED_ERROR         106
+
+
+int mode;                                              /* 0 = dump stdin to stdout, 1=-f, 2=-c   */
+char delim = '\t';                             /* default delimiting character   */
+FILE *fd;
+char *name;
+char line[BUFSIZ];
+int exit_status;
+
+int cut_main(int argc, char **argv);
+void warn(int warn_number, char *option);
+void cuterror(int err);
+void get_args(void);
+void cut(void);
+
+void warn(int warn_number, char *option)
+{
+       static char *warn_msg[] = {
+               "%s: Option -d allowed only with -f\n",
+               "%s: -%s overrides earlier option\n",
+               "%s: -%s not allowed in current mode\n",
+               "%s: Cannot open %s\n"
+       };
+
+       fprintf(stderr, warn_msg[warn_number], name, option);
+       exit_status = warn_number + 1;
+
+}
+
+void cuterror(int err)
+{
+       static char *err_mes[] = {
+               "%s: syntax error\n",
+               "%s: position must be >0\n",
+               "%s: line longer than BUFSIZ\n",
+               "%s: range must not decrease from left to right\n",
+               "%s: MAX_FIELD exceeded\n",
+               "%s: MAX_ARGS exceeded\n"
+       };
+
+       fprintf(stderr, err_mes[err - 101], name);
+       exit(err);
+}
+
+
+void get_args()
+{
+       int i = 0;
+       int arg_ptr = 0;
+       int flag;
+
+       num_args = 0;
+       do {
+               if (num_args == MAX_ARGS)
+                       cuterror(MAX_ARGS_EXEEDED_ERROR);
+               if (!isdigit(line[i]) && line[i] != '-')
+                       cuterror(SYNTAX_ERROR);
+
+               args[arg_ptr] = 1;
+               args[arg_ptr + 1] = BUFSIZ;
+               flag = 1;
+
+               while (line[i] != ',' && line[i] != 0) {
+                       if (isdigit(line[i])) {
+                               args[arg_ptr] = 0;
+                               while (isdigit(line[i]))
+                                       args[arg_ptr] = 10 * args[arg_ptr] + line[i++] - '0';
+                               if (!args[arg_ptr])
+                                       cuterror(POSITION_ERROR);
+                               arg_ptr++;
+                       }
+                       if (line[i] == '-') {
+                               arg_ptr |= 1;
+                               i++;
+                               flag = 0;
+                       }
+               }
+               if (flag && arg_ptr & 1)
+                       args[arg_ptr] = args[arg_ptr - 1];
+               if (args[num_args * 2] > args[num_args * 2 + 1])
+                       cuterror(RANGE_ERROR);
+               num_args++;
+               arg_ptr = num_args * 2;
+       }
+       while (line[i++]);
+}
+
+
+void cut()
+{
+       int i, j, length, maxcol=0;
+       char *columns[MAX_FIELD];
+
+       while (fgets(line, BUFSIZ, fd)) {
+               length = strlen(line) - 1;
+               *(line + length) = 0;
+               switch (mode) {
+               case DUMP_STDIN:
+                       printf("%s", line);
+                       break;
+               case OPTIONF:
+                       columns[maxcol++] = line;
+                       for (i = 0; i < length; i++) {
+                               if (*(line + i) == delim) {
+                                       *(line + i) = 0;
+                                       if (maxcol == MAX_FIELD)
+                                               cuterror(MAX_FIELDS_EXEEDED_ERROR);
+                                       columns[maxcol] = line + i + 1;
+                                       maxcol++;
+                               }
+                       }
+                       if (maxcol != 1) { 
+                               for (i = 0; i < num_args; i++) {
+                                       for (j = args[i * 2]; j <= args[i * 2 + 1]; j++)
+                                               if (j <= maxcol) {
+                                                       printf("%s", columns[j - 1]);
+                                                       if (i != num_args - 1 || j != args[i * 2 + 1])
+                                                               putchar(delim);
+                                               }
+                               }
+                       }
+                       break;
+               case OPTIONC:
+                       for (i = 0; i < num_args; i++) {
+                               for (j = args[i * 2];
+                                        j <= (args[i * 2 + 1] >
+                                                  length ? length : args[i * 2 + 1]); j++)
+                                       putchar(*(line + j - 1));
+                       }
+               }
+               if (maxcol != 1)
+                       putchar('\n');
+       }
+}
+
+
+int cut_main(int argc, char **argv)
+{
+       int i = 1;
+       int numberFilenames = 0;
+
+       name = argv[0];
+
+       if (argc == 1 || strcmp(argv[1], dash_dash_help)==0)
+               usage( "cut [OPTION]... [FILE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                               "\nPrints selected fields from each input FILE to standard output.\n\n"
+                               "Options:\n"
+                               "\t-b LIST\tOutput only bytes from LIST\n"
+                               "\t-c LIST\tOutput only characters from LIST\n"
+                               "\t-d DELIM\tUse DELIM instead of tab as the field delimiter\n"
+                               "\t-f N\tPrint only these fields\n"
+                               "\t-n\tIgnored\n"
+#endif
+                               );
+
+       while (i < argc) {
+               if (argv[i][0] == '-') {
+                       switch (argv[i++][1]) {
+                       case 'd':
+                               if (mode == OPTIONC || mode == OPTIONB)
+                                       warn(DELIMITER_NOT_APPLICABLE, "d");
+                               delim = argv[i++][0];
+                               break;
+                       case 'f':
+                               sprintf(line, "%s", argv[i++]);
+                               if (mode == OPTIONC || mode == OPTIONB)
+                                       warn(OVERRIDING_PREVIOUS_MODE, "f");
+                               mode = OPTIONF;
+                               break;
+                       case 'b':
+                               sprintf(line, "%s", argv[i++]);
+                               if (mode == OPTIONF || mode == OPTIONC)
+                                       warn(OVERRIDING_PREVIOUS_MODE, "b");
+                               mode = OPTIONB;
+                               break;
+                       case 'c':
+                               sprintf(line, "%s", argv[i++]);
+                               if (mode == OPTIONF || mode == OPTIONB)
+                                       warn(OVERRIDING_PREVIOUS_MODE, "c");
+                               mode = OPTIONC;
+                               break;
+                       case '\0':                      /* - means: read from stdin      */
+                               numberFilenames++;
+                               break;
+                       case 'n':                       /* needed for Posix, but no effect here  */
+                               if (mode != OPTIONB)
+                                       warn(OPTION_NOT_APPLICABLE, "n");
+                               break;
+                       default:
+                               warn(UNKNOWN_OPTION, &(argv[i - 1][1]));
+                       }
+               } else {
+                       i++;
+                       numberFilenames++;
+               }
+       }
+
+/* Here follow the checks, if the selected options are reasonable.     */
+       if (mode == OPTIONB)            /* since in Minix char := byte       */
+               mode = OPTIONC;
+       get_args();
+       if (numberFilenames != 0) {
+               i = 1;
+               while (i < argc) {
+                       if (argv[i][0] == '-') {
+                               switch (argv[i][1]) {
+                               case 'f':
+                               case 'c':
+                               case 'b':
+                               case 'd':
+                                       i += 2;
+                                       break;
+                               case 'n':
+                               case 'i':
+                               case 's':
+                                       i++;
+                                       break;
+                               case '\0':
+                                       fd = stdin;
+                                       i++;
+                                       cut();
+                                       break;
+                               default:
+                                       i++;
+                               }
+                       } else {
+                               if ((fd = fopen(argv[i++], "r")) == NULL) {
+                                       warn(FILE_NOT_READABLE, argv[i - 1]);
+                               } else {
+                                       cut();
+                                       fclose(fd);
+                               }
+                       }
+               }
+       } else {
+               fd = stdin;
+               cut();
+       }
+
+       exit(exit_status);
+}
+
+/* cut - extract columns from a file or stdin.         Author: Michael J. Holme
+ *
+ *     Copyright 1989, Michael John Holme, All rights reserved.
+ *     This code may be freely distributed, provided that this notice
+ *     remains intact.
+ *
+ *     V1.1: 6th September 1989
+ *
+ *     Bugs, criticisms, etc,
+ *      c/o Mark Powell
+ *          JANET sq79@uk.ac.liv
+ *          ARPA  sq79%liv.ac.uk@nsfnet-relay.ac.uk
+ *          UUCP  ...!mcvax!ukc!liv.ac.uk!sq79
+ *-------------------------------------------------------------------------
+ *     Changed for POSIX1003.2/Draft10 conformance
+ *     Thomas Brupbacher (tobr@mw.lpc.ethz.ch), September 1990.
+ *     Changes:
+ *         - separation of error messages ( stderr) and output (stdout).
+ *         - support for -b and -n (no effect, -b acts as -c)
+ *         - support for -s
+ *-------------------------------------------------------------------------
+ */
+
+/*
+ * Copyright (c) 1987,1997, Prentice Hall
+ * All rights reserved.
+ * 
+ * Redistribution and use of the MINIX operating system in source and
+ * binary forms, with or without modification, are permitted provided
+ * that the following conditions are met:
+ * 
+ * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 
+ * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * 
+ * Neither the name of Prentice Hall nor the names of the software
+ * authors or contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS, AUTHORS, AND
+ * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL PRENTICE HALL OR ANY AUTHORS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+
index 3db64b3bc256cdb1d229ac36c9b1a965ea06b3b6..f4ebe05c9a66b27025fd84530e7793d1c7519d81 100644 (file)
 #include <stdio.h>
 
 const char head_usage[] =
-       "head [OPTION] [FILE]...\n\n"
-       "Print first 10 lines of each FILE to standard output.\n"
+       "head [OPTION] [FILE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPrint first 10 lines of each FILE to standard output.\n"
        "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" "\t-n NUM\t\tPrint first NUM lines instead of first 10\n";
+       "Options:\n" "\t-n NUM\t\tPrint first NUM lines instead of first 10\n"
+#endif
+       ;
 
 int head(int len, FILE * src)
 {
@@ -109,4 +112,4 @@ int head_main(int argc, char **argv)
        exit(0);
 }
 
-/* $Id: head.c,v 1.9 2000/04/13 01:18:56 erik Exp $ */
+/* $Id: head.c,v 1.10 2000/05/12 19:41:47 erik Exp $ */
index 8ded0e521c4e3cba24caa16a647799deba27c8c9..542f86566fc3247ac7f9ad1da427decff2b624f4 100644 (file)
 #include <sys/types.h>
 
 static const char id_usage[] =
-       "id [OPTIONS]... [USERNAME]\n\n"
-       "Print information for USERNAME or the current user\n\n"
+       "id [OPTIONS]... [USERNAME]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPrint information for USERNAME or the current user\n\n"
        "\t-g\tprints only the group ID\n"
        "\t-u\tprints only the user ID\n"
-       "\t-r\tprints the real user ID instead of the effective ID (with -ug)\n\n";
+       "\t-r\tprints the real user ID instead of the effective ID (with -ug)\n\n"
+#endif
+       ;
 
 extern int id_main(int argc, char **argv)
 {
index 4cbe7e17b088b2c105dda17a1036d3d8f3c0e2b0..c7df216112216bfad014246c66d51ece8b089f64 100644 (file)
@@ -7,7 +7,11 @@
 extern int length_main(int argc, char **argv)
 {
        if (argc != 2 || **(argv + 1) == '-') {
-               usage("length string\n");
+               usage("length STRING\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                               "\nPrints out the length of the specified STRING.\n"
+#endif
+                               );
        }
        printf("%lu\n", (long)strlen(argv[1]));
        return (TRUE);
index eb7c99608cbd64d172e59fabfa13d94e559eb008..29ff938635df4131c6180b1b130e36a12c4a72b6 100644 (file)
 #include <errno.h>
 
 static const char ln_usage[] =
-       "ln [OPTION] TARGET... LINK_NAME|DIRECTORY\n\n"
-       "Create a link named LINK_NAME or DIRECTORY to the specified TARGET\n\n"
+       "ln [OPTION] TARGET... LINK_NAME|DIRECTORY\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nCreate a link named LINK_NAME or DIRECTORY to the specified TARGET\n\n"
        "Options:\n"
        "\t-s\tmake symbolic links instead of hard links\n"
 
        "\t-f\tremove existing destination files\n"
-       "\t-n\tno dereference symlinks - treat like normal file\n";
+       "\t-n\tno dereference symlinks - treat like normal file\n"
+#endif
+       ;
 
 static int symlinkFlag = FALSE;
 static int removeoldFlag = FALSE;
index bde1752baa0e9a44bf216d2d840fe9baf1a116ad..7c6153f64e2aa7846664e829945530e403647e45 100644 (file)
 #include "internal.h"
 #include <stdio.h>
 
-static const char logname_usage[] = "logname\n\n"
-
-       "Print the name of the current user.\n";
+static const char logname_usage[] = "logname\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPrint the name of the current user.\n"
+#endif
+       ;
 
 extern int logname_main(int argc, char **argv)
 {
index 3c518ab28966501c15d861f1275eb15225d5a419..6ab11c4e5f21dcbbea41db921b1026fef4722533 100644 (file)
@@ -449,7 +449,9 @@ static const char ls_usage[] = "ls [-1a"
 #ifdef BB_FEATURE_LS_FILETYPES
        "F"
 #endif
-       "] [filenames...]\n\n"
+       "] [filenames...]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nList directory contents\n\n"
        "Options:\n"
        "\t-a\tdo not hide entries starting with .\n"
 #ifdef BB_FEATURE_LS_TIMESTAMPS
@@ -474,6 +476,7 @@ static const char ls_usage[] = "ls [-1a"
        "\t-C\tlist entries by columns\n"
 #ifdef BB_FEATURE_LS_FILETYPES
        "\t-F\tappend indicator (one of */=@|) to entries\n"
+#endif
 #endif
        ;
 
index 54d9b7241e24290f5a2dbc6bdd4f5313ece4aa7d..96649868dc77e908bd48bd91ee3c5f86aa09afc6 100644 (file)
 #include <errno.h>
 
 static const char mkdir_usage[] =
-       "mkdir [OPTION] DIRECTORY...\n\n"
-       "Create the DIRECTORY(ies), if they do not already exist\n\n"
+       "mkdir [OPTION] DIRECTORY...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nCreate the DIRECTORY(ies), if they do not already exist\n\n"
        "Options:\n"
 
        "\t-m\tset permission mode (as in chmod), not rwxrwxrwx - umask\n"
-       "\t-p\tno error if existing, make parent directories as needed\n";
+       "\t-p\tno error if existing, make parent directories as needed\n"
+#endif
+       ;
 
 
 static int parentFlag = FALSE;
index b273df04633abc38665bffb0412d4999b8546bcd..ef3d667e2a981a52ab495f9f96849a884ff978e8 100644 (file)
 #include <sys/stat.h>
 #include <errno.h>
 
-static const char mkfifo_usage[] = "mkfifo [OPTIONS] name\n\n"
-       "Creates a named pipe (identical to 'mknod name p')\n\n"
-
+static const char mkfifo_usage[] = "mkfifo [OPTIONS] name\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nCreates a named pipe (identical to 'mknod name p')\n\n"
        "Options:\n"
-       "\t-m\tcreate the pipe using the specified mode (default a=rw)\n";
+       "\t-m\tcreate the pipe using the specified mode (default a=rw)\n"
+#endif
+       ;
 
 extern int mkfifo_main(int argc, char **argv)
 {
index caa234f1fedba82b816cb1cf889645a9300b6c42..8f411a341ab9167247a4f384f5d981e04adf982a 100644 (file)
 #include <fcntl.h>
 #include <unistd.h>
 
-static const char mknod_usage[] = "mknod [OPTIONS] NAME TYPE MAJOR MINOR\n\n"
-       "Create a special file (block, character, or pipe).\n\n"
+static const char mknod_usage[] = "mknod [OPTIONS] NAME TYPE MAJOR MINOR\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nCreate 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"
+#endif
+       ;
 
 int mknod_main(int argc, char **argv)
 {
index bfe40817540c8a0979f6a85fbc682a61b4213132..28a011dcd9236ce598068e65403dfaf5b07b1d3e 100644 (file)
@@ -139,7 +139,12 @@ 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\nFormats and prints the given data.\n";
+static const char printf_usage[] = "printf FORMAT [ARGUMENT...]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nFormats and prints ARGUMENT(s) according to FORMAT,\n"
+       "Where FORMAT controls the output exactly as in C printf.\n"
+#endif
+       ;
 
 int printf_main(int argc, char **argv)
 {
index e77a0ca70e5af5136031a0b8633406bd840a874f..19494a96cbd6d840d9037d3655834c09e9530fdf 100644 (file)
 #include "internal.h"
 #include <stdio.h>
 #include <dirent.h>
+#include <errno.h>
 
 extern int pwd_main(int argc, char **argv)
 {
        char buf[BUFSIZ + 1];
 
-       if (getcwd(buf, sizeof(buf)) == NULL) {
-               perror("get working directory");
-               exit(FALSE);
-       }
+       if (getcwd(buf, sizeof(buf)) == NULL)
+               fatalError("pwd: %s", strerror(errno));
 
        printf("%s\n", buf);
        exit(TRUE);
index 0cd795661a0bc31df6aa65544f846d59160f0585..c62d68abad0f53a102544b95cbe828fa9172dc37 100644 (file)
 #include <dirent.h>
 #include <errno.h>
 
-static const char *rm_usage = "rm [OPTION]... FILE...\n\n"
-       "Remove (unlink) the FILE(s).\n\n"
+static const char *rm_usage = "rm [OPTION]... FILE...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nRemove (unlink) the FILE(s).\n\n"
        "Options:\n"
-
        "\t-f\t\tremove existing destinations, never prompt\n"
-       "\t-r or -R\tremove the contents of directories recursively\n";
+       "\t-r or -R\tremove the contents of directories recursively\n"
+#endif
+       ;
 
 
 static int recursiveFlag = FALSE;
index 1d88de32279bf01fe75ea932fcdfd8cca7ade902..61d7f2aa53ba7cf7550042acbdeda98d08fa384a 100644 (file)
@@ -31,7 +31,11 @@ extern int rmdir_main(int argc, char **argv)
 {
        if (argc == 1 || **(argv + 1) == '-') {
                usage
-                       ("rmdir [OPTION]... DIRECTORY...\n\nRemove the DIRECTORY(ies), if they are empty.\n");
+                       ("rmdir [OPTION]... DIRECTORY...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                        "\nRemove the DIRECTORY(ies), if they are empty.\n"
+#endif
+                        );
        }
 
        while (--argc > 0) {
index 9687b84460300917a26d743d0ce283d3992b81b5..13f07c02feab2990cb1b601109e756f9d9486e23 100644 (file)
 #include "internal.h"
 #include <stdio.h>
 
-const char sleep_usage[] = "sleep N\n\n" "Pause for N seconds.\n";
+const char sleep_usage[] = "sleep N\n" 
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPause for N seconds.\n"
+#endif
+       ;
 
 extern int sleep_main(int argc, char **argv)
 {
index 49eb4fd728b8eb325e905416de31f31daf9b8edb..1edc7d1caa4f3dcc510abb628601388e7a799099 100644 (file)
@@ -33,7 +33,11 @@ static const char sort_usage[] = "sort [-n]"
 #ifdef BB_FEATURE_SORT_REVERSE
 " [-r]"
 #endif
-" [FILE]...\n\nSorts lines of text in the specified files\n";
+" [FILE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+"\nSorts lines of text in the specified files\n"
+#endif
+;
 
 #ifdef BB_FEATURE_SORT_REVERSE
 #define APPLY_REVERSE(x) (reverse ? -(x) : (x))
@@ -300,4 +304,4 @@ int sort_main(int argc, char **argv)
        exit(0);
 }
 
-/* $Id: sort.c,v 1.15 2000/04/17 04:22:09 beppu Exp $ */
+/* $Id: sort.c,v 1.16 2000/05/12 19:41:47 erik Exp $ */
index f8160c8dcb42e1fdbd1067a3668c95dadd5564d6..33c79228d7108f5398aee9492cd9824f8dccd3ce 100644 (file)
 extern int sync_main(int argc, char **argv)
 {
        if (argc > 1 && **(argv + 1) == '-') {
-               usage("sync\n\nWrite all buffered filesystem blocks to disk.\n");
+               usage("sync\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                               "\nWrite all buffered filesystem blocks to disk.\n"
+#endif
+                               );
        }
        exit(sync());
 }
index 321c5c4b25f63b3328dda0277ecaa39f0c11215e..3b3e2f56c10a7a311cb03a56492b802bd2ed5fdf 100644 (file)
@@ -47,6 +47,9 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <ctype.h>
+#define BB_DECLARE_EXTERN
+#define bb_need_help
+#include "messages.c"
 
 
 #define XWRITE(fd, buffer, n_bytes)                                    \
@@ -70,15 +73,18 @@ static int forever;
 static int print_headers;
 
 const char tail_usage[] =
-       "tail [OPTION] [FILE]...\n\n"
-       "Print last 10 lines of each FILE to standard output.\n"
+       "tail [OPTION] [FILE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPrint last 10 lines of each FILE to standard output.\n"
        "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"
        "\t-n NUM\t\tPrint last NUM lines instead of first 10\n"
 
        "\t-f\t\tOutput data as the file grows.  This version\n"
-       "\t\t\tof 'tail -f' supports only one file at a time.\n";
+       "\t\t\tof 'tail -f' supports only one file at a time.\n"
+#endif
+       ;
 
 
 static void write_header(const char *filename)
@@ -512,9 +518,9 @@ char *program_name;
 static int have_read_stdin;
 
 
-static const char tail_usage[] = "tail [OPTION]... [FILE]...\n\
-\n\
-Print last 10 lines of each FILE to standard output.\n\
+static const char tail_usage[] = "tail [OPTION]... [FILE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+"\nPrint last 10 lines of each FILE to standard output.\n\
 With more than one FILE, precede each with a header giving the file name.\n\
 With no FILE, or when FILE is -, read standard input.\n\
 \n\
@@ -523,11 +529,12 @@ With no FILE, or when FILE is -, read standard input.\n\
   -n=N            output the last N lines, instead of last 10\n\
   -q              never output headers giving file names\n\
   -v              always output headers giving file names\n\
-  --help          display this help and exit\n\
 \n\
 If the first character of N (bytes or lines) is a `+', output begins with \n\
 the Nth item from the start of each file, otherwise, print the last N items\n\
-in the file.  N bytes may be suffixed by k (x1024), b (x512), or m (1024^2).\n\n";
+in the file.  N bytes may be suffixed by k (x1024), b (x512), or m (1024^2).\n"
+#endif
+;
 
 static void write_header(const char *filename, const char *comment)
 {
index 95b75edd7f3ada361ed7b034996e8938f6e64913..a78edc039348f3d1a938fab8d342c5280a56caa8 100644 (file)
 #include <stdio.h>
 
 static const char tee_usage[] =
-       "tee [OPTION]... [FILE]...\n\n"
-       "Copy standard input to each FILE, and also to standard output.\n\n"
+       "tee [OPTION]... [FILE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nCopy standard input to each FILE, and also to standard output.\n\n"
        "Options:\n" "\t-a\tappend to the given FILEs, do not overwrite\n"
 #if 0
        "\t-i\tignore interrupt signals\n"
 #endif
+#endif
 ;
 
 
@@ -131,4 +133,4 @@ int tee_main(int argc, char **argv)
        exit(0);
 }
 
-/* $Id: tee.c,v 1.9 2000/04/13 01:18:56 erik Exp $ */
+/* $Id: tee.c,v 1.10 2000/05/12 19:41:47 erik Exp $ */
index 0ed777194463130fb9e8cc92ec40513aaa2ef661..9b541e33ef8a7eaa7a96da11df46b4b97991206b 100644 (file)
@@ -39,6 +39,9 @@
 #include <errno.h>
 #include <stdlib.h>
 #include <string.h>
+#define BB_DECLARE_EXTERN
+#define bb_need_help
+#include "messages.c"
 
 /* test(1) accepts the following grammar:
        oexpr   ::= aexpr | aexpr "-o" oexpr ;
@@ -185,11 +188,14 @@ test_main(int argc, char** argv)
                        fatalError("missing ]");
                argv[argc] = NULL;
        }
-       if (strcmp(argv[1], "--help") == 0) {
+       if (strcmp(argv[1], dash_dash_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");
+                         "or   [ EXPRESSION ]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                               "\nChecks file types and compares values returning an exit\n"
+                               "code determined by the value of EXPRESSION.\n"
+#endif
+                               );
        }
 
        /* Implement special cases from POSIX.2, section 4.62.4 */
index f8972dcf6912ccdb42e07164716a92fef94b0e1e..2076928263da0a540f0a86133c984221726d9a06 100644 (file)
 #include <errno.h>
 
 
-static const char touch_usage[] = "touch [-c] file [file ...]\n\n"
-
-       "Update the last-modified date on the given file[s].\n";
+static const char touch_usage[] = "touch [-c] file [file ...]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nUpdate the last-modified date on the given file[s].\n"
+#endif
+       ;
 
 
 
index 6f98d1b797404ce25829c19d7567a42471d85509..3a318ebbab5f5c1a40ac04e748a1a9b2b9ca86fa 100644 (file)
 #include <stdio.h>
 #include <sys/types.h>
 
-static const char tty_usage[] = "tty\n\n"
-       "Print the file name of the terminal connected to standard input.\n\n"
+static const char tty_usage[] = "tty\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPrint the file name of the terminal connected to standard input.\n\n"
        "Options:\n"
-       "\t-s\tprint nothing, only return an exit status\n";
+       "\t-s\tprint nothing, only return an exit status\n"
+#endif
+       ;
 
 extern int tty_main(int argc, char **argv)
 {
index 0324856fd97ac360404a5b00591480a816ae7451..0cccbd5e7639774fc2a22a7b5419cc8932a05a64 100644 (file)
 #include <errno.h>
 
 static const char uniq_usage[] =
-       "uniq [OPTION]... [INPUT [OUTPUT]]\n\n"
-       "Discard all but one of successive identical lines from INPUT\n"
-       "(or standard input), writing to OUTPUT (or standard output).\n";
+       "uniq [OPTION]... [INPUT [OUTPUT]]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nDiscard all but one of successive identical lines from INPUT\n"
+       "(or standard input), writing to OUTPUT (or standard output).\n"
+#endif
+       ;
 
 /* max chars in line */
 #define UNIQ_MAX 4096
@@ -184,4 +187,4 @@ int uniq_main(int argc, char **argv)
        exit(0);
 }
 
-/* $Id: uniq.c,v 1.9 2000/04/17 16:16:10 erik Exp $ */
+/* $Id: uniq.c,v 1.10 2000/05/12 19:41:47 erik Exp $ */
index dcb40d65a2d7e22eac288bb75d1d1abbf350cdac..34008a638aab4fe683a209c1910a3c4a4697d268 100644 (file)
 #include <stdlib.h>
 #include <unistd.h>
 
-const char usleep_usage[] = "usleep N\n\n" "Pause for N microseconds.\n";
+const char usleep_usage[] = "usleep N\n" 
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPause for N microseconds.\n"
+#endif
+       ;
 
 extern int usleep_main(int argc, char **argv)
 {
index 030afa9d60c92b8ab537ba71efd8770ba6061886..57bc7135a247591c258c20fdd951252a7afed398 100644 (file)
 #include "internal.h"
 #include <stdio.h>
 
-static const char wc_usage[] = "wc [OPTION]... [FILE]...\n\n"
-       "Print line, word, and byte counts for each FILE, and a total line if\n"
+static const char wc_usage[] = "wc [OPTION]... [FILE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPrint line, word, and byte counts for each FILE, and a total line if\n"
        "more than one FILE is specified.  With no FILE, read standard input.\n\n"
        "Options:\n"
        "\t-c\tprint the byte counts\n"
        "\t-l\tprint the newline counts\n"
 
        "\t-L\tprint the length of the longest line\n"
-       "\t-w\tprint the word counts\n";
+       "\t-w\tprint the word counts\n"
+#endif
+       ;
 
 static int total_lines, total_words, total_chars, max_length;
 static int print_lines, print_words, print_chars, print_length;
index f9d3f286a995678b324d50081c4bc4628be2b96f..da584790d83e1e5c4ccc33263acf0084f5f50c3d 100644 (file)
 #include <stdio.h>
 #include <pwd.h>
 
-static const char whoami_usage[] = "whoami\n\n"
-       "Prints the user name associated with the current effective user id.\n";
+static const char whoami_usage[] = "whoami\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPrints the user name associated with the current effective user id.\n"
+#endif
+       ;
 
 extern int whoami_main(int argc, char **argv)
 {
index a822ebc1d4e019b4be1347e15e575521758b4106..97b6f653cd4b0df3f186f632051d9819984ad05d 100644 (file)
@@ -28,8 +28,11 @@ extern int yes_main(int argc, char **argv)
        int i;
 
        if (argc >=1 && *argv[1]=='-') {
-               usage("yes [OPTION]... [STRING]...\n\n"
-                               "Repeatedly outputs a line with all specified STRING(s), or `y'.\n");
+               usage("yes [OPTION]... [STRING]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                               "\nRepeatedly outputs a line with all specified STRING(s), or `y'.\n"
+#endif
+                               );
        }
 
        if (argc == 1) {
diff --git a/cut.c b/cut.c
new file mode 100644 (file)
index 0000000..89a934e
--- /dev/null
+++ b/cut.c
@@ -0,0 +1,372 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * cut implementation for busybox
+ *
+ * Copyright (c) Michael J. Holme
+ *
+ * This version of cut is adapted from Minix cut and was modified 
+ * by Erik Andersen <andersee@debian.org> to be used in busybox.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * 
+ * Original copyright notice is retained at the end of this file.
+ */
+
+#include "internal.h"
+#include <sys/types.h>
+#include <ctype.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#define BB_DECLARE_EXTERN
+#define bb_need_help
+#include "messages.c"
+
+#define MAX_FIELD      80                      /* Pointers to the beginning of each field
+                                                                  * are stored in columns[], if a line holds
+                                                                  * more than MAX_FIELD columns the array
+                                                                  * boundary is exceed. But unlikely at 80 */
+
+#define MAX_ARGS       32                      /* Maximum number of fields following -f or
+                                                                  * -c switches                                                      */
+int args[MAX_ARGS * 2];
+int num_args;
+
+/* Lots of new defines, should easen maintainance...                   */
+#define DUMP_STDIN     0                       /* define for mode: no options   */
+#define OPTIONF                1                       /* define for mode: option -f    */
+#define OPTIONC                2                       /* define for mode: option -c    */
+#define OPTIONB                3                       /* define for mode: option -b    */
+#define NOTSET         0                       /* option not selected       */
+#define SET            1                               /* option selected       */
+
+/* Defines for the warnings                                            */
+#define DELIMITER_NOT_APPLICABLE       0
+#define OVERRIDING_PREVIOUS_MODE       1
+#define OPTION_NOT_APPLICABLE          2
+#define UNKNOWN_OPTION                 3
+#define FILE_NOT_READABLE              4
+
+/* Defines for the fatal errors                                                */
+#define SYNTAX_ERROR                           101
+#define POSITION_ERROR                         102
+#define LINE_TO_LONG_ERROR                     103
+#define RANGE_ERROR                                    104
+#define MAX_FIELDS_EXEEDED_ERROR       105
+#define MAX_ARGS_EXEEDED_ERROR         106
+
+
+int mode;                                              /* 0 = dump stdin to stdout, 1=-f, 2=-c   */
+char delim = '\t';                             /* default delimiting character   */
+FILE *fd;
+char *name;
+char line[BUFSIZ];
+int exit_status;
+
+int cut_main(int argc, char **argv);
+void warn(int warn_number, char *option);
+void cuterror(int err);
+void get_args(void);
+void cut(void);
+
+void warn(int warn_number, char *option)
+{
+       static char *warn_msg[] = {
+               "%s: Option -d allowed only with -f\n",
+               "%s: -%s overrides earlier option\n",
+               "%s: -%s not allowed in current mode\n",
+               "%s: Cannot open %s\n"
+       };
+
+       fprintf(stderr, warn_msg[warn_number], name, option);
+       exit_status = warn_number + 1;
+
+}
+
+void cuterror(int err)
+{
+       static char *err_mes[] = {
+               "%s: syntax error\n",
+               "%s: position must be >0\n",
+               "%s: line longer than BUFSIZ\n",
+               "%s: range must not decrease from left to right\n",
+               "%s: MAX_FIELD exceeded\n",
+               "%s: MAX_ARGS exceeded\n"
+       };
+
+       fprintf(stderr, err_mes[err - 101], name);
+       exit(err);
+}
+
+
+void get_args()
+{
+       int i = 0;
+       int arg_ptr = 0;
+       int flag;
+
+       num_args = 0;
+       do {
+               if (num_args == MAX_ARGS)
+                       cuterror(MAX_ARGS_EXEEDED_ERROR);
+               if (!isdigit(line[i]) && line[i] != '-')
+                       cuterror(SYNTAX_ERROR);
+
+               args[arg_ptr] = 1;
+               args[arg_ptr + 1] = BUFSIZ;
+               flag = 1;
+
+               while (line[i] != ',' && line[i] != 0) {
+                       if (isdigit(line[i])) {
+                               args[arg_ptr] = 0;
+                               while (isdigit(line[i]))
+                                       args[arg_ptr] = 10 * args[arg_ptr] + line[i++] - '0';
+                               if (!args[arg_ptr])
+                                       cuterror(POSITION_ERROR);
+                               arg_ptr++;
+                       }
+                       if (line[i] == '-') {
+                               arg_ptr |= 1;
+                               i++;
+                               flag = 0;
+                       }
+               }
+               if (flag && arg_ptr & 1)
+                       args[arg_ptr] = args[arg_ptr - 1];
+               if (args[num_args * 2] > args[num_args * 2 + 1])
+                       cuterror(RANGE_ERROR);
+               num_args++;
+               arg_ptr = num_args * 2;
+       }
+       while (line[i++]);
+}
+
+
+void cut()
+{
+       int i, j, length, maxcol=0;
+       char *columns[MAX_FIELD];
+
+       while (fgets(line, BUFSIZ, fd)) {
+               length = strlen(line) - 1;
+               *(line + length) = 0;
+               switch (mode) {
+               case DUMP_STDIN:
+                       printf("%s", line);
+                       break;
+               case OPTIONF:
+                       columns[maxcol++] = line;
+                       for (i = 0; i < length; i++) {
+                               if (*(line + i) == delim) {
+                                       *(line + i) = 0;
+                                       if (maxcol == MAX_FIELD)
+                                               cuterror(MAX_FIELDS_EXEEDED_ERROR);
+                                       columns[maxcol] = line + i + 1;
+                                       maxcol++;
+                               }
+                       }
+                       if (maxcol != 1) { 
+                               for (i = 0; i < num_args; i++) {
+                                       for (j = args[i * 2]; j <= args[i * 2 + 1]; j++)
+                                               if (j <= maxcol) {
+                                                       printf("%s", columns[j - 1]);
+                                                       if (i != num_args - 1 || j != args[i * 2 + 1])
+                                                               putchar(delim);
+                                               }
+                               }
+                       }
+                       break;
+               case OPTIONC:
+                       for (i = 0; i < num_args; i++) {
+                               for (j = args[i * 2];
+                                        j <= (args[i * 2 + 1] >
+                                                  length ? length : args[i * 2 + 1]); j++)
+                                       putchar(*(line + j - 1));
+                       }
+               }
+               if (maxcol != 1)
+                       putchar('\n');
+       }
+}
+
+
+int cut_main(int argc, char **argv)
+{
+       int i = 1;
+       int numberFilenames = 0;
+
+       name = argv[0];
+
+       if (argc == 1 || strcmp(argv[1], dash_dash_help)==0)
+               usage( "cut [OPTION]... [FILE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                               "\nPrints selected fields from each input FILE to standard output.\n\n"
+                               "Options:\n"
+                               "\t-b LIST\tOutput only bytes from LIST\n"
+                               "\t-c LIST\tOutput only characters from LIST\n"
+                               "\t-d DELIM\tUse DELIM instead of tab as the field delimiter\n"
+                               "\t-f N\tPrint only these fields\n"
+                               "\t-n\tIgnored\n"
+#endif
+                               );
+
+       while (i < argc) {
+               if (argv[i][0] == '-') {
+                       switch (argv[i++][1]) {
+                       case 'd':
+                               if (mode == OPTIONC || mode == OPTIONB)
+                                       warn(DELIMITER_NOT_APPLICABLE, "d");
+                               delim = argv[i++][0];
+                               break;
+                       case 'f':
+                               sprintf(line, "%s", argv[i++]);
+                               if (mode == OPTIONC || mode == OPTIONB)
+                                       warn(OVERRIDING_PREVIOUS_MODE, "f");
+                               mode = OPTIONF;
+                               break;
+                       case 'b':
+                               sprintf(line, "%s", argv[i++]);
+                               if (mode == OPTIONF || mode == OPTIONC)
+                                       warn(OVERRIDING_PREVIOUS_MODE, "b");
+                               mode = OPTIONB;
+                               break;
+                       case 'c':
+                               sprintf(line, "%s", argv[i++]);
+                               if (mode == OPTIONF || mode == OPTIONB)
+                                       warn(OVERRIDING_PREVIOUS_MODE, "c");
+                               mode = OPTIONC;
+                               break;
+                       case '\0':                      /* - means: read from stdin      */
+                               numberFilenames++;
+                               break;
+                       case 'n':                       /* needed for Posix, but no effect here  */
+                               if (mode != OPTIONB)
+                                       warn(OPTION_NOT_APPLICABLE, "n");
+                               break;
+                       default:
+                               warn(UNKNOWN_OPTION, &(argv[i - 1][1]));
+                       }
+               } else {
+                       i++;
+                       numberFilenames++;
+               }
+       }
+
+/* Here follow the checks, if the selected options are reasonable.     */
+       if (mode == OPTIONB)            /* since in Minix char := byte       */
+               mode = OPTIONC;
+       get_args();
+       if (numberFilenames != 0) {
+               i = 1;
+               while (i < argc) {
+                       if (argv[i][0] == '-') {
+                               switch (argv[i][1]) {
+                               case 'f':
+                               case 'c':
+                               case 'b':
+                               case 'd':
+                                       i += 2;
+                                       break;
+                               case 'n':
+                               case 'i':
+                               case 's':
+                                       i++;
+                                       break;
+                               case '\0':
+                                       fd = stdin;
+                                       i++;
+                                       cut();
+                                       break;
+                               default:
+                                       i++;
+                               }
+                       } else {
+                               if ((fd = fopen(argv[i++], "r")) == NULL) {
+                                       warn(FILE_NOT_READABLE, argv[i - 1]);
+                               } else {
+                                       cut();
+                                       fclose(fd);
+                               }
+                       }
+               }
+       } else {
+               fd = stdin;
+               cut();
+       }
+
+       exit(exit_status);
+}
+
+/* cut - extract columns from a file or stdin.         Author: Michael J. Holme
+ *
+ *     Copyright 1989, Michael John Holme, All rights reserved.
+ *     This code may be freely distributed, provided that this notice
+ *     remains intact.
+ *
+ *     V1.1: 6th September 1989
+ *
+ *     Bugs, criticisms, etc,
+ *      c/o Mark Powell
+ *          JANET sq79@uk.ac.liv
+ *          ARPA  sq79%liv.ac.uk@nsfnet-relay.ac.uk
+ *          UUCP  ...!mcvax!ukc!liv.ac.uk!sq79
+ *-------------------------------------------------------------------------
+ *     Changed for POSIX1003.2/Draft10 conformance
+ *     Thomas Brupbacher (tobr@mw.lpc.ethz.ch), September 1990.
+ *     Changes:
+ *         - separation of error messages ( stderr) and output (stdout).
+ *         - support for -b and -n (no effect, -b acts as -c)
+ *         - support for -s
+ *-------------------------------------------------------------------------
+ */
+
+/*
+ * Copyright (c) 1987,1997, Prentice Hall
+ * All rights reserved.
+ * 
+ * Redistribution and use of the MINIX operating system in source and
+ * binary forms, with or without modification, are permitted provided
+ * that the following conditions are met:
+ * 
+ * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 
+ * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * 
+ * Neither the name of Prentice Hall nor the names of the software
+ * authors or contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS, AUTHORS, AND
+ * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL PRENTICE HALL OR ANY AUTHORS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+
index ea14459ef2ef40788961f9e23cdfc886440eb891..408bbfa72c035f28fd17bed06890a75600973824 100644 (file)
@@ -488,7 +488,7 @@ Example:
 
 Usage: free
 
-Displays the amount of free and used memory in the system.
+Displays the amount of free and used system memory.
 
 Example:
 
@@ -504,7 +504,7 @@ Example:
 
 Usage: freeramdisk DEVICE
 
-Free all memory used by the specified ramdisk.
+Frees all memory used by the specified ramdisk.
 
 Example:
 
@@ -799,9 +799,9 @@ Example:
 
 =item length
 
-Usage: length string
+Usage: length STRING
 
-Prints out the length of the specified string.
+Prints out the length of the specified STRING.
 
 Example:
 
@@ -1120,7 +1120,7 @@ Flags:
        -t fs-type:     Specify the filesystem type.
        -w:             Mount for reading and writing (default).
 
-Options for use with the "-o" flag:
+Options for use with the "B<-o>" flag:
 
        async/sync:     Writes are asynchronous / synchronous.
        atime/noatime:  Enable / disable updates to inode access times.
@@ -1881,4 +1881,4 @@ Enrique Zanardi <ezanardi@ull.es>
 
 =cut
 
-# $Id: busybox.pod,v 1.29 2000/05/10 05:00:31 erik Exp $
+# $Id: busybox.pod,v 1.30 2000/05/12 19:41:47 erik Exp $
index 0d57a4a06e765ceb37dc17c820b847390d81c713..9fed6704e9f194c0f91d5383d9e1a5cf7bf00e1b 100644 (file)
@@ -38,8 +38,9 @@
 #include <ctype.h>
 
 static const char sed_usage[] =
-       "sed [-n] -e script [file...]\n\n"
-       "Allowed sed scripts come in the following form:\n"
+       "sed [-n] -e script [file...]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nAllowed sed scripts come in the following form:\n"
        "\t'ADDR [!] COMMAND'\n\n"
        "\twhere address ADDR can be:\n"
        "\t  NUMBER    Match specified line number\n"
@@ -58,8 +59,10 @@ static const char sed_usage[] =
 #if defined BB_REGEXP
        "This version of sed matches full regular expresions.\n";
 #else
-       "This version of sed matches strings (not full regular expresions).\n";
+       "This version of sed matches strings (not full regular expresions).\n"
 #endif
+#endif
+       ;
 
 /* Flags & variables */
 
diff --git a/fbset.c b/fbset.c
index 4e5609e4181c4eacf8e516317ba6e4cf7e01ccda..de4c82425fcf6f3396183d92deb8a8276444d9cc 100644 (file)
--- a/fbset.c
+++ b/fbset.c
@@ -105,9 +105,9 @@ struct cmdoptions_t {
        "-vsync", 1, CMD_VSYNC}, {
        "-laced", 1, CMD_LACED}, {
        "-double", 1, CMD_DOUBLE}, {
-       "--help", 0, CMD_HELP}, {
+       "-help", 0, CMD_HELP}, {
 #ifdef BB_FEATURE_FBSET_FANCY
-       "--help", 0, CMD_HELP}, {
+       "-help", 0, CMD_HELP}, {
        "-all", 0, CMD_ALL}, {
        "-xres", 1, CMD_XRES}, {
        "-yres", 1, CMD_YRES}, {
@@ -115,7 +115,7 @@ struct cmdoptions_t {
        "-vyres", 1, CMD_VYRES}, {
        "-depth", 1, CMD_DEPTH}, {
        "-match", 0, CMD_MATCH}, {
-       "--geometry", 5, CMD_GEOMETRY}, {
+       "-geometry", 5, CMD_GEOMETRY}, {
        "-pixclock", 1, CMD_PIXCLOCK}, {
        "-left", 1, CMD_LEFT}, {
        "-right", 1, CMD_RIGHT}, {
@@ -123,7 +123,7 @@ struct cmdoptions_t {
        "-lower", 1, CMD_LOWER}, {
        "-hslen", 1, CMD_HSLEN}, {
        "-vslen", 1, CMD_VSLEN}, {
-       "--timings", 7, CMD_TIMING}, {
+       "-timings", 7, CMD_TIMING}, {
        "-csync", 1, CMD_CSYNC}, {
        "-gsync", 1, CMD_GSYNC}, {
        "-extsync", 1, CMD_EXTSYNC}, {
@@ -221,17 +221,21 @@ static void showmode(struct fb_var_screeninfo *v)
 
 static void fbset_usage(void)
 {
+#ifndef BB_FEATURE_TRIVIAL_HELP
        int i;
+#endif
 
 #ifndef STANDALONE
        fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n",
                        BB_VER, BB_BT);
 #endif
-       fprintf(stderr, "Usage: fbset [options] [mode]\n\n");
-       fprintf(stderr, "Show and modify frame buffer device settings\n\n");
+       fprintf(stderr, "Usage: fbset [options] [mode]\n");
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       fprintf(stderr, "\nShows and modifies frame buffer device settings\n\n");
        fprintf(stderr, "The following options are recognized:\n");
        for (i = 0; g_cmdoptions[i].name; i++)
                fprintf(stderr, "\t%s\n", g_cmdoptions[i].name);
+#endif
        exit(-1);
 }
 
index 56ea2244d7444189fb2b13c16325c608268a695e..4ec0a8886b9a6dfe35ff9a31c64e82afb488a677 100644 (file)
--- a/fdflush.c
+++ b/fdflush.c
@@ -34,7 +34,11 @@ extern int fdflush_main(int argc, char **argv)
        int fd;
 
        if (argc <= 1 || **(++argv) == '-') {
-               usage("fdflush device\n\nForce floppy disk drive to detect disk change\n");
+               usage("fdflush DEVICE\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                               "\nForces floppy disk drive to detect disk change\n"
+#endif
+                               );
        }
 
        fd = open(*argv, 0);
diff --git a/find.c b/find.c
index f6e63afb96b57d546d731d2620c635ec6f97773d..53b85e6b39d018d1055db0d5343fb5b3e9b95c3d 100644 (file)
--- a/find.c
+++ b/find.c
@@ -33,13 +33,16 @@ static char *pattern = NULL;
 static char *directory = ".";
 static int dereferenceFlag = FALSE;
 
-static const char find_usage[] = "find [PATH...] [EXPRESSION]\n\n"
-       "Search for files in a directory hierarchy.  The default PATH is\n"
+static const char find_usage[] = "find [PATH...] [EXPRESSION]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nSearch for files in a directory hierarchy.  The default PATH is\n"
        "the current directory; default EXPRESSION is '-print'\n\n"
        "\nEXPRESSION may consist of:\n"
        "\t-follow\t\tDereference symbolic links.\n"
        "\t-name PATTERN\tFile name (leading directories removed) matches PATTERN.\n"
-       "\t-print\t\tprint the full file name followed by a newline to stdout.\n";
+       "\t-print\t\tprint the full file name followed by a newline to stdout.\n"
+#endif
+       ;
 
 
 static int fileAction(const char *fileName, struct stat *statbuf, void* junk)
index f6e63afb96b57d546d731d2620c635ec6f97773d..53b85e6b39d018d1055db0d5343fb5b3e9b95c3d 100644 (file)
@@ -33,13 +33,16 @@ static char *pattern = NULL;
 static char *directory = ".";
 static int dereferenceFlag = FALSE;
 
-static const char find_usage[] = "find [PATH...] [EXPRESSION]\n\n"
-       "Search for files in a directory hierarchy.  The default PATH is\n"
+static const char find_usage[] = "find [PATH...] [EXPRESSION]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nSearch for files in a directory hierarchy.  The default PATH is\n"
        "the current directory; default EXPRESSION is '-print'\n\n"
        "\nEXPRESSION may consist of:\n"
        "\t-follow\t\tDereference symbolic links.\n"
        "\t-name PATTERN\tFile name (leading directories removed) matches PATTERN.\n"
-       "\t-print\t\tprint the full file name followed by a newline to stdout.\n";
+       "\t-print\t\tprint the full file name followed by a newline to stdout.\n"
+#endif
+       ;
 
 
 static int fileAction(const char *fileName, struct stat *statbuf, void* junk)
index 06b6980bc02fd64a92e7d1bc5a75d9f57fa0cf73..6872ac271018987890685ca8a5d92eb3efcc7cde 100644 (file)
@@ -41,8 +41,9 @@
 #include <ctype.h>
 
 static const char grep_usage[] =
-       "grep [OPTIONS]... PATTERN [FILE]...\n\n"
-       "Search for PATTERN in each FILE or standard input.\n\n"
+       "grep [OPTIONS]... PATTERN [FILE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nSearch for PATTERN in each FILE or standard input.\n\n"
        "OPTIONS:\n"
        "\t-h\tsuppress the prefixing filename on output\n"
        "\t-i\tignore case distinctions\n"
@@ -52,8 +53,10 @@ static const char grep_usage[] =
 #if defined BB_REGEXP
        "This version of grep matches full regular expresions.\n";
 #else
-       "This version of grep matches strings (not regular expresions).\n";
+       "This version of grep matches strings (not regular expresions).\n"
 #endif
+#endif
+       ;
 
 static int match = FALSE, beQuiet = FALSE;
 
diff --git a/free.c b/free.c
index 39594dbe527422c47ad906717fde3b505e668013..e6f130ea9891cdebb5227fee4da9fd2eab02926c 100644 (file)
--- a/free.c
+++ b/free.c
@@ -37,6 +37,14 @@ extern int free_main(int argc, char **argv)
        info.sharedram/=DIVISOR;
        info.bufferram/=DIVISOR;
 
+       if (argc > 1 && **(argv + 1) == '-') {
+               usage("free\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                               "\nDisplays the amount of free and used system memory\n"
+#endif
+                               );
+       }
+
 
        printf("%6s%13s%13s%13s%13s%13s\n", "", "total", "used", "free", 
                        "shared", "buffers");
index d373bcbf79f3d8a7e5725c5b295b6d028cf2d580..4106cf1444724e2adfa02403872d3e9a924a031d 100644 (file)
 
 
 static const char freeramdisk_usage[] =
-       "freeramdisk DEVICE\n\n"
-       "Free all memory used by the specified ramdisk.\n";
+       "freeramdisk DEVICE\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nFrees all memory used by the specified ramdisk.\n"
+#endif
+       ;
 
 extern int
 freeramdisk_main(int argc, char **argv)
index c890dff7d3aca0175299f8e8f6e20f2e7ff04533..7d27566b8579caedb1d4e7451d8ca1308feac635 100644 (file)
@@ -198,9 +198,10 @@ static void show_usage(void)
 {
        fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n",
                        BB_VER, BB_BT);
-       fprintf(stderr, "Usage: %s [-larvsmf] /dev/name\n\n", program_name);
+       fprintf(stderr, "Usage: %s [-larvsmf] /dev/name\n", program_name);
+#ifndef BB_FEATURE_TRIVIAL_HELP
        fprintf(stderr,
-                       "Performs a consistency check for MINIX filesystems.\n\n");
+                       "\nPerforms a consistency check for MINIX filesystems.\n\n");
        fprintf(stderr, "OPTIONS:\n");
        fprintf(stderr, "\t-l\tLists all filenames\n");
        fprintf(stderr, "\t-r\tPerform interactive repairs\n");
@@ -210,6 +211,7 @@ static void show_usage(void)
        fprintf(stderr,
                        "\t-m\tActivates MINIX-like \"mode not cleared\" warnings\n");
        fprintf(stderr, "\t-f\tForce file system check.\n\n");
+#endif
        leave(16);
 }
 
diff --git a/grep.c b/grep.c
index 06b6980bc02fd64a92e7d1bc5a75d9f57fa0cf73..6872ac271018987890685ca8a5d92eb3efcc7cde 100644 (file)
--- a/grep.c
+++ b/grep.c
@@ -41,8 +41,9 @@
 #include <ctype.h>
 
 static const char grep_usage[] =
-       "grep [OPTIONS]... PATTERN [FILE]...\n\n"
-       "Search for PATTERN in each FILE or standard input.\n\n"
+       "grep [OPTIONS]... PATTERN [FILE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nSearch for PATTERN in each FILE or standard input.\n\n"
        "OPTIONS:\n"
        "\t-h\tsuppress the prefixing filename on output\n"
        "\t-i\tignore case distinctions\n"
@@ -52,8 +53,10 @@ static const char grep_usage[] =
 #if defined BB_REGEXP
        "This version of grep matches full regular expresions.\n";
 #else
-       "This version of grep matches strings (not regular expresions).\n";
+       "This version of grep matches strings (not regular expresions).\n"
 #endif
+#endif
+       ;
 
 static int match = FALSE, beQuiet = FALSE;
 
index bdf8dc293b620d9aabaf5f44a8ee231857f1f212..11fc3a8f9ca96a8cf297185354223920994c1d53 100644 (file)
--- a/gunzip.c
+++ b/gunzip.c
  */
 
 #include "internal.h"
+
 static const char gunzip_usage[] =
-       "gunzip [OPTION]... FILE\n\n"
-       "Uncompress FILE (or standard input if FILE is '-').\n\n"
+       "gunzip [OPTION]... FILE\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nUncompress FILE (or standard input if FILE is '-').\n\n"
        "Options:\n"
 
        "\t-c\tWrite output to standard output\n"
-       "\t-t\tTest compressed file integrity\n";
+       "\t-t\tTest compressed file integrity\n"
+#endif
+       ;
 
        
        /* These defines are very important for BusyBox.  Without these,
@@ -43,8 +47,9 @@ static const char gunzip_usage[] =
 #define SMALL_MEM
 #define DYN_ALLOC
 
-#define bb_need_name_too_long
 #define BB_DECLARE_EXTERN
+#define bb_need_memory_exhausted
+#define bb_need_name_too_long
 #include "messages.c"
 
 
@@ -206,7 +211,7 @@ extern int method;                          /* compression method */
 #  define DECLARE(type, array, size)  type * array
 #  define ALLOC(type, array, size) { \
       array = (type*)calloc((size_t)(((size)+1L)/2), 2*sizeof(type)); \
-      if (array == NULL) errorMsg("insufficient memory"); \
+      if (array == NULL) errorMsg(memory_exhausted, "gunzip"); \
    }
 #  define FREE(array) {if (array != NULL) free(array), array=NULL;}
 #else
@@ -1053,7 +1058,7 @@ int in, out;                                      /* input and output file descriptors */
                int res = inflate();
 
                if (res == 3) {
-                       errorMsg("out of memory");
+                       errorMsg(memory_exhausted, "gunzip");
                } else if (res != 0) {
                        errorMsg("invalid compressed data--format violated");
                }
diff --git a/gzip.c b/gzip.c
index cc6868b535056642d4509e8a609899a73e5c0e75..17ebf6cb781395772580cfc2dfba6b828aae4e3f 100644 (file)
--- a/gzip.c
+++ b/gzip.c
@@ -30,6 +30,9 @@
  */
 
 #include "internal.h"
+#define BB_DECLARE_EXTERN
+#define bb_need_memory_exhausted
+#include "messages.c"
 
 /* These defines are very important for BusyBox.  Without these,
  * huge chunks of ram are pre-allocated making the BusyBox bss 
 
 
 static const char gzip_usage[] =
-       "gzip [OPTION]... FILE\n\n"
-       "Compress FILE with maximum compression.\n"
+       "gzip [OPTION]... FILE\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nCompress FILE with maximum compression.\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";
+       "\t-c\tWrite output to standard output instead of FILE.gz\n"
+#endif
+       ;
 
 
 /* I don't like nested includes, but the string and io functions are used
@@ -121,7 +127,7 @@ extern int method;                          /* compression method */
 #  define DECLARE(type, array, size)  type * array
 #  define ALLOC(type, array, size) { \
       array = (type*)calloc((size_t)(((size)+1L)/2), 2*sizeof(type)); \
-      if (array == NULL) errorMsg("insufficient memory"); \
+      if (array == NULL) errorMsg(memory_exhausted, "gzip"); \
    }
 #  define FREE(array) {if (array != NULL) free(array), array=NULL;}
 #else
@@ -1778,7 +1784,6 @@ int part_nb;                                      /* number of parts in .gz file */
 long time_stamp;                               /* original time stamp (modification time) */
 long ifile_size;                               /* input file size, -1 for devices (debug only) */
 char *env;                                             /* contents of GZIP env variable */
-char **args = NULL;                            /* argv pointer if GZIP env variable defined */
 char z_suffix[MAX_SUFFIX + 1]; /* default suffix (can be set with --suffix) */
 int z_len;                                             /* strlen(z_suffix) */
 
@@ -3248,7 +3253,7 @@ char *env;                                                /* name of environment variable */
        nargv = (char **) calloc(*argcp + 1, sizeof(char *));
 
        if (nargv == NULL)
-               errorMsg("out of memory");
+               errorMsg(memory_exhausted, "gzip");
        oargv = *argvp;
        *argvp = nargv;
 
diff --git a/head.c b/head.c
index 3db64b3bc256cdb1d229ac36c9b1a965ea06b3b6..f4ebe05c9a66b27025fd84530e7793d1c7519d81 100644 (file)
--- a/head.c
+++ b/head.c
 #include <stdio.h>
 
 const char head_usage[] =
-       "head [OPTION] [FILE]...\n\n"
-       "Print first 10 lines of each FILE to standard output.\n"
+       "head [OPTION] [FILE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPrint first 10 lines of each FILE to standard output.\n"
        "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" "\t-n NUM\t\tPrint first NUM lines instead of first 10\n";
+       "Options:\n" "\t-n NUM\t\tPrint first NUM lines instead of first 10\n"
+#endif
+       ;
 
 int head(int len, FILE * src)
 {
@@ -109,4 +112,4 @@ int head_main(int argc, char **argv)
        exit(0);
 }
 
-/* $Id: head.c,v 1.9 2000/04/13 01:18:56 erik Exp $ */
+/* $Id: head.c,v 1.10 2000/05/12 19:41:47 erik Exp $ */
index 8cc334da00344b15519006743e6475a0cd968f4b..ef921024b972b307b53d33bbe5d6be54f7100e51 100644 (file)
@@ -1,6 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * $Id: hostname.c,v 1.7 2000/02/08 19:58:47 erik Exp $
+ * $Id: hostname.c,v 1.8 2000/05/12 19:41:47 erik Exp $
  * Mini hostname implementation for busybox
  *
  * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
 #include <stdio.h>
 
 static const char *hostname_usage =
-       "hostname [OPTION] {hostname | -F file}\n\n"
-       "Get or set the hostname or DNS domain name. If a hostname is given\n"
+       "hostname [OPTION] {hostname | -F file}\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nGet or set the hostname or DNS domain name. If a hostname is given\n"
        "(or a file with the -F parameter), the host name will be set.\n\n"
        "Options:\n"
        "\t-s\t\tShort\n"
 
        "\t-i\t\tAddresses for the hostname\n"
        "\t-d\t\tDNS domain name\n"
-       "\t-F FILE\t\tUse the contents of FILE to specify the hostname\n";
+       "\t-F FILE\t\tUse the contents of FILE to specify the hostname\n"
+#endif
+       ;
 
 
 void do_sethostname(char *s, int isfile)
diff --git a/id.c b/id.c
index 8ded0e521c4e3cba24caa16a647799deba27c8c9..542f86566fc3247ac7f9ad1da427decff2b624f4 100644 (file)
--- a/id.c
+++ b/id.c
 #include <sys/types.h>
 
 static const char id_usage[] =
-       "id [OPTIONS]... [USERNAME]\n\n"
-       "Print information for USERNAME or the current user\n\n"
+       "id [OPTIONS]... [USERNAME]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPrint information for USERNAME or the current user\n\n"
        "\t-g\tprints only the group ID\n"
        "\t-u\tprints only the user ID\n"
-       "\t-r\tprints the real user ID instead of the effective ID (with -ug)\n\n";
+       "\t-r\tprints the real user ID instead of the effective ID (with -ug)\n\n"
+#endif
+       ;
 
 extern int id_main(int argc, char **argv)
 {
index eafec7d5d700c47472ed08c4d2994a5b3ea67a8a..9d473ca4a88d49f1c2d0c1b5a10489e51f806e84 100644 (file)
--- a/insmod.c
+++ b/insmod.c
@@ -70,12 +70,15 @@ _syscall2(unsigned long, create_module, const char *, name, size_t, size)
 static char m_filename[BUFSIZ + 1] = "\0";
 static char m_fullName[BUFSIZ + 1] = "\0";
 static const char insmod_usage[] =
-       "insmod [OPTION]... MODULE [symbol=value]...\n\n"
-       "Loads the specified kernel modules into the kernel.\n\n"
+       "insmod [OPTION]... MODULE [symbol=value]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nLoads the specified kernel modules into the kernel.\n\n"
        "Options:\n"
 
        "\t-f\tForce module to load into the wrong kernel version.\n"
-       "\t-k\tMake module autoclean-able.\n";
+       "\t-k\tMake module autoclean-able.\n"
+#endif
+       ;
 
 
 static int findNamedModule(const char *fileName, struct stat *statbuf)
index a4014778ce8127cbc313aa8f96efeeefde0ed57d..a953ce2e5c20723df3658e443db40c25be9f92bb 100644 (file)
@@ -100,11 +100,12 @@ extern int basename_main(int argc, char **argv);
 extern int busybox_main(int argc, char** argv);
 extern int block_device_main(int argc, char** argv);
 extern int cat_main(int argc, char** argv);
-extern int cp_mv_main(int argc, char** argv);
 extern int chmod_chown_chgrp_main(int argc, char** argv);
 extern int chroot_main(int argc, char** argv);
 extern int chvt_main(int argc, char** argv);
 extern int clear_main(int argc, char** argv);
+extern int cp_mv_main(int argc, char** argv);
+extern int cut_main(int argc, char** argv);
 extern int date_main(int argc, char** argv);
 extern int dd_main(int argc, char** argv);
 extern int dirname_main(int argc, char** argv);
@@ -151,7 +152,7 @@ extern int mkfs_minix_main(int argc, char **argv);
 extern int mknod_main(int argc, char** argv);
 extern int mkswap_main(int argc, char** argv);
 extern int mktemp_main(int argc, char **argv);
-extern int mnc_main(int argc, char** argv);
+extern int nc_main(int argc, char** argv);
 extern int more_main(int argc, char** argv);
 extern int mount_main(int argc, char** argv);
 extern int mt_main(int argc, char** argv);
diff --git a/kill.c b/kill.c
index 93f02eab47780ef5aaaaae29fb1c10020b2706ff..0487f6a66190b003e898aaa0f7107b62a5bd0e8b 100644 (file)
--- a/kill.c
+++ b/kill.c
 #include <unistd.h>
 
 static const char *kill_usage =
-       "kill [-signal] process-id [process-id ...]\n\n"
-       "Send a signal (default is SIGTERM) to the specified process(es).\n\n"
-       "Options:\n" "\t-l\tList all signal names and numbers.\n\n";
+       "kill [-signal] process-id [process-id ...]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nSend a signal (default is SIGTERM) to the specified process(es).\n\n"
+       "Options:\n" "\t-l\tList all signal names and numbers.\n\n"
+#endif
+       ;
 
 #ifdef BB_KILLALL
 static const char *killall_usage =
-       "killall [-signal] process-name [process-name ...]\n\n"
-       "Send a signal (default is SIGTERM) to the specified process(es).\n\n"
-       "Options:\n" "\t-l\tList all signal names and numbers.\n\n";
+       "killall [-signal] process-name [process-name ...]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nSend a signal (default is SIGTERM) to the specified process(es).\n\n"
+       "Options:\n" "\t-l\tList all signal names and numbers.\n\n"
+#endif
 #endif
+       ;
 
 #define KILL   0
 #define KILLALL        1
diff --git a/lash.c b/lash.c
index b96b46456814a4e36e6d5d9458c2b39fbf06f7d0..e446ad1132b6dcfd1702ac52d9495bcadb464994 100644 (file)
--- a/lash.c
+++ b/lash.c
@@ -127,8 +127,11 @@ static struct builtInCommand bltins[] = {
 
 static const char shell_usage[] =
 
-       "sh [FILE]...\n\n" "The BusyBox command interpreter (shell).\n\n";
-
+       "sh [FILE]...\n" 
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nlash: The BusyBox command interpreter (shell).\n\n"
+#endif
+       ;
 
 static char cwd[1024];
 static char *prompt = "# ";
index 4cbe7e17b088b2c105dda17a1036d3d8f3c0e2b0..c7df216112216bfad014246c66d51ece8b089f64 100644 (file)
--- a/length.c
+++ b/length.c
@@ -7,7 +7,11 @@
 extern int length_main(int argc, char **argv)
 {
        if (argc != 2 || **(argv + 1) == '-') {
-               usage("length string\n");
+               usage("length STRING\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                               "\nPrints out the length of the specified STRING.\n"
+#endif
+                               );
        }
        printf("%lu\n", (long)strlen(argv[1]));
        return (TRUE);
diff --git a/ln.c b/ln.c
index eb7c99608cbd64d172e59fabfa13d94e559eb008..29ff938635df4131c6180b1b130e36a12c4a72b6 100644 (file)
--- a/ln.c
+++ b/ln.c
 #include <errno.h>
 
 static const char ln_usage[] =
-       "ln [OPTION] TARGET... LINK_NAME|DIRECTORY\n\n"
-       "Create a link named LINK_NAME or DIRECTORY to the specified TARGET\n\n"
+       "ln [OPTION] TARGET... LINK_NAME|DIRECTORY\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nCreate a link named LINK_NAME or DIRECTORY to the specified TARGET\n\n"
        "Options:\n"
        "\t-s\tmake symbolic links instead of hard links\n"
 
        "\t-f\tremove existing destination files\n"
-       "\t-n\tno dereference symlinks - treat like normal file\n";
+       "\t-n\tno dereference symlinks - treat like normal file\n"
+#endif
+       ;
 
 static int symlinkFlag = FALSE;
 static int removeoldFlag = FALSE;
index 8f6923478f075f726cd016013d369e16b493e536..cca5406ee3a7fe4bac9934306599144bdb7a7016 100644 (file)
--- a/loadacm.c
+++ b/loadacm.c
 #include <sys/ioctl.h>
 #include <sys/kd.h>
 
-static const char loadacm_usage[] = "loadacm\n\n"
-       "Loads an acm from standard input.\n";
+static const char loadacm_usage[] = "loadacm\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nLoads an acm from standard input.\n"
+#endif
+       ;
 
 typedef unsigned short unicode;
 
index 5e1f04d76e596c8e3f9623798b08392ed3719e0a..7eaf40e82715b75621921fbe82b6b5c4055a3e4b 100644 (file)
 #define PSF_MAXMODE    0x03
 #define PSF_SEPARATOR  0xFFFF
 
-static const char loadfont_usage[] = "loadfont\n\n"
-       "Loads a console font from standard input.\n";
+static const char loadfont_usage[] = "loadfont\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "Loads a console font from standard input.\n"
+#endif
+       ;
 
 struct psf_header {
        unsigned char magic1, magic2;   /* Magic number */
index 75e52e148f8cdbd1b75352e682ad82b53ca44906..99efc510179a1dfa9d8641b2370955e1cb350899 100644 (file)
 #include <sys/ioctl.h>
 
 
-static const char loadkmap_usage[] = "loadkmap\n\n"
-       "Loads a binary keyboard translation table from standard input.\n";
+static const char loadkmap_usage[] = "loadkmap\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "Loads a binary keyboard translation table from standard input.\n"
+#endif
+       ;
 
 
 int loadkmap_main(int argc, char **argv)
index db6d9bfc5883747493cc69be5ce8948afcf79c23..118a5ded053fc742c2c4f92c5af447b123652d0a 100644 (file)
--- a/logger.c
+++ b/logger.c
@@ -48,14 +48,17 @@ extern CODE facilitynames[];
 #endif
 
 static const char logger_usage[] =
-       "logger [OPTION]... [MESSAGE]\n\n"
-       "Write MESSAGE to the system log.  If MESSAGE is '-', log stdin.\n\n"
+       "logger [OPTION]... [MESSAGE]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nWrite MESSAGE to the system log.  If MESSAGE is '-', log stdin.\n\n"
        "Options:\n"
        "\t-s\tLog to stderr as well as the system log.\n"
        "\t-t\tLog using the specified tag (defaults to user name).\n"
 
        "\t-p\tEnter the message with the specified priority.\n"
-       "\t\tThis may be numerical or a ``facility.level'' pair.\n";
+       "\t\tThis may be numerical or a ``facility.level'' pair.\n"
+#endif
+       ;
 
 
 /* Decode a symbolic name to a numeric value 
index bde1752baa0e9a44bf216d2d840fe9baf1a116ad..7c6153f64e2aa7846664e829945530e403647e45 100644 (file)
--- a/logname.c
+++ b/logname.c
 #include "internal.h"
 #include <stdio.h>
 
-static const char logname_usage[] = "logname\n\n"
-
-       "Print the name of the current user.\n";
+static const char logname_usage[] = "logname\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPrint the name of the current user.\n"
+#endif
+       ;
 
 extern int logname_main(int argc, char **argv)
 {
diff --git a/ls.c b/ls.c
index 3c518ab28966501c15d861f1275eb15225d5a419..6ab11c4e5f21dcbbea41db921b1026fef4722533 100644 (file)
--- a/ls.c
+++ b/ls.c
@@ -449,7 +449,9 @@ static const char ls_usage[] = "ls [-1a"
 #ifdef BB_FEATURE_LS_FILETYPES
        "F"
 #endif
-       "] [filenames...]\n\n"
+       "] [filenames...]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nList directory contents\n\n"
        "Options:\n"
        "\t-a\tdo not hide entries starting with .\n"
 #ifdef BB_FEATURE_LS_TIMESTAMPS
@@ -474,6 +476,7 @@ static const char ls_usage[] = "ls [-1a"
        "\t-C\tlist entries by columns\n"
 #ifdef BB_FEATURE_LS_FILETYPES
        "\t-F\tappend indicator (one of */=@|) to entries\n"
+#endif
 #endif
        ;
 
index c8206e020e5d3f8208b375402fe50ea32280fe07..5072095b532cab61e67ed556ed428e17c3283996 100644 (file)
@@ -17,8 +17,9 @@
 #include <sys/stat.h>
 
 static const char makedevs_usage[] =
-       "makedevs NAME TYPE MAJOR MINOR FIRST LAST [s]\n\n"
-       "Creates a range of block or character special files\n\n"
+       "makedevs NAME TYPE MAJOR MINOR FIRST LAST [s]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nCreates 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"
@@ -28,7 +29,9 @@ static const char makedevs_usage[] =
        "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";
+       "\tmakedevs /dev/hda b 3 0 0 8 s    ->  hda,hda1-hda8\n"
+#endif
+       ;
 
 int makedevs_main(int argc, char **argv)
 {
diff --git a/math.c b/math.c
index 96afafdef23f5ac7f57026114714ea557b3df214..18af3534aadaaa28f9bb9e6d5104be0ff9c474ee 100644 (file)
--- a/math.c
+++ b/math.c
@@ -7,10 +7,13 @@
 
 /* Tiny RPN calculator, because "expr" didn't give me bitwise operations. */
 
-static const char math_usage[] = "math expression ...\n\n"
-               "This is a Tiny RPN calculator that understands the\n"
+static const char math_usage[] = "math expression ...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+               "\nThis 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";
+               "i.e. 'math 2 2 add' -> 4, and 'math 8 8 \\* 2 2 + /' -> 16\n"
+#endif
+               ;
 
 static double stack[100];
 static unsigned int pointer;
index 305bcdb714c5c2c156321ed82aca19b8de5c9613..73d64276d94a7add18fda8dcc5d46685f13b916d 100644 (file)
  *  Perhaps this will make it simpler to internationalize also, and
  *  may make the binary slightly smaller.
  */
+
+// TO use, do something like this
+//
+//#define BB_DECLARE_EXTERN
+//#define bb_need_memory_exhausted
+//#include "messages.c"
+//
 #ifndef _BB_MESSAGES_C
 #define _BB_MESSAGES_C
 
@@ -59,4 +66,9 @@ BB_DEF_MESSAGE(name_too_long, "%s: file name too long\n")
 #if defined bb_need_io_error || ! defined BB_DECLARE_EXTERN
        BB_DEF_MESSAGE(io_error, "%s: input/output error -- %s\n")
 #endif
+#if defined bb_need_help || ! defined BB_DECLARE_EXTERN
+       BB_DEF_MESSAGE(dash_dash_help, "--help")
+#endif
+
 #endif                                                 /* _BB_MESSAGES_C */
+
index c8206e020e5d3f8208b375402fe50ea32280fe07..5072095b532cab61e67ed556ed428e17c3283996 100644 (file)
@@ -17,8 +17,9 @@
 #include <sys/stat.h>
 
 static const char makedevs_usage[] =
-       "makedevs NAME TYPE MAJOR MINOR FIRST LAST [s]\n\n"
-       "Creates a range of block or character special files\n\n"
+       "makedevs NAME TYPE MAJOR MINOR FIRST LAST [s]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nCreates 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"
@@ -28,7 +29,9 @@ static const char makedevs_usage[] =
        "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";
+       "\tmakedevs /dev/hda b 3 0 0 8 s    ->  hda,hda1-hda8\n"
+#endif
+       ;
 
 int makedevs_main(int argc, char **argv)
 {
index cf20d1711bbf11d695cc31bfeadaf4cc66b81d1e..28922f8d9227d73ad88d16fac0741ed90dd0eb5c 100644 (file)
@@ -4,8 +4,11 @@
 #include <sys/mtio.h>
 #include <sys/fcntl.h>
 
-static const char mt_usage[] = "mt [-f device] opcode value\n\n"
-                       "Control magnetic tape drive operation\n";
+static const char mt_usage[] = "mt [-f device] opcode value\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                       "\nControl magnetic tape drive operation\n"
+#endif
+                       ;
 
 struct mt_opcodes {
        char *name;
index 18b13e8c96ac224c12bd1d654971e6be7439ccd2..14f1d3c2081dcfaa3268b167a55f72fe821665f3 100644 (file)
@@ -35,12 +35,15 @@ _syscall2(int, bdflush, int, func, int, data);
 #endif                                                 /* __GLIBC__ */
 
 static char update_usage[] =
-       "update [options]\n\n"
-       "Periodically flushes filesystem buffers.\n\n"
+       "update [options]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPeriodically flushes filesystem buffers.\n\n"
        "Options:\n"
        "\t-S\tforce use of sync(2) instead of flushing\n"
        "\t-s SECS\tcall sync this often (default 30)\n"
-       "\t-f SECS\tflush some buffers this often (default 5)\n";
+       "\t-f SECS\tflush some buffers this often (default 5)\n"
+#endif
+       ;
 
 static unsigned int sync_duration = 30;
 static unsigned int flush_duration = 5;
diff --git a/mkdir.c b/mkdir.c
index 54d9b7241e24290f5a2dbc6bdd4f5313ece4aa7d..96649868dc77e908bd48bd91ee3c5f86aa09afc6 100644 (file)
--- a/mkdir.c
+++ b/mkdir.c
 #include <errno.h>
 
 static const char mkdir_usage[] =
-       "mkdir [OPTION] DIRECTORY...\n\n"
-       "Create the DIRECTORY(ies), if they do not already exist\n\n"
+       "mkdir [OPTION] DIRECTORY...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nCreate the DIRECTORY(ies), if they do not already exist\n\n"
        "Options:\n"
 
        "\t-m\tset permission mode (as in chmod), not rwxrwxrwx - umask\n"
-       "\t-p\tno error if existing, make parent directories as needed\n";
+       "\t-p\tno error if existing, make parent directories as needed\n"
+#endif
+       ;
 
 
 static int parentFlag = FALSE;
index b273df04633abc38665bffb0412d4999b8546bcd..ef3d667e2a981a52ab495f9f96849a884ff978e8 100644 (file)
--- a/mkfifo.c
+++ b/mkfifo.c
 #include <sys/stat.h>
 #include <errno.h>
 
-static const char mkfifo_usage[] = "mkfifo [OPTIONS] name\n\n"
-       "Creates a named pipe (identical to 'mknod name p')\n\n"
-
+static const char mkfifo_usage[] = "mkfifo [OPTIONS] name\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nCreates a named pipe (identical to 'mknod name p')\n\n"
        "Options:\n"
-       "\t-m\tcreate the pipe using the specified mode (default a=rw)\n";
+       "\t-m\tcreate the pipe using the specified mode (default a=rw)\n"
+#endif
+       ;
 
 extern int mkfifo_main(int argc, char **argv)
 {
index be180a46ba850a8764512b1a8e0cd41df062b7f1..bf4bda9fd5ef7c85adce44fd5a305bfaa255593e 100644 (file)
@@ -179,9 +179,10 @@ static volatile void show_usage()
        fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n",
                        BB_VER, BB_BT);
        fprintf(stderr,
-                       "Usage: %s [-c | -l filename] [-nXX] [-iXX] /dev/name [blocks]\n\n",
+                       "Usage: %s [-c | -l filename] [-nXX] [-iXX] /dev/name [blocks]\n",
                        program_name);
-       fprintf(stderr, "Make a MINIX filesystem.\n\n");
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       fprintf(stderr, "\nMake a MINIX filesystem.\n\n");
        fprintf(stderr, "OPTIONS:\n");
        fprintf(stderr, "\t-c\t\tCheck the device for bad blocks\n");
        fprintf(stderr,
@@ -191,6 +192,7 @@ static volatile void show_usage()
        fprintf(stderr,
                        "\t-l FILENAME\tRead the bad blocks list from FILENAME\n");
        fprintf(stderr, "\t-v\t\tMake a Minix version 2 filesystem\n\n");
+#endif
        exit(16);
 }
 
diff --git a/mknod.c b/mknod.c
index caa234f1fedba82b816cb1cf889645a9300b6c42..8f411a341ab9167247a4f384f5d981e04adf982a 100644 (file)
--- a/mknod.c
+++ b/mknod.c
 #include <fcntl.h>
 #include <unistd.h>
 
-static const char mknod_usage[] = "mknod [OPTIONS] NAME TYPE MAJOR MINOR\n\n"
-       "Create a special file (block, character, or pipe).\n\n"
+static const char mknod_usage[] = "mknod [OPTIONS] NAME TYPE MAJOR MINOR\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nCreate 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"
+#endif
+       ;
 
 int mknod_main(int argc, char **argv)
 {
index 17866a735324522ab7d439906d8fa2b858860809..7d76916f03be073d2bc8deb9d379963fb84c7ff3 100644 (file)
--- a/mkswap.c
+++ b/mkswap.c
 
 
 static const char mkswap_usage[] =
-       "mkswap [-c] [-v0|-v1] device [block-count]\n\n"
-       "Prepare a disk partition to be used as a swap partition.\n\n"
+       "mkswap [-c] [-v0|-v1] device [block-count]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPrepare a disk partition to be used as a swap partition.\n\n"
        "Options:\n" "\t-c\t\tCheck for read-ability.\n"
        "\t-v0\t\tMake version 0 swap [max 128 Megs].\n"
        "\t-v1\t\tMake version 1 swap [big!] (default for kernels > 2.1.117).\n"
 
-       "\tblock-count\tNumber of block to use (default is entire partition).\n";
+       "\tblock-count\tNumber of block to use (default is entire partition).\n"
+#endif
+       ;
 
 
 #ifndef _IO
diff --git a/mnc.c b/mnc.c
deleted file mode 100644 (file)
index 60c18a9..0000000
--- a/mnc.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/* vi: set sw=4 ts=4: */
-/*  mnc: mini-netcat - built from the ground up for LRP
-    Copyright (C) 1998  Charles P. Wright
-
-    0.0.1   6K      It works.
-    0.0.2   5K      Smaller and you can also check the exit condition if you wish.
-    0.0.3          Uses select()       
-
-    19980918 Busy Boxed! Dave Cinege
-    19990512 Uses Select. Charles P. Wright
-    19990513 Fixes stdin stupidity and uses buffers.  Charles P. Wright
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-#include "internal.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <sys/time.h>
-#include <sys/ioctl.h>
-
-#define BUFSIZE 100
-
-static const char mnc_usage[] =
-
-       "mnc [IP] [port]\n\n" "mini-netcat opens a pipe to IP:port\n";
-
-int mnc_main(int argc, char **argv)
-{
-       int sfd;
-       int result;
-       int len;
-       char ch[BUFSIZE];
-
-       struct sockaddr_in address;
-       struct hostent *hostinfo;
-
-       fd_set readfds, testfds;
-
-       argc--;
-       argv++;
-       if (argc < 2 || **(argv + 1) == '-') {
-               usage(mnc_usage);
-       }
-
-       sfd = socket(AF_INET, SOCK_STREAM, 0);
-
-       hostinfo = (struct hostent *) gethostbyname(*argv);
-
-       if (!hostinfo) {
-               exit(1);
-       }
-
-       address.sin_family = AF_INET;
-       address.sin_addr = *(struct in_addr *) *hostinfo->h_addr_list;
-       address.sin_port = htons(atoi(*(++argv)));
-
-       len = sizeof(address);
-
-       result = connect(sfd, (struct sockaddr *) &address, len);
-
-       if (result < 0) {
-               exit(2);
-       }
-
-       FD_ZERO(&readfds);
-       FD_SET(sfd, &readfds);
-       FD_SET(fileno(stdin), &readfds);
-
-       while (1) {
-               int fd;
-               int ofd;
-               int nread;
-
-               testfds = readfds;
-
-               result =
-                       select(FD_SETSIZE, &testfds, (fd_set *) NULL, (fd_set *) NULL,
-                                  (struct timeval *) 0);
-
-               if (result < 1) {
-                       exit(3);
-               }
-
-               for (fd = 0; fd < FD_SETSIZE; fd++) {
-                       if (FD_ISSET(fd, &testfds)) {
-                               int trn = 0;
-                               int rn;
-
-                               ioctl(fd, FIONREAD, &nread);
-
-                               if (fd == sfd) {
-                                       if (nread == 0)
-                                               exit(0);
-                                       ofd = fileno(stdout);
-                               } else {
-                                       ofd = sfd;
-                               }
-
-
-
-                               do {
-                                       rn = (BUFSIZE < nread - trn) ? BUFSIZE : nread - trn;
-                                       trn += rn;
-                                       read(fd, ch, rn);
-                                       write(ofd, ch, rn);
-                               }
-                               while (trn < nread);
-                       }
-               }
-       }
-}
index eafec7d5d700c47472ed08c4d2994a5b3ea67a8a..9d473ca4a88d49f1c2d0c1b5a10489e51f806e84 100644 (file)
@@ -70,12 +70,15 @@ _syscall2(unsigned long, create_module, const char *, name, size_t, size)
 static char m_filename[BUFSIZ + 1] = "\0";
 static char m_fullName[BUFSIZ + 1] = "\0";
 static const char insmod_usage[] =
-       "insmod [OPTION]... MODULE [symbol=value]...\n\n"
-       "Loads the specified kernel modules into the kernel.\n\n"
+       "insmod [OPTION]... MODULE [symbol=value]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nLoads the specified kernel modules into the kernel.\n\n"
        "Options:\n"
 
        "\t-f\tForce module to load into the wrong kernel version.\n"
-       "\t-k\tMake module autoclean-able.\n";
+       "\t-k\tMake module autoclean-able.\n"
+#endif
+       ;
 
 
 static int findNamedModule(const char *fileName, struct stat *statbuf)
index bc5c03e62fe546e6330c090ecbd650b6bdc2339b..5ef4a60f8a98e0556ee3ebbf1783304f504ed9f4 100644 (file)
@@ -36,10 +36,13 @@ _syscall1(int, delete_module, const char *, name)
 
 
 static const char rmmod_usage[] =
-       "rmmod [OPTION]... [MODULE]...\n\n"
-       "Unloads the specified kernel modules from the kernel.\n\n"
-
-       "Options:\n" "\t-a\tTry to remove all unused kernel modules.\n";
+       "rmmod [OPTION]... [MODULE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nUnloads the specified kernel modules from the kernel.\n\n"
+       "Options:\n" 
+       "\t-a\tTry to remove all unused kernel modules.\n"
+#endif
+       ;
 
 
 
diff --git a/more.c b/more.c
index 30d2757cd240eab68b1991e4894e0b92947075c2..50446861e9249dad7d8d1474152af6c9516ebb9d 100644 (file)
--- a/more.c
+++ b/more.c
 #include <fcntl.h>
 #include <signal.h>
 #include <sys/ioctl.h>
+#define BB_DECLARE_EXTERN
+#define bb_need_help
+#include "messages.c"
 
-static const char more_usage[] = "more [file ...]\n";
+static const char more_usage[] = "more [FILE ...]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nMore is a filter for viewing FILE one screenful at a time.\n"
+#endif
+       ;
 
 /* ED: sparc termios is broken: revert back to old termio handling. */
 #ifdef BB_FEATURE_USE_TERMIOS
@@ -92,7 +99,7 @@ extern int more_main(int argc, char **argv)
        argv++;
 
        if (argc > 0
-               && (strcmp(*argv, "--help") == 0 || strcmp(*argv, "-h") == 0)) {
+               && (strcmp(*argv, dash_dash_help) == 0 || strcmp(*argv, "-h") == 0)) {
                usage(more_usage);
        }
        do {
diff --git a/mount.c b/mount.c
index 00a774a53f2e8cc9ed09ea04f208acb1934e64c1..bde55d155f99ab6cecb68edee7679131e5bab197 100644 (file)
--- a/mount.c
+++ b/mount.c
@@ -64,10 +64,12 @@ static int use_loop = FALSE;
 
 extern const char mtab_file[]; /* Defined in utility.c */
 
-static const char mount_usage[] = "\tmount [flags]\n"
-       "\tmount [flags] device directory [-o options,more-options]\n"
-       "\n" "Flags:\n" 
-       "\t-a:\t\tMount all file systems in fstab.\n"
+static const char mount_usage[] = 
+       "mount [flags] device directory [-o options,more-options]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nMount a filesystem\n\n"
+       "Flags:\n" 
+       "\t-a:\t\tMount all filesystems in fstab.\n"
 #ifdef BB_MTAB
        "\t-f:\t\t\"Fake\" mount. Add entry to mount table but don't mount it.\n"
        "\t-n:\t\tDon't write a mount table entry.\n"
@@ -88,8 +90,10 @@ static const char mount_usage[] = "\tmount [flags]\n"
        "\tsuid/nosuid:\tAllow set-user-id-root programs / disallow them.\n"
        "\tremount:\tRe-mount a currently-mounted filesystem, changing its flags.\n"
        "\tro/rw:\t\tMount for read-only / read-write.\n"
-       "There are EVEN MORE flags that are specific to each filesystem.\n"
-       "You'll have to see the written documentation for those.\n";
+       "\nThere are EVEN MORE flags that are specific to each filesystem.\n"
+       "You'll have to see the written documentation for those.\n"
+#endif
+       ;
 
 
 struct mount_options {
@@ -451,7 +455,7 @@ extern int mount_main(int argc, char **argv)
                        fatalError( "\nCannot read /etc/fstab: %s\n", strerror (errno));
 
                while ((m = getmntent(f)) != NULL) {
-                       // If the file system isn't noauto, 
+                       // If the filesystem isn't noauto, 
                        // and isn't swap or nfs, then mount it
                        if ((!strstr(m->mnt_opts, "noauto")) &&
                                (!strstr(m->mnt_type, "swap")) &&
diff --git a/mt.c b/mt.c
index cf20d1711bbf11d695cc31bfeadaf4cc66b81d1e..28922f8d9227d73ad88d16fac0741ed90dd0eb5c 100644 (file)
--- a/mt.c
+++ b/mt.c
@@ -4,8 +4,11 @@
 #include <sys/mtio.h>
 #include <sys/fcntl.h>
 
-static const char mt_usage[] = "mt [-f device] opcode value\n\n"
-                       "Control magnetic tape drive operation\n";
+static const char mt_usage[] = "mt [-f device] opcode value\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                       "\nControl magnetic tape drive operation\n"
+#endif
+                       ;
 
 struct mt_opcodes {
        char *name;
diff --git a/nc.c b/nc.c
new file mode 100644 (file)
index 0000000..a588587
--- /dev/null
+++ b/nc.c
@@ -0,0 +1,133 @@
+/* vi: set sw=4 ts=4: */
+/*  nc: mini-netcat - built from the ground up for LRP
+    Copyright (C) 1998  Charles P. Wright
+
+    0.0.1   6K      It works.
+    0.0.2   5K      Smaller and you can also check the exit condition if you wish.
+    0.0.3          Uses select()       
+
+    19980918 Busy Boxed! Dave Cinege
+    19990512 Uses Select. Charles P. Wright
+    19990513 Fixes stdin stupidity and uses buffers.  Charles P. Wright
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+#include "internal.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <sys/time.h>
+#include <sys/ioctl.h>
+
+#define BUFSIZE 100
+
+static const char nc_usage[] = "nc [IP] [port]\n" 
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nNetcat opens a pipe to IP:port\n"
+#endif
+       ;
+
+int nc_main(int argc, char **argv)
+{
+       int sfd;
+       int result;
+       int len;
+       char ch[BUFSIZE];
+
+       struct sockaddr_in address;
+       struct hostent *hostinfo;
+
+       fd_set readfds, testfds;
+
+       argc--;
+       argv++;
+       if (argc < 2 || **(argv + 1) == '-') {
+               usage(nc_usage);
+       }
+
+       sfd = socket(AF_INET, SOCK_STREAM, 0);
+
+       hostinfo = (struct hostent *) gethostbyname(*argv);
+
+       if (!hostinfo) {
+               exit(1);
+       }
+
+       address.sin_family = AF_INET;
+       address.sin_addr = *(struct in_addr *) *hostinfo->h_addr_list;
+       address.sin_port = htons(atoi(*(++argv)));
+
+       len = sizeof(address);
+
+       result = connect(sfd, (struct sockaddr *) &address, len);
+
+       if (result < 0) {
+               exit(2);
+       }
+
+       FD_ZERO(&readfds);
+       FD_SET(sfd, &readfds);
+       FD_SET(fileno(stdin), &readfds);
+
+       while (1) {
+               int fd;
+               int ofd;
+               int nread;
+
+               testfds = readfds;
+
+               result =
+                       select(FD_SETSIZE, &testfds, (fd_set *) NULL, (fd_set *) NULL,
+                                  (struct timeval *) 0);
+
+               if (result < 1) {
+                       exit(3);
+               }
+
+               for (fd = 0; fd < FD_SETSIZE; fd++) {
+                       if (FD_ISSET(fd, &testfds)) {
+                               int trn = 0;
+                               int rn;
+
+                               ioctl(fd, FIONREAD, &nread);
+
+                               if (fd == sfd) {
+                                       if (nread == 0)
+                                               exit(0);
+                                       ofd = fileno(stdout);
+                               } else {
+                                       ofd = sfd;
+                               }
+
+
+
+                               do {
+                                       rn = (BUFSIZE < nread - trn) ? BUFSIZE : nread - trn;
+                                       trn += rn;
+                                       read(fd, ch, rn);
+                                       write(ofd, ch, rn);
+                               }
+                               while (trn < nread);
+                       }
+               }
+       }
+}
index 8cc334da00344b15519006743e6475a0cd968f4b..ef921024b972b307b53d33bbe5d6be54f7100e51 100644 (file)
@@ -1,6 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * $Id: hostname.c,v 1.7 2000/02/08 19:58:47 erik Exp $
+ * $Id: hostname.c,v 1.8 2000/05/12 19:41:47 erik Exp $
  * Mini hostname implementation for busybox
  *
  * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
 #include <stdio.h>
 
 static const char *hostname_usage =
-       "hostname [OPTION] {hostname | -F file}\n\n"
-       "Get or set the hostname or DNS domain name. If a hostname is given\n"
+       "hostname [OPTION] {hostname | -F file}\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nGet or set the hostname or DNS domain name. If a hostname is given\n"
        "(or a file with the -F parameter), the host name will be set.\n\n"
        "Options:\n"
        "\t-s\t\tShort\n"
 
        "\t-i\t\tAddresses for the hostname\n"
        "\t-d\t\tDNS domain name\n"
-       "\t-F FILE\t\tUse the contents of FILE to specify the hostname\n";
+       "\t-F FILE\t\tUse the contents of FILE to specify the hostname\n"
+#endif
+       ;
 
 
 void do_sethostname(char *s, int isfile)
diff --git a/networking/nc.c b/networking/nc.c
new file mode 100644 (file)
index 0000000..a588587
--- /dev/null
@@ -0,0 +1,133 @@
+/* vi: set sw=4 ts=4: */
+/*  nc: mini-netcat - built from the ground up for LRP
+    Copyright (C) 1998  Charles P. Wright
+
+    0.0.1   6K      It works.
+    0.0.2   5K      Smaller and you can also check the exit condition if you wish.
+    0.0.3          Uses select()       
+
+    19980918 Busy Boxed! Dave Cinege
+    19990512 Uses Select. Charles P. Wright
+    19990513 Fixes stdin stupidity and uses buffers.  Charles P. Wright
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+#include "internal.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <sys/time.h>
+#include <sys/ioctl.h>
+
+#define BUFSIZE 100
+
+static const char nc_usage[] = "nc [IP] [port]\n" 
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nNetcat opens a pipe to IP:port\n"
+#endif
+       ;
+
+int nc_main(int argc, char **argv)
+{
+       int sfd;
+       int result;
+       int len;
+       char ch[BUFSIZE];
+
+       struct sockaddr_in address;
+       struct hostent *hostinfo;
+
+       fd_set readfds, testfds;
+
+       argc--;
+       argv++;
+       if (argc < 2 || **(argv + 1) == '-') {
+               usage(nc_usage);
+       }
+
+       sfd = socket(AF_INET, SOCK_STREAM, 0);
+
+       hostinfo = (struct hostent *) gethostbyname(*argv);
+
+       if (!hostinfo) {
+               exit(1);
+       }
+
+       address.sin_family = AF_INET;
+       address.sin_addr = *(struct in_addr *) *hostinfo->h_addr_list;
+       address.sin_port = htons(atoi(*(++argv)));
+
+       len = sizeof(address);
+
+       result = connect(sfd, (struct sockaddr *) &address, len);
+
+       if (result < 0) {
+               exit(2);
+       }
+
+       FD_ZERO(&readfds);
+       FD_SET(sfd, &readfds);
+       FD_SET(fileno(stdin), &readfds);
+
+       while (1) {
+               int fd;
+               int ofd;
+               int nread;
+
+               testfds = readfds;
+
+               result =
+                       select(FD_SETSIZE, &testfds, (fd_set *) NULL, (fd_set *) NULL,
+                                  (struct timeval *) 0);
+
+               if (result < 1) {
+                       exit(3);
+               }
+
+               for (fd = 0; fd < FD_SETSIZE; fd++) {
+                       if (FD_ISSET(fd, &testfds)) {
+                               int trn = 0;
+                               int rn;
+
+                               ioctl(fd, FIONREAD, &nread);
+
+                               if (fd == sfd) {
+                                       if (nread == 0)
+                                               exit(0);
+                                       ofd = fileno(stdout);
+                               } else {
+                                       ofd = sfd;
+                               }
+
+
+
+                               do {
+                                       rn = (BUFSIZE < nread - trn) ? BUFSIZE : nread - trn;
+                                       trn += rn;
+                                       read(fd, ch, rn);
+                                       write(ofd, ch, rn);
+                               }
+                               while (trn < nread);
+                       }
+               }
+       }
+}
index e4bf52f803fd8de70f2c128d7b73a024488eb38f..82bcf56a16e8bdf727234942dd1b954cbb76b894 100644 (file)
  |  + find out how the real nslookup gets the default name server
  */
 
-static const char nslookup_usage[] = "nslookup [HOST]\n\nQueries the nameserver for the IP address of the given HOST\n";
+static const char nslookup_usage[] = "nslookup [HOST]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nQueries the nameserver for the IP address of the given HOST\n"
+#endif
+;
 
 
 /* I have to see how the real nslookup does this.
@@ -173,4 +177,4 @@ int nslookup_main(int argc, char **argv)
        exit( TRUE);
 }
 
-/* $Id: nslookup.c,v 1.8 2000/05/02 00:07:56 erik Exp $ */
+/* $Id: nslookup.c,v 1.9 2000/05/12 19:41:47 erik Exp $ */
index 9f83002a207893e41d13e288293b4eaf5ead7370..14a56cd55bdc3a9dd3f725fa10dcbc6de2454422 100644 (file)
@@ -1,6 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * $Id: ping.c,v 1.14 2000/04/25 23:24:55 erik Exp $
+ * $Id: ping.c,v 1.15 2000/05/12 19:41:47 erik Exp $
  * Mini ping implementation for busybox
  *
  * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
@@ -90,7 +90,11 @@ static int in_cksum(unsigned short *buf, int sz)
 
 /* simple version */
 #ifdef BB_SIMPLE_PING
-static const char *ping_usage = "ping host\n\n";
+static const char *ping_usage = "ping host\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nSend ICMP ECHO_REQUEST packets to network hosts\n"
+#endif
+       ;
 
 static char *hostname = NULL;
 
@@ -179,12 +183,15 @@ extern int ping_main(int argc, char **argv)
 
 #else
 /* full(er) version */
-static const char *ping_usage = "ping [OPTION]... host\n\n"
-       "Send ICMP ECHO_REQUEST packets to network hosts.\n\n"
+static const char *ping_usage = "ping [OPTION]... host\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nSend ICMP ECHO_REQUEST packets to network hosts.\n\n"
        "Options:\n"
        "\t-c COUNT\tSend only COUNT pings.\n"
        "\t-q\t\tQuiet mode, only displays output at start\n"
-       "\t\t\tand when finished.\n"; 
+       "\t\t\tand when finished.\n"
+#endif
+       ;
 
 static char *hostname = NULL;
 static struct sockaddr_in pingaddr;
index 8c58521eb00bdd3897c4a7acc07a84b3b8211579..8b6d5f5dc28a1232ea4e52af0b5bd7ea23528f76 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: telnet.c,v 1.2 2000/05/01 19:10:52 erik Exp $
+ * $Id: telnet.c,v 1.3 2000/05/12 19:41:47 erik Exp $
  * Mini telnet implementation for busybox
  *
  * Copyright (C) 2000 by Randolph Chung <tausq@debian.org>
 
 static int STDIN = 0;
 static int STDOUT = 1;
-static const char *telnet_usage = "telnet host [port]\n\n";
+static const char *telnet_usage = "telnet host [port]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nProvides interactive communication with another\n"
+       "networked host using the TELNET protocol\n"
+#endif
+       ;
 static struct termios saved_tc;
 static unsigned char options[NTELOPTS];
 static char tr_state = 0; /* telnet send and receive state */
index e4bf52f803fd8de70f2c128d7b73a024488eb38f..82bcf56a16e8bdf727234942dd1b954cbb76b894 100644 (file)
  |  + find out how the real nslookup gets the default name server
  */
 
-static const char nslookup_usage[] = "nslookup [HOST]\n\nQueries the nameserver for the IP address of the given HOST\n";
+static const char nslookup_usage[] = "nslookup [HOST]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nQueries the nameserver for the IP address of the given HOST\n"
+#endif
+;
 
 
 /* I have to see how the real nslookup does this.
@@ -173,4 +177,4 @@ int nslookup_main(int argc, char **argv)
        exit( TRUE);
 }
 
-/* $Id: nslookup.c,v 1.8 2000/05/02 00:07:56 erik Exp $ */
+/* $Id: nslookup.c,v 1.9 2000/05/12 19:41:47 erik Exp $ */
diff --git a/ping.c b/ping.c
index 9f83002a207893e41d13e288293b4eaf5ead7370..14a56cd55bdc3a9dd3f725fa10dcbc6de2454422 100644 (file)
--- a/ping.c
+++ b/ping.c
@@ -1,6 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * $Id: ping.c,v 1.14 2000/04/25 23:24:55 erik Exp $
+ * $Id: ping.c,v 1.15 2000/05/12 19:41:47 erik Exp $
  * Mini ping implementation for busybox
  *
  * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
@@ -90,7 +90,11 @@ static int in_cksum(unsigned short *buf, int sz)
 
 /* simple version */
 #ifdef BB_SIMPLE_PING
-static const char *ping_usage = "ping host\n\n";
+static const char *ping_usage = "ping host\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nSend ICMP ECHO_REQUEST packets to network hosts\n"
+#endif
+       ;
 
 static char *hostname = NULL;
 
@@ -179,12 +183,15 @@ extern int ping_main(int argc, char **argv)
 
 #else
 /* full(er) version */
-static const char *ping_usage = "ping [OPTION]... host\n\n"
-       "Send ICMP ECHO_REQUEST packets to network hosts.\n\n"
+static const char *ping_usage = "ping [OPTION]... host\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nSend ICMP ECHO_REQUEST packets to network hosts.\n\n"
        "Options:\n"
        "\t-c COUNT\tSend only COUNT pings.\n"
        "\t-q\t\tQuiet mode, only displays output at start\n"
-       "\t\t\tand when finished.\n"; 
+       "\t\t\tand when finished.\n"
+#endif
+       ;
 
 static char *hostname = NULL;
 static struct sockaddr_in pingaddr;
index bfe40817540c8a0979f6a85fbc682a61b4213132..28a011dcd9236ce598068e65403dfaf5b07b1d3e 100644 (file)
--- a/printf.c
+++ b/printf.c
@@ -139,7 +139,12 @@ 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\nFormats and prints the given data.\n";
+static const char printf_usage[] = "printf FORMAT [ARGUMENT...]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nFormats and prints ARGUMENT(s) according to FORMAT,\n"
+       "Where FORMAT controls the output exactly as in C printf.\n"
+#endif
+       ;
 
 int printf_main(int argc, char **argv)
 {
index 39594dbe527422c47ad906717fde3b505e668013..e6f130ea9891cdebb5227fee4da9fd2eab02926c 100644 (file)
@@ -37,6 +37,14 @@ extern int free_main(int argc, char **argv)
        info.sharedram/=DIVISOR;
        info.bufferram/=DIVISOR;
 
+       if (argc > 1 && **(argv + 1) == '-') {
+               usage("free\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                               "\nDisplays the amount of free and used system memory\n"
+#endif
+                               );
+       }
+
 
        printf("%6s%13s%13s%13s%13s%13s\n", "", "total", "used", "free", 
                        "shared", "buffers");
index 93f02eab47780ef5aaaaae29fb1c10020b2706ff..0487f6a66190b003e898aaa0f7107b62a5bd0e8b 100644 (file)
 #include <unistd.h>
 
 static const char *kill_usage =
-       "kill [-signal] process-id [process-id ...]\n\n"
-       "Send a signal (default is SIGTERM) to the specified process(es).\n\n"
-       "Options:\n" "\t-l\tList all signal names and numbers.\n\n";
+       "kill [-signal] process-id [process-id ...]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nSend a signal (default is SIGTERM) to the specified process(es).\n\n"
+       "Options:\n" "\t-l\tList all signal names and numbers.\n\n"
+#endif
+       ;
 
 #ifdef BB_KILLALL
 static const char *killall_usage =
-       "killall [-signal] process-name [process-name ...]\n\n"
-       "Send a signal (default is SIGTERM) to the specified process(es).\n\n"
-       "Options:\n" "\t-l\tList all signal names and numbers.\n\n";
+       "killall [-signal] process-name [process-name ...]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nSend a signal (default is SIGTERM) to the specified process(es).\n\n"
+       "Options:\n" "\t-l\tList all signal names and numbers.\n\n"
+#endif
 #endif
+       ;
 
 #define KILL   0
 #define KILLALL        1
index f8cf33b259ed8b6a6b74d57ef28749a2c2641d03..0842a22c2c0836cb22b9fce1422e62502253a60c 100644 (file)
@@ -36,6 +36,9 @@
 #include <fcntl.h>
 #include <ctype.h>
 #include <sys/ioctl.h>
+#define BB_DECLARE_EXTERN
+#define bb_need_help
+#include "messages.c"
 
 
 #if ! defined BB_FEATURE_USE_DEVPS_PATCH
@@ -128,8 +131,13 @@ extern int ps_main(int argc, char **argv)
 
 
 
-       if (argc > 1 && strcmp(argv[1], "--help") == 0) {
-               usage ("ps\n\nReport process status\n\nThis version of ps accepts no options.\n");
+       if (argc > 1 && strcmp(argv[1], dash_dash_help) == 0) {
+               usage ("ps\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                               "\nReport process status\n"
+                               "\nThis version of ps accepts no options.\n"
+#endif
+                               );
        }
 
        dir = opendir("/proc");
diff --git a/ps.c b/ps.c
index f8cf33b259ed8b6a6b74d57ef28749a2c2641d03..0842a22c2c0836cb22b9fce1422e62502253a60c 100644 (file)
--- a/ps.c
+++ b/ps.c
@@ -36,6 +36,9 @@
 #include <fcntl.h>
 #include <ctype.h>
 #include <sys/ioctl.h>
+#define BB_DECLARE_EXTERN
+#define bb_need_help
+#include "messages.c"
 
 
 #if ! defined BB_FEATURE_USE_DEVPS_PATCH
@@ -128,8 +131,13 @@ extern int ps_main(int argc, char **argv)
 
 
 
-       if (argc > 1 && strcmp(argv[1], "--help") == 0) {
-               usage ("ps\n\nReport process status\n\nThis version of ps accepts no options.\n");
+       if (argc > 1 && strcmp(argv[1], dash_dash_help) == 0) {
+               usage ("ps\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                               "\nReport process status\n"
+                               "\nThis version of ps accepts no options.\n"
+#endif
+                               );
        }
 
        dir = opendir("/proc");
diff --git a/pwd.c b/pwd.c
index e77a0ca70e5af5136031a0b8633406bd840a874f..19494a96cbd6d840d9037d3655834c09e9530fdf 100644 (file)
--- a/pwd.c
+++ b/pwd.c
 #include "internal.h"
 #include <stdio.h>
 #include <dirent.h>
+#include <errno.h>
 
 extern int pwd_main(int argc, char **argv)
 {
        char buf[BUFSIZ + 1];
 
-       if (getcwd(buf, sizeof(buf)) == NULL) {
-               perror("get working directory");
-               exit(FALSE);
-       }
+       if (getcwd(buf, sizeof(buf)) == NULL)
+               fatalError("pwd: %s", strerror(errno));
 
        printf("%s\n", buf);
        exit(TRUE);
diff --git a/rm.c b/rm.c
index 0cd795661a0bc31df6aa65544f846d59160f0585..c62d68abad0f53a102544b95cbe828fa9172dc37 100644 (file)
--- a/rm.c
+++ b/rm.c
 #include <dirent.h>
 #include <errno.h>
 
-static const char *rm_usage = "rm [OPTION]... FILE...\n\n"
-       "Remove (unlink) the FILE(s).\n\n"
+static const char *rm_usage = "rm [OPTION]... FILE...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nRemove (unlink) the FILE(s).\n\n"
        "Options:\n"
-
        "\t-f\t\tremove existing destinations, never prompt\n"
-       "\t-r or -R\tremove the contents of directories recursively\n";
+       "\t-r or -R\tremove the contents of directories recursively\n"
+#endif
+       ;
 
 
 static int recursiveFlag = FALSE;
diff --git a/rmdir.c b/rmdir.c
index 1d88de32279bf01fe75ea932fcdfd8cca7ade902..61d7f2aa53ba7cf7550042acbdeda98d08fa384a 100644 (file)
--- a/rmdir.c
+++ b/rmdir.c
@@ -31,7 +31,11 @@ extern int rmdir_main(int argc, char **argv)
 {
        if (argc == 1 || **(argv + 1) == '-') {
                usage
-                       ("rmdir [OPTION]... DIRECTORY...\n\nRemove the DIRECTORY(ies), if they are empty.\n");
+                       ("rmdir [OPTION]... DIRECTORY...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                        "\nRemove the DIRECTORY(ies), if they are empty.\n"
+#endif
+                        );
        }
 
        while (--argc > 0) {
diff --git a/rmmod.c b/rmmod.c
index bc5c03e62fe546e6330c090ecbd650b6bdc2339b..5ef4a60f8a98e0556ee3ebbf1783304f504ed9f4 100644 (file)
--- a/rmmod.c
+++ b/rmmod.c
@@ -36,10 +36,13 @@ _syscall1(int, delete_module, const char *, name)
 
 
 static const char rmmod_usage[] =
-       "rmmod [OPTION]... [MODULE]...\n\n"
-       "Unloads the specified kernel modules from the kernel.\n\n"
-
-       "Options:\n" "\t-a\tTry to remove all unused kernel modules.\n";
+       "rmmod [OPTION]... [MODULE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nUnloads the specified kernel modules from the kernel.\n\n"
+       "Options:\n" 
+       "\t-a\tTry to remove all unused kernel modules.\n"
+#endif
+       ;
 
 
 
diff --git a/sed.c b/sed.c
index 0d57a4a06e765ceb37dc17c820b847390d81c713..9fed6704e9f194c0f91d5383d9e1a5cf7bf00e1b 100644 (file)
--- a/sed.c
+++ b/sed.c
@@ -38,8 +38,9 @@
 #include <ctype.h>
 
 static const char sed_usage[] =
-       "sed [-n] -e script [file...]\n\n"
-       "Allowed sed scripts come in the following form:\n"
+       "sed [-n] -e script [file...]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nAllowed sed scripts come in the following form:\n"
        "\t'ADDR [!] COMMAND'\n\n"
        "\twhere address ADDR can be:\n"
        "\t  NUMBER    Match specified line number\n"
@@ -58,8 +59,10 @@ static const char sed_usage[] =
 #if defined BB_REGEXP
        "This version of sed matches full regular expresions.\n";
 #else
-       "This version of sed matches strings (not full regular expresions).\n";
+       "This version of sed matches strings (not full regular expresions).\n"
 #endif
+#endif
+       ;
 
 /* Flags & variables */
 
index d6ba5370e637fb5420c98fe0e5670ccfb730e7f9..8d2142b7c1421c1ee81d2bfa225b4ca36abf672a 100644 (file)
--- a/sfdisk.c
+++ b/sfdisk.c
 #include <linux/hdreg.h>               /* HDIO_GETGEO */
 #include <linux/fs.h>                  /* BLKGETSIZE */
 
+#define BB_DECLARE_EXTERN
+#define bb_need_memory_exhausted
+#include "messages.c"
 
 static const char sfdisk_usage[] =
        "sfdisk [options] device ...\n"
-       "device: something like /dev/hda or /dev/sda\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\ndevice: something like /dev/hda or /dev/sda\n"
        "useful options:\n"
        "    -s [or --show-size]: list size of a partition\n"
        "    -c [or --id]:        print or change partition Id\n"
@@ -86,7 +90,9 @@ static const char sfdisk_usage[] =
        "    -S# [or --sectors #]:  set the number of sectors to use\n"
 
        "You can disable all consistency checking with:\n"
-       "    -f  [or --force]:      do what I say, even if it is stupid\n";
+       "    -f  [or --force]:      do what I say, even if it is stupid\n"
+#endif
+       ;
 
 
 
@@ -421,7 +427,7 @@ static int restore_sectors(char *dev)
                return 0;
        }
        if (!(ss = (char *) malloc(statbuf.st_size))) {
-               errorMsg("out of memory?\n");
+               errorMsg(memory_exhausted, "sfdisk");
                return 0;
        }
        fdin = open(restore_sector_file, O_RDONLY);
diff --git a/sh.c b/sh.c
index b96b46456814a4e36e6d5d9458c2b39fbf06f7d0..e446ad1132b6dcfd1702ac52d9495bcadb464994 100644 (file)
--- a/sh.c
+++ b/sh.c
@@ -127,8 +127,11 @@ static struct builtInCommand bltins[] = {
 
 static const char shell_usage[] =
 
-       "sh [FILE]...\n\n" "The BusyBox command interpreter (shell).\n\n";
-
+       "sh [FILE]...\n" 
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nlash: The BusyBox command interpreter (shell).\n\n"
+#endif
+       ;
 
 static char cwd[1024];
 static char *prompt = "# ";
index b96b46456814a4e36e6d5d9458c2b39fbf06f7d0..e446ad1132b6dcfd1702ac52d9495bcadb464994 100644 (file)
@@ -127,8 +127,11 @@ static struct builtInCommand bltins[] = {
 
 static const char shell_usage[] =
 
-       "sh [FILE]...\n\n" "The BusyBox command interpreter (shell).\n\n";
-
+       "sh [FILE]...\n" 
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nlash: The BusyBox command interpreter (shell).\n\n"
+#endif
+       ;
 
 static char cwd[1024];
 static char *prompt = "# ";
diff --git a/sleep.c b/sleep.c
index 9687b84460300917a26d743d0ce283d3992b81b5..13f07c02feab2990cb1b601109e756f9d9486e23 100644 (file)
--- a/sleep.c
+++ b/sleep.c
 #include "internal.h"
 #include <stdio.h>
 
-const char sleep_usage[] = "sleep N\n\n" "Pause for N seconds.\n";
+const char sleep_usage[] = "sleep N\n" 
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPause for N seconds.\n"
+#endif
+       ;
 
 extern int sleep_main(int argc, char **argv)
 {
diff --git a/sort.c b/sort.c
index 49eb4fd728b8eb325e905416de31f31daf9b8edb..1edc7d1caa4f3dcc510abb628601388e7a799099 100644 (file)
--- a/sort.c
+++ b/sort.c
@@ -33,7 +33,11 @@ static const char sort_usage[] = "sort [-n]"
 #ifdef BB_FEATURE_SORT_REVERSE
 " [-r]"
 #endif
-" [FILE]...\n\nSorts lines of text in the specified files\n";
+" [FILE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+"\nSorts lines of text in the specified files\n"
+#endif
+;
 
 #ifdef BB_FEATURE_SORT_REVERSE
 #define APPLY_REVERSE(x) (reverse ? -(x) : (x))
@@ -300,4 +304,4 @@ int sort_main(int argc, char **argv)
        exit(0);
 }
 
-/* $Id: sort.c,v 1.15 2000/04/17 04:22:09 beppu Exp $ */
+/* $Id: sort.c,v 1.16 2000/05/12 19:41:47 erik Exp $ */
index aa961dac935aa820c32924e74ca82a2fdfeb82c1..0f8c4f5f349b010aefb2722083d2f8f30deb1d11 100644 (file)
@@ -36,16 +36,22 @@ static int whichApp;
 static const char *appName;
 
 static const char swapoff_usage[] =
-       "swapoff [OPTION] [device]\n\n"
-       "Stop swapping virtual memory pages on the given device.\n\n"
+       "swapoff [OPTION] [device]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nStop swapping virtual memory pages on the given device.\n\n"
        "Options:\n"
-       "\t-a\tStop swapping on all swap devices\n";
+       "\t-a\tStop swapping on all swap devices\n"
+#endif
+       ;
 
 static const char swapon_usage[] =
-       "swapon [OPTION] [device]\n\n"
-       "Start swapping virtual memory pages on the given device.\n\n"
+       "swapon [OPTION] [device]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nStart swapping virtual memory pages on the given device.\n\n"
        "Options:\n"
-       "\t-a\tStart swapping on all swap devices\n";
+       "\t-a\tStart swapping on all swap devices\n"
+#endif
+       ;
 
 
 #define SWAPON_APP   1
diff --git a/sync.c b/sync.c
index f8160c8dcb42e1fdbd1067a3668c95dadd5564d6..33c79228d7108f5398aee9492cd9824f8dccd3ce 100644 (file)
--- a/sync.c
+++ b/sync.c
 extern int sync_main(int argc, char **argv)
 {
        if (argc > 1 && **(argv + 1) == '-') {
-               usage("sync\n\nWrite all buffered filesystem blocks to disk.\n");
+               usage("sync\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                               "\nWrite all buffered filesystem blocks to disk.\n"
+#endif
+                               );
        }
        exit(sync());
 }
index db6d9bfc5883747493cc69be5ce8948afcf79c23..118a5ded053fc742c2c4f92c5af447b123652d0a 100644 (file)
@@ -48,14 +48,17 @@ extern CODE facilitynames[];
 #endif
 
 static const char logger_usage[] =
-       "logger [OPTION]... [MESSAGE]\n\n"
-       "Write MESSAGE to the system log.  If MESSAGE is '-', log stdin.\n\n"
+       "logger [OPTION]... [MESSAGE]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nWrite MESSAGE to the system log.  If MESSAGE is '-', log stdin.\n\n"
        "Options:\n"
        "\t-s\tLog to stderr as well as the system log.\n"
        "\t-t\tLog using the specified tag (defaults to user name).\n"
 
        "\t-p\tEnter the message with the specified priority.\n"
-       "\t\tThis may be numerical or a ``facility.level'' pair.\n";
+       "\t\tThis may be numerical or a ``facility.level'' pair.\n"
+#endif
+       ;
 
 
 /* Decode a symbolic name to a numeric value 
index cacb629e9fcb446070c85fa4f8e678a50862184f..faa6f15e9b6fb8dfe6ffce32be5087999a275a41 100644 (file)
@@ -64,8 +64,9 @@ static int MarkInterval = 20 * 60;
 static char LocalHostName[32];
 
 static const char syslogd_usage[] =
-       "syslogd [OPTION]...\n\n"
-       "Linux system and kernel (provides klogd) logging utility.\n"
+       "syslogd [OPTION]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nLinux system and kernel (provides klogd) logging utility.\n"
        "Note that this version of syslogd/klogd ignores /etc/syslog.conf.\n\n"
        "Options:\n"
        "\t-m\tChange the mark timestamp interval. default=20min. 0=off\n"
@@ -73,7 +74,9 @@ static const char syslogd_usage[] =
 #ifdef BB_KLOGD
        "\t-K\tDo not start up the klogd process (by default syslogd spawns klogd).\n"
 #endif
-       "\t-O\tSpecify an alternate log file.  default=/var/log/messages\n";
+       "\t-O\tSpecify an alternate log file.  default=/var/log/messages\n"
+#endif
+       ;
 
 /* Note: There is also a function called "message()" in init.c */
 /* Print a message to the log file. */
index cacb629e9fcb446070c85fa4f8e678a50862184f..faa6f15e9b6fb8dfe6ffce32be5087999a275a41 100644 (file)
--- a/syslogd.c
+++ b/syslogd.c
@@ -64,8 +64,9 @@ static int MarkInterval = 20 * 60;
 static char LocalHostName[32];
 
 static const char syslogd_usage[] =
-       "syslogd [OPTION]...\n\n"
-       "Linux system and kernel (provides klogd) logging utility.\n"
+       "syslogd [OPTION]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nLinux system and kernel (provides klogd) logging utility.\n"
        "Note that this version of syslogd/klogd ignores /etc/syslog.conf.\n\n"
        "Options:\n"
        "\t-m\tChange the mark timestamp interval. default=20min. 0=off\n"
@@ -73,7 +74,9 @@ static const char syslogd_usage[] =
 #ifdef BB_KLOGD
        "\t-K\tDo not start up the klogd process (by default syslogd spawns klogd).\n"
 #endif
-       "\t-O\tSpecify an alternate log file.  default=/var/log/messages\n";
+       "\t-O\tSpecify an alternate log file.  default=/var/log/messages\n"
+#endif
+       ;
 
 /* Note: There is also a function called "message()" in init.c */
 /* Print a message to the log file. */
diff --git a/tail.c b/tail.c
index 321c5c4b25f63b3328dda0277ecaa39f0c11215e..3b3e2f56c10a7a311cb03a56492b802bd2ed5fdf 100644 (file)
--- a/tail.c
+++ b/tail.c
@@ -47,6 +47,9 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <ctype.h>
+#define BB_DECLARE_EXTERN
+#define bb_need_help
+#include "messages.c"
 
 
 #define XWRITE(fd, buffer, n_bytes)                                    \
@@ -70,15 +73,18 @@ static int forever;
 static int print_headers;
 
 const char tail_usage[] =
-       "tail [OPTION] [FILE]...\n\n"
-       "Print last 10 lines of each FILE to standard output.\n"
+       "tail [OPTION] [FILE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPrint last 10 lines of each FILE to standard output.\n"
        "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"
        "\t-n NUM\t\tPrint last NUM lines instead of first 10\n"
 
        "\t-f\t\tOutput data as the file grows.  This version\n"
-       "\t\t\tof 'tail -f' supports only one file at a time.\n";
+       "\t\t\tof 'tail -f' supports only one file at a time.\n"
+#endif
+       ;
 
 
 static void write_header(const char *filename)
@@ -512,9 +518,9 @@ char *program_name;
 static int have_read_stdin;
 
 
-static const char tail_usage[] = "tail [OPTION]... [FILE]...\n\
-\n\
-Print last 10 lines of each FILE to standard output.\n\
+static const char tail_usage[] = "tail [OPTION]... [FILE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+"\nPrint last 10 lines of each FILE to standard output.\n\
 With more than one FILE, precede each with a header giving the file name.\n\
 With no FILE, or when FILE is -, read standard input.\n\
 \n\
@@ -523,11 +529,12 @@ With no FILE, or when FILE is -, read standard input.\n\
   -n=N            output the last N lines, instead of last 10\n\
   -q              never output headers giving file names\n\
   -v              always output headers giving file names\n\
-  --help          display this help and exit\n\
 \n\
 If the first character of N (bytes or lines) is a `+', output begins with \n\
 the Nth item from the start of each file, otherwise, print the last N items\n\
-in the file.  N bytes may be suffixed by k (x1024), b (x512), or m (1024^2).\n\n";
+in the file.  N bytes may be suffixed by k (x1024), b (x512), or m (1024^2).\n"
+#endif
+;
 
 static void write_header(const char *filename, const char *comment)
 {
diff --git a/tar.c b/tar.c
index c82e51fe97fd98a6d5500a0cbdc3df91fb0cf763..6784d80ff0cd2ee05a5ca3f78233687267656ba5 100644 (file)
--- a/tar.c
+++ b/tar.c
@@ -60,8 +60,9 @@ static const char tar_usage[] =
 #if defined BB_FEATURE_TAR_EXCLUDE
        "[--exclude File] "
 #endif
-       "[-f tarFile] [FILE] ...\n\n"
-       "Create, extract, or list files from a tar file.  Note that\n"
+       "[-f tarFile] [FILE] ...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nCreate, extract, or list files from a tar file.  Note that\n"
        "this version of tar treats hard links as separate files.\n\n"
        "Main operation mode:\n"
 #ifdef BB_FEATURE_TAR_CREATE
@@ -77,6 +78,7 @@ static const char tar_usage[] =
 #endif
        "\nInformative output:\n"
        "\tv\t\tverbosely list files processed\n"
+#endif
        ;
 
 /* Tar file constants  */
diff --git a/tee.c b/tee.c
index 95b75edd7f3ada361ed7b034996e8938f6e64913..a78edc039348f3d1a938fab8d342c5280a56caa8 100644 (file)
--- a/tee.c
+++ b/tee.c
 #include <stdio.h>
 
 static const char tee_usage[] =
-       "tee [OPTION]... [FILE]...\n\n"
-       "Copy standard input to each FILE, and also to standard output.\n\n"
+       "tee [OPTION]... [FILE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nCopy standard input to each FILE, and also to standard output.\n\n"
        "Options:\n" "\t-a\tappend to the given FILEs, do not overwrite\n"
 #if 0
        "\t-i\tignore interrupt signals\n"
 #endif
+#endif
 ;
 
 
@@ -131,4 +133,4 @@ int tee_main(int argc, char **argv)
        exit(0);
 }
 
-/* $Id: tee.c,v 1.9 2000/04/13 01:18:56 erik Exp $ */
+/* $Id: tee.c,v 1.10 2000/05/12 19:41:47 erik Exp $ */
index 8c58521eb00bdd3897c4a7acc07a84b3b8211579..8b6d5f5dc28a1232ea4e52af0b5bd7ea23528f76 100644 (file)
--- a/telnet.c
+++ b/telnet.c
@@ -1,5 +1,5 @@
 /*
- * $Id: telnet.c,v 1.2 2000/05/01 19:10:52 erik Exp $
+ * $Id: telnet.c,v 1.3 2000/05/12 19:41:47 erik Exp $
  * Mini telnet implementation for busybox
  *
  * Copyright (C) 2000 by Randolph Chung <tausq@debian.org>
 
 static int STDIN = 0;
 static int STDOUT = 1;
-static const char *telnet_usage = "telnet host [port]\n\n";
+static const char *telnet_usage = "telnet host [port]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nProvides interactive communication with another\n"
+       "networked host using the TELNET protocol\n"
+#endif
+       ;
 static struct termios saved_tc;
 static unsigned char options[NTELOPTS];
 static char tr_state = 0; /* telnet send and receive state */
diff --git a/test.c b/test.c
index 0ed777194463130fb9e8cc92ec40513aaa2ef661..9b541e33ef8a7eaa7a96da11df46b4b97991206b 100644 (file)
--- a/test.c
+++ b/test.c
@@ -39,6 +39,9 @@
 #include <errno.h>
 #include <stdlib.h>
 #include <string.h>
+#define BB_DECLARE_EXTERN
+#define bb_need_help
+#include "messages.c"
 
 /* test(1) accepts the following grammar:
        oexpr   ::= aexpr | aexpr "-o" oexpr ;
@@ -185,11 +188,14 @@ test_main(int argc, char** argv)
                        fatalError("missing ]");
                argv[argc] = NULL;
        }
-       if (strcmp(argv[1], "--help") == 0) {
+       if (strcmp(argv[1], dash_dash_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");
+                         "or   [ EXPRESSION ]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                               "\nChecks file types and compares values returning an exit\n"
+                               "code determined by the value of EXPRESSION.\n"
+#endif
+                               );
        }
 
        /* Implement special cases from POSIX.2, section 4.62.4 */
diff --git a/touch.c b/touch.c
index f8972dcf6912ccdb42e07164716a92fef94b0e1e..2076928263da0a540f0a86133c984221726d9a06 100644 (file)
--- a/touch.c
+++ b/touch.c
 #include <errno.h>
 
 
-static const char touch_usage[] = "touch [-c] file [file ...]\n\n"
-
-       "Update the last-modified date on the given file[s].\n";
+static const char touch_usage[] = "touch [-c] file [file ...]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nUpdate the last-modified date on the given file[s].\n"
+#endif
+       ;
 
 
 
diff --git a/tty.c b/tty.c
index 6f98d1b797404ce25829c19d7567a42471d85509..3a318ebbab5f5c1a40ac04e748a1a9b2b9ca86fa 100644 (file)
--- a/tty.c
+++ b/tty.c
 #include <stdio.h>
 #include <sys/types.h>
 
-static const char tty_usage[] = "tty\n\n"
-       "Print the file name of the terminal connected to standard input.\n\n"
+static const char tty_usage[] = "tty\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPrint the file name of the terminal connected to standard input.\n\n"
        "Options:\n"
-       "\t-s\tprint nothing, only return an exit status\n";
+       "\t-s\tprint nothing, only return an exit status\n"
+#endif
+       ;
 
 extern int tty_main(int argc, char **argv)
 {
index 18a5afe8014a9e71ffb7ec364f38de56636ab97f..86833b717c544d582beb2ec42130fff7e1e5c9b8 100644 (file)
--- a/umount.c
+++ b/umount.c
 
 
 static const char umount_usage[] =
-       "umount [flags] filesystem|directory\n\n"
-       "Flags:\n" "\t-a:\tUnmount all file systems"
+       "umount [flags] filesystem|directory\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "Unmount file systems\n"
+       "\nFlags:\n" "\t-a:\tUnmount all file systems"
 #ifdef BB_MTAB
        " in /etc/mtab\n\t-n:\tDon't erase /etc/mtab entries\n"
 #else
@@ -44,6 +46,7 @@ static const char umount_usage[] =
 #if defined BB_FEATURE_MOUNT_LOOP
        "\t-l:\tDo not free loop device (if a loop device has been used)\n"
 #endif
+#endif
 ;
 
 struct _mtab_entry_t {
diff --git a/uniq.c b/uniq.c
index 0324856fd97ac360404a5b00591480a816ae7451..0cccbd5e7639774fc2a22a7b5419cc8932a05a64 100644 (file)
--- a/uniq.c
+++ b/uniq.c
 #include <errno.h>
 
 static const char uniq_usage[] =
-       "uniq [OPTION]... [INPUT [OUTPUT]]\n\n"
-       "Discard all but one of successive identical lines from INPUT\n"
-       "(or standard input), writing to OUTPUT (or standard output).\n";
+       "uniq [OPTION]... [INPUT [OUTPUT]]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nDiscard all but one of successive identical lines from INPUT\n"
+       "(or standard input), writing to OUTPUT (or standard output).\n"
+#endif
+       ;
 
 /* max chars in line */
 #define UNIQ_MAX 4096
@@ -184,4 +187,4 @@ int uniq_main(int argc, char **argv)
        exit(0);
 }
 
-/* $Id: uniq.c,v 1.9 2000/04/17 16:16:10 erik Exp $ */
+/* $Id: uniq.c,v 1.10 2000/05/12 19:41:47 erik Exp $ */
index 18b13e8c96ac224c12bd1d654971e6be7439ccd2..14f1d3c2081dcfaa3268b167a55f72fe821665f3 100644 (file)
--- a/update.c
+++ b/update.c
@@ -35,12 +35,15 @@ _syscall2(int, bdflush, int, func, int, data);
 #endif                                                 /* __GLIBC__ */
 
 static char update_usage[] =
-       "update [options]\n\n"
-       "Periodically flushes filesystem buffers.\n\n"
+       "update [options]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPeriodically flushes filesystem buffers.\n\n"
        "Options:\n"
        "\t-S\tforce use of sync(2) instead of flushing\n"
        "\t-s SECS\tcall sync this often (default 30)\n"
-       "\t-f SECS\tflush some buffers this often (default 5)\n";
+       "\t-f SECS\tflush some buffers this often (default 5)\n"
+#endif
+       ;
 
 static unsigned int sync_duration = 30;
 static unsigned int flush_duration = 5;
index dcb40d65a2d7e22eac288bb75d1d1abbf350cdac..34008a638aab4fe683a209c1910a3c4a4697d268 100644 (file)
--- a/usleep.c
+++ b/usleep.c
 #include <stdlib.h>
 #include <unistd.h>
 
-const char usleep_usage[] = "usleep N\n\n" "Pause for N microseconds.\n";
+const char usleep_usage[] = "usleep N\n" 
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPause for N microseconds.\n"
+#endif
+       ;
 
 extern int usleep_main(int argc, char **argv)
 {
index 4e5609e4181c4eacf8e516317ba6e4cf7e01ccda..de4c82425fcf6f3396183d92deb8a8276444d9cc 100644 (file)
@@ -105,9 +105,9 @@ struct cmdoptions_t {
        "-vsync", 1, CMD_VSYNC}, {
        "-laced", 1, CMD_LACED}, {
        "-double", 1, CMD_DOUBLE}, {
-       "--help", 0, CMD_HELP}, {
+       "-help", 0, CMD_HELP}, {
 #ifdef BB_FEATURE_FBSET_FANCY
-       "--help", 0, CMD_HELP}, {
+       "-help", 0, CMD_HELP}, {
        "-all", 0, CMD_ALL}, {
        "-xres", 1, CMD_XRES}, {
        "-yres", 1, CMD_YRES}, {
@@ -115,7 +115,7 @@ struct cmdoptions_t {
        "-vyres", 1, CMD_VYRES}, {
        "-depth", 1, CMD_DEPTH}, {
        "-match", 0, CMD_MATCH}, {
-       "--geometry", 5, CMD_GEOMETRY}, {
+       "-geometry", 5, CMD_GEOMETRY}, {
        "-pixclock", 1, CMD_PIXCLOCK}, {
        "-left", 1, CMD_LEFT}, {
        "-right", 1, CMD_RIGHT}, {
@@ -123,7 +123,7 @@ struct cmdoptions_t {
        "-lower", 1, CMD_LOWER}, {
        "-hslen", 1, CMD_HSLEN}, {
        "-vslen", 1, CMD_VSLEN}, {
-       "--timings", 7, CMD_TIMING}, {
+       "-timings", 7, CMD_TIMING}, {
        "-csync", 1, CMD_CSYNC}, {
        "-gsync", 1, CMD_GSYNC}, {
        "-extsync", 1, CMD_EXTSYNC}, {
@@ -221,17 +221,21 @@ static void showmode(struct fb_var_screeninfo *v)
 
 static void fbset_usage(void)
 {
+#ifndef BB_FEATURE_TRIVIAL_HELP
        int i;
+#endif
 
 #ifndef STANDALONE
        fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n",
                        BB_VER, BB_BT);
 #endif
-       fprintf(stderr, "Usage: fbset [options] [mode]\n\n");
-       fprintf(stderr, "Show and modify frame buffer device settings\n\n");
+       fprintf(stderr, "Usage: fbset [options] [mode]\n");
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       fprintf(stderr, "\nShows and modifies frame buffer device settings\n\n");
        fprintf(stderr, "The following options are recognized:\n");
        for (i = 0; g_cmdoptions[i].name; i++)
                fprintf(stderr, "\t%s\n", g_cmdoptions[i].name);
+#endif
        exit(-1);
 }
 
index 56ea2244d7444189fb2b13c16325c608268a695e..4ec0a8886b9a6dfe35ff9a31c64e82afb488a677 100644 (file)
@@ -34,7 +34,11 @@ extern int fdflush_main(int argc, char **argv)
        int fd;
 
        if (argc <= 1 || **(++argv) == '-') {
-               usage("fdflush device\n\nForce floppy disk drive to detect disk change\n");
+               usage("fdflush DEVICE\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                               "\nForces floppy disk drive to detect disk change\n"
+#endif
+                               );
        }
 
        fd = open(*argv, 0);
index d373bcbf79f3d8a7e5725c5b295b6d028cf2d580..4106cf1444724e2adfa02403872d3e9a924a031d 100644 (file)
 
 
 static const char freeramdisk_usage[] =
-       "freeramdisk DEVICE\n\n"
-       "Free all memory used by the specified ramdisk.\n";
+       "freeramdisk DEVICE\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nFrees all memory used by the specified ramdisk.\n"
+#endif
+       ;
 
 extern int
 freeramdisk_main(int argc, char **argv)
index c890dff7d3aca0175299f8e8f6e20f2e7ff04533..7d27566b8579caedb1d4e7451d8ca1308feac635 100644 (file)
@@ -198,9 +198,10 @@ static void show_usage(void)
 {
        fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n",
                        BB_VER, BB_BT);
-       fprintf(stderr, "Usage: %s [-larvsmf] /dev/name\n\n", program_name);
+       fprintf(stderr, "Usage: %s [-larvsmf] /dev/name\n", program_name);
+#ifndef BB_FEATURE_TRIVIAL_HELP
        fprintf(stderr,
-                       "Performs a consistency check for MINIX filesystems.\n\n");
+                       "\nPerforms a consistency check for MINIX filesystems.\n\n");
        fprintf(stderr, "OPTIONS:\n");
        fprintf(stderr, "\t-l\tLists all filenames\n");
        fprintf(stderr, "\t-r\tPerform interactive repairs\n");
@@ -210,6 +211,7 @@ static void show_usage(void)
        fprintf(stderr,
                        "\t-m\tActivates MINIX-like \"mode not cleared\" warnings\n");
        fprintf(stderr, "\t-f\tForce file system check.\n\n");
+#endif
        leave(16);
 }
 
index be180a46ba850a8764512b1a8e0cd41df062b7f1..bf4bda9fd5ef7c85adce44fd5a305bfaa255593e 100644 (file)
@@ -179,9 +179,10 @@ static volatile void show_usage()
        fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n",
                        BB_VER, BB_BT);
        fprintf(stderr,
-                       "Usage: %s [-c | -l filename] [-nXX] [-iXX] /dev/name [blocks]\n\n",
+                       "Usage: %s [-c | -l filename] [-nXX] [-iXX] /dev/name [blocks]\n",
                        program_name);
-       fprintf(stderr, "Make a MINIX filesystem.\n\n");
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       fprintf(stderr, "\nMake a MINIX filesystem.\n\n");
        fprintf(stderr, "OPTIONS:\n");
        fprintf(stderr, "\t-c\t\tCheck the device for bad blocks\n");
        fprintf(stderr,
@@ -191,6 +192,7 @@ static volatile void show_usage()
        fprintf(stderr,
                        "\t-l FILENAME\tRead the bad blocks list from FILENAME\n");
        fprintf(stderr, "\t-v\t\tMake a Minix version 2 filesystem\n\n");
+#endif
        exit(16);
 }
 
index 17866a735324522ab7d439906d8fa2b858860809..7d76916f03be073d2bc8deb9d379963fb84c7ff3 100644 (file)
 
 
 static const char mkswap_usage[] =
-       "mkswap [-c] [-v0|-v1] device [block-count]\n\n"
-       "Prepare a disk partition to be used as a swap partition.\n\n"
+       "mkswap [-c] [-v0|-v1] device [block-count]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPrepare a disk partition to be used as a swap partition.\n\n"
        "Options:\n" "\t-c\t\tCheck for read-ability.\n"
        "\t-v0\t\tMake version 0 swap [max 128 Megs].\n"
        "\t-v1\t\tMake version 1 swap [big!] (default for kernels > 2.1.117).\n"
 
-       "\tblock-count\tNumber of block to use (default is entire partition).\n";
+       "\tblock-count\tNumber of block to use (default is entire partition).\n"
+#endif
+       ;
 
 
 #ifndef _IO
index 30d2757cd240eab68b1991e4894e0b92947075c2..50446861e9249dad7d8d1474152af6c9516ebb9d 100644 (file)
 #include <fcntl.h>
 #include <signal.h>
 #include <sys/ioctl.h>
+#define BB_DECLARE_EXTERN
+#define bb_need_help
+#include "messages.c"
 
-static const char more_usage[] = "more [file ...]\n";
+static const char more_usage[] = "more [FILE ...]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nMore is a filter for viewing FILE one screenful at a time.\n"
+#endif
+       ;
 
 /* ED: sparc termios is broken: revert back to old termio handling. */
 #ifdef BB_FEATURE_USE_TERMIOS
@@ -92,7 +99,7 @@ extern int more_main(int argc, char **argv)
        argv++;
 
        if (argc > 0
-               && (strcmp(*argv, "--help") == 0 || strcmp(*argv, "-h") == 0)) {
+               && (strcmp(*argv, dash_dash_help) == 0 || strcmp(*argv, "-h") == 0)) {
                usage(more_usage);
        }
        do {
index 00a774a53f2e8cc9ed09ea04f208acb1934e64c1..bde55d155f99ab6cecb68edee7679131e5bab197 100644 (file)
@@ -64,10 +64,12 @@ static int use_loop = FALSE;
 
 extern const char mtab_file[]; /* Defined in utility.c */
 
-static const char mount_usage[] = "\tmount [flags]\n"
-       "\tmount [flags] device directory [-o options,more-options]\n"
-       "\n" "Flags:\n" 
-       "\t-a:\t\tMount all file systems in fstab.\n"
+static const char mount_usage[] = 
+       "mount [flags] device directory [-o options,more-options]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nMount a filesystem\n\n"
+       "Flags:\n" 
+       "\t-a:\t\tMount all filesystems in fstab.\n"
 #ifdef BB_MTAB
        "\t-f:\t\t\"Fake\" mount. Add entry to mount table but don't mount it.\n"
        "\t-n:\t\tDon't write a mount table entry.\n"
@@ -88,8 +90,10 @@ static const char mount_usage[] = "\tmount [flags]\n"
        "\tsuid/nosuid:\tAllow set-user-id-root programs / disallow them.\n"
        "\tremount:\tRe-mount a currently-mounted filesystem, changing its flags.\n"
        "\tro/rw:\t\tMount for read-only / read-write.\n"
-       "There are EVEN MORE flags that are specific to each filesystem.\n"
-       "You'll have to see the written documentation for those.\n";
+       "\nThere are EVEN MORE flags that are specific to each filesystem.\n"
+       "You'll have to see the written documentation for those.\n"
+#endif
+       ;
 
 
 struct mount_options {
@@ -451,7 +455,7 @@ extern int mount_main(int argc, char **argv)
                        fatalError( "\nCannot read /etc/fstab: %s\n", strerror (errno));
 
                while ((m = getmntent(f)) != NULL) {
-                       // If the file system isn't noauto, 
+                       // If the filesystem isn't noauto, 
                        // and isn't swap or nfs, then mount it
                        if ((!strstr(m->mnt_opts, "noauto")) &&
                                (!strstr(m->mnt_type, "swap")) &&
index aa961dac935aa820c32924e74ca82a2fdfeb82c1..0f8c4f5f349b010aefb2722083d2f8f30deb1d11 100644 (file)
@@ -36,16 +36,22 @@ static int whichApp;
 static const char *appName;
 
 static const char swapoff_usage[] =
-       "swapoff [OPTION] [device]\n\n"
-       "Stop swapping virtual memory pages on the given device.\n\n"
+       "swapoff [OPTION] [device]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nStop swapping virtual memory pages on the given device.\n\n"
        "Options:\n"
-       "\t-a\tStop swapping on all swap devices\n";
+       "\t-a\tStop swapping on all swap devices\n"
+#endif
+       ;
 
 static const char swapon_usage[] =
-       "swapon [OPTION] [device]\n\n"
-       "Start swapping virtual memory pages on the given device.\n\n"
+       "swapon [OPTION] [device]\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nStart swapping virtual memory pages on the given device.\n\n"
        "Options:\n"
-       "\t-a\tStart swapping on all swap devices\n";
+       "\t-a\tStart swapping on all swap devices\n"
+#endif
+       ;
 
 
 #define SWAPON_APP   1
index 18a5afe8014a9e71ffb7ec364f38de56636ab97f..86833b717c544d582beb2ec42130fff7e1e5c9b8 100644 (file)
 
 
 static const char umount_usage[] =
-       "umount [flags] filesystem|directory\n\n"
-       "Flags:\n" "\t-a:\tUnmount all file systems"
+       "umount [flags] filesystem|directory\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "Unmount file systems\n"
+       "\nFlags:\n" "\t-a:\tUnmount all file systems"
 #ifdef BB_MTAB
        " in /etc/mtab\n\t-n:\tDon't erase /etc/mtab entries\n"
 #else
@@ -44,6 +46,7 @@ static const char umount_usage[] =
 #if defined BB_FEATURE_MOUNT_LOOP
        "\t-l:\tDo not free loop device (if a loop device has been used)\n"
 #endif
+#endif
 ;
 
 struct _mtab_entry_t {
index 5899fe954370aa8d4fbf747e81991164593ba9bd..11ee7c68017bae7cfe99fe7fa054b4ef6a948fca 100644 (file)
--- a/utility.c
+++ b/utility.c
@@ -33,6 +33,7 @@
  || defined (BB_INSMOD)
 /* same conditions as recursiveAction */
 #define bb_need_name_too_long
+#define bb_need_memory_exhausted
 #endif
 #define BB_DECLARE_EXTERN
 #include "messages.c"
@@ -111,7 +112,6 @@ extern void fatalError(const char *s, ...)
        exit( FALSE);
 }
 
-#if defined BB_INIT
 /* Returns kernel version encoded as major*65536 + minor*256 + patch,
  * so, for example,  to check if the kernel is greater than 2.2.11:
  *     if (get_kernel_revision() <= 2*65536+2*256+11) { <stuff> }
@@ -128,9 +128,7 @@ extern int get_kernel_revision(void)
        sscanf(name.version, "%d.%d.%d", &major, &minor, &patch);
        return major * 65536 + minor * 256 + patch;
 }
-#endif                                                 /* BB_INIT */
 
-#if defined (BB_CP_MV) || defined (BB_DU)
 
 #define HASH_SIZE      311             /* Should be prime */
 #define hash_inode(i)  ((i) % HASH_SIZE)
@@ -197,9 +195,7 @@ void reset_ino_dev_hashtable(void)
        }
 }
 
-#endif /* BB_CP_MV || BB_DU */
 
-#if defined (BB_CP_MV) || defined (BB_DU) || defined (BB_LN)
 /*
  * Return TRUE if a fileName is a directory.
  * Nonexistant files return FALSE.
@@ -230,9 +226,7 @@ int isDirectory(const char *fileName, const int followLinks, struct stat *statBu
        }
        return status;
 }
-#endif
 
-#if defined (BB_CP_MV)
 /*
  * Copy one file to another, while possibly preserving its modes, times, and
  * modes.  Returns TRUE if successful, or FALSE on a failure with an error
@@ -382,11 +376,8 @@ copyFile(const char *srcName, const char *destName,
 
        return FALSE;
 }
-#endif                                                 /* BB_CP_MV */
-
 
 
-#if defined BB_TAR || defined BB_LS
 
 #define TYPEINDEX(mode) (((mode) >> 12) & 0x0f)
 #define TYPECHAR(mode)  ("0pcCd?bB-?l?s???" [TYPEINDEX(mode)])
@@ -429,10 +420,8 @@ const char *modeString(int mode)
        }
        return buf;
 }
-#endif                                                 /* BB_TAR || BB_LS */
 
 
-#if defined BB_TAR
 /*
  * Return the standard ls-like time string from a time_t
  * This is static and so is overwritten on each call.
@@ -457,9 +446,7 @@ const char *timeString(time_t timeVal)
 
        return buf;
 }
-#endif                                                 /* BB_TAR */
 
-#if defined BB_TAR || defined BB_CP_MV
 /*
  * Write all of the supplied buffer out to a file.
  * This does multiple writes as necessary.
@@ -485,10 +472,8 @@ int fullWrite(int fd, const char *buf, int len)
 
        return total;
 }
-#endif                                                 /* BB_TAR || BB_CP_MV */
 
 
-#if defined BB_TAR || defined BB_TAIL
 /*
  * Read all of the supplied buffer from a file.
  * This does multiple reads as necessary.
@@ -518,16 +503,8 @@ int fullRead(int fd, char *buf, int len)
 
        return total;
 }
-#endif                                                 /* BB_TAR || BB_TAIL */
 
 
-#if defined (BB_CHMOD_CHOWN_CHGRP) \
- || defined (BB_CP_MV)                 \
- || defined (BB_FIND)                  \
- || defined (BB_INSMOD)                        \
- || defined (BB_RM)                            \
- || defined (BB_TAR)
-
 /*
  * Walk down all the directories under the specified 
  * location, and do something (something specified
@@ -640,11 +617,9 @@ int recursiveAction(const char *fileName,
        return TRUE;
 }
 
-#endif                                                 /* BB_CHMOD_CHOWN_CHGRP || BB_CP_MV || BB_FIND || BB_LS || BB_INSMOD */
 
 
 
-#if defined (BB_TAR) || defined (BB_MKDIR)
 /*
  * Attempt to create the directories along the specified path, except for
  * the final component.  The mode is given for the final directory only,
@@ -674,15 +649,10 @@ extern int createPath(const char *name, int mode)
        }
        return TRUE;
 }
-#endif                                                 /* BB_TAR || BB_MKDIR */
 
 
 
-#if defined (BB_CHMOD_CHOWN_CHGRP) || defined (BB_MKDIR)
 /* [ugoa]{+|-|=}[rwxst] */
-
-
-
 extern int parse_mode(const char *s, mode_t * theMode)
 {
        mode_t andMode =
@@ -775,14 +745,9 @@ extern int parse_mode(const char *s, mode_t * theMode)
 }
 
 
-#endif                                                 /* BB_CHMOD_CHOWN_CHGRP || BB_MKDIR */
-
-
 
 
 
-#if defined BB_CHMOD_CHOWN_CHGRP || defined BB_PS || defined BB_LS || defined BB_TAR || defined BB_ID 
-
 /* This parses entries in /etc/passwd and /etc/group.  This is desirable
  * for BusyBox, since we want to avoid using the glibc NSS stuff, which
  * increases target size and is often not needed or wanted for embedded
@@ -887,10 +852,6 @@ gid_t my_getpwnamegid(char *name)
        return gid;
 }
 
-#endif /* BB_CHMOD_CHOWN_CHGRP || BB_PS || BB_LS || BB_TAR || BB_ID */ 
-
-
-#if (defined BB_CHVT) || (defined BB_DEALLOCVT)
 
 
 #include <linux/kd.h>
@@ -975,11 +936,9 @@ int get_console_fd(char *tty_name)
 }
 
 
-#endif                                                 /* BB_CHVT || BB_DEALLOCVT */
 
 
-#if !defined BB_REGEXP && (defined BB_GREP || defined BB_SED)
-
+#if !defined BB_REGEXP
 /* Do a case insensitive strstr() */
 char *stristr(char *haystack, const char *needle)
 {
@@ -1050,11 +1009,9 @@ extern int replace_match(char *haystack, char *needle, char *newNeedle,
        else
                return FALSE;
 }
-
-#endif                                                 /* ! BB_REGEXP && (BB_GREP || BB_SED) */
+#endif                                                 /* ! BB_REGEXP */
 
 
-#if defined BB_FIND
 /*
  * Routine to see if a text string is matched by a wildcard pattern.
  * Returns TRUE if the text is matched, or FALSE if it is not matched
@@ -1154,12 +1111,10 @@ extern int check_wildcard_match(const char *text, const char *pattern)
 
        return TRUE;
 }
-#endif                                                 /* BB_FIND */
 
 
 
 
-#if defined BB_DF || defined BB_MTAB
 /*
  * Given a block device, find the mount table entry if that block device
  * is mounted.
@@ -1198,11 +1153,9 @@ extern struct mntent *findMountPoint(const char *name, const char *table)
        endmntent(mountTable);
        return mountEntry;
 }
-#endif                                                 /* BB_DF || BB_MTAB */
 
 
 
-#if defined BB_DD || defined BB_TAIL
 /*
  * Read a number with a possible multiplier.
  * Returns -1 if the number format is illegal.
@@ -1249,10 +1202,8 @@ extern long getNum(const char *cp)
 
        return value;
 }
-#endif                                                 /* BB_DD || BB_TAIL */
 
 
-#if defined BB_INIT || defined BB_SYSLOGD
 /* try to open up the specified device */
 extern int device_open(char *device, int mode)
 {
@@ -1271,15 +1222,11 @@ extern int device_open(char *device, int mode)
                fcntl(fd, F_SETFL, mode);
        return fd;
 }
-#endif                                                 /* BB_INIT BB_SYSLOGD */
 
 
-#if defined BB_KILLALL || ( defined BB_FEATURE_LINUXRC && ( defined BB_HALT || defined BB_REBOOT || defined BB_POWEROFF ))
 #ifdef BB_FEATURE_USE_DEVPS_PATCH
 #include <linux/devps.h>
-#endif
 
-#if defined BB_FEATURE_USE_DEVPS_PATCH
 /* findPidByName()
  *  
  *  This finds the pid of the specified process,
@@ -1336,7 +1283,7 @@ extern pid_t* findPidByName( char* pidName)
                                && (strlen(pidName) == strlen(info.command_line))) {
                        pidList=realloc( pidList, sizeof(pid_t) * (j+2));
                        if (pidList==NULL)
-                               fatalError("out of memory\n");
+                               fatalError(memory_exhausted, "");
                        pidList[j++]=info.pid;
                }
        }
@@ -1409,7 +1356,7 @@ extern pid_t* findPidByName( char* pidName)
                                && (strlen(pidName) == strlen(p))) {
                        pidList=realloc( pidList, sizeof(pid_t) * (i+2));
                        if (pidList==NULL)
-                               fatalError("out of memory\n");
+                               fatalError(memory_exhausted, "");
                        pidList[i++]=strtol(next->d_name, NULL, 0);
                }
        }
@@ -1418,7 +1365,6 @@ extern pid_t* findPidByName( char* pidName)
        return pidList;
 }
 #endif                                                 /* BB_FEATURE_USE_DEVPS_PATCH */
-#endif                                                 /* BB_KILLALL || ( BB_FEATURE_LINUXRC && ( BB_HALT || BB_REBOOT || BB_POWEROFF )) */
 
 /* this should really be farmed out to libbusybox.a */
 extern void *xmalloc(size_t size)
@@ -1426,11 +1372,11 @@ extern void *xmalloc(size_t size)
        void *cp = malloc(size);
 
        if (cp == NULL)
-               fatalError("out of memory\n");
+               fatalError(memory_exhausted, "");
        return cp;
 }
 
-#if (__GLIBC__ < 2) && (defined BB_SYSLOGD || defined BB_INIT)
+#if (__GLIBC__ < 2)
 extern int vdprintf(int d, const char *format, va_list ap)
 {
        char buf[BUF_SIZE];
@@ -1439,9 +1385,8 @@ extern int vdprintf(int d, const char *format, va_list ap)
        len = vsprintf(buf, format, ap);
        return write(d, buf, len);
 }
-#endif                                                 /* BB_SYSLOGD */
+#endif
 
-#if defined BB_FEATURE_MOUNT_LOOP
 extern int del_loop(const char *device)
 {
        int fd;
@@ -1525,9 +1470,7 @@ extern char *find_unused_loop_device(void)
        }
        return NULL;
 }
-#endif                                                 /* BB_FEATURE_MOUNT_LOOP */
 
-#if defined BB_MOUNT || defined BB_DF || ( defined BB_UMOUNT && ! defined BB_MTAB)
 extern int find_real_root_device_name(char* name)
 {
        DIR *dir;
@@ -1569,7 +1512,6 @@ extern int find_real_root_device_name(char* name)
 
        return( FALSE);
 }
-#endif
 
 const unsigned int CSTRING_BUFFER_LENGTH = 128;
 /* recursive parser that returns cstrings of arbitrary length
diff --git a/wc.c b/wc.c
index 030afa9d60c92b8ab537ba71efd8770ba6061886..57bc7135a247591c258c20fdd951252a7afed398 100644 (file)
--- a/wc.c
+++ b/wc.c
 #include "internal.h"
 #include <stdio.h>
 
-static const char wc_usage[] = "wc [OPTION]... [FILE]...\n\n"
-       "Print line, word, and byte counts for each FILE, and a total line if\n"
+static const char wc_usage[] = "wc [OPTION]... [FILE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPrint line, word, and byte counts for each FILE, and a total line if\n"
        "more than one FILE is specified.  With no FILE, read standard input.\n\n"
        "Options:\n"
        "\t-c\tprint the byte counts\n"
        "\t-l\tprint the newline counts\n"
 
        "\t-L\tprint the length of the longest line\n"
-       "\t-w\tprint the word counts\n";
+       "\t-w\tprint the word counts\n"
+#endif
+       ;
 
 static int total_lines, total_words, total_chars, max_length;
 static int print_lines, print_words, print_chars, print_length;
index f9d3f286a995678b324d50081c4bc4628be2b96f..da584790d83e1e5c4ccc33263acf0084f5f50c3d 100644 (file)
--- a/whoami.c
+++ b/whoami.c
 #include <stdio.h>
 #include <pwd.h>
 
-static const char whoami_usage[] = "whoami\n\n"
-       "Prints the user name associated with the current effective user id.\n";
+static const char whoami_usage[] = "whoami\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPrints the user name associated with the current effective user id.\n"
+#endif
+       ;
 
 extern int whoami_main(int argc, char **argv)
 {
diff --git a/yes.c b/yes.c
index a822ebc1d4e019b4be1347e15e575521758b4106..97b6f653cd4b0df3f186f632051d9819984ad05d 100644 (file)
--- a/yes.c
+++ b/yes.c
@@ -28,8 +28,11 @@ extern int yes_main(int argc, char **argv)
        int i;
 
        if (argc >=1 && *argv[1]=='-') {
-               usage("yes [OPTION]... [STRING]...\n\n"
-                               "Repeatedly outputs a line with all specified STRING(s), or `y'.\n");
+               usage("yes [OPTION]... [STRING]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+                               "\nRepeatedly outputs a line with all specified STRING(s), or `y'.\n"
+#endif
+                               );
        }
 
        if (argc == 1) {