#
# 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 BEEP
	bool "beep"
	default n
	help
	  The beep applets beeps in a given freq/Hz.

config FEATURE_BEEP_FREQ
	int "default frequency"
	range 0 2147483647
	default 4000
	depends on BEEP
	help
	  Frequency for default beep.

config FEATURE_BEEP_LENGTH_MS
	int "default length"
	range 0 2147483647
	default 30
	depends on BEEP
	help
	  Length in ms for default beep.

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_LOCK
	bool "flash_lock"
	default n
	help
	  The flash_lock binary from mtd-utils as of git head 5ec0c10d0. This
	  utility locks part or all of the flash device.

config FLASH_UNLOCK
	bool "flash_unlock"
	default n
	help
	  The flash_unlock binary from mtd-utils as of git head 5ec0c10d0. This
	  utility unlocks part or all of the flash device.

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 VOLNAME
	bool "volname"
	default n
	help
	  Prints a CD-ROM volume name.

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
