#
# 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
	help
	  Crond is a background daemon that parses individual crontab
	  files and executes commands on behalf of the users in question.

config CONFIG_FEATURE_CROND_CALL_SENDMAIL
	bool "  Using /usr/sbin/sendmail?"
	default n
	depends on CONFIG_CROND
	help
	  Support call /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_LAST
	bool "last"
	default n
	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_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 softwate 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

