#
# 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
	select 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 FEATURE_COMPRESS_BBCONFIG
	bool "Compress bbconfig data"
	default y
	depends on BBCONFIG
	help
	  Store bbconfig data in compressed form, uncompress them on-the-fly
	  before output.

	  If you have a really tiny busybox with few applets enabled (and
	  bunzip2 isn't one of them), the overhead of the decompressor might
	  be noticeable. Also, if you run executables directly from ROM
	  and have very little memory, this might not be a win. Otherwise,
	  you probably want this.

config BEEP
	bool "beep"
	default y
	select 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_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
	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
	select 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
	select 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
	select 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
	select 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
	select 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 HDPARM
	bool "hdparm"
	default y
	select 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
	select PLATFORM_LINUX
	help
	  raidautorun tells the kernel md driver to
	  search and start RAID arrays.

config READAHEAD
	bool "readahead"
	default y
	depends on LFS
	select 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
	select 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
	depends on FEATURE_UTMP
	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
	select 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 WATCHDOG
	bool "watchdog"
	default y
	select 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
