#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#

menu "Miscellaneous Utilities"

config CONFIG_ADJTIMEX
	bool "adjtimex"
	default n
	help
	  Adjtimex reads and optionally sets adjustment parameters for
	  the Linux clock adjustment algorithm.

config CONFIG_CROND
	bool "crond"
	default n
	select CONFIG_FEATURE_SUID
	help
	  Crond is a background daemon that parses individual crontab
	  files and executes commands on behalf of the users in question.
	  This is a port of dcron from slackware.  It uses files of the
	  format /var/spool/cron/crontabs/<username> files, for example:
	      $ cat /var/spool/cron/crontabs/root
	      # Run daily cron jobs at 4:40 every day:
	      40 4 * * * /etc/cron/daily > /dev/null 2>&1
	  Note that Busybox binary must be setuid root for this applet to
	  work properly.

config CONFIG_FEATURE_CROND_CALL_SENDMAIL
	bool "  Using /usr/sbin/sendmail?"
	default n
	depends on CONFIG_CROND
	help
	  Support calling /usr/sbin/sendmail for send cmd outputs.

config CONFIG_CRONTAB
	bool "crontab"
	default n
	help
	  Crontab manipulates the crontab for a particular user.  Only
	  the superuser may specify a different user and/or crontab directory.

config CONFIG_DC
	bool "dc"
	default n
	help
	  Dc is a reverse-polish desk calculator which supports unlimited
	  precision arithmetic.

config CONFIG_DEVFSD
	bool "devfsd"
	default n
	help
	  Provides compatibility with old device names on a devfs systems.
	  You should set it to true if you have devfs enabled.
	  The following keywords in devsfd.conf are supported:
	  "CLEAR_CONFIG", "INCLUDE", "OPTIONAL_INCLUDE", "RESTORE",
	  "PERMISSIONS", "EXECUTE", "COPY", "IGNORE",
	  "MKOLDCOMPAT", "MKNEWCOMPAT","RMOLDCOMPAT", "RMNEWCOMPAT".

	   But only if they are written UPPERCASE!!!!!!!!

config CONFIG_DEVFSD_MODLOAD
	bool "Adds support for MODLOAD keyword in devsfd.conf"
	default n
	depends on CONFIG_DEVFSD
	help
	  This actually doesn't work with busybox  modutils but needs the real modutils.

config CONFIG_DEVFSD_FG_NP
	bool "Enables the -fg and -np options"
	default n
	depends on CONFIG_DEVFSD
	help
		-fg	Run the daemon in the foreground.
		-np	Exit  after  parsing  the configuration file. Do not poll for events.

config CONFIG_DEVFSD_VERBOSE
	bool "Increases logging (and size)"
	default n
	depends on CONFIG_DEVFSD
	help
	  Increases logging to stderr or syslog.

config CONFIG_EJECT
	bool "eject"
	default n
	help
	  Used to eject cdroms.  (defaults to /dev/cdrom)

config CONFIG_LAST
	bool "last"
	default n
	select CONFIG_FEATURE_U_W_TMP
	help
	  'last' displays a list of the last users that logged into the system.

config CONFIG_HDPARM
	bool "hdparm"
	default n
	help
	  Get/Set hard drive parameters.  Primarily intended for ATA
	  drives.  Adds about 13k (or around 30k if you enable the
	  CONFIG_FEATURE_HDPARM_GET_IDENTITY option)....

config CONFIG_FEATURE_HDPARM_GET_IDENTITY
	bool "  Support obtaining detailed information directly from drives"
	default y
	depends on CONFIG_HDPARM
	help
	  Enables the -I and -Istdin options to obtain detailed information
	  directly from drives about their capabilities and supported ATA
	  feature set.  Enabling this option will add about 16k...

config CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF
	bool "  Register an IDE interface (DANGEROUS)"
	default n
	depends on CONFIG_HDPARM
	help
	  Enables the 'hdparm -R' option to register an IDE interface.
	  This is dangerous stuff, so you should probably say N.

config CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF
	bool "  Un-register an IDE interface (DANGEROUS)"
	default n
	depends on CONFIG_HDPARM
	help
	  Enables the 'hdparm -U' option to un-register an IDE interface.
	  This is dangerous stuff, so you should probably say N.

config CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET
	bool "  perform device reset (DANGEROUS)"
	default n
	depends on CONFIG_HDPARM
	help
	  Enables the 'hdparm -w' option to perform a device reset.
	  This is dangerous stuff, so you should probably say N.

config CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF
	bool "  tristate device for hotswap (DANGEROUS)"
	default n
	depends on CONFIG_HDPARM
	help
	  Enables the 'hdparm -x' option to tristate device for hotswap,
	  and the '-b' option to get/set bus state.  This is dangerous
	  stuff, so you should probably say N.

config CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA
	bool "  get/set using_dma flag (DANGEROUS)"
	default n
	depends on CONFIG_HDPARM
	help
	  Enables the 'hdparm -d' option to get/set using_dma flag.
	  This is dangerous stuff, so you should probably say N.

config CONFIG_MAKEDEVS
	bool "makedevs"
	default n
	help
	  'makedevs' is a utility used and created by the Linux Router Project.
	  It creates a large number of device special files (/dev devices)
	  rather quickly, and can be considerably faster then running mknod a
	  zillion times.

config CONFIG_MT
	bool "mt"
	default n
	help
	  mt is used to control tape devices.  You can use the mt utility
	  to advance or rewind a tape past a specified number of archive
	  files on the tape.

config CONFIG_RX
        bool "rx"
	default n
	help
 	  Receive files using the Xmodem protocol.

config CONFIG_STRINGS
	bool "strings"
	default n
	help
	  strings prints the printable character sequences for each file
	  specified.

config CONFIG_TIME
	bool "time"
	default n
	help
	  The time command runs the specified program with the given arguments.
	  When the command finishes, time writes a message to standard output
	  giving timing statistics about this program run.

config CONFIG_WATCHDOG
	bool "watchdog"
	default n
	help
	  The watchdog utility is used with hardware or software watchdog
	  device drivers.  It opens the specified watchdog device special file
	  and periodically writes a magic character to the device.  If the
	  watchdog applet ever fails to write the magic character within a
	  certain amount of time, the watchdog device assumes the system has
	  hung, and will cause the hardware to reboot.

endmenu

