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

menu "Miscellaneous Utilities"

INSERT

config ADJTIMEX
	bool "adjtimex"
	default y
	depends on PLATFORM_LINUX
	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 y
	depends on PLATFORM_LINUX
	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 y
	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 y
	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 y
	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 y
	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 y
	help
	  Support CLR_ABORT directive.

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

config CROND
	bool "crond"
	default y
	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 y
	help
	  -d sets loglevel to 0 (most verbose) and directs all output to stderr.

config FEATURE_CROND_CALL_SENDMAIL
	bool "Report command output via email (using sendmail)"
	default y
	depends on CROND
	help
	  Command output will be sent to corresponding user via email.

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 y
	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 y
	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 y
	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
	depends on PLATFORM_LINUX
	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 y
	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 y
	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 y
	depends on DEVFSD
	help
	  Increases logging to stderr or syslog.

config FEATURE_DEVFS
	bool "Use devfs names for all devices (obsolete)"
	default n
	depends on PLATFORM_LINUX
	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 y
	help
	  devmem is a small program that reads and writes from physical
	  memory using /dev/mem.

config EJECT
	bool "eject"
	default y
	depends on PLATFORM_LINUX
	help
	  Used to eject cdroms. (defaults to /dev/cdrom)

config FEATURE_EJECT_SCSI
	bool "SCSI support"
	default y
	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 y
	depends on PLATFORM_LINUX
	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 FLASHCP
	bool "flashcp"
	default n  # doesn't build on Ubuntu 8.04
	help
	  The flashcp binary, inspired by mtd-utils as of git head 5eceb74f7.
	  This utility is used to copy images into a MTD device.

config FLASH_LOCK
	bool "flash_lock"
	default n  # doesn't build on Ubuntu 8.04
	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  # doesn't build on Ubuntu 8.04
	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  # doesn't build on Ubuntu 8.04
	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 y
	depends on PLATFORM_LINUX
	help
	  Set/set program io scheduling class and priority
	  Requires kernel >= 2.6.13

config INOTIFYD
	bool "inotifyd"
	default n  # doesn't build on Knoppix 5
	help
	  Simple inotify daemon. Reports filesystem changes. Requires
	  kernel >= 2.6.13

config LAST
	bool "last"
	default y
	depends on 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_FANCY

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 y
	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 y
	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 y
	depends on LESS
	help
	  Enable regular expressions, allowing complex file searches.

config FEATURE_LESS_WINCH
	bool "Enable automatic resizing on window size changes"
	default y
	depends on LESS
	help
	  Makes less track window size changes.

config FEATURE_LESS_DASHCMD
	bool "Enable flag changes ('-' command)"
	default y
	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 y
	depends on FEATURE_LESS_DASHCMD
	help
	  Enables "-N" command.

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

config MAKEDEVS
	bool "makedevs"
	default y
	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 y
	help
	  Format and display manual pages.

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

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

config MT
	bool "mt"
	default y
	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 y
	depends on PLATFORM_LINUX
	help
	  raidautorun tells the kernel md driver to
	  search and start RAID arrays.

config READAHEAD
	bool "readahead"
	default y
	depends on LFS && PLATFORM_LINUX
	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 RFKILL
	bool "rfkill"
	default n  # doesn't build on Ubuntu 9.04
	depends on PLATFORM_LINUX
	help
	  Enable/disable wireless devices.

	  rfkill list : list all wireless devices
	  rfkill list bluetooth : list all bluetooth devices
	  rfkill list 1 : list device corresponding to the given index
	  rfkill block|unblock wlan : block/unblock all wlan(wifi) devices

config RUNLEVEL
	bool "runlevel"
	default y
	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 y
	depends on PLATFORM_LINUX
	help
	  Receive files using the Xmodem protocol.

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

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

config TASKSET
	bool "taskset"
	default n  # doesn't build on some non-x86 targets (m68k)
	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 y
	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 y
	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 y
	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 y
	help
	  Prints a CD-ROM volume name.

config WALL
	bool "wall"
	default y
	help
	  Write a message to all users that are logged in.

config WATCHDOG
	bool "watchdog"
	default y
	depends on PLATFORM_LINUX
	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
