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

menu "Miscellaneous Utilities"

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

config BBCONFIG
	bool "bbconfig"
	default n
	help
	  The bbconfig applet will print the config file with which
	  busybox was built.

config CHAT
	bool "chat"
	default n
	help
	  Simple chat utility.

config FEATURE_CHAT_NOFAIL
	bool "Enable NOFAIL expect strings"
	depends on CHAT
	default y
	help
	  When enabled expect strings which are started with a dash trigger
	  no-fail mode. That is when expectation is not met within timeout
	  the script is not terminated but sends next SEND string and waits
	  for next EXPECT string. This allows to compose far more flexible
	  scripts.

config FEATURE_CHAT_TTY_HIFI
	bool "Force STDIN to be a TTY"
	depends on CHAT
	default n
	help
	  Original chat always treats STDIN as a TTY device and sets for it
	  so-called raw mode. This option turns on such behaviour.

config FEATURE_CHAT_IMPLICIT_CR
	bool "Enable implicit Carriage Return"
	depends on CHAT
	default y
	help
	  When enabled make chat to terminate all SEND strings with a "\r"
	  unless "\c" is met anywhere in the string.

config FEATURE_CHAT_SWALLOW_OPTS
	bool "Swallow options"
	depends on CHAT
	default n
	help
	  Busybox chat require no options. To make it not fail when used
	  in place of original chat (which has a bunch of options) turn
	  this on.

config FEATURE_CHAT_SEND_ESCAPES
	bool "Support weird SEND escapes"
	depends on CHAT
	default n
	help
	  Original chat uses some escape sequences in SEND arguments which
	  are not sent to device but rather performs special actions.
	  E.g. "\K" means to send a break sequence to device.
	  "\d" delays execution for a second, "\p" -- for a 1/100 of second.
	  Before turning this option on think twice: do you really need them?

config FEATURE_CHAT_VAR_ABORT_LEN
	bool "Support variable-length ABORT conditions"
	depends on CHAT
	default n
	help
	  Original chat uses fixed 50-bytes length ABORT conditions. Say N here.

config FEATURE_CHAT_CLR_ABORT
	bool "Support revoking of ABORT conditions"
	depends on CHAT
	default n
	help
	  Support CLR_ABORT directive.

config CHRT
	bool "chrt"
	default n
	help
	  manipulate real-time attributes of a process.
	  This requires sched_{g,s}etparam support in your libc.

config CROND
	bool "crond"
	default n
	select FEATURE_SUID
	select FEATURE_SYSLOG
	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

config DEBUG_CROND_OPTION
	bool "Support option -d to redirect output to stderr"
	depends on CROND
	default n
	help
	  -d sets loglevel to 0 (most verbose) and directs all output to stderr.

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

config CRONTAB
	bool "crontab"
	default n
	select FEATURE_SUID
	help
	  Crontab manipulates the crontab for a particular user.  Only
	  the superuser may specify a different user and/or crontab directory.
	  Note that Busybox binary must be setuid root for this applet to
	  work properly.

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

config DEVFSD
	bool "devfsd (obsolete)"
	default n
	select FEATURE_SYSLOG
	help
	  This is deprecated, and will be removed at the end of 2008.

	  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 DEVFSD_MODLOAD
	bool "Adds support for MODLOAD keyword in devsfd.conf"
	default n
	depends on DEVFSD
	help
	  This actually doesn't work with busybox modutils but needs
	  the external modutils.

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

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

config FEATURE_DEVFS
	bool "Use devfs names for all devices (obsolete)"
	default n
	help
	  This is obsolete and will be going away at the end of 2008..

	  This tells busybox to look for names like /dev/loop/0 instead of
	  /dev/loop0.  If your /dev directory has normal names instead of
	  devfs names, you don't want this.

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

config FEATURE_EJECT_SCSI
	bool "SCSI support"
	default n
	depends on EJECT
	help
	  Add the -s option to eject, this allows to eject SCSI-Devices and
	  usb-storage devices.

config FBSPLASH
	bool "fbsplash"
	default n
	help
	  Shows splash image and progress bar on framebuffer device.
	  Can be used during boot phase of an embedded device. ~2kb.
	  Usage:
	  - use kernel option 'vga=xxx' or otherwise enable fb device.
	  - put somewhere fbsplash.cfg file and an image in .ppm format.
	  - $ setsid fbsplash [params] &
	    -c: hide cursor
	    -d /dev/fbN: framebuffer device (if not /dev/fb0)
	    -s path_to_image_file (can be "-" for stdin)
	    -i path_to_cfg_file (can be "-" for stdin)
	    -f path_to_fifo (can be "-" for stdin)
	  - if you want to run it only in presence of kernel parameter:
	    grep -q "fbsplash=on" </proc/cmdline && setsid fbsplash [params] &
	  - commands for fifo:
	    "NN" (ASCII decimal number) - percentage to show on progress bar
	    "exit" - well you guessed it

config INOTIFYD
	bool "inotifyd"
	default n
	help
	  Simple inotify daemon. Reports filesystem changes. Requires kernel >= 2.6.13

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

choice
	prompt "Choose last implementation"
	depends on LAST
	default FEATURE_LAST_SMALL

config FEATURE_LAST_SMALL
	bool "small"
	help
	  This is a small version of last with just the basic set of
	  features.

config FEATURE_LAST_FANCY
	bool "huge"
	help
	  'last' displays detailed information about the last users that
	  logged into the system (mimics sysvinit last). +900 bytes.
endchoice

config LESS
	bool "less"
	default n
	help
	  'less' is a pager, meaning that it displays text files. It possesses
	  a wide array of features, and is an improvement over 'more'.

config FEATURE_LESS_MAXLINES
	int "Max number of input lines less will try to eat"
	default 9999999
	depends on LESS

config FEATURE_LESS_BRACKETS
	bool "Enable bracket searching"
	default y
	depends on LESS
	help
	  This option adds the capability to search for matching left and right
	  brackets, facilitating programming.

config FEATURE_LESS_FLAGS
	bool "Enable extra flags"
	default y
	depends on LESS
	help
	  The extra flags provided do the following:

	  The -M flag enables a more sophisticated status line.
	  The -m flag enables a simpler status line with a percentage.

config FEATURE_LESS_FLAGCS
	bool "Enable flag changes"
	default n
	depends on LESS
	help
	  This enables the ability to change command-line flags within
	  less itself.

config FEATURE_LESS_MARKS
	bool "Enable marks"
	default n
	depends on LESS
	help
	  Marks enable positions in a file to be stored for easy reference.

config FEATURE_LESS_REGEXP
	bool "Enable regular expressions"
	default n
	depends on LESS
	help
	  Enable regular expressions, allowing complex file searches.

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
	  FEATURE_HDPARM_GET_IDENTITY option)....

config FEATURE_HDPARM_GET_IDENTITY
	bool "Support obtaining detailed information directly from drives"
	default y
	depends on HDPARM
	help
	  Enables the -I and -i options to obtain detailed information
	  directly from drives about their capabilities and supported ATA
	  feature set. If no device name is specified, hdparm will read
	  identify data from stdin. Enabling this option will add about 16k...

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

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

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

config FEATURE_HDPARM_HDIO_TRISTATE_HWIF
	bool "tristate device for hotswap (DANGEROUS)"
	default n
	depends on 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 FEATURE_HDPARM_HDIO_GETSET_DMA
	bool "get/set using_dma flag (DANGEROUS)"
	default n
	depends on HDPARM
	help
	  Enables the 'hdparm -d' option to get/set using_dma flag.
	  This is dangerous stuff, so you should probably say N.

config MAKEDEVS
	bool "makedevs"
	default n
	help
	  'makedevs' is a utility used to create a batch of devices with
	  one command.
	  .
	  There are two choices for command line behaviour, the interface
	  as used by LEAF/Linux Router Project, or a device table file.
	  .
	  'leaf' is traditionally what busybox follows, it allows multiple
	  devices of a particluar type to be created per command.
	  e.g. /dev/hda[0-9]
	  Device properties are passed as command line arguments.
	  .
	  'table' reads device properties from a file or stdin, allowing
	  a batch of unrelated devices to be made with one command.
	  User/group names are allowed as an alternative to uid/gid.

choice
	prompt "Choose makedevs behaviour"
	depends on MAKEDEVS
	default FEATURE_MAKEDEVS_TABLE

config FEATURE_MAKEDEVS_LEAF
	bool "leaf"

config FEATURE_MAKEDEVS_TABLE
	bool "table"

endchoice

config MAN
	bool "man"
	default n
	help
	  Format and display manual pages.

config MICROCOM
	bool "microcom"
	default n
	help
	  The poor man's minicom utility for chatting with serial port devices.

config MOUNTPOINT
	bool "mountpoint"
	default n
	help
	  mountpoint checks if the directory is a mountpoint.

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 RAIDAUTORUN
	bool "raidautorun"
	default n
	help
	  raidautorun tells the kernel md driver to
	  search and start RAID arrays.

config READAHEAD
	bool "readahead"
	default n
	depends on LFS
	help
	  Preload the files listed on the command line into RAM cache so that
	  subsequent reads on these files will not block on disk I/O.

	  This applet just calls the readahead(2) system call on each file.
	  It is mainly useful in system startup scripts to preload files
	  or executables before they are used.  When used at the right time
	  (in particular when a CPU bound process is running) it can
	  significantly speed up system startup.

	  As readahead(2) blocks until each file has been read, it is best to
	  run this applet as a background job.

config RUNLEVEL
	bool "runlevel"
	default n
	help
	  find the current and previous system runlevel.

	  This applet uses utmp but does not rely on busybox supporing
	  utmp on purpose. It is used by e.g. emdebian via /etc/init.d/rc.

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

config SETSID
	bool "setsid"
	default n
	help
	  setsid runs a program in a new session

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

config TASKSET
	bool "taskset"
	default n
	help
	  Retrieve or set a processes's CPU affinity.
	  This requires sched_{g,s}etaffinity support in your libc.

config FEATURE_TASKSET_FANCY
	bool "Fancy output"
	default y
	depends on TASKSET
	help
	  Add code for fancy output. This merely silences a compiler-warning
	  and adds about 135 Bytes. May be needed for machines with alot
	  of CPUs.

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 TTYSIZE
	bool "ttysize"
	default n
	help
	  A replacement for "stty size". Unlike stty, can report only width,
	  only height, or both, in any order. It also does not complain on error,
	  but returns default 80x24. Usage in shell scripts: width=`ttysize w`.

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
