diff --git a/busybox.c b/busybox.c
index e2c2e03..8bbe6a2 100644
--- a/busybox.c
+++ b/busybox.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
 #include "internal.h"
 #include <stdio.h>
 #include <string.h>
@@ -16,329 +17,342 @@
  * replacement may be in order 
  */
 #if 0
-void exit (int status) __attribute__ ((noreturn));
-void exit (int status) { _exit(status); };
-void abort (void) __attribute__ ((__noreturn__));
-void abort (void) { _exit(0); };
-int atexit (void (*__func) (void)) { _exit(0); };
+void exit(int status) __attribute__ ((noreturn));
+void exit(int status)
+{
+	_exit(status);
+};
+void abort(void) __attribute__ ((__noreturn__));
+void abort(void)
+{
+	_exit(0);
+};
+int atexit(void (*__func) (void))
+{
+	_exit(0);
+};
 void *__libc_stack_end;
 #endif
 
 
 static const struct Applet applets[] = {
 
-#ifdef BB_BUSYBOX		//bin
-    {"busybox", busybox_main},
+#ifdef BB_BUSYBOX				//bin
+	{"busybox", busybox_main},
 #endif
-#ifdef BB_BLOCK_DEVICE		//sbin
-    {"block_device", block_device_main},
+#ifdef BB_BLOCK_DEVICE			//sbin
+	{"block_device", block_device_main},
 #endif
-#ifdef BB_CAT			//bin
-    {"cat", cat_main},
+#ifdef BB_CAT					//bin
+	{"cat", cat_main},
 #endif
-#ifdef BB_CHMOD_CHOWN_CHGRP	//bin
-    {"chmod", chmod_chown_chgrp_main},
-    {"chown", chmod_chown_chgrp_main},
-    {"chgrp", chmod_chown_chgrp_main},
+#ifdef BB_CHMOD_CHOWN_CHGRP		//bin
+	{"chmod", chmod_chown_chgrp_main},
+	{"chown", chmod_chown_chgrp_main},
+	{"chgrp", chmod_chown_chgrp_main},
 #endif
-#ifdef BB_CHROOT		//sbin
-    {"chroot", chroot_main},
+#ifdef BB_CHROOT				//sbin
+	{"chroot", chroot_main},
 #endif
-#ifdef BB_CLEAR			//usr/bin
-    {"clear", clear_main},
+#ifdef BB_CLEAR					//usr/bin
+	{"clear", clear_main},
 #endif
-#ifdef BB_CHVT			//usr/bin
-    {"chvt", chvt_main},
+#ifdef BB_CHVT					//usr/bin
+	{"chvt", chvt_main},
 #endif
-#ifdef BB_CP_MV			//bin
-    {"cp", cp_mv_main},
-    {"mv", cp_mv_main},
+#ifdef BB_CP_MV					//bin
+	{"cp", cp_mv_main},
+	{"mv", cp_mv_main},
 #endif
-#ifdef BB_DATE			//bin
-    {"date", date_main},
+#ifdef BB_DATE					//bin
+	{"date", date_main},
 #endif
-#ifdef BB_DD			//bin
-    {"dd", dd_main},
+#ifdef BB_DD					//bin
+	{"dd", dd_main},
 #endif
-#ifdef BB_DF			//bin
-    {"df", df_main},
+#ifdef BB_DF					//bin
+	{"df", df_main},
 #endif
-#ifdef BB_DMESG			//bin
-    {"dmesg", dmesg_main},
+#ifdef BB_DMESG					//bin
+	{"dmesg", dmesg_main},
 #endif
-#ifdef BB_DU			//bin
-    {"du", du_main},
+#ifdef BB_DU					//bin
+	{"du", du_main},
 #endif
-#ifdef BB_DUTMP			//usr/sbin
-    {"dutmp", dutmp_main},
+#ifdef BB_DUTMP					//usr/sbin
+	{"dutmp", dutmp_main},
 #endif
-#ifdef BB_FBSET                 //usr/sbin
-    {"fbset", fbset_main},
+#ifdef BB_FBSET					//usr/sbin
+	{"fbset", fbset_main},
 #endif
-#ifdef BB_FDFLUSH		//bin
-    {"fdflush", fdflush_main},
+#ifdef BB_FDFLUSH				//bin
+	{"fdflush", fdflush_main},
 #endif
-#ifdef BB_FIND			//usr/bin
-    {"find", find_main},
+#ifdef BB_FIND					//usr/bin
+	{"find", find_main},
 #endif
-#ifdef BB_FREE			//usr/bin
-    {"free", free_main},
+#ifdef BB_FREE					//usr/bin
+	{"free", free_main},
 #endif
-#ifdef BB_DEALLOCVT		//usr/bin
-    {"deallocvt", deallocvt_main},
+#ifdef BB_DEALLOCVT				//usr/bin
+	{"deallocvt", deallocvt_main},
 #endif
-#ifdef BB_FSCK_MINIX		//sbin
-    {"fsck.minix", fsck_minix_main},
+#ifdef BB_FSCK_MINIX			//sbin
+	{"fsck.minix", fsck_minix_main},
 #endif
-#ifdef BB_MKFS_MINIX		//sbin
-    {"mkfs.minix", mkfs_minix_main},
+#ifdef BB_MKFS_MINIX			//sbin
+	{"mkfs.minix", mkfs_minix_main},
 #endif
-#ifdef BB_GREP			//bin
-    {"grep", grep_main},
+#ifdef BB_GREP					//bin
+	{"grep", grep_main},
 #endif
-#ifdef BB_HALT			//sbin
-    {"halt", halt_main},
+#ifdef BB_HALT					//sbin
+	{"halt", halt_main},
 #endif
-#ifdef BB_HEAD			//bin
-    {"head", head_main},
+#ifdef BB_HEAD					//bin
+	{"head", head_main},
 #endif
-#ifdef BB_HOSTID                //usr/bin
-    {"hostid", hostid_main},
+#ifdef BB_HOSTID				//usr/bin
+	{"hostid", hostid_main},
 #endif
-#ifdef BB_HOSTNAME              //bin
-    {"hostname", hostname_main},
+#ifdef BB_HOSTNAME				//bin
+	{"hostname", hostname_main},
 #endif
-#ifdef BB_INIT			//sbin
-    {"init", init_main},
+#ifdef BB_INIT					//sbin
+	{"init", init_main},
 #endif
-#ifdef BB_INSMOD		//sbin
-    {"insmod", insmod_main},
+#ifdef BB_INSMOD				//sbin
+	{"insmod", insmod_main},
 #endif
-#ifdef BB_FEATURE_LINUXRC	//
-    {"linuxrc", init_main},
+#ifdef BB_FEATURE_LINUXRC		//
+	{"linuxrc", init_main},
 #endif
-#ifdef BB_KILL			//bin
-    {"kill", kill_main},
+#ifdef BB_KILL					//bin
+	{"kill", kill_main},
 #endif
-#ifdef BB_LENGTH		//usr/bin
-    {"length", length_main},
+#ifdef BB_LENGTH				//usr/bin
+	{"length", length_main},
 #endif
-#ifdef BB_LN			//bin
-    {"ln", ln_main},
+#ifdef BB_LN					//bin
+	{"ln", ln_main},
 #endif
-#ifdef BB_LOADACM               //usr/bin
-    {"loadacm", loadacm_main},
-#endif    
-#ifdef BB_LOADFONT		//usr/bin
-    {"loadfont", loadfont_main},
+#ifdef BB_LOADACM				//usr/bin
+	{"loadacm", loadacm_main},
 #endif
-#ifdef BB_LOADKMAP		//sbin
-    {"loadkmap", loadkmap_main},
+#ifdef BB_LOADFONT				//usr/bin
+	{"loadfont", loadfont_main},
 #endif
-#ifdef BB_LS			//bin
-    {"ls", ls_main},
+#ifdef BB_LOADKMAP				//sbin
+	{"loadkmap", loadkmap_main},
 #endif
-#ifdef BB_LSMOD			//sbin
-    {"lsmod", lsmod_main},
+#ifdef BB_LS					//bin
+	{"ls", ls_main},
 #endif
-#ifdef BB_MAKEDEVS		//sbin
-    {"makedevs", makedevs_main},
+#ifdef BB_LSMOD					//sbin
+	{"lsmod", lsmod_main},
 #endif
-#ifdef BB_MATH			//usr/bin
-    {"math", math_main},
+#ifdef BB_MAKEDEVS				//sbin
+	{"makedevs", makedevs_main},
 #endif
-#ifdef BB_MKDIR			//bin
-    {"mkdir", mkdir_main},
+#ifdef BB_MATH					//usr/bin
+	{"math", math_main},
 #endif
-#ifdef BB_MKFIFO		//usr/bin
-    {"mkfifo", mkfifo_main},
+#ifdef BB_MKDIR					//bin
+	{"mkdir", mkdir_main},
+#endif
+#ifdef BB_MKFIFO				//usr/bin
+	{"mkfifo", mkfifo_main},
 #endif
-#ifdef BB_MKNOD			//bin
-    {"mknod", mknod_main},
+#ifdef BB_MKNOD					//bin
+	{"mknod", mknod_main},
 #endif
-#ifdef BB_MKSWAP		//sbin
-    {"mkswap", mkswap_main},
+#ifdef BB_MKSWAP				//sbin
+	{"mkswap", mkswap_main},
 #endif
-#ifdef BB_MNC			//usr/bin
-    {"mnc", mnc_main},
+#ifdef BB_MNC					//usr/bin
+	{"mnc", mnc_main},
 #endif
-#ifdef BB_MORE			//bin
-    {"more", more_main},
+#ifdef BB_MORE					//bin
+	{"more", more_main},
 #endif
-#ifdef BB_MOUNT			//bin
-    {"mount", mount_main},
+#ifdef BB_MOUNT					//bin
+	{"mount", mount_main},
 #endif
-#ifdef BB_MT			//bin
-    {"mt", mt_main},
+#ifdef BB_MT					//bin
+	{"mt", mt_main},
 #endif
-#ifdef BB_NSLOOKUP		//usr/bin
-    {"nslookup", nslookup_main},
+#ifdef BB_NSLOOKUP				//usr/bin
+	{"nslookup", nslookup_main},
 #endif
-#ifdef BB_PING                  //bin
-    {"ping", ping_main},
+#ifdef BB_PING					//bin
+	{"ping", ping_main},
 #endif
-#ifdef BB_POWEROFF              //sbin
-    {"poweroff", poweroff_main},
+#ifdef BB_POWEROFF				//sbin
+	{"poweroff", poweroff_main},
 #endif
-#ifdef BB_PRINTF		//usr/bin
-    {"printf", printf_main},
+#ifdef BB_PRINTF				//usr/bin
+	{"printf", printf_main},
 #endif
-#ifdef BB_PS			//bin
-    {"ps", ps_main},
+#ifdef BB_PS					//bin
+	{"ps", ps_main},
 #endif
-#ifdef BB_PWD			//bin
-    {"pwd", pwd_main},
+#ifdef BB_PWD					//bin
+	{"pwd", pwd_main},
 #endif
-#ifdef BB_REBOOT		//sbin
-    {"reboot", reboot_main},
+#ifdef BB_REBOOT				//sbin
+	{"reboot", reboot_main},
 #endif
-#ifdef BB_RM			//bin
-    {"rm", rm_main},
+#ifdef BB_RM					//bin
+	{"rm", rm_main},
 #endif
-#ifdef BB_RMDIR			//bin
-    {"rmdir", rmdir_main},
+#ifdef BB_RMDIR					//bin
+	{"rmdir", rmdir_main},
 #endif
-#ifdef BB_RMMOD			//sbin
-    {"rmmod", rmmod_main},
+#ifdef BB_RMMOD					//sbin
+	{"rmmod", rmmod_main},
 #endif
-#ifdef BB_SFDISK		//sbin
-    {"fdisk", sfdisk_main},
-    {"sfdisk", sfdisk_main},
+#ifdef BB_SFDISK				//sbin
+	{"fdisk", sfdisk_main},
+	{"sfdisk", sfdisk_main},
 #endif
-#ifdef BB_SED			//bin
-    {"sed", sed_main},
+#ifdef BB_SED					//bin
+	{"sed", sed_main},
 #endif
-#ifdef BB_SLEEP			//bin
-    {"sleep", sleep_main},
+#ifdef BB_SLEEP					//bin
+	{"sleep", sleep_main},
 #endif
-#ifdef BB_SORT			//bin
-    {"sort", sort_main},
+#ifdef BB_SORT					//bin
+	{"sort", sort_main},
 #endif
-#ifdef BB_SYNC			//bin
-    {"sync", sync_main},
+#ifdef BB_SYNC					//bin
+	{"sync", sync_main},
 #endif
-#ifdef BB_SYSLOGD		//sbin
-    {"syslogd", syslogd_main},
+#ifdef BB_SYSLOGD				//sbin
+	{"syslogd", syslogd_main},
 #endif
-#ifdef BB_LOGGER		//usr/bin
-    {"logger", logger_main},
+#ifdef BB_LOGGER				//usr/bin
+	{"logger", logger_main},
 #endif
-#ifdef BB_LOGNAME		//usr/bin
-    {"logname", logname_main},
+#ifdef BB_LOGNAME				//usr/bin
+	{"logname", logname_main},
 #endif
-#ifdef BB_SWAPONOFF		//sbin
-    {"swapon", swap_on_off_main},
-    {"swapoff", swap_on_off_main},
+#ifdef BB_SWAPONOFF				//sbin
+	{"swapon", swap_on_off_main},
+	{"swapoff", swap_on_off_main},
 #endif
-#ifdef BB_TAIL			//usr/bin
-    {"tail", tail_main},
+#ifdef BB_TAIL					//usr/bin
+	{"tail", tail_main},
 #endif
-#ifdef BB_TAR			//bin
-    {"tar", tar_main},
+#ifdef BB_TAR					//bin
+	{"tar", tar_main},
 #endif
-#ifdef BB_TEE			//bin
-    {"tee", tee_main},
+#ifdef BB_TEE					//bin
+	{"tee", tee_main},
 #endif
-#ifdef BB_TOUCH			//usr/bin
-    {"touch", touch_main},
+#ifdef BB_TOUCH					//usr/bin
+	{"touch", touch_main},
 #endif
-#ifdef BB_TRUE_FALSE		//bin
-    {"true", true_main},
-    {"false", false_main},
+#ifdef BB_TRUE_FALSE			//bin
+	{"true", true_main},
+	{"false", false_main},
 #endif
-#ifdef BB_TTY			//usr/bin
-    {"tty", tty_main},
+#ifdef BB_TTY					//usr/bin
+	{"tty", tty_main},
 #endif
-#ifdef BB_UNAME			//bin
-    {"uname",  uname_main},
+#ifdef BB_UNAME					//bin
+	{"uname", uname_main},
 #endif
-#ifdef BB_UMOUNT		//bin
-    {"umount",  umount_main},
+#ifdef BB_UMOUNT				//bin
+	{"umount", umount_main},
 #endif
-#ifdef BB_UNIQ			//bin
-    {"uniq", uniq_main},
+#ifdef BB_UNIQ					//bin
+	{"uniq", uniq_main},
 #endif
-#ifdef BB_UPDATE		//sbin
-    {"update", update_main},
+#ifdef BB_UPDATE				//sbin
+	{"update", update_main},
 #endif
-#ifdef BB_WC			//usr/bin
-    {"wc",  wc_main},
+#ifdef BB_WC					//usr/bin
+	{"wc", wc_main},
 #endif
-#ifdef BB_WHOAMI		//usr/bin
-    {"whoami",  whoami_main},
+#ifdef BB_WHOAMI				//usr/bin
+	{"whoami", whoami_main},
 #endif
-#ifdef BB_YES			//usr/bin
-    {"yes",  yes_main},
+#ifdef BB_YES					//usr/bin
+	{"yes", yes_main},
 #endif
-#ifdef BB_GUNZIP		//bin
-    {"zcat", gunzip_main},
-    {"gunzip", gunzip_main},
+#ifdef BB_GUNZIP				//bin
+	{"zcat", gunzip_main},
+	{"gunzip", gunzip_main},
 #endif
-#ifdef BB_GZIP			//bin
-    {"gzip", gzip_main},
+#ifdef BB_GZIP					//bin
+	{"gzip", gzip_main},
 #endif
-    {0}
+	{0}
 };
 
 
 
 int main(int argc, char **argv)
 {
-    char *s = argv[0];
-    char *name = argv[0];
-    const struct Applet *a = applets;
+	char *s = argv[0];
+	char *name = argv[0];
+	const struct Applet *a = applets;
 
-    while (*s != '\0') {
-	if (*s++ == '/')
-	    name = s;
-    }
-
-    while (a->name != 0) {
-	if (strcmp(name, a->name) == 0) {
-	    int status;
-
-	    status = ((*(a->main)) (argc, argv));
-	    if (status < 0) {
-		fprintf(stderr, "%s: %s\n", a->name, strerror(errno));
-	    }
-	    fprintf(stderr, "\n");
-	    exit(status);
+	while (*s != '\0') {
+		if (*s++ == '/')
+			name = s;
 	}
-	a++;
-    }
-    exit (busybox_main(argc, argv));
+
+	while (a->name != 0) {
+		if (strcmp(name, a->name) == 0) {
+			int status;
+
+			status = ((*(a->main)) (argc, argv));
+			if (status < 0) {
+				fprintf(stderr, "%s: %s\n", a->name, strerror(errno));
+			}
+			fprintf(stderr, "\n");
+			exit(status);
+		}
+		a++;
+	}
+	exit(busybox_main(argc, argv));
 }
 
 
 int busybox_main(int argc, char **argv)
 {
-    int col=0;
-    argc--;
-    argv++;
+	int col = 0;
 
-    if (been_there_done_that == 1 || argc < 1) {
-	const struct Applet *a = applets;
-	fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n",
-		BB_VER, BB_BT);
-	fprintf(stderr, "Usage: busybox [function] [arguments]...\n");
-	fprintf(stderr, "   or: [function] [arguments]...\n\n");
-	fprintf(stderr,
-		"\tMost people will create a symlink to busybox for each\n"
-		"\tfunction name, and busybox will act like whatever you invoke it as.\n");
-	fprintf(stderr, "\nCurrently defined functions:\n");
+	argc--;
+	argv++;
 
-	while (a->name != 0) {
-	    col+=fprintf(stderr, "%s%s", ((col==0)? "\t":", "), (a++)->name);
-	    if (col>60 && a->name != 0) {
-		fprintf(stderr, ",\n");
-		col=0;
-	    }
+	if (been_there_done_that == 1 || argc < 1) {
+		const struct Applet *a = applets;
+
+		fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n",
+				BB_VER, BB_BT);
+		fprintf(stderr, "Usage: busybox [function] [arguments]...\n");
+		fprintf(stderr, "   or: [function] [arguments]...\n\n");
+		fprintf(stderr,
+				"\tMost people will create a symlink to busybox for each\n"
+				"\tfunction name, and busybox will act like whatever you invoke it as.\n");
+		fprintf(stderr, "\nCurrently defined functions:\n");
+
+		while (a->name != 0) {
+			col +=
+				fprintf(stderr, "%s%s", ((col == 0) ? "\t" : ", "),
+						(a++)->name);
+			if (col > 60 && a->name != 0) {
+				fprintf(stderr, ",\n");
+				col = 0;
+			}
+		}
+		fprintf(stderr, "\n\n");
+		exit(-1);
+	} else {
+		/* If we've already been here once, exit now */
+		been_there_done_that = 1;
+		return (main(argc, argv));
 	}
-	fprintf(stderr, "\n\n");
-	exit(-1);
-    } else {
-	/* If we've already been here once, exit now */
-	been_there_done_that = 1;
-	return (main(argc, argv));
-    }
 }
