#
# 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 FEATURE_CROND_D
	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 FEATURE_CROND_DIR
	string "crond spool directory"
	default "/var/spool/cron"
	depends on CROND || CRONTAB
	help
	  Location of crond spool.

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 FEATURE_DC_LIBM
	bool "Enable power and exp functions (requires libm)"
	default n
	depends on DC
	help
	  Enable power and exp functions.
	  NOTE: This will require libm to be present for linking.

config DEVFSD
	bool "devfsd (obsolete)"
	default n
	select FEATURE_SYSLOG
	help
	  This is deprecated and should NOT be used anymore.
	  Use linux >= 2.6 (optionally with hotplug) and mdev instead!
	  See docs/mdev.txt for detailed instructions on how to use mdev
	  instead.

	  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 should NOT be used anymore.
	  Use linux >= 2.6 (optionally with hotplug) and mdev instead!

	  For legacy systems -- if there is no way around devfsd -- 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 DEVMEM
	bool "devmem"
	default n
	help
	  devmem is a small program that reads and writes from physical
	  memory using /dev/mem.

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 FLASH_ERASEALL
	bool "flash_eraseall"
	default n
	help
	  The flash_eraseall binary from mtd-utils as of git head c4c6a59eb.
	  This utility is used to erase the whole MTD device.

config IONICE
	bool "ionice"
	default n
	help
	  Set/set program io scheduling class and priority
	  Requires kernel >= 2.6.13

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_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 FEATURE_LESS_WINCH
	bool "Enable automatic resizing on window size changes"
	default n
	depends on LESS
	help
	  Makes less track window size changes.

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

config FEATURE_LESS_LINENUMS
	bool "Enable dynamic switching of line numbers"
	default n
	depends on FEATURE_LESS_DASHCMD
	help
	  Enable "-N" command.

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"
	default n
	depends on HDPARM
	help
	  Enables the 'hdparm -d' option to get/set using_dma flag.

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 TIMEOUT
	bool "timeout"
	default n
	help
	  Runs a program and watches it. If it does not terminate in
	  specified number of seconds, it is sent a signal.

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
