diff --git a/aosp/bionic/libc/include/sys/system_properties.h b/aosp/bionic/libc/include/sys/system_properties.h index 33aab9c8e2539b2830b2f79078d12c6ab69c760a..a2e1923b096034b6497ea5b00802b9162fe202ab 100644 --- a/aosp/bionic/libc/include/sys/system_properties.h +++ b/aosp/bionic/libc/include/sys/system_properties.h @@ -38,7 +38,7 @@ __BEGIN_DECLS typedef struct prop_info prop_info; -#define PROP_VALUE_MAX 128 +#define PROP_VALUE_MAX 92 /* * Sets system property `name` to `value`, creating the system property if it doesn't already exist. diff --git a/aosp/bionic/libc/system_properties/include/system_properties/prop_info.h b/aosp/bionic/libc/system_properties/include/system_properties/prop_info.h index fd7d7d509f49c6d1ab4b0ab1ae5306d12d4296e3..3ebe7c51fe5ac1488436453efb67042d8fb29737 100644 --- a/aosp/bionic/libc/system_properties/include/system_properties/prop_info.h +++ b/aosp/bionic/libc/system_properties/include/system_properties/prop_info.h @@ -86,4 +86,4 @@ struct prop_info { BIONIC_DISALLOW_IMPLICIT_CONSTRUCTORS(prop_info); }; -static_assert(sizeof(prop_info) == 132, "sizeof struct prop_info must be 132 bytes"); +static_assert(sizeof(prop_info) == 96, "sizeof struct prop_info must be 96 bytes"); diff --git a/aosp/bionic/libc/system_properties/prop_area.cpp b/aosp/bionic/libc/system_properties/prop_area.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c46d88ceb94e5d4b504a4c05c19e648fd6e19b47 --- /dev/null +++ b/aosp/bionic/libc/system_properties/prop_area.cpp @@ -0,0 +1,377 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "system_properties/prop_area.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#ifdef LARGE_SYSTEM_PROPERTY_NODE +constexpr size_t PA_SIZE = 1024 * 1024; +#else +constexpr size_t PA_SIZE = 128 * 1024; +#endif +constexpr uint32_t PROP_AREA_MAGIC = 0x504f5250; +constexpr uint32_t PROP_AREA_VERSION = 0xfc6ed0ab; + +size_t prop_area::pa_size_ = 0; +size_t prop_area::pa_data_size_ = 0; + +prop_area* prop_area::map_prop_area_rw(const char* filename, const char* context, + bool* fsetxattr_failed) { + /* dev is a tmpfs that we can use to carve a shared workspace + * out of, so let's do that... + */ + const int fd = open(filename, O_RDWR | O_CREAT | O_NOFOLLOW | O_CLOEXEC | O_EXCL, 0444); + + if (fd < 0) { + if (errno == EACCES) { + /* for consistency with the case where the process has already + * mapped the page in and segfaults when trying to write to it + */ + abort(); + } + return nullptr; + } + + if (context) { + if (fsetxattr(fd, XATTR_NAME_SELINUX, context, strlen(context) + 1, 0) != 0) { + async_safe_format_log(ANDROID_LOG_ERROR, "libc", + "fsetxattr failed to set context (%s) for \"%s\"", context, filename); + /* + * fsetxattr() will fail during system properties tests due to selinux policy. + * We do not want to create a custom policy for the tester, so we will continue in + * this function but set a flag that an error has occurred. + * Init, which is the only daemon that should ever call this function will abort + * when this error occurs. + * Otherwise, the tester will ignore it and continue, albeit without any selinux + * property separation. + */ + if (fsetxattr_failed) { + *fsetxattr_failed = true; + } + } + } + + if (ftruncate(fd, PA_SIZE) < 0) { + close(fd); + return nullptr; + } + + pa_size_ = PA_SIZE; + pa_data_size_ = pa_size_ - sizeof(prop_area); + + void* const memory_area = mmap(nullptr, pa_size_, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (memory_area == MAP_FAILED) { + close(fd); + return nullptr; + } + + prop_area* pa = new (memory_area) prop_area(PROP_AREA_MAGIC, PROP_AREA_VERSION); + + close(fd); + return pa; +} + +prop_area* prop_area::map_fd_ro(const int fd) { + struct stat fd_stat; + if (fstat(fd, &fd_stat) < 0) { + return nullptr; + } + + if ((fd_stat.st_uid != 0) || (fd_stat.st_gid != 0) || + ((fd_stat.st_mode & (S_IWGRP | S_IWOTH)) != 0) || + (fd_stat.st_size < static_cast(sizeof(prop_area)))) { + return nullptr; + } + + pa_size_ = fd_stat.st_size; + pa_data_size_ = pa_size_ - sizeof(prop_area); + + void* const map_result = mmap(nullptr, pa_size_, PROT_READ, MAP_SHARED, fd, 0); + if (map_result == MAP_FAILED) { + return nullptr; + } + + prop_area* pa = reinterpret_cast(map_result); + if ((pa->magic() != PROP_AREA_MAGIC) || (pa->version() != PROP_AREA_VERSION)) { + munmap(pa, pa_size_); + return nullptr; + } + + return pa; +} + +prop_area* prop_area::map_prop_area(const char* filename) { + int fd = open(filename, O_CLOEXEC | O_NOFOLLOW | O_RDONLY); + if (fd == -1) return nullptr; + + prop_area* map_result = map_fd_ro(fd); + close(fd); + + return map_result; +} + +void* prop_area::allocate_obj(const size_t size, uint_least32_t* const off) { + const size_t aligned = __BIONIC_ALIGN(size, sizeof(uint_least32_t)); + if (bytes_used_ + aligned > pa_data_size_) { + return nullptr; + } + + *off = bytes_used_; + bytes_used_ += aligned; + return data_ + *off; +} + +prop_bt* prop_area::new_prop_bt(const char* name, uint32_t namelen, uint_least32_t* const off) { + uint_least32_t new_offset; + void* const p = allocate_obj(sizeof(prop_bt) + namelen + 1, &new_offset); + if (p != nullptr) { + prop_bt* bt = new (p) prop_bt(name, namelen); + *off = new_offset; + return bt; + } + + return nullptr; +} + +prop_info* prop_area::new_prop_info(const char* name, uint32_t namelen, const char* value, + uint32_t valuelen, uint_least32_t* const off) { + uint_least32_t new_offset; + void* const p = allocate_obj(sizeof(prop_info) + namelen + 1, &new_offset); + if (p == nullptr) return nullptr; + + prop_info* info; + if (valuelen >= PROP_VALUE_MAX) { + uint32_t long_value_offset = 0; + char* long_location = reinterpret_cast(allocate_obj(valuelen + 1, &long_value_offset)); + if (!long_location) return nullptr; + + memcpy(long_location, value, valuelen); + long_location[valuelen] = '\0'; + + // Both new_offset and long_value_offset are offsets based off of data_, however prop_info + // does not know what data_ is, so we change this offset to be an offset from the prop_info + // pointer that contains it. + long_value_offset -= new_offset; + + info = new (p) prop_info(name, namelen, long_value_offset); + } else { + info = new (p) prop_info(name, namelen, value, valuelen); + } + *off = new_offset; + return info; +} + +void* prop_area::to_prop_obj(uint_least32_t off) { + if (off > pa_data_size_) return nullptr; + + return (data_ + off); +} + +inline prop_bt* prop_area::to_prop_bt(atomic_uint_least32_t* off_p) { + uint_least32_t off = atomic_load_explicit(off_p, memory_order_consume); + return reinterpret_cast(to_prop_obj(off)); +} + +inline prop_info* prop_area::to_prop_info(atomic_uint_least32_t* off_p) { + uint_least32_t off = atomic_load_explicit(off_p, memory_order_consume); + return reinterpret_cast(to_prop_obj(off)); +} + +inline prop_bt* prop_area::root_node() { + return reinterpret_cast(to_prop_obj(0)); +} + +static int cmp_prop_name(const char* one, uint32_t one_len, const char* two, uint32_t two_len) { + if (one_len < two_len) + return -1; + else if (one_len > two_len) + return 1; + else + return strncmp(one, two, one_len); +} + +prop_bt* prop_area::find_prop_bt(prop_bt* const bt, const char* name, uint32_t namelen, + bool alloc_if_needed) { + prop_bt* current = bt; + while (true) { + if (!current) { + return nullptr; + } + + const int ret = cmp_prop_name(name, namelen, current->name, current->namelen); + if (ret == 0) { + return current; + } + + if (ret < 0) { + uint_least32_t left_offset = atomic_load_explicit(¤t->left, memory_order_relaxed); + if (left_offset != 0) { + current = to_prop_bt(¤t->left); + } else { + if (!alloc_if_needed) { + return nullptr; + } + + uint_least32_t new_offset; + prop_bt* new_bt = new_prop_bt(name, namelen, &new_offset); + if (new_bt) { + atomic_store_explicit(¤t->left, new_offset, memory_order_release); + } + return new_bt; + } + } else { + uint_least32_t right_offset = atomic_load_explicit(¤t->right, memory_order_relaxed); + if (right_offset != 0) { + current = to_prop_bt(¤t->right); + } else { + if (!alloc_if_needed) { + return nullptr; + } + + uint_least32_t new_offset; + prop_bt* new_bt = new_prop_bt(name, namelen, &new_offset); + if (new_bt) { + atomic_store_explicit(¤t->right, new_offset, memory_order_release); + } + return new_bt; + } + } + } +} + +const prop_info* prop_area::find_property(prop_bt* const trie, const char* name, uint32_t namelen, + const char* value, uint32_t valuelen, + bool alloc_if_needed) { + if (!trie) return nullptr; + + const char* remaining_name = name; + prop_bt* current = trie; + while (true) { + const char* sep = strchr(remaining_name, '.'); + const bool want_subtree = (sep != nullptr); + const uint32_t substr_size = (want_subtree) ? sep - remaining_name : strlen(remaining_name); + + if (!substr_size) { + return nullptr; + } + + prop_bt* root = nullptr; + uint_least32_t children_offset = atomic_load_explicit(¤t->children, memory_order_relaxed); + if (children_offset != 0) { + root = to_prop_bt(¤t->children); + } else if (alloc_if_needed) { + uint_least32_t new_offset; + root = new_prop_bt(remaining_name, substr_size, &new_offset); + if (root) { + atomic_store_explicit(¤t->children, new_offset, memory_order_release); + } + } + + if (!root) { + return nullptr; + } + + current = find_prop_bt(root, remaining_name, substr_size, alloc_if_needed); + if (!current) { + return nullptr; + } + + if (!want_subtree) break; + + remaining_name = sep + 1; + } + + uint_least32_t prop_offset = atomic_load_explicit(¤t->prop, memory_order_relaxed); + if (prop_offset != 0) { + return to_prop_info(¤t->prop); + } else if (alloc_if_needed) { + uint_least32_t new_offset; + prop_info* new_info = new_prop_info(name, namelen, value, valuelen, &new_offset); + if (new_info) { + atomic_store_explicit(¤t->prop, new_offset, memory_order_release); + } + + return new_info; + } else { + return nullptr; + } +} + +bool prop_area::foreach_property(prop_bt* const trie, + void (*propfn)(const prop_info* pi, void* cookie), void* cookie) { + if (!trie) return false; + + uint_least32_t left_offset = atomic_load_explicit(&trie->left, memory_order_relaxed); + if (left_offset != 0) { + const int err = foreach_property(to_prop_bt(&trie->left), propfn, cookie); + if (err < 0) return false; + } + uint_least32_t prop_offset = atomic_load_explicit(&trie->prop, memory_order_relaxed); + if (prop_offset != 0) { + prop_info* info = to_prop_info(&trie->prop); + if (!info) return false; + propfn(info, cookie); + } + uint_least32_t children_offset = atomic_load_explicit(&trie->children, memory_order_relaxed); + if (children_offset != 0) { + const int err = foreach_property(to_prop_bt(&trie->children), propfn, cookie); + if (err < 0) return false; + } + uint_least32_t right_offset = atomic_load_explicit(&trie->right, memory_order_relaxed); + if (right_offset != 0) { + const int err = foreach_property(to_prop_bt(&trie->right), propfn, cookie); + if (err < 0) return false; + } + + return true; +} + +const prop_info* prop_area::find(const char* name) { + return find_property(root_node(), name, strlen(name), nullptr, 0, false); +} + +bool prop_area::add(const char* name, unsigned int namelen, const char* value, + unsigned int valuelen) { + return find_property(root_node(), name, namelen, value, valuelen, true); +} + +bool prop_area::foreach (void (*propfn)(const prop_info* pi, void* cookie), void* cookie) { + return foreach_property(root_node(), propfn, cookie); +} diff --git a/aosp/external/toybox/.config-device b/aosp/external/toybox/.config-device new file mode 100644 index 0000000000000000000000000000000000000000..235e166ec2b145e371f0255527dd8ee155f53b6a --- /dev/null +++ b/aosp/external/toybox/.config-device @@ -0,0 +1,350 @@ +# +# Hand-maintained .config file. +# + +# +# General settings. +# + +CONFIG_TOYBOX=y +CONFIG_TOYBOX_CONTAINER=y +# CONFIG_TOYBOX_DEBUG is not set +CONFIG_TOYBOX_FALLOCATE=y +CONFIG_TOYBOX_FIFREEZE=y +CONFIG_TOYBOX_FLOAT=y +CONFIG_TOYBOX_FORK=y +# CONFIG_TOYBOX_FREE is not set +# CONFIG_TOYBOX_GETRANDOM is not set +CONFIG_TOYBOX_HELP_DASHDASH=y +CONFIG_TOYBOX_HELP=y +CONFIG_TOYBOX_I18N=y +CONFIG_TOYBOX_ICONV=y +CONFIG_TOYBOX_LIBCRYPTO=y +CONFIG_TOYBOX_LIBZ=y +# CONFIG_TOYBOX_LSM_NONE is not set +# CONFIG_TOYBOX_MUSL_NOMMU_IS_BROKEN is not set +CONFIG_TOYBOX_NORECURSE=y +CONFIG_TOYBOX_ON_ANDROID=y +CONFIG_TOYBOX_ANDROID_SCHEDPOLICY=y +# CONFIG_TOYBOX_PEDANTIC_ARGS is not set +CONFIG_TOYBOX_SELINUX=y +# CONFIG_TOYBOX_SHADOW is not set +# CONFIG_TOYBOX_SMACK is not set +# CONFIG_TOYBOX_SUID is not set +CONFIG_TOYBOX_UID_SYS=100 +CONFIG_TOYBOX_UID_USR=500 +# CONFIG_TOYBOX_UTMPX is not set + +# +# Selected toys. +# + +CONFIG_ACPI=y +# CONFIG_ARCH is not set +# CONFIG_ARPING is not set +# CONFIG_ARP is not set +# CONFIG_ASCII is not set +CONFIG_BASE64=y +CONFIG_BASENAME=y +# CONFIG_BC is not set +CONFIG_BLKID=y +CONFIG_BLOCKDEV=y +# CONFIG_BOOTCHARTD is not set +# CONFIG_BRCTL is not set +# CONFIG_BUNZIP2 is not set +# CONFIG_BZCAT is not set +CONFIG_CAL=y +# CONFIG_CATV is not set +CONFIG_CAT_V=y +CONFIG_CAT=y +# CONFIG_CD is not set +CONFIG_CHATTR=y +CONFIG_CHCON=y +CONFIG_CHGRP=y +CONFIG_CHMOD=y +CONFIG_CHOWN=y +CONFIG_CHROOT=y +CONFIG_CHRT=y +# CONFIG_CHVT is not set +CONFIG_CKSUM=y +CONFIG_CLEAR=y +CONFIG_CMP=y +CONFIG_COMM=y +# CONFIG_COMPRESS is not set +# CONFIG_COUNT is not set +CONFIG_CPIO=y +CONFIG_CP_MORE=y +CONFIG_CP_PRESERVE=y +CONFIG_CP=y +# CONFIG_CRC32 is not set +# CONFIG_CROND is not set +# CONFIG_CRONTAB is not set +CONFIG_CUT=y +CONFIG_DATE=y +CONFIG_DD=y +# CONFIG_DEALLOCVT is not set +# CONFIG_DEBUG_DHCP is not set +# CONFIG_DECOMPRESS is not set +# CONFIG_DEMO_MANY_OPTIONS is not set +# CONFIG_DEMO_NUMBER is not set +# CONFIG_DEMO_SCANKEY is not set +# CONFIG_DEMO_UTF8TOWC is not set +CONFIG_DEVMEM=y +CONFIG_DF=y +# CONFIG_DHCP6 is not set +# CONFIG_DHCPD is not set +# CONFIG_DHCP is not set +CONFIG_DIFF=y +CONFIG_DIRNAME=y +CONFIG_DMESG=y +# CONFIG_DNSDOMAINNAME is not set +CONFIG_DOS2UNIX=y +# CONFIG_DUMPLEASES is not set +CONFIG_DU=y +CONFIG_ECHO=y +CONFIG_EGREP=y +# CONFIG_EJECT is not set +CONFIG_ENV=y +# CONFIG_EXIT is not set +CONFIG_EXPAND=y +CONFIG_EXPR=y +# CONFIG_FACTOR is not set +CONFIG_FALLOCATE=y +CONFIG_FALSE=y +# CONFIG_FDISK is not set +CONFIG_FGREP=y +CONFIG_FILE=y +CONFIG_FIND=y +CONFIG_FLOCK=y +CONFIG_FMT=y +# CONFIG_FOLD is not set +CONFIG_FREERAMDISK=y +CONFIG_FREE=y +# CONFIG_FSCK is not set +CONFIG_FSFREEZE=y +# CONFIG_FSTYPE is not set +CONFIG_FSYNC=y +# CONFIG_FTPGET is not set +# CONFIG_FTPPUT is not set +CONFIG_GETCONF=y +CONFIG_GETENFORCE=y +CONFIG_GETFATTR=y +CONFIG_GETOPT=y +# CONFIG_GETTY is not set +CONFIG_GREP=y +# CONFIG_GROUPADD is not set +# CONFIG_GROUPDEL is not set +CONFIG_GROUPS=y +CONFIG_GUNZIP=y +CONFIG_GZIP=y +CONFIG_HEAD=y +# CONFIG_HELLO is not set +CONFIG_HELP_EXTRAS=y +CONFIG_HELP=y +# CONFIG_HEXEDIT is not set +# CONFIG_HOSTID is not set +# CONFIG_HOST is not set +CONFIG_HOSTNAME=y +CONFIG_HWCLOCK=y +CONFIG_I2CDETECT=y +CONFIG_I2CDUMP=y +CONFIG_I2CGET=y +CONFIG_I2CSET=y +CONFIG_ICONV=y +CONFIG_ID=y +CONFIG_ID_Z=y +CONFIG_IFCONFIG=y +# CONFIG_INIT is not set +CONFIG_INOTIFYD=y +CONFIG_INSMOD=y +CONFIG_INSTALL=y +CONFIG_IONICE=y +CONFIG_IORENICE=y +CONFIG_IOTOP=y +# CONFIG_IPCRM is not set +# CONFIG_IPCS is not set +# CONFIG_IP is not set +# CONFIG_KILLALL5 is not set +CONFIG_KILLALL=y +CONFIG_KILL=y +# CONFIG_KLOGD is not set +# CONFIG_KLOGD_SOURCE_RING_BUFFER is not set +# CONFIG_LAST is not set +# CONFIG_LINK is not set +CONFIG_LN=y +CONFIG_LOAD_POLICY=y +# CONFIG_LOGGER is not set +# CONFIG_LOGIN is not set +CONFIG_LOGNAME=y +CONFIG_LOG=y +# CONFIG_LOGWRAPPER is not set +CONFIG_LOSETUP=y +CONFIG_LSATTR=y +CONFIG_LS_COLOR=y +CONFIG_LSMOD=y +CONFIG_LSOF=y +CONFIG_LSPCI=y +# CONFIG_LSPCI_TEXT is not set +CONFIG_LSUSB=y +CONFIG_LS=y +CONFIG_LS_Z=y +CONFIG_MAKEDEVS=y +# CONFIG_MAN is not set +# CONFIG_MCOOKIE is not set +CONFIG_MD5SUM=y +# CONFIG_MDEV_CONF is not set +# CONFIG_MDEV is not set +CONFIG_MICROCOM=y +# CONFIG_MIX is not set +CONFIG_MKDIR=y +CONFIG_MKDIR_Z=y +# CONFIG_MKE2FS_EXTENDED is not set +# CONFIG_MKE2FS_GEN is not set +# CONFIG_MKE2FS is not set +# CONFIG_MKE2FS_JOURNAL is not set +# CONFIG_MKE2FS_LABEL is not set +CONFIG_MKFIFO=y +CONFIG_MKFIFO_Z=y +CONFIG_MKNOD=y +CONFIG_MKNOD=y +CONFIG_MKNOD_Z=y +# CONFIG_MKPASSWD is not set +CONFIG_MKSWAP=y +CONFIG_MKTEMP=y +CONFIG_MODINFO=y +CONFIG_MODPROBE=y +CONFIG_MORE=y +CONFIG_MOUNTPOINT=y +CONFIG_MOUNT=y +CONFIG_MV_MORE=y +CONFIG_MV=y +CONFIG_NBD_CLIENT=y +# CONFIG_NETCAT_LISTEN=y +# CONFIG_NETCAT=y +CONFIG_NETSTAT=y +CONFIG_NICE=y +CONFIG_NL=y +CONFIG_NOHUP=y +CONFIG_NPROC=y +CONFIG_NSENTER=y +CONFIG_OD=y +# CONFIG_ONEIT is not set +# CONFIG_OPENVT is not set +CONFIG_PARTPROBE=y +# CONFIG_PASSWD is not set +CONFIG_PASTE=y +CONFIG_PATCH=y +CONFIG_PGREP=y +CONFIG_PIDOF=y +CONFIG_PING=y +CONFIG_PING6=y +CONFIG_PIVOT_ROOT=y +CONFIG_PKILL=y +CONFIG_PMAP=y +CONFIG_PRINTENV=y +CONFIG_PRINTF=y +CONFIG_PS=y +CONFIG_PWDX=y +CONFIG_PWD=y +# CONFIG_READAHEAD is not set +# CONFIG_READELF=y +# CONFIG_READLINK=y +CONFIG_REALPATH=y +# CONFIG_REBOOT is not set +CONFIG_RENICE=y +# CONFIG_RESET is not set +CONFIG_RESTORECON=y +CONFIG_REV=y +CONFIG_RFKILL=y +CONFIG_RMDIR=y +CONFIG_RMMOD=y +CONFIG_RM=y +# CONFIG_ROUTE is not set +CONFIG_RUNCON=y +CONFIG_SED=y +CONFIG_SENDEVENT=y +CONFIG_SEQ=y +CONFIG_SETENFORCE=y +CONFIG_SETFATTR=y +CONFIG_SETSID=y +CONFIG_SHA1SUM=y +CONFIG_SHA224SUM=y +CONFIG_SHA256SUM=y +CONFIG_SHA384SUM=y +CONFIG_SHA512SUM=y +# CONFIG_SH is not set +# CONFIG_SHRED is not set +# CONFIG_SKELETON_ALIAS is not set +# CONFIG_SKELETON is not set +CONFIG_SLEEP_FLOAT=y +CONFIG_SLEEP=y +# CONFIG_SNTP is not set +CONFIG_SORT_BIG=y +CONFIG_SORT_FLOAT=y +CONFIG_SORT=y +CONFIG_SPLIT=y +CONFIG_STAT=y +CONFIG_STRINGS=y +CONFIG_STTY=y +# CONFIG_SU is not set +# CONFIG_SULOGIN is not set +CONFIG_SWAPOFF=y +CONFIG_SWAPON=y +# CONFIG_SWITCH_ROOT is not set +CONFIG_SYNC=y +CONFIG_SYSCTL=y +# CONFIG_SYSLOGD is not set +CONFIG_TAC=y +CONFIG_TAIL_SEEK=y +CONFIG_TAIL=y +CONFIG_TAR=y +CONFIG_TASKSET=y +CONFIG_TASKSET=y +# CONFIG_TCPSVD is not set +CONFIG_TEE=y +# CONFIG_TELNETD is not set +# CONFIG_TELNET is not set +CONFIG_TEST=y +# CONFIG_TFTPD is not set +# CONFIG_TFTP is not set +CONFIG_TIMEOUT=y +CONFIG_TIME=y +CONFIG_TOP=y +CONFIG_TOUCH=y +CONFIG_TRACEROUTE=y +CONFIG_TRUE=y +CONFIG_TRUNCATE=y +CONFIG_TR=y +# CONFIG_TTOP is not set +CONFIG_TTY=y +CONFIG_TUNCTL=y +CONFIG_ULIMIT=y +CONFIG_UMOUNT=y +CONFIG_UNAME=y +CONFIG_UNIQ=y +CONFIG_UNIX2DOS=y +CONFIG_UNLINK=y +CONFIG_UNSHARE=y +CONFIG_UPTIME=y +# CONFIG_USERADD is not set +# CONFIG_USERDEL is not set +CONFIG_USLEEP=y +CONFIG_UUDECODE=y +CONFIG_UUENCODE=y +CONFIG_UUIDGEN=y +CONFIG_VCONFIG=y +CONFIG_VI=y +CONFIG_VMSTAT=y +CONFIG_WATCH=y +CONFIG_WC=y +# CONFIG_WGET is not set +CONFIG_WHICH=y +CONFIG_WHOAMI=y +# CONFIG_WHO is not set +# CONFIG_W is not set +# CONFIG_XARGS_PEDANTIC is not set +CONFIG_XARGS=y +CONFIG_XXD=y +# CONFIG_XZCAT is not set +CONFIG_YES=y +CONFIG_ZCAT=y diff --git a/aosp/external/toybox/.config-linux b/aosp/external/toybox/.config-linux new file mode 100644 index 0000000000000000000000000000000000000000..534779231470e212fd831d555b7fb93efadbd691 --- /dev/null +++ b/aosp/external/toybox/.config-linux @@ -0,0 +1,339 @@ +# +# Hand-maintained .config file. +# + +# +# General settings. +# + +# CONFIG_TOYBOX_ANDROID_SCHEDPOLICY is not set +# CONFIG_TOYBOX_CONTAINER is not set +# CONFIG_TOYBOX_DEBUG is not set +# CONFIG_TOYBOX_FALLOCATE is not set +# CONFIG_TOYBOX_FIFREEZE is not set +CONFIG_TOYBOX_FLOAT=y +CONFIG_TOYBOX_FORK=y +# CONFIG_TOYBOX_FREE is not set +# CONFIG_TOYBOX_GETRANDOM is not set +CONFIG_TOYBOX_HELP_DASHDASH=y +CONFIG_TOYBOX_HELP=y +CONFIG_TOYBOX_I18N=y +CONFIG_TOYBOX_ICONV=y +CONFIG_TOYBOX_LIBCRYPTO=y +CONFIG_TOYBOX_LIBZ=y +CONFIG_TOYBOX_LSM_NONE=y +# CONFIG_TOYBOX_MUSL_NOMMU_IS_BROKEN is not set +# CONFIG_TOYBOX_NORECURSE is not set +# CONFIG_TOYBOX_ON_ANDROID is not set +# CONFIG_TOYBOX_PEDANTIC_ARGS is not set +# CONFIG_TOYBOX_PRLIMIT is not set +# CONFIG_TOYBOX_SELINUX is not set +# CONFIG_TOYBOX_SHADOW is not set +# CONFIG_TOYBOX_SMACK is not set +CONFIG_TOYBOX_SUID=y +CONFIG_TOYBOX_UID_SYS=100 +CONFIG_TOYBOX_UID_USR=500 +# CONFIG_TOYBOX_UTMPX is not set +CONFIG_TOYBOX=y + +# +# Selected toys. +# + +# CONFIG_ACPI is not set +# CONFIG_ARCH is not set +# CONFIG_ARPING is not set +# CONFIG_ARP is not set +# CONFIG_ASCII is not set +# CONFIG_BASE64 is not set +CONFIG_BASENAME=y +# CONFIG_BC is not set +# CONFIG_BLKID is not set +# CONFIG_BLOCKDEV is not set +# CONFIG_BOOTCHARTD is not set +# CONFIG_BRCTL is not set +# CONFIG_BUNZIP2 is not set +# CONFIG_BZCAT is not set +# CONFIG_CAL is not set +# CONFIG_CATV is not set +CONFIG_CAT_V=y +CONFIG_CAT=y +# CONFIG_CD is not set +# CONFIG_CHATTR is not set +# CONFIG_CHCON is not set +# CONFIG_CHGRP is not set +CONFIG_CHMOD=y +# CONFIG_CHOWN is not set +# CONFIG_CHROOT is not set +# CONFIG_CHRT is not set +# CONFIG_CHVT is not set +# CONFIG_CKSUM is not set +# CONFIG_CLEAR is not set +CONFIG_CMP=y +CONFIG_COMM=y +# CONFIG_COUNT is not set +# CONFIG_CPIO is not set +CONFIG_CP_PRESERVE=y +CONFIG_CP=y +# CONFIG_CRC32 is not set +# CONFIG_CROND is not set +# CONFIG_CRONTAB is not set +CONFIG_CUT=y +CONFIG_DATE=y +CONFIG_DD=y +# CONFIG_DEALLOCVT is not set +# CONFIG_DEBUG_DHCP is not set +# CONFIG_DEMO_MANY_OPTIONS is not set +# CONFIG_DEMO_NUMBER is not set +# CONFIG_DEMO_SCANKEY is not set +# CONFIG_DEMO_UTF8TOWC is not set +# CONFIG_DEVMEM is not set +# CONFIG_DF is not set +# CONFIG_DHCP6 is not set +# CONFIG_DHCPD is not set +# CONFIG_DHCP is not set +CONFIG_DIFF=y +CONFIG_DIRNAME=y +# CONFIG_DMESG is not set +# CONFIG_DNSDOMAINNAME is not set +CONFIG_DOS2UNIX=y +# CONFIG_DUMPLEASES is not set +CONFIG_DU=y +CONFIG_ECHO=y +CONFIG_EGREP=y +# CONFIG_EJECT is not set +CONFIG_ENV=y +# CONFIG_EXIT is not set +# CONFIG_EXPAND is not set +CONFIG_EXPR=y +# CONFIG_FACTOR is not set +# CONFIG_FALLOCATE is not set +# CONFIG_FALSE is not set +# CONFIG_FDISK is not set +# CONFIG_FGREP is not set +# CONFIG_FILE is not set +CONFIG_FIND=y +# CONFIG_FLOCK is not set +# CONFIG_FMT is not set +# CONFIG_FOLD is not set +# CONFIG_FREE is not set +# CONFIG_FREERAMDISK is not set +# CONFIG_FSCK is not set +# CONFIG_FSFREEZE is not set +# CONFIG_FSTYPE is not set +# CONFIG_FSYNC is not set +# CONFIG_FTPGET is not set +# CONFIG_FTPPUT is not set +CONFIG_GETCONF=y +# CONFIG_GETENFORCE is not set +# CONFIG_GETFATTR is not set +CONFIG_GETOPT=y +# CONFIG_GETTY is not set +CONFIG_GREP=y +# CONFIG_GROUPADD is not set +# CONFIG_GROUPDEL is not set +# CONFIG_GROUPS is not set +# CONFIG_GUNZIP is not set +CONFIG_GZIP=y +CONFIG_HEAD=y +# CONFIG_HELLO is not set +# CONFIG_HELP_EXTRAS is not set +# CONFIG_HELP is not set +# CONFIG_HEXEDIT is not set +# CONFIG_HOSTID is not set +# CONFIG_HOST is not set +CONFIG_HOSTNAME=y +# CONFIG_HWCLOCK is not set +# CONFIG_I2CDETECT is not set +# CONFIG_I2CDUMP is not set +# CONFIG_I2CGET is not set +# CONFIG_I2CSET is not set +# CONFIG_ICONV is not set +CONFIG_ID=y +# CONFIG_ID_Z is not set +# CONFIG_IFCONFIG is not set +# CONFIG_INIT is not set +# CONFIG_INOTIFYD is not set +# CONFIG_INSMOD is not set +# CONFIG_INSTALL is not set +# CONFIG_IONICE is not set +# CONFIG_IORENICE is not set +# CONFIG_IOTOP is not set +# CONFIG_IPCRM is not set +# CONFIG_IPCS is not set +# CONFIG_IP is not set +# CONFIG_KILLALL5 is not set +# CONFIG_KILLALL is not set +# CONFIG_KILL is not set +# CONFIG_KLOGD is not set +# CONFIG_KLOGD_SOURCE_RING_BUFFER is not set +# CONFIG_LAST is not set +# CONFIG_LINK is not set +CONFIG_LN=y +# CONFIG_LOAD_POLICY is not set +# CONFIG_LOGGER is not set +# CONFIG_LOGIN is not set +# CONFIG_LOG is not set +# CONFIG_LOGNAME is not set +# CONFIG_LOGWRAPPER is not set +# CONFIG_LOSETUP is not set +# CONFIG_LSATTR is not set +# CONFIG_LSMOD is not set +# CONFIG_LSOF is not set +# CONFIG_LSPCI is not set +# CONFIG_LSPCI_TEXT is not set +# CONFIG_LSUSB is not set +CONFIG_LS=y +# CONFIG_MAKEDEVS is not set +# CONFIG_MAN is not set +# CONFIG_MCOOKIE is not set +CONFIG_MD5SUM=y +# CONFIG_MDEV_CONF is not set +# CONFIG_MDEV is not set +CONFIG_MICROCOM=y +# CONFIG_MIX is not set +CONFIG_MKDIR=y +# CONFIG_MKDIR_Z is not set +# CONFIG_MKE2FS_EXTENDED is not set +# CONFIG_MKE2FS_GEN is not set +# CONFIG_MKE2FS is not set +# CONFIG_MKE2FS_JOURNAL is not set +# CONFIG_MKE2FS_LABEL is not set +# CONFIG_MKFIFO is not set +# CONFIG_MKFIFO_Z is not set +# CONFIG_MKNOD is not set +# CONFIG_MKNOD_Z is not set +# CONFIG_MKPASSWD is not set +# CONFIG_MKSWAP is not set +CONFIG_MKTEMP=y +# CONFIG_MODINFO is not set +# CONFIG_MODPROBE is not set +# CONFIG_MORE is not set +# CONFIG_MOUNT is not set +# CONFIG_MOUNTPOINT is not set +CONFIG_MV=y +# CONFIG_NBD_CLIENT is not set +# CONFIG_NETCAT is not set +# CONFIG_NETCAT_LISTEN is not set +# CONFIG_NETSTAT is not set +# CONFIG_NICE is not set +# CONFIG_NL is not set +# CONFIG_NOHUP is not set +CONFIG_NPROC=y +# CONFIG_NSENTER is not set +CONFIG_OD=y +# CONFIG_ONEIT is not set +# CONFIG_OPENVT is not set +# CONFIG_PARTPROBE is not set +# CONFIG_PASSWD is not set +# CONFIG_PASSWD_SAD is not set +CONFIG_PASTE=y +CONFIG_PATCH=y +CONFIG_PGREP=y +# CONFIG_PIDOF is not set +# CONFIG_PING is not set +# CONFIG_PIVOT_ROOT is not set +CONFIG_PKILL=y +# CONFIG_PMAP is not set +# CONFIG_PRINTENV is not set +# CONFIG_PRINTF is not set +CONFIG_PS=y +# CONFIG_PWDX is not set +CONFIG_PWD=y +# CONFIG_READAHEAD is not set +# CONFIG_READELF is not set +CONFIG_READLINK=y +CONFIG_REALPATH=y +# CONFIG_REBOOT is not set +# CONFIG_RENICE is not set +# CONFIG_RESET is not set +# CONFIG_RESTORECON is not set +# CONFIG_REV is not set +# CONFIG_RFKILL is not set +CONFIG_RMDIR=y +# CONFIG_RMMOD is not set +CONFIG_RM=y +# CONFIG_ROUTE is not set +# CONFIG_RUNCON is not set +CONFIG_SED=y +# CONFIG_SENDEVENT is not set +CONFIG_SEQ=y +# CONFIG_SETENFORCE is not set +# CONFIG_SETFATTR is not set +CONFIG_SETSID=y +CONFIG_SHA1SUM=y +# CONFIG_SHA224SUM is not set +CONFIG_SHA256SUM=y +# CONFIG_SHA384SUM is not set +CONFIG_SHA512SUM=y +# CONFIG_SH is not set +# CONFIG_SHRED is not set +# CONFIG_SKELETON_ALIAS is not set +# CONFIG_SKELETON is not set +CONFIG_SLEEP=y +# CONFIG_SNTP is not set +CONFIG_SORT_FLOAT=y +CONFIG_SORT=y +# CONFIG_SPLIT is not set +CONFIG_STAT=y +# CONFIG_STRINGS is not set +# CONFIG_STTY is not set +# CONFIG_SU is not set +# CONFIG_SULOGIN is not set +# CONFIG_SWAPOFF is not set +# CONFIG_SWAPON is not set +# CONFIG_SWITCH_ROOT is not set +# CONFIG_SYNC is not set +# CONFIG_SYSCTL is not set +# CONFIG_SYSLOGD is not set +# CONFIG_TAC is not set +CONFIG_TAIL=y +CONFIG_TAR=y +# CONFIG_TASKSET is not set +# CONFIG_TCPSVD is not set +CONFIG_TEE=y +# CONFIG_TELNETD is not set +# CONFIG_TELNET is not set +CONFIG_TEST=y +# CONFIG_TFTPD is not set +# CONFIG_TFTP is not set +# CONFIG_TIME is not set +CONFIG_TIMEOUT=y +# CONFIG_TOP is not set +CONFIG_TOUCH=y +# CONFIG_TRACEROUTE is not set +CONFIG_TRUE=y +CONFIG_TRUNCATE=y +CONFIG_TR=y +# CONFIG_TTY is not set +# CONFIG_TUNCTL is not set +# CONFIG_ULIMIT is not set +# CONFIG_UMOUNT is not set +CONFIG_UNAME=y +CONFIG_UNIQ=y +CONFIG_UNIX2DOS=y +# CONFIG_UNLINK is not set +# CONFIG_UNSHARE is not set +# CONFIG_UPTIME is not set +# CONFIG_USERADD is not set +# CONFIG_USERDEL is not set +# CONFIG_USLEEP is not set +# CONFIG_UUDECODE is not set +# CONFIG_UUENCODE is not set +# CONFIG_UUIDGEN is not set +# CONFIG_VCONFIG is not set +# CONFIG_VI is not set +# CONFIG_VMSTAT is not set +# CONFIG_WATCH is not set +CONFIG_WC=y +# CONFIG_WGET is not set +CONFIG_WHICH=y +CONFIG_WHOAMI=y +# CONFIG_WHO is not set +# CONFIG_W is not set +# CONFIG_XARGS_PEDANTIC is not set +CONFIG_XARGS=y +CONFIG_XXD=y +# CONFIG_XZCAT is not set +# CONFIG_YES is not set +CONFIG_ZCAT=y diff --git a/aosp/external/toybox/.config-mac b/aosp/external/toybox/.config-mac new file mode 100644 index 0000000000000000000000000000000000000000..00d838cb21e8c5891f66a90acb28845029aaecb5 --- /dev/null +++ b/aosp/external/toybox/.config-mac @@ -0,0 +1,339 @@ +# +# Hand-maintained .config file. +# + +# +# General settings. +# + +# CONFIG_TOYBOX_ANDROID_SCHEDPOLICY is not set +# CONFIG_TOYBOX_CONTAINER is not set +# CONFIG_TOYBOX_DEBUG is not set +# CONFIG_TOYBOX_FALLOCATE is not set +# CONFIG_TOYBOX_FIFREEZE is not set +CONFIG_TOYBOX_FLOAT=y +CONFIG_TOYBOX_FORK=y +# CONFIG_TOYBOX_FREE is not set +# CONFIG_TOYBOX_GETRANDOM is not set +CONFIG_TOYBOX_HELP_DASHDASH=y +CONFIG_TOYBOX_HELP=y +CONFIG_TOYBOX_I18N=y +CONFIG_TOYBOX_ICONV=y +CONFIG_TOYBOX_LIBCRYPTO=y +CONFIG_TOYBOX_LIBZ=y +CONFIG_TOYBOX_LSM_NONE=y +# CONFIG_TOYBOX_MUSL_NOMMU_IS_BROKEN is not set +# CONFIG_TOYBOX_NORECURSE is not set +# CONFIG_TOYBOX_ON_ANDROID is not set +# CONFIG_TOYBOX_PEDANTIC_ARGS is not set +# CONFIG_TOYBOX_PRLIMIT is not set +# CONFIG_TOYBOX_SELINUX is not set +# CONFIG_TOYBOX_SHADOW is not set +# CONFIG_TOYBOX_SMACK is not set +CONFIG_TOYBOX_SUID=y +CONFIG_TOYBOX_UID_SYS=100 +CONFIG_TOYBOX_UID_USR=500 +# CONFIG_TOYBOX_UTMPX is not set +CONFIG_TOYBOX=y + +# +# Selected toys. +# + +# CONFIG_ACPI is not set +# CONFIG_ARCH is not set +# CONFIG_ARPING is not set +# CONFIG_ARP is not set +# CONFIG_ASCII is not set +# CONFIG_BASE64 is not set +CONFIG_BASENAME=y +# CONFIG_BC is not set +# CONFIG_BLKID is not set +# CONFIG_BLOCKDEV is not set +# CONFIG_BOOTCHARTD is not set +# CONFIG_BRCTL is not set +# CONFIG_BUNZIP2 is not set +# CONFIG_BZCAT is not set +# CONFIG_CAL is not set +# CONFIG_CATV is not set +CONFIG_CAT_V=y +CONFIG_CAT=y +# CONFIG_CD is not set +# CONFIG_CHATTR is not set +# CONFIG_CHCON is not set +# CONFIG_CHGRP is not set +CONFIG_CHMOD=y +# CONFIG_CHOWN is not set +# CONFIG_CHROOT is not set +# CONFIG_CHRT is not set +# CONFIG_CHVT is not set +# CONFIG_CKSUM is not set +# CONFIG_CLEAR is not set +CONFIG_CMP=y +CONFIG_COMM=y +# CONFIG_COUNT is not set +# CONFIG_CPIO is not set +CONFIG_CP_PRESERVE=y +CONFIG_CP=y +# CONFIG_CRC32 is not set +# CONFIG_CROND is not set +# CONFIG_CRONTAB is not set +CONFIG_CUT=y +CONFIG_DATE=y +CONFIG_DD=y +# CONFIG_DEALLOCVT is not set +# CONFIG_DEBUG_DHCP is not set +# CONFIG_DEMO_MANY_OPTIONS is not set +# CONFIG_DEMO_NUMBER is not set +# CONFIG_DEMO_SCANKEY is not set +# CONFIG_DEMO_UTF8TOWC is not set +# CONFIG_DEVMEM is not set +# CONFIG_DF is not set +# CONFIG_DHCP6 is not set +# CONFIG_DHCPD is not set +# CONFIG_DHCP is not set +CONFIG_DIFF=y +CONFIG_DIRNAME=y +# CONFIG_DMESG is not set +# CONFIG_DNSDOMAINNAME is not set +CONFIG_DOS2UNIX=y +# CONFIG_DUMPLEASES is not set +CONFIG_DU=y +CONFIG_ECHO=y +CONFIG_EGREP=y +# CONFIG_EJECT is not set +CONFIG_ENV=y +# CONFIG_EXIT is not set +# CONFIG_EXPAND is not set +CONFIG_EXPR=y +# CONFIG_FACTOR is not set +# CONFIG_FALLOCATE is not set +# CONFIG_FALSE is not set +# CONFIG_FDISK is not set +# CONFIG_FGREP is not set +# CONFIG_FILE is not set +CONFIG_FIND=y +# CONFIG_FLOCK is not set +# CONFIG_FMT is not set +# CONFIG_FOLD is not set +# CONFIG_FREE is not set +# CONFIG_FREERAMDISK is not set +# CONFIG_FSCK is not set +# CONFIG_FSFREEZE is not set +# CONFIG_FSTYPE is not set +# CONFIG_FSYNC is not set +# CONFIG_FTPGET is not set +# CONFIG_FTPPUT is not set +CONFIG_GETCONF=y +# CONFIG_GETENFORCE is not set +# CONFIG_GETFATTR is not set +CONFIG_GETOPT=y +# CONFIG_GETTY is not set +CONFIG_GREP=y +# CONFIG_GROUPADD is not set +# CONFIG_GROUPDEL is not set +# CONFIG_GROUPS is not set +# CONFIG_GUNZIP is not set +CONFIG_GZIP=y +CONFIG_HEAD=y +# CONFIG_HELLO is not set +# CONFIG_HELP_EXTRAS is not set +# CONFIG_HELP is not set +# CONFIG_HEXEDIT is not set +# CONFIG_HOSTID is not set +# CONFIG_HOST is not set +CONFIG_HOSTNAME=y +# CONFIG_HWCLOCK is not set +# CONFIG_I2CDETECT is not set +# CONFIG_I2CDUMP is not set +# CONFIG_I2CGET is not set +# CONFIG_I2CSET is not set +# CONFIG_ICONV is not set +CONFIG_ID=y +# CONFIG_ID_Z is not set +# CONFIG_IFCONFIG is not set +# CONFIG_INIT is not set +# CONFIG_INOTIFYD is not set +# CONFIG_INSMOD is not set +# CONFIG_INSTALL is not set +# CONFIG_IONICE is not set +# CONFIG_IORENICE is not set +# CONFIG_IOTOP is not set +# CONFIG_IPCRM is not set +# CONFIG_IPCS is not set +# CONFIG_IP is not set +# CONFIG_KILLALL5 is not set +# CONFIG_KILLALL is not set +# CONFIG_KILL is not set +# CONFIG_KLOGD is not set +# CONFIG_KLOGD_SOURCE_RING_BUFFER is not set +# CONFIG_LAST is not set +# CONFIG_LINK is not set +CONFIG_LN=y +# CONFIG_LOAD_POLICY is not set +# CONFIG_LOGGER is not set +# CONFIG_LOGIN is not set +# CONFIG_LOG is not set +# CONFIG_LOGNAME is not set +# CONFIG_LOGWRAPPER is not set +# CONFIG_LOSETUP is not set +# CONFIG_LSATTR is not set +# CONFIG_LSMOD is not set +# CONFIG_LSOF is not set +# CONFIG_LSPCI is not set +# CONFIG_LSPCI_TEXT is not set +# CONFIG_LSUSB is not set +CONFIG_LS=y +# CONFIG_MAKEDEVS is not set +# CONFIG_MAN is not set +# CONFIG_MCOOKIE is not set +CONFIG_MD5SUM=y +# CONFIG_MDEV_CONF is not set +# CONFIG_MDEV is not set +CONFIG_MICROCOM=y +# CONFIG_MIX is not set +CONFIG_MKDIR=y +# CONFIG_MKDIR_Z is not set +# CONFIG_MKE2FS_EXTENDED is not set +# CONFIG_MKE2FS_GEN is not set +# CONFIG_MKE2FS is not set +# CONFIG_MKE2FS_JOURNAL is not set +# CONFIG_MKE2FS_LABEL is not set +# CONFIG_MKFIFO is not set +# CONFIG_MKFIFO_Z is not set +# CONFIG_MKNOD is not set +# CONFIG_MKNOD_Z is not set +# CONFIG_MKPASSWD is not set +# CONFIG_MKSWAP is not set +CONFIG_MKTEMP=y +# CONFIG_MODINFO is not set +# CONFIG_MODPROBE is not set +# CONFIG_MORE is not set +# CONFIG_MOUNT is not set +# CONFIG_MOUNTPOINT is not set +CONFIG_MV=y +# CONFIG_NBD_CLIENT is not set +# CONFIG_NETCAT is not set +# CONFIG_NETCAT_LISTEN is not set +# CONFIG_NETSTAT is not set +# CONFIG_NICE is not set +# CONFIG_NL is not set +# CONFIG_NOHUP is not set +# CONFIG_NPROC is not set +# CONFIG_NSENTER is not set +CONFIG_OD=y +# CONFIG_ONEIT is not set +# CONFIG_OPENVT is not set +# CONFIG_PARTPROBE is not set +# CONFIG_PASSWD is not set +# CONFIG_PASSWD_SAD is not set +CONFIG_PASTE=y +CONFIG_PATCH=y +# CONFIG_PGREP is not set +# CONFIG_PIDOF is not set +# CONFIG_PING is not set +# CONFIG_PIVOT_ROOT is not set +# CONFIG_PKILL is not set +# CONFIG_PMAP is not set +# CONFIG_PRINTENV is not set +# CONFIG_PRINTF is not set +# CONFIG_PS is not set +# CONFIG_PWDX is not set +CONFIG_PWD=y +# CONFIG_READAHEAD is not set +# CONFIG_READELF is not set +CONFIG_READLINK=y +CONFIG_REALPATH=y +# CONFIG_REBOOT is not set +# CONFIG_RENICE is not set +# CONFIG_RESET is not set +# CONFIG_RESTORECON is not set +# CONFIG_REV is not set +# CONFIG_RFKILL is not set +CONFIG_RMDIR=y +# CONFIG_RMMOD is not set +CONFIG_RM=y +# CONFIG_ROUTE is not set +# CONFIG_RUNCON is not set +CONFIG_SED=y +# CONFIG_SENDEVENT is not set +CONFIG_SEQ=y +# CONFIG_SETENFORCE is not set +# CONFIG_SETFATTR is not set +CONFIG_SETSID=y +CONFIG_SHA1SUM=y +# CONFIG_SHA224SUM is not set +CONFIG_SHA256SUM=y +# CONFIG_SHA384SUM is not set +CONFIG_SHA512SUM=y +# CONFIG_SH is not set +# CONFIG_SHRED is not set +# CONFIG_SKELETON_ALIAS is not set +# CONFIG_SKELETON is not set +CONFIG_SLEEP=y +# CONFIG_SNTP is not set +CONFIG_SORT_FLOAT=y +CONFIG_SORT=y +# CONFIG_SPLIT is not set +CONFIG_STAT=y +# CONFIG_STRINGS is not set +# CONFIG_STTY is not set +# CONFIG_SU is not set +# CONFIG_SULOGIN is not set +# CONFIG_SWAPOFF is not set +# CONFIG_SWAPON is not set +# CONFIG_SWITCH_ROOT is not set +# CONFIG_SYNC is not set +# CONFIG_SYSCTL is not set +# CONFIG_SYSLOGD is not set +# CONFIG_TAC is not set +CONFIG_TAIL=y +CONFIG_TAR=y +# CONFIG_TASKSET is not set +# CONFIG_TCPSVD is not set +CONFIG_TEE=y +# CONFIG_TELNETD is not set +# CONFIG_TELNET is not set +CONFIG_TEST=y +# CONFIG_TFTPD is not set +# CONFIG_TFTP is not set +# CONFIG_TIME is not set +CONFIG_TIMEOUT=y +# CONFIG_TOP is not set +CONFIG_TOUCH=y +# CONFIG_TRACEROUTE is not set +CONFIG_TRUE=y +CONFIG_TRUNCATE=y +CONFIG_TR=y +# CONFIG_TTY is not set +# CONFIG_TUNCTL is not set +# CONFIG_ULIMIT is not set +# CONFIG_UMOUNT is not set +CONFIG_UNAME=y +CONFIG_UNIQ=y +CONFIG_UNIX2DOS=y +# CONFIG_UNLINK is not set +# CONFIG_UNSHARE is not set +# CONFIG_UPTIME is not set +# CONFIG_USERADD is not set +# CONFIG_USERDEL is not set +# CONFIG_USLEEP is not set +# CONFIG_UUDECODE is not set +# CONFIG_UUENCODE is not set +# CONFIG_UUIDGEN is not set +# CONFIG_VCONFIG is not set +# CONFIG_VI is not set +# CONFIG_VMSTAT is not set +# CONFIG_WATCH is not set +CONFIG_WC=y +# CONFIG_WGET is not set +CONFIG_WHICH=y +CONFIG_WHOAMI=y +# CONFIG_WHO is not set +# CONFIG_W is not set +# CONFIG_XARGS_PEDANTIC is not set +CONFIG_XARGS=y +CONFIG_XXD=y +# CONFIG_XZCAT is not set +# CONFIG_YES is not set +CONFIG_ZCAT=y diff --git a/aosp/external/toybox/Android.bp b/aosp/external/toybox/Android.bp new file mode 100644 index 0000000000000000000000000000000000000000..18d3393f3a67db76566e55b2f5d7cebccb8868a2 --- /dev/null +++ b/aosp/external/toybox/Android.bp @@ -0,0 +1,516 @@ +// +// Copyright (C) 2014 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +/* + + --- To sync with upstream: + + # Update source and regenerate generated files. + git remote add toybox https://github.com/landley/toybox.git + git fetch toybox && git merge toybox/master && ./regenerate.sh + + # Make any necessary Android.bp changes and rebuild. + mm -j32 + + # Run all the tests. + ./run-tests-on-android.sh + # Run a single test. + ./run-tests-on-android.sh wc + + # Upload changes. + git commit -a --amend + git push aosp HEAD:refs/for/master # Push to gerrit for review. + git push aosp HEAD:master # Push directly, avoiding gerrit. + + + --- To add a toy: + + # Edit the three .config-* files to enable the toy you want for the targets + # you want it on, and regenerate the generated files: + ./regenerate.sh + + # Edit the relevant `srcs` below, depending on where the toy should be + # available. + + # If you just want to use the toy via "toybox x" rather than "x", you can + # stop now. If you want this toy to have a symbolic link in /system/bin, + # add the toy to symlinks. + +*/ + +cc_defaults { + name: "toybox-defaults", + srcs: [ + "lib/args.c", + "lib/commas.c", + "lib/dirtree.c", + "lib/env.c", + "lib/help.c", + "lib/lib.c", + "lib/linestack.c", + "lib/llist.c", + "lib/net.c", + "lib/portability.c", + "lib/tty.c", + "lib/xwrap.c", + "main.c", + "toys/lsb/gzip.c", + "toys/lsb/hostname.c", + "toys/lsb/md5sum.c", + "toys/lsb/mktemp.c", + "toys/lsb/seq.c", + "toys/net/microcom.c", + "toys/other/dos2unix.c", + "toys/other/readlink.c", + "toys/other/realpath.c", + "toys/other/setsid.c", + "toys/other/stat.c", + "toys/other/timeout.c", + "toys/other/truncate.c", + "toys/other/which.c", + "toys/other/xxd.c", + "toys/other/yes.c", + "toys/pending/dd.c", + "toys/pending/diff.c", + "toys/pending/expr.c", + "toys/pending/getopt.c", + "toys/pending/tr.c", + "toys/posix/basename.c", + "toys/posix/cat.c", + "toys/posix/chmod.c", + "toys/posix/cmp.c", + "toys/posix/comm.c", + "toys/posix/cp.c", + "toys/posix/cut.c", + "toys/posix/date.c", + "toys/posix/dirname.c", + "toys/posix/du.c", + "toys/posix/echo.c", + "toys/posix/env.c", + "toys/posix/find.c", + "toys/posix/getconf.c", + "toys/posix/grep.c", + "toys/posix/head.c", + "toys/posix/id.c", + "toys/posix/ln.c", + "toys/posix/ls.c", + "toys/posix/mkdir.c", + "toys/posix/od.c", + "toys/posix/paste.c", + "toys/posix/patch.c", + "toys/posix/pwd.c", + "toys/posix/rm.c", + "toys/posix/rmdir.c", + "toys/posix/sed.c", + "toys/posix/sleep.c", + "toys/posix/sort.c", + "toys/posix/tail.c", + "toys/posix/tar.c", + "toys/posix/tee.c", + "toys/posix/test.c", + "toys/posix/touch.c", + "toys/posix/true.c", + "toys/posix/uname.c", + "toys/posix/uniq.c", + "toys/posix/wc.c", + "toys/posix/xargs.c", + ], + + cflags: [ + "-std=gnu11", + "-Os", + "-Wall", + "-Werror", + "-Wno-char-subscripts", + "-Wno-deprecated-declarations", + "-Wno-missing-field-initializers", + "-Wno-pointer-arith", + "-Wno-sign-compare", + "-Wno-string-plus-int", + "-Wno-unused-parameter", + "-Wno-unused-variable", + "-funsigned-char", + "-ffunction-sections", + "-fdata-sections", + "-fno-asynchronous-unwind-tables", + "-DTOYBOX_VENDOR=\"-android\"", + ], + + // This doesn't actually prevent us from dragging in libc++ at runtime + // because libnetd_client.so is C++. + stl: "none", + + shared_libs: [ + "libcrypto", + "libz", + ], + + target: { + linux_glibc: { + local_include_dirs: ["android/linux"], + }, + + darwin: { + local_include_dirs: ["android/mac"], + cflags: [ + // You can't have toybox cp(1) on macOS before 10.13. + "-mmacosx-version-min=10.13", + "-UMACOSX_DEPLOYMENT_TARGET", + "-DMACOSX_DEPLOYMENT_TARGET=10.13", + // macOS' getgroups(3) signature differs. + "-Wno-pointer-sign", + // diff.c defines MIN and MAX which (only on macOS) we're + // also getting from . + "-Wno-macro-redefined", + ], + }, + + linux: { + srcs: [ + "toys/posix/ps.c", + "toys/other/taskset.c", + ], + }, + + android: { + local_include_dirs: ["android/device"], + srcs: [ + "toys/android/getenforce.c", + "toys/android/load_policy.c", + "toys/android/log.c", + "toys/android/restorecon.c", + "toys/android/runcon.c", + "toys/android/sendevent.c", + "toys/android/setenforce.c", + "toys/lsb/dmesg.c", + "toys/lsb/killall.c", + "toys/lsb/mknod.c", + "toys/lsb/mount.c", + "toys/lsb/pidof.c", + "toys/lsb/sync.c", + "toys/lsb/umount.c", + "toys/net/ifconfig.c", + "toys/net/netcat.c", + "toys/net/netstat.c", + "toys/net/ping.c", + "toys/net/rfkill.c", + "toys/net/tunctl.c", + "toys/other/acpi.c", + "toys/other/base64.c", + "toys/other/blkid.c", + "toys/other/blockdev.c", + "toys/other/chcon.c", + "toys/other/chroot.c", + "toys/other/chrt.c", + "toys/other/clear.c", + "toys/other/devmem.c", + "toys/other/fallocate.c", + "toys/other/flock.c", + "toys/other/fmt.c", + "toys/other/free.c", + "toys/other/freeramdisk.c", + "toys/other/fsfreeze.c", + "toys/other/fsync.c", + "toys/other/help.c", + "toys/other/hwclock.c", + "toys/other/i2ctools.c", + "toys/other/inotifyd.c", + "toys/other/insmod.c", + "toys/other/ionice.c", + "toys/other/losetup.c", + "toys/other/lsattr.c", + "toys/other/lsmod.c", + "toys/other/lspci.c", + "toys/other/lsusb.c", + "toys/other/makedevs.c", + "toys/other/mkswap.c", + "toys/other/modinfo.c", + "toys/other/mountpoint.c", + "toys/other/nbd_client.c", + "toys/other/nsenter.c", + "toys/other/partprobe.c", + "toys/other/pivot_root.c", + "toys/other/pmap.c", + "toys/other/printenv.c", + "toys/other/pwdx.c", + "toys/other/rev.c", + "toys/other/rmmod.c", + "toys/other/setfattr.c", + "toys/other/swapoff.c", + "toys/other/swapon.c", + "toys/other/sysctl.c", + "toys/other/tac.c", + "toys/other/uptime.c", + "toys/other/usleep.c", + "toys/other/uuidgen.c", + "toys/other/vconfig.c", + "toys/other/vmstat.c", + "toys/other/watch.c", + "toys/pending/getfattr.c", + "toys/pending/lsof.c", + "toys/pending/modprobe.c", + "toys/pending/more.c", + "toys/pending/readelf.c", + "toys/pending/stty.c", + "toys/pending/traceroute.c", + "toys/pending/vi.c", + "toys/posix/cal.c", + "toys/posix/chgrp.c", + "toys/posix/cksum.c", + "toys/posix/cpio.c", + "toys/posix/df.c", + "toys/posix/expand.c", + "toys/posix/false.c", + "toys/posix/file.c", + "toys/posix/iconv.c", + "toys/posix/kill.c", + "toys/posix/mkfifo.c", + "toys/posix/nice.c", + "toys/posix/nl.c", + "toys/posix/nohup.c", + "toys/posix/printf.c", + "toys/posix/renice.c", + "toys/posix/split.c", + "toys/posix/strings.c", + "toys/posix/time.c", + "toys/posix/tty.c", + "toys/posix/ulimit.c", + "toys/posix/unlink.c", + "toys/posix/uudecode.c", + "toys/posix/uuencode.c", + ], + + // not usable on Android?: freeramdisk fsfreeze makedevs nbd-client + // partprobe pivot_root pwdx rev rfkill vconfig + // currently prefer external/e2fsprogs: blkid + // currently prefer external/iputils: ping ping6 + + symlinks: [ + "acpi", + "base64", + "basename", + "blockdev", + "cal", + "cat", + "chattr", + "chcon", + "chgrp", + "chmod", + "chown", + "chroot", + "chrt", + "cksum", + "clear", + "comm", + "cmp", + "cp", + "cpio", + "cut", + "date", + "dd", + "devmem", + "df", + "diff", + "dirname", + "dmesg", + "dos2unix", + "du", + "echo", + "egrep", + "env", + "expand", + "expr", + "fallocate", + "false", + "fgrep", + "file", + "find", + "flock", + "fmt", + "free", + "fsync", + "getconf", + "getenforce", + "grep", + "groups", + "gunzip", + "gzip", + "head", + "hostname", + "hwclock", + "i2cdetect", + "i2cdump", + "i2cget", + "i2cset", + "iconv", + "id", + "ifconfig", + "inotifyd", + "insmod", + "install", + "ionice", + "iorenice", + "kill", + "killall", + "load_policy", + "ln", + "log", + "logname", + "losetup", + "ls", + "lsattr", + "lsmod", + "lsof", + "lspci", + "lsusb", + "md5sum", + "mkdir", + "mkfifo", + "mknod", + "mkswap", + "mktemp", + "microcom", + "modinfo", + "more", + "mount", + "mountpoint", + "mv", + "netstat", + "nice", + "nl", + "nohup", + "nproc", + "nsenter", + "od", + "paste", + "patch", + "pgrep", + "pidof", + "pkill", + "pmap", + "printenv", + "printf", + "ps", + "pwd", + "readlink", + "realpath", + "renice", + "restorecon", + "rm", + "rmdir", + "rmmod", + "runcon", + "sed", + "sendevent", + "seq", + "setenforce", + "setsid", + "sha1sum", + "sha224sum", + "sha256sum", + "sha384sum", + "sha512sum", + "sleep", + "sort", + "split", + "stat", + "strings", + "stty", + "swapoff", + "swapon", + "sync", + "sysctl", + "tac", + "tail", + "tar", + "taskset", + "tee", + "test", + "time", + "timeout", + "top", + "touch", + "tr", + "true", + "truncate", + "tty", + "ulimit", + "umount", + "uname", + "uniq", + "unix2dos", + "unlink", + "unshare", + "uptime", + "usleep", + "uudecode", + "uuencode", + "uuidgen", + "vmstat", + "watch", + "wc", + "which", + "whoami", + "xargs", + "xxd", + "yes", + "zcat", + ], + + shared_libs: [ + "liblog", + "libprocessgroup", + "libselinux", + ], + }, + }, +} + +//########################################### +// toybox for /system, /vendor, and /recovery +//########################################### + +cc_binary { + name: "toybox", + defaults: ["toybox-defaults"], + host_supported: true, + recovery_available: true, +} + +cc_binary { + name: "toybox_vendor", + defaults: ["toybox-defaults"], + vendor: true, +} + +//########################################### +// Running the toybox tests +//########################################### + +sh_test { + name: "toybox-tests", + src: "run-tests-on-android.sh", + filename: "run-tests-on-android.sh", + test_suites: ["general-tests"], + host_supported: true, + device_supported: false, + test_config: "toybox-tests.xml", + data: [ + "tests/**/*", + "scripts/runtest.sh", + ], +} + diff --git a/aosp/external/toybox/Config.in b/aosp/external/toybox/Config.in new file mode 100644 index 0000000000000000000000000000000000000000..362b22f38e23b252c6201bdd826027bf33eb90e7 --- /dev/null +++ b/aosp/external/toybox/Config.in @@ -0,0 +1,198 @@ +mainmenu "Toybox Configuration" + + +source generated/Config.probed +source generated/Config.in + +comment "" + +menu "Toybox global settings" + +# This entry controls the multiplexer, disabled for single command builds +config TOYBOX + bool + default y + help + usage: toybox [--long | --help | --version | [command] [arguments...]] + + With no arguments, shows available commands. First argument is + name of a command to run, followed by any arguments to that command. + + --long Show path to each command + + To install command symlinks with paths, try: + for i in $(/bin/toybox --long); do ln -s /bin/toybox $i; done + or all in one directory: + for i in $(./toybox); do ln -s toybox $i; done; PATH=$PWD:$PATH + + Most toybox commands also understand the following arguments: + + --help Show command help (only) + --version Show toybox version (only) + + The filename "-" means stdin/stdout, and "--" stops argument parsing. + + Numerical arguments accept a single letter suffix for + kilo, mega, giga, tera, peta, and exabytes, plus an additional + "d" to indicate decimal 1000's instead of 1024. + + Durations can be decimal fractions and accept minute ("m"), hour ("h"), + or day ("d") suffixes (so 0.1m = 6s). + +config TOYBOX_SUID + bool "SUID support" + default y + help + Support for the Set User ID bit, to install toybox suid root and drop + permissions for commands which do not require root access. To use + this change ownership of the file to the root user and set the suid + bit in the file permissions: + + chown root:root toybox; chmod +s toybox + +choice + prompt "Security Blanket" + default TOYBOX_LSM_NONE + help + Select a Linux Security Module to complicate your system + until you can't find holes in it. + +config TOYBOX_LSM_NONE + bool "None" + help + Don't try to achieve "watertight" by plugging the holes in a + collander, instead use conventional unix security (and possibly + Linux Containers) for a simple straightforward system. + +config TOYBOX_SELINUX + bool "SELinux support" + help + Include SELinux options in commands such as ls, and add + SELinux-specific commands such as chcon to the Android menu. + +config TOYBOX_SMACK + bool "SMACK support" + help + Include SMACK options in commands like ls for systems like Tizen. + +endchoice + +config TOYBOX_LIBCRYPTO + bool "Use libcrypto (OpenSSL/BoringSSL)" + default n + help + Use faster hash functions out of external -lcrypto library. + +config TOYBOX_LIBZ + bool "Use libz (zlib)" + default n + help + Use libz for gz support. + +config TOYBOX_FLOAT + bool "Floating point support" + default y + help + Include floating point support infrastructure and commands that + require it. + +config TOYBOX_HELP + bool "Help messages" + default y + help + Include help text for each command. + +config TOYBOX_HELP_DASHDASH + bool "--help and --version" + default y + depends on TOYBOX_HELP + help + Support --help argument in all commands, even ones with a NULL + optstring. (Use TOYFLAG_NOHELP to disable.) Produces the same output + as "help command". --version shows toybox version. + +config TOYBOX_I18N + bool "Internationalization support" + default y + help + Support for UTF-8 character sets, and some locale support. + +config TOYBOX_FREE + bool "Free memory unnecessarily" + default n + help + When a program exits, the operating system will clean up after it + (free memory, close files, etc). To save size, toybox usually relies + on this behavior. If you're running toybox under a debugger or + without a real OS (ala newlib+libgloss), enable this to make toybox + clean up after itself. + +config TOYBOX_NORECURSE + bool "Disable recursive execution" + default n + help + When one toybox command calls another, usually it just calls the new + command's main() function rather than searching the $PATH and calling + exec on another file (which is much slower). + + This disables that optimization, so toybox will run external commands + even when it has a built-in version of that command. This requires + toybox symlinks to be installed in the $PATH, or re-invoking the + "toybox" multiplexer command by name. + +config TOYBOX_DEBUG + bool "Debugging tests" + default n + help + Enable extra checks for debugging purposes. All of them catch + things that can only go wrong at development time, not runtime. + +config TOYBOX_PEDANTIC_ARGS + bool "Pedantic argument checking" + default n + help + Check arguments for commands that have no arguments. + +config TOYBOX_UID_SYS + int "First system UID" + default 100 + help + When commands like useradd/groupadd allocate system IDs, start here. + +config TOYBOX_UID_USR + int "First user UID" + default 500 + help + When commands like useradd/groupadd allocate user IDs, start here. + +config TOYBOX_FORCE_NOMMU + bool "Enable nommu support when the build can't detect it." + default n + help + When using musl-libc on a nommu system, you'll need to say "y" here + unless you used the patch in the mcm-buildall.sh script. You can also + say "y" here to test the nommu codepaths on an mmu system. + + A nommu system can't use fork(), it can only vfork() which suspends + the parent until the child calls exec() or exits. When a program + needs a second instance of itself to run specific code at the same + time as the parent, it must use a more complicated approach (such as + exec("/proc/self/exe") then pass data to the new child through a pipe) + which is larger and slower, especially for things like toysh subshells + that need to duplicate a lot of internal state in the child process + fork() gives you for free. + + Libraries like uclibc omit fork() on nommu systems, allowing + compile-time probes to select which codepath to use. But musl + intentionally includes a broken version of fork() that always returns + -ENOSYS on nommu systems, and goes out of its way to prevent any + cross-compile compatible compile-time probes for a nommu system. + (It doesn't even #define __MUSL__ in features.h.) Musl does this + despite the fact that a nommu system can't even run standard ELF + binaries (requiring specially packaged executables) because it wants + to force every program to either include all nommu code in every + instance ever built, or drop nommu support altogether. + + Building a toolchain scripts/mcm-buildall.sh patches musl to fix this. + +endmenu diff --git a/aosp/external/toybox/LICENSE b/aosp/external/toybox/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..24d959a414acc36030ddac2c832b3443a41fde1a --- /dev/null +++ b/aosp/external/toybox/LICENSE @@ -0,0 +1,12 @@ +Copyright (C) 2006, 2019 by Rob Landley + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/aosp/external/toybox/MODULE_LICENSE_BSD b/aosp/external/toybox/MODULE_LICENSE_BSD new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/aosp/external/toybox/Makefile b/aosp/external/toybox/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..69d24870c408df6f2057afa13b2f1fd7ac485f4d --- /dev/null +++ b/aosp/external/toybox/Makefile @@ -0,0 +1,87 @@ +# Makefile for toybox. +# Copyright 2006 Rob Landley + +# If people set these on the make command line, use 'em +# Note that CC defaults to "cc" so the one in configure doesn't get +# used when scripts/make.sh and care called through "make". + +HOSTCC?=cc + +export CROSS_COMPILE CFLAGS OPTIMIZE LDOPTIMIZE CC HOSTCC V STRIP + +all: toybox + +KCONFIG_CONFIG ?= .config + +toybox_stuff: $(KCONFIG_CONFIG) *.[ch] lib/*.[ch] toys/*/*.c scripts/*.sh + +toybox generated/unstripped/toybox: toybox_stuff + scripts/make.sh + +.PHONY: clean distclean baseline bloatcheck install install_flat \ + uinstall uninstall_flat tests help toybox_stuff change \ + list list_working list_pending root run_root + +include kconfig/Makefile +-include .singlemake + +$(KCONFIG_CONFIG): $(KCONFIG_TOP) + @if [ -e "$(KCONFIG_CONFIG)" ]; then make silentoldconfig; \ + else echo "Not configured (run 'make defconfig' or 'make menuconfig')";\ + exit 1; fi + +$(KCONFIG_TOP): generated/Config.in generated/Config.probed +generated/Config.probed: generated/Config.in +generated/Config.in: toys/*/*.c scripts/genconfig.sh + scripts/genconfig.sh + +# Development targets +baseline: generated/unstripped/toybox + @cp generated/unstripped/toybox generated/unstripped/toybox_old + +bloatcheck: generated/unstripped/toybox_old generated/unstripped/toybox + @scripts/bloatcheck generated/unstripped/toybox_old generated/unstripped/toybox + +install_flat: + scripts/install.sh --symlink --force + +install_airlock: + scripts/install.sh --symlink --force --airlock + +install: + scripts/install.sh --long --symlink --force + +uninstall_flat: + scripts/install.sh --uninstall + +uninstall: + scripts/install.sh --long --uninstall + +change: + scripts/change.sh + +root_clean: + @rm -rf root + @echo root cleaned + +clean:: + @rm -rf toybox generated change .singleconfig* cross-log-*.* + @echo cleaned + +# If singlemake was in generated/ "make clean; make test_ls" wouldn't work. +distclean: clean root_clean + @rm -f toybox* .config* .singlemake + @echo removed .config + +tests: + scripts/test.sh + +root: + scripts/mkroot.sh $(MAKEFLAGS) + +run_root: + C=$$(basename "$$CROSS_COMPILE" | sed 's/-.*//'); \ + cd root/"$${C:-host}" && ./qemu-*.sh $(MAKEFLAGS) || exit 1 + +help:: + @cat scripts/help.txt diff --git a/aosp/external/toybox/NOTICE b/aosp/external/toybox/NOTICE new file mode 100644 index 0000000000000000000000000000000000000000..24d959a414acc36030ddac2c832b3443a41fde1a --- /dev/null +++ b/aosp/external/toybox/NOTICE @@ -0,0 +1,12 @@ +Copyright (C) 2006, 2019 by Rob Landley + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/aosp/external/toybox/OWNERS b/aosp/external/toybox/OWNERS new file mode 100644 index 0000000000000000000000000000000000000000..7529cb92094072e5868d3ff72035f8c1046d1a65 --- /dev/null +++ b/aosp/external/toybox/OWNERS @@ -0,0 +1 @@ +include platform/system/core:/janitors/OWNERS diff --git a/aosp/external/toybox/README b/aosp/external/toybox/README new file mode 100644 index 0000000000000000000000000000000000000000..4b3dee0097f62dd67e40a5eb2e7d5435b7f28e89 --- /dev/null +++ b/aosp/external/toybox/README @@ -0,0 +1,169 @@ +Toybox: all-in-one Linux command line. + +--- Getting started + +You can download static binaries for various targets from: + + http://landley.net/toybox/bin + +The special name "." indicates the current directory (just like ".." means +the parent directory), and you can run a program that isn't in the $PATH by +specifying a path to it, so this should work: + + wget http://landley.net/toybox/bin/toybox-x86_64 + chmod +x toybox-x86_64 + ./toybox-x86_64 echo hello world + +--- Building toybox + +Type "make help" for build instructions. + +Toybox uses the "make menuconfig; make; make install" idiom same as +the Linux kernel. Usually you want something like: + + make defconfig + make + make install + +Or maybe: + + LDFLAGS="--static" CROSS_COMPILE=armv5l- make defconfig toybox + PREFIX=/path/to/root/filesystem/bin make install_flat + +The file "configure" defines default values for many environment +variables that control the toybox build; if you set a value for any of +these, your value is used instead of the default in that file. + +The CROSS_COMPILE argument above is optional, the default builds a version of +toybox to run on the current machine. Cross compiling requires an appropriately +prefixed cross compiler toolchain, several example toolchains are available at: + + http://landley.net/aboriginal/bin + +For the "CROSS_COMPILE=armv5l-" example above, download +cross-compiler-armv5l.tar.bz2, extract it, and add its "bin" subdirectory to +your $PATH. (And yes, the trailing - is significant, because the prefix +includes a dash.) + +For more about cross compiling, see: + + http://landley.net/writing/docs/cross-compiling.html + http://landley.net/aboriginal/architectures.html + +For a more thorough description of the toybox build process, see +http://landley.net/toybox/code.html#building + +--- Using toybox + +The toybox build produces a multicall binary, a "swiss-army-knife" program +that acts differently depending on the name it was called by (cp, mv, cat...). +Installing toybox adds symlinks for each command name to the $PATH. + +The special "toybox" command treats its first argument as the command to run. +With no arguments, it lists available commands. This allows you to use toybox +without installing it. This is the only command that can have an arbitrary +suffix (hence "toybox-armv5l"). + +The "help" command provides information about each command (ala "help cat"). + +--- Configuring toybox + +It works like the Linux kernel: allnoconfig, defconfig, and menuconfig edit +a ".config" file that selects which features to include in the resulting +binary. You can save and re-use your .config file, although may want to +run "make oldconfig" to re-run the dependency resolver when migrating to +new versions. + +The maximum sane configuration is "make defconfig": allyesconfig isn't +recommended for toybox because it enables unfinished commands and debug code. + +--- Creating a Toybox-based Linux system + +Toybox is not a complete operating system, it's a program that runs under +an operating system. Booting a simple system to a shell prompt requires +three packages: an operating system kernel (Linux*) to drive the hardware, +one or more programs for the system to run (toybox), and a C library ("libc") +to tie them together (toybox has been tested with musl, uClibc, glibc, +and bionic). + +The C library is part of a "toolchain", which is an integrated suite +of compiler, assembler, and linker, plus the standard headers and libraries +necessary to build C programs. (And miscellaneous binaries like nm and objdump.) + +Static linking (with the --static option) copies the shared library contents +into the program, resulting in larger but more portable programs, which +can run even if they're the only file in the filesystem. Otherwise, +the "dynamically" linked programs require the library files to be present on +the target system ("man ldd" and "man ld.so" for details). + +An example toybox-based system is Aboriginal Linux: + + http://landley.net/aboriginal/about.html + +That's designed to run under qemu, emulating several different hardware +architectures (x86, x86-64, arm, mips, sparc, powerpc, sh4). Each toybox +release is regression tested by building Linux From Scratch under this +toybox-based system on each supported architecture, using QEMU to emulate +big and little endian systems with different word size and alignment +requirements. (The eventual goal is to replace Linux From Scratch with +the Android Open Source Project.) + +* Or something providing the same API such as FreeBSD's Linux emulation layer. + +--- Presentations + +1) "Why Toybox?" talk at the Embedded Linux Conference in 2013 + + video: http://youtu.be/SGmtP5Lg_t0 + outline: http://landley.net/talks/celf-2013.txt + linked from http://landley.net/toybox/ in nav bar on left as "Why is it?" + - march 21, 2013 entry has section links. + +2) "Why Public Domain?" The rise and fall of copyleft, Ohio LinuxFest 2013 + + audio: https://archive.org/download/OhioLinuxfest2013/24-Rob_Landley-The_Rise_and_Fall_of_Copyleft.mp3 + outline: http://landley.net/talks/ohio-2013.txt + +3) Why did I do Aboriginal Linux (which led me here) + + 260 slide presentation: + https://speakerdeck.com/landley/developing-for-non-x86-targets-using-qemu + + How and why to make android self-hosting: + http://landley.net/aboriginal/about.html#selfhost + +4) What's new with toybox (ELC 2015 status update): + + video: http://elinux.org/ELC_2015_Presentations + outline: http://landley.net/talks/celf-2015.txt + +--- Contributing + +The three important URLs for communicating with the toybox project are: + + web page: http://landley.net/toybox + + mailing list: http://lists.landley.net/listinfo.cgi/toybox-landley.net + + git repo: http://github.com/landley/toybox + +The maintainer prefers patches be sent to the mailing list. If you use git, +the easy thing to do is: + + git format-patch -1 $HASH + +Then send a file attachment. The list holds messages from non-subscribers +for moderation, but I usually get to them in a day or two. + +Although I do accept pull requests on github, I download the patches and +apply them with "git am" (which avoids gratuitous merge commits). Closing +the pull request is then the submitter's responsibility. + +If I haven't responded to your patch after one week, feel free to remind +me of it. + +Android's policy for toybox patches is that non-build patches should go +upstream first (into vanilla toybox, with discussion on the toybox mailing +list) and then be pulled into android's toybox repo from there. (They +generally resync on fridays). The exception is patches to their build scripts +(Android.mk and the checked-in generated/* files) which go directly to AOSP. diff --git a/aosp/external/toybox/TEST_MAPPING b/aosp/external/toybox/TEST_MAPPING new file mode 100644 index 0000000000000000000000000000000000000000..735383806f87d7a3bd1dc8afbbd32bc7b91ef525 --- /dev/null +++ b/aosp/external/toybox/TEST_MAPPING @@ -0,0 +1,7 @@ +{ + "presubmit": [ + { + "name": "toybox-tests" + } + ] +} diff --git a/aosp/external/toybox/android/device/generated/config.h b/aosp/external/toybox/android/device/generated/config.h new file mode 100644 index 0000000000000000000000000000000000000000..51480bedf705028d74afa5700668ee1eba00ae85 --- /dev/null +++ b/aosp/external/toybox/android/device/generated/config.h @@ -0,0 +1,672 @@ +#define CFG_TOYBOX 1 +#define USE_TOYBOX(...) __VA_ARGS__ +#define CFG_TOYBOX_CONTAINER 1 +#define USE_TOYBOX_CONTAINER(...) __VA_ARGS__ +#define CFG_TOYBOX_DEBUG 0 +#define USE_TOYBOX_DEBUG(...) +#define CFG_TOYBOX_FALLOCATE 1 +#define USE_TOYBOX_FALLOCATE(...) __VA_ARGS__ +#define CFG_TOYBOX_FIFREEZE 1 +#define USE_TOYBOX_FIFREEZE(...) __VA_ARGS__ +#define CFG_TOYBOX_FLOAT 1 +#define USE_TOYBOX_FLOAT(...) __VA_ARGS__ +#define CFG_TOYBOX_FORK 1 +#define USE_TOYBOX_FORK(...) __VA_ARGS__ +#define CFG_TOYBOX_FREE 0 +#define USE_TOYBOX_FREE(...) +#define CFG_TOYBOX_GETRANDOM 0 +#define USE_TOYBOX_GETRANDOM(...) +#define CFG_TOYBOX_HELP_DASHDASH 1 +#define USE_TOYBOX_HELP_DASHDASH(...) __VA_ARGS__ +#define CFG_TOYBOX_HELP 1 +#define USE_TOYBOX_HELP(...) __VA_ARGS__ +#define CFG_TOYBOX_I18N 1 +#define USE_TOYBOX_I18N(...) __VA_ARGS__ +#define CFG_TOYBOX_ICONV 1 +#define USE_TOYBOX_ICONV(...) __VA_ARGS__ +#define CFG_TOYBOX_LIBCRYPTO 1 +#define USE_TOYBOX_LIBCRYPTO(...) __VA_ARGS__ +#define CFG_TOYBOX_LIBZ 1 +#define USE_TOYBOX_LIBZ(...) __VA_ARGS__ +#define CFG_TOYBOX_LSM_NONE 0 +#define USE_TOYBOX_LSM_NONE(...) +#define CFG_TOYBOX_MUSL_NOMMU_IS_BROKEN 0 +#define USE_TOYBOX_MUSL_NOMMU_IS_BROKEN(...) +#define CFG_TOYBOX_NORECURSE 1 +#define USE_TOYBOX_NORECURSE(...) __VA_ARGS__ +#define CFG_TOYBOX_ON_ANDROID 1 +#define USE_TOYBOX_ON_ANDROID(...) __VA_ARGS__ +#define CFG_TOYBOX_ANDROID_SCHEDPOLICY 1 +#define USE_TOYBOX_ANDROID_SCHEDPOLICY(...) __VA_ARGS__ +#define CFG_TOYBOX_PEDANTIC_ARGS 0 +#define USE_TOYBOX_PEDANTIC_ARGS(...) +#define CFG_TOYBOX_SELINUX 1 +#define USE_TOYBOX_SELINUX(...) __VA_ARGS__ +#define CFG_TOYBOX_SHADOW 0 +#define USE_TOYBOX_SHADOW(...) +#define CFG_TOYBOX_SMACK 0 +#define USE_TOYBOX_SMACK(...) +#define CFG_TOYBOX_SUID 0 +#define USE_TOYBOX_SUID(...) +#define CFG_TOYBOX_UID_SYS 100 +#define CFG_TOYBOX_UID_USR 500 +#define CFG_TOYBOX_UTMPX 0 +#define USE_TOYBOX_UTMPX(...) +#define CFG_ACPI 1 +#define USE_ACPI(...) __VA_ARGS__ +#define CFG_ARCH 0 +#define USE_ARCH(...) +#define CFG_ARPING 0 +#define USE_ARPING(...) +#define CFG_ARP 0 +#define USE_ARP(...) +#define CFG_ASCII 0 +#define USE_ASCII(...) +#define CFG_BASE64 1 +#define USE_BASE64(...) __VA_ARGS__ +#define CFG_BASENAME 1 +#define USE_BASENAME(...) __VA_ARGS__ +#define CFG_BC 0 +#define USE_BC(...) +#define CFG_BLKID 1 +#define USE_BLKID(...) __VA_ARGS__ +#define CFG_BLOCKDEV 1 +#define USE_BLOCKDEV(...) __VA_ARGS__ +#define CFG_BOOTCHARTD 0 +#define USE_BOOTCHARTD(...) +#define CFG_BRCTL 0 +#define USE_BRCTL(...) +#define CFG_BUNZIP2 0 +#define USE_BUNZIP2(...) +#define CFG_BZCAT 0 +#define USE_BZCAT(...) +#define CFG_CAL 1 +#define USE_CAL(...) __VA_ARGS__ +#define CFG_CATV 0 +#define USE_CATV(...) +#define CFG_CAT_V 1 +#define USE_CAT_V(...) __VA_ARGS__ +#define CFG_CAT 1 +#define USE_CAT(...) __VA_ARGS__ +#define CFG_CD 0 +#define USE_CD(...) +#define CFG_CHATTR 1 +#define USE_CHATTR(...) __VA_ARGS__ +#define CFG_CHCON 1 +#define USE_CHCON(...) __VA_ARGS__ +#define CFG_CHGRP 1 +#define USE_CHGRP(...) __VA_ARGS__ +#define CFG_CHMOD 1 +#define USE_CHMOD(...) __VA_ARGS__ +#define CFG_CHOWN 1 +#define USE_CHOWN(...) __VA_ARGS__ +#define CFG_CHROOT 1 +#define USE_CHROOT(...) __VA_ARGS__ +#define CFG_CHRT 1 +#define USE_CHRT(...) __VA_ARGS__ +#define CFG_CHVT 0 +#define USE_CHVT(...) +#define CFG_CKSUM 1 +#define USE_CKSUM(...) __VA_ARGS__ +#define CFG_CLEAR 1 +#define USE_CLEAR(...) __VA_ARGS__ +#define CFG_CMP 1 +#define USE_CMP(...) __VA_ARGS__ +#define CFG_COMM 1 +#define USE_COMM(...) __VA_ARGS__ +#define CFG_COMPRESS 0 +#define USE_COMPRESS(...) +#define CFG_COUNT 0 +#define USE_COUNT(...) +#define CFG_CPIO 1 +#define USE_CPIO(...) __VA_ARGS__ +#define CFG_CP_MORE 1 +#define USE_CP_MORE(...) __VA_ARGS__ +#define CFG_CP_PRESERVE 1 +#define USE_CP_PRESERVE(...) __VA_ARGS__ +#define CFG_CP 1 +#define USE_CP(...) __VA_ARGS__ +#define CFG_CRC32 0 +#define USE_CRC32(...) +#define CFG_CROND 0 +#define USE_CROND(...) +#define CFG_CRONTAB 0 +#define USE_CRONTAB(...) +#define CFG_CUT 1 +#define USE_CUT(...) __VA_ARGS__ +#define CFG_DATE 1 +#define USE_DATE(...) __VA_ARGS__ +#define CFG_DD 1 +#define USE_DD(...) __VA_ARGS__ +#define CFG_DEALLOCVT 0 +#define USE_DEALLOCVT(...) +#define CFG_DEBUG_DHCP 0 +#define USE_DEBUG_DHCP(...) +#define CFG_DECOMPRESS 0 +#define USE_DECOMPRESS(...) +#define CFG_DEMO_MANY_OPTIONS 0 +#define USE_DEMO_MANY_OPTIONS(...) +#define CFG_DEMO_NUMBER 0 +#define USE_DEMO_NUMBER(...) +#define CFG_DEMO_SCANKEY 0 +#define USE_DEMO_SCANKEY(...) +#define CFG_DEMO_UTF8TOWC 0 +#define USE_DEMO_UTF8TOWC(...) +#define CFG_DEVMEM 1 +#define USE_DEVMEM(...) __VA_ARGS__ +#define CFG_DF 1 +#define USE_DF(...) __VA_ARGS__ +#define CFG_DHCP6 0 +#define USE_DHCP6(...) +#define CFG_DHCPD 0 +#define USE_DHCPD(...) +#define CFG_DHCP 0 +#define USE_DHCP(...) +#define CFG_DIFF 1 +#define USE_DIFF(...) __VA_ARGS__ +#define CFG_DIRNAME 1 +#define USE_DIRNAME(...) __VA_ARGS__ +#define CFG_DMESG 1 +#define USE_DMESG(...) __VA_ARGS__ +#define CFG_DNSDOMAINNAME 0 +#define USE_DNSDOMAINNAME(...) +#define CFG_DOS2UNIX 1 +#define USE_DOS2UNIX(...) __VA_ARGS__ +#define CFG_DUMPLEASES 0 +#define USE_DUMPLEASES(...) +#define CFG_DU 1 +#define USE_DU(...) __VA_ARGS__ +#define CFG_ECHO 1 +#define USE_ECHO(...) __VA_ARGS__ +#define CFG_EGREP 1 +#define USE_EGREP(...) __VA_ARGS__ +#define CFG_EJECT 0 +#define USE_EJECT(...) +#define CFG_ENV 1 +#define USE_ENV(...) __VA_ARGS__ +#define CFG_EXIT 0 +#define USE_EXIT(...) +#define CFG_EXPAND 1 +#define USE_EXPAND(...) __VA_ARGS__ +#define CFG_EXPR 1 +#define USE_EXPR(...) __VA_ARGS__ +#define CFG_FACTOR 0 +#define USE_FACTOR(...) +#define CFG_FALLOCATE 1 +#define USE_FALLOCATE(...) __VA_ARGS__ +#define CFG_FALSE 1 +#define USE_FALSE(...) __VA_ARGS__ +#define CFG_FDISK 0 +#define USE_FDISK(...) +#define CFG_FGREP 1 +#define USE_FGREP(...) __VA_ARGS__ +#define CFG_FILE 1 +#define USE_FILE(...) __VA_ARGS__ +#define CFG_FIND 1 +#define USE_FIND(...) __VA_ARGS__ +#define CFG_FLOCK 1 +#define USE_FLOCK(...) __VA_ARGS__ +#define CFG_FMT 1 +#define USE_FMT(...) __VA_ARGS__ +#define CFG_FOLD 0 +#define USE_FOLD(...) +#define CFG_FREERAMDISK 1 +#define USE_FREERAMDISK(...) __VA_ARGS__ +#define CFG_FREE 1 +#define USE_FREE(...) __VA_ARGS__ +#define CFG_FSCK 0 +#define USE_FSCK(...) +#define CFG_FSFREEZE 1 +#define USE_FSFREEZE(...) __VA_ARGS__ +#define CFG_FSTYPE 0 +#define USE_FSTYPE(...) +#define CFG_FSYNC 1 +#define USE_FSYNC(...) __VA_ARGS__ +#define CFG_FTPGET 0 +#define USE_FTPGET(...) +#define CFG_FTPPUT 0 +#define USE_FTPPUT(...) +#define CFG_GETCONF 1 +#define USE_GETCONF(...) __VA_ARGS__ +#define CFG_GETENFORCE 1 +#define USE_GETENFORCE(...) __VA_ARGS__ +#define CFG_GETFATTR 1 +#define USE_GETFATTR(...) __VA_ARGS__ +#define CFG_GETOPT 1 +#define USE_GETOPT(...) __VA_ARGS__ +#define CFG_GETTY 0 +#define USE_GETTY(...) +#define CFG_GREP 1 +#define USE_GREP(...) __VA_ARGS__ +#define CFG_GROUPADD 0 +#define USE_GROUPADD(...) +#define CFG_GROUPDEL 0 +#define USE_GROUPDEL(...) +#define CFG_GROUPS 1 +#define USE_GROUPS(...) __VA_ARGS__ +#define CFG_GUNZIP 1 +#define USE_GUNZIP(...) __VA_ARGS__ +#define CFG_GZIP 1 +#define USE_GZIP(...) __VA_ARGS__ +#define CFG_HEAD 1 +#define USE_HEAD(...) __VA_ARGS__ +#define CFG_HELLO 0 +#define USE_HELLO(...) +#define CFG_HELP_EXTRAS 1 +#define USE_HELP_EXTRAS(...) __VA_ARGS__ +#define CFG_HELP 1 +#define USE_HELP(...) __VA_ARGS__ +#define CFG_HEXEDIT 0 +#define USE_HEXEDIT(...) +#define CFG_HOSTID 0 +#define USE_HOSTID(...) +#define CFG_HOST 0 +#define USE_HOST(...) +#define CFG_HOSTNAME 1 +#define USE_HOSTNAME(...) __VA_ARGS__ +#define CFG_HWCLOCK 1 +#define USE_HWCLOCK(...) __VA_ARGS__ +#define CFG_I2CDETECT 1 +#define USE_I2CDETECT(...) __VA_ARGS__ +#define CFG_I2CDUMP 1 +#define USE_I2CDUMP(...) __VA_ARGS__ +#define CFG_I2CGET 1 +#define USE_I2CGET(...) __VA_ARGS__ +#define CFG_I2CSET 1 +#define USE_I2CSET(...) __VA_ARGS__ +#define CFG_ICONV 1 +#define USE_ICONV(...) __VA_ARGS__ +#define CFG_ID 1 +#define USE_ID(...) __VA_ARGS__ +#define CFG_ID_Z 1 +#define USE_ID_Z(...) __VA_ARGS__ +#define CFG_IFCONFIG 1 +#define USE_IFCONFIG(...) __VA_ARGS__ +#define CFG_INIT 0 +#define USE_INIT(...) +#define CFG_INOTIFYD 1 +#define USE_INOTIFYD(...) __VA_ARGS__ +#define CFG_INSMOD 1 +#define USE_INSMOD(...) __VA_ARGS__ +#define CFG_INSTALL 1 +#define USE_INSTALL(...) __VA_ARGS__ +#define CFG_IONICE 1 +#define USE_IONICE(...) __VA_ARGS__ +#define CFG_IORENICE 1 +#define USE_IORENICE(...) __VA_ARGS__ +#define CFG_IOTOP 1 +#define USE_IOTOP(...) __VA_ARGS__ +#define CFG_IPCRM 0 +#define USE_IPCRM(...) +#define CFG_IPCS 0 +#define USE_IPCS(...) +#define CFG_IP 0 +#define USE_IP(...) +#define CFG_KILLALL5 0 +#define USE_KILLALL5(...) +#define CFG_KILLALL 1 +#define USE_KILLALL(...) __VA_ARGS__ +#define CFG_KILL 1 +#define USE_KILL(...) __VA_ARGS__ +#define CFG_KLOGD 0 +#define USE_KLOGD(...) +#define CFG_KLOGD_SOURCE_RING_BUFFER 0 +#define USE_KLOGD_SOURCE_RING_BUFFER(...) +#define CFG_LAST 0 +#define USE_LAST(...) +#define CFG_LINK 0 +#define USE_LINK(...) +#define CFG_LN 1 +#define USE_LN(...) __VA_ARGS__ +#define CFG_LOAD_POLICY 1 +#define USE_LOAD_POLICY(...) __VA_ARGS__ +#define CFG_LOGGER 0 +#define USE_LOGGER(...) +#define CFG_LOGIN 0 +#define USE_LOGIN(...) +#define CFG_LOGNAME 1 +#define USE_LOGNAME(...) __VA_ARGS__ +#define CFG_LOG 1 +#define USE_LOG(...) __VA_ARGS__ +#define CFG_LOGWRAPPER 0 +#define USE_LOGWRAPPER(...) +#define CFG_LOSETUP 1 +#define USE_LOSETUP(...) __VA_ARGS__ +#define CFG_LSATTR 1 +#define USE_LSATTR(...) __VA_ARGS__ +#define CFG_LS_COLOR 1 +#define USE_LS_COLOR(...) __VA_ARGS__ +#define CFG_LSMOD 1 +#define USE_LSMOD(...) __VA_ARGS__ +#define CFG_LSOF 1 +#define USE_LSOF(...) __VA_ARGS__ +#define CFG_LSPCI 1 +#define USE_LSPCI(...) __VA_ARGS__ +#define CFG_LSPCI_TEXT 0 +#define USE_LSPCI_TEXT(...) +#define CFG_LSUSB 1 +#define USE_LSUSB(...) __VA_ARGS__ +#define CFG_LS 1 +#define USE_LS(...) __VA_ARGS__ +#define CFG_LS_Z 1 +#define USE_LS_Z(...) __VA_ARGS__ +#define CFG_MAKEDEVS 1 +#define USE_MAKEDEVS(...) __VA_ARGS__ +#define CFG_MAN 0 +#define USE_MAN(...) +#define CFG_MCOOKIE 0 +#define USE_MCOOKIE(...) +#define CFG_MD5SUM 1 +#define USE_MD5SUM(...) __VA_ARGS__ +#define CFG_MDEV_CONF 0 +#define USE_MDEV_CONF(...) +#define CFG_MDEV 0 +#define USE_MDEV(...) +#define CFG_MICROCOM 1 +#define USE_MICROCOM(...) __VA_ARGS__ +#define CFG_MIX 0 +#define USE_MIX(...) +#define CFG_MKDIR 1 +#define USE_MKDIR(...) __VA_ARGS__ +#define CFG_MKDIR_Z 1 +#define USE_MKDIR_Z(...) __VA_ARGS__ +#define CFG_MKE2FS_EXTENDED 0 +#define USE_MKE2FS_EXTENDED(...) +#define CFG_MKE2FS_GEN 0 +#define USE_MKE2FS_GEN(...) +#define CFG_MKE2FS 0 +#define USE_MKE2FS(...) +#define CFG_MKE2FS_JOURNAL 0 +#define USE_MKE2FS_JOURNAL(...) +#define CFG_MKE2FS_LABEL 0 +#define USE_MKE2FS_LABEL(...) +#define CFG_MKFIFO 1 +#define USE_MKFIFO(...) __VA_ARGS__ +#define CFG_MKFIFO_Z 1 +#define USE_MKFIFO_Z(...) __VA_ARGS__ +#define CFG_MKNOD 1 +#define USE_MKNOD(...) __VA_ARGS__ +#define CFG_MKNOD 1 +#define USE_MKNOD(...) __VA_ARGS__ +#define CFG_MKNOD_Z 1 +#define USE_MKNOD_Z(...) __VA_ARGS__ +#define CFG_MKPASSWD 0 +#define USE_MKPASSWD(...) +#define CFG_MKSWAP 1 +#define USE_MKSWAP(...) __VA_ARGS__ +#define CFG_MKTEMP 1 +#define USE_MKTEMP(...) __VA_ARGS__ +#define CFG_MODINFO 1 +#define USE_MODINFO(...) __VA_ARGS__ +#define CFG_MODPROBE 1 +#define USE_MODPROBE(...) __VA_ARGS__ +#define CFG_MORE 1 +#define USE_MORE(...) __VA_ARGS__ +#define CFG_MOUNTPOINT 1 +#define USE_MOUNTPOINT(...) __VA_ARGS__ +#define CFG_MOUNT 1 +#define USE_MOUNT(...) __VA_ARGS__ +#define CFG_MV_MORE 1 +#define USE_MV_MORE(...) __VA_ARGS__ +#define CFG_MV 1 +#define USE_MV(...) __VA_ARGS__ +#define CFG_NBD_CLIENT 1 +#define USE_NBD_CLIENT(...) __VA_ARGS__ +#define CFG_NETCAT_LISTEN 0 +#define USE_NETCAT_LISTEN(...) __VA_ARGS__ +#define CFG_NETCAT 0 +#define USE_NETCAT(...) __VA_ARGS__ +#define CFG_NETSTAT 1 +#define USE_NETSTAT(...) __VA_ARGS__ +#define CFG_NICE 1 +#define USE_NICE(...) __VA_ARGS__ +#define CFG_NL 1 +#define USE_NL(...) __VA_ARGS__ +#define CFG_NOHUP 1 +#define USE_NOHUP(...) __VA_ARGS__ +#define CFG_NPROC 1 +#define USE_NPROC(...) __VA_ARGS__ +#define CFG_NSENTER 1 +#define USE_NSENTER(...) __VA_ARGS__ +#define CFG_OD 1 +#define USE_OD(...) __VA_ARGS__ +#define CFG_ONEIT 0 +#define USE_ONEIT(...) +#define CFG_OPENVT 0 +#define USE_OPENVT(...) +#define CFG_PARTPROBE 1 +#define USE_PARTPROBE(...) __VA_ARGS__ +#define CFG_PASSWD 0 +#define USE_PASSWD(...) +#define CFG_PASTE 1 +#define USE_PASTE(...) __VA_ARGS__ +#define CFG_PATCH 1 +#define USE_PATCH(...) __VA_ARGS__ +#define CFG_PGREP 1 +#define USE_PGREP(...) __VA_ARGS__ +#define CFG_PIDOF 1 +#define USE_PIDOF(...) __VA_ARGS__ +#define CFG_PING 1 +#define USE_PING(...) __VA_ARGS__ +#define CFG_PING6 1 +#define USE_PING6(...) __VA_ARGS__ +#define CFG_PIVOT_ROOT 1 +#define USE_PIVOT_ROOT(...) __VA_ARGS__ +#define CFG_PKILL 1 +#define USE_PKILL(...) __VA_ARGS__ +#define CFG_PMAP 1 +#define USE_PMAP(...) __VA_ARGS__ +#define CFG_PRINTENV 1 +#define USE_PRINTENV(...) __VA_ARGS__ +#define CFG_PRINTF 1 +#define USE_PRINTF(...) __VA_ARGS__ +#define CFG_PS 1 +#define USE_PS(...) __VA_ARGS__ +#define CFG_PWDX 1 +#define USE_PWDX(...) __VA_ARGS__ +#define CFG_PWD 1 +#define USE_PWD(...) __VA_ARGS__ +#define CFG_READAHEAD 0 +#define USE_READAHEAD(...) +#define CFG_READELF 0 +#define USE_READELF(...) __VA_ARGS__ +#define CFG_READLINK 1 +#define USE_READLINK(...) __VA_ARGS__ +#define CFG_REALPATH 1 +#define USE_REALPATH(...) __VA_ARGS__ +#define CFG_REBOOT 0 +#define USE_REBOOT(...) +#define CFG_RENICE 1 +#define USE_RENICE(...) __VA_ARGS__ +#define CFG_RESET 0 +#define USE_RESET(...) +#define CFG_RESTORECON 1 +#define USE_RESTORECON(...) __VA_ARGS__ +#define CFG_REV 1 +#define USE_REV(...) __VA_ARGS__ +#define CFG_RFKILL 1 +#define USE_RFKILL(...) __VA_ARGS__ +#define CFG_RMDIR 1 +#define USE_RMDIR(...) __VA_ARGS__ +#define CFG_RMMOD 1 +#define USE_RMMOD(...) __VA_ARGS__ +#define CFG_RM 1 +#define USE_RM(...) __VA_ARGS__ +#define CFG_ROUTE 0 +#define USE_ROUTE(...) +#define CFG_RUNCON 1 +#define USE_RUNCON(...) __VA_ARGS__ +#define CFG_SED 1 +#define USE_SED(...) __VA_ARGS__ +#define CFG_SENDEVENT 1 +#define USE_SENDEVENT(...) __VA_ARGS__ +#define CFG_SEQ 1 +#define USE_SEQ(...) __VA_ARGS__ +#define CFG_SETENFORCE 1 +#define USE_SETENFORCE(...) __VA_ARGS__ +#define CFG_SETFATTR 1 +#define USE_SETFATTR(...) __VA_ARGS__ +#define CFG_SETSID 1 +#define USE_SETSID(...) __VA_ARGS__ +#define CFG_SHA1SUM 1 +#define USE_SHA1SUM(...) __VA_ARGS__ +#define CFG_SHA224SUM 1 +#define USE_SHA224SUM(...) __VA_ARGS__ +#define CFG_SHA256SUM 1 +#define USE_SHA256SUM(...) __VA_ARGS__ +#define CFG_SHA384SUM 1 +#define USE_SHA384SUM(...) __VA_ARGS__ +#define CFG_SHA512SUM 1 +#define USE_SHA512SUM(...) __VA_ARGS__ +#define CFG_SH 0 +#define USE_SH(...) +#define CFG_SHRED 0 +#define USE_SHRED(...) +#define CFG_SKELETON_ALIAS 0 +#define USE_SKELETON_ALIAS(...) +#define CFG_SKELETON 0 +#define USE_SKELETON(...) +#define CFG_SLEEP_FLOAT 1 +#define USE_SLEEP_FLOAT(...) __VA_ARGS__ +#define CFG_SLEEP 1 +#define USE_SLEEP(...) __VA_ARGS__ +#define CFG_SNTP 0 +#define USE_SNTP(...) +#define CFG_SORT_BIG 1 +#define USE_SORT_BIG(...) __VA_ARGS__ +#define CFG_SORT_FLOAT 1 +#define USE_SORT_FLOAT(...) __VA_ARGS__ +#define CFG_SORT 1 +#define USE_SORT(...) __VA_ARGS__ +#define CFG_SPLIT 1 +#define USE_SPLIT(...) __VA_ARGS__ +#define CFG_STAT 1 +#define USE_STAT(...) __VA_ARGS__ +#define CFG_STRINGS 1 +#define USE_STRINGS(...) __VA_ARGS__ +#define CFG_STTY 1 +#define USE_STTY(...) __VA_ARGS__ +#define CFG_SU 0 +#define USE_SU(...) +#define CFG_SULOGIN 0 +#define USE_SULOGIN(...) +#define CFG_SWAPOFF 1 +#define USE_SWAPOFF(...) __VA_ARGS__ +#define CFG_SWAPON 1 +#define USE_SWAPON(...) __VA_ARGS__ +#define CFG_SWITCH_ROOT 0 +#define USE_SWITCH_ROOT(...) +#define CFG_SYNC 1 +#define USE_SYNC(...) __VA_ARGS__ +#define CFG_SYSCTL 1 +#define USE_SYSCTL(...) __VA_ARGS__ +#define CFG_SYSLOGD 0 +#define USE_SYSLOGD(...) +#define CFG_TAC 1 +#define USE_TAC(...) __VA_ARGS__ +#define CFG_TAIL_SEEK 1 +#define USE_TAIL_SEEK(...) __VA_ARGS__ +#define CFG_TAIL 1 +#define USE_TAIL(...) __VA_ARGS__ +#define CFG_TAR 1 +#define USE_TAR(...) __VA_ARGS__ +#define CFG_TASKSET 1 +#define USE_TASKSET(...) __VA_ARGS__ +#define CFG_TASKSET 1 +#define USE_TASKSET(...) __VA_ARGS__ +#define CFG_TCPSVD 0 +#define USE_TCPSVD(...) +#define CFG_TEE 1 +#define USE_TEE(...) __VA_ARGS__ +#define CFG_TELNETD 0 +#define USE_TELNETD(...) +#define CFG_TELNET 0 +#define USE_TELNET(...) +#define CFG_TEST 1 +#define USE_TEST(...) __VA_ARGS__ +#define CFG_TFTPD 0 +#define USE_TFTPD(...) +#define CFG_TFTP 0 +#define USE_TFTP(...) +#define CFG_TIMEOUT 1 +#define USE_TIMEOUT(...) __VA_ARGS__ +#define CFG_TIME 1 +#define USE_TIME(...) __VA_ARGS__ +#define CFG_TOP 1 +#define USE_TOP(...) __VA_ARGS__ +#define CFG_TOUCH 1 +#define USE_TOUCH(...) __VA_ARGS__ +#define CFG_TRACEROUTE 1 +#define USE_TRACEROUTE(...) __VA_ARGS__ +#define CFG_TRUE 1 +#define USE_TRUE(...) __VA_ARGS__ +#define CFG_TRUNCATE 1 +#define USE_TRUNCATE(...) __VA_ARGS__ +#define CFG_TR 1 +#define USE_TR(...) __VA_ARGS__ +#define CFG_TTOP 0 +#define USE_TTOP(...) +#define CFG_TTY 1 +#define USE_TTY(...) __VA_ARGS__ +#define CFG_TUNCTL 1 +#define USE_TUNCTL(...) __VA_ARGS__ +#define CFG_ULIMIT 1 +#define USE_ULIMIT(...) __VA_ARGS__ +#define CFG_UMOUNT 1 +#define USE_UMOUNT(...) __VA_ARGS__ +#define CFG_UNAME 1 +#define USE_UNAME(...) __VA_ARGS__ +#define CFG_UNIQ 1 +#define USE_UNIQ(...) __VA_ARGS__ +#define CFG_UNIX2DOS 1 +#define USE_UNIX2DOS(...) __VA_ARGS__ +#define CFG_UNLINK 1 +#define USE_UNLINK(...) __VA_ARGS__ +#define CFG_UNSHARE 1 +#define USE_UNSHARE(...) __VA_ARGS__ +#define CFG_UPTIME 1 +#define USE_UPTIME(...) __VA_ARGS__ +#define CFG_USERADD 0 +#define USE_USERADD(...) +#define CFG_USERDEL 0 +#define USE_USERDEL(...) +#define CFG_USLEEP 1 +#define USE_USLEEP(...) __VA_ARGS__ +#define CFG_UUDECODE 1 +#define USE_UUDECODE(...) __VA_ARGS__ +#define CFG_UUENCODE 1 +#define USE_UUENCODE(...) __VA_ARGS__ +#define CFG_UUIDGEN 1 +#define USE_UUIDGEN(...) __VA_ARGS__ +#define CFG_VCONFIG 1 +#define USE_VCONFIG(...) __VA_ARGS__ +#define CFG_VI 1 +#define USE_VI(...) __VA_ARGS__ +#define CFG_VMSTAT 1 +#define USE_VMSTAT(...) __VA_ARGS__ +#define CFG_WATCH 1 +#define USE_WATCH(...) __VA_ARGS__ +#define CFG_WC 1 +#define USE_WC(...) __VA_ARGS__ +#define CFG_WGET 0 +#define USE_WGET(...) +#define CFG_WHICH 1 +#define USE_WHICH(...) __VA_ARGS__ +#define CFG_WHOAMI 1 +#define USE_WHOAMI(...) __VA_ARGS__ +#define CFG_WHO 0 +#define USE_WHO(...) +#define CFG_W 0 +#define USE_W(...) +#define CFG_XARGS_PEDANTIC 0 +#define USE_XARGS_PEDANTIC(...) +#define CFG_XARGS 1 +#define USE_XARGS(...) __VA_ARGS__ +#define CFG_XXD 1 +#define USE_XXD(...) __VA_ARGS__ +#define CFG_XZCAT 0 +#define USE_XZCAT(...) +#define CFG_YES 1 +#define USE_YES(...) __VA_ARGS__ +#define CFG_ZCAT 1 +#define USE_ZCAT(...) __VA_ARGS__ diff --git a/aosp/external/toybox/android/device/generated/flags.h b/aosp/external/toybox/android/device/generated/flags.h new file mode 100644 index 0000000000000000000000000000000000000000..fcf9e60d6d4cfde6f51e7b41ab5cb3e69ffba7e8 --- /dev/null +++ b/aosp/external/toybox/android/device/generated/flags.h @@ -0,0 +1,6302 @@ +#undef FORCED_FLAG +#undef FORCED_FLAGLL +#ifdef FORCE_FLAGS +#define FORCED_FLAG 1 +#define FORCED_FLAGLL 1ULL +#else +#define FORCED_FLAG 0 +#define FORCED_FLAGLL 0 +#endif + +// acpi abctV abctV +#undef OPTSTR_acpi +#define OPTSTR_acpi "abctV" +#ifdef CLEANUP_acpi +#undef CLEANUP_acpi +#undef FOR_acpi +#undef FLAG_V +#undef FLAG_t +#undef FLAG_c +#undef FLAG_b +#undef FLAG_a +#endif + +// arch +#undef OPTSTR_arch +#define OPTSTR_arch 0 +#ifdef CLEANUP_arch +#undef CLEANUP_arch +#undef FOR_arch +#endif + +// arp vi:nDsdap:A:H:[+Ap][!sd] +#undef OPTSTR_arp +#define OPTSTR_arp "vi:nDsdap:A:H:[+Ap][!sd]" +#ifdef CLEANUP_arp +#undef CLEANUP_arp +#undef FOR_arp +#undef FLAG_H +#undef FLAG_A +#undef FLAG_p +#undef FLAG_a +#undef FLAG_d +#undef FLAG_s +#undef FLAG_D +#undef FLAG_n +#undef FLAG_i +#undef FLAG_v +#endif + +// arping <1>1s:I:w#<0c#<0AUDbqf[+AU][+Df] +#undef OPTSTR_arping +#define OPTSTR_arping "<1>1s:I:w#<0c#<0AUDbqf[+AU][+Df]" +#ifdef CLEANUP_arping +#undef CLEANUP_arping +#undef FOR_arping +#undef FLAG_f +#undef FLAG_q +#undef FLAG_b +#undef FLAG_D +#undef FLAG_U +#undef FLAG_A +#undef FLAG_c +#undef FLAG_w +#undef FLAG_I +#undef FLAG_s +#endif + +// ascii +#undef OPTSTR_ascii +#define OPTSTR_ascii 0 +#ifdef CLEANUP_ascii +#undef CLEANUP_ascii +#undef FOR_ascii +#endif + +// base64 diw#<0=76[!dw] diw#<0=76[!dw] +#undef OPTSTR_base64 +#define OPTSTR_base64 "diw#<0=76[!dw]" +#ifdef CLEANUP_base64 +#undef CLEANUP_base64 +#undef FOR_base64 +#undef FLAG_w +#undef FLAG_i +#undef FLAG_d +#endif + +// basename ^<1as: ^<1as: +#undef OPTSTR_basename +#define OPTSTR_basename "^<1as:" +#ifdef CLEANUP_basename +#undef CLEANUP_basename +#undef FOR_basename +#undef FLAG_s +#undef FLAG_a +#endif + +// bc i(interactive)l(mathlib)q(quiet)s(standard)w(warn) +#undef OPTSTR_bc +#define OPTSTR_bc "i(interactive)l(mathlib)q(quiet)s(standard)w(warn)" +#ifdef CLEANUP_bc +#undef CLEANUP_bc +#undef FOR_bc +#undef FLAG_w +#undef FLAG_s +#undef FLAG_q +#undef FLAG_l +#undef FLAG_i +#endif + +// blkid ULs*[!LU] ULs*[!LU] +#undef OPTSTR_blkid +#define OPTSTR_blkid "ULs*[!LU]" +#ifdef CLEANUP_blkid +#undef CLEANUP_blkid +#undef FOR_blkid +#undef FLAG_s +#undef FLAG_L +#undef FLAG_U +#endif + +// blockdev <1>1(setro)(setrw)(getro)(getss)(getbsz)(setbsz)#<0(getsz)(getsize)(getsize64)(getra)(setra)#<0(flushbufs)(rereadpt) <1>1(setro)(setrw)(getro)(getss)(getbsz)(setbsz)#<0(getsz)(getsize)(getsize64)(getra)(setra)#<0(flushbufs)(rereadpt) +#undef OPTSTR_blockdev +#define OPTSTR_blockdev "<1>1(setro)(setrw)(getro)(getss)(getbsz)(setbsz)#<0(getsz)(getsize)(getsize64)(getra)(setra)#<0(flushbufs)(rereadpt)" +#ifdef CLEANUP_blockdev +#undef CLEANUP_blockdev +#undef FOR_blockdev +#undef FLAG_rereadpt +#undef FLAG_flushbufs +#undef FLAG_setra +#undef FLAG_getra +#undef FLAG_getsize64 +#undef FLAG_getsize +#undef FLAG_getsz +#undef FLAG_setbsz +#undef FLAG_getbsz +#undef FLAG_getss +#undef FLAG_getro +#undef FLAG_setrw +#undef FLAG_setro +#endif + +// bootchartd +#undef OPTSTR_bootchartd +#define OPTSTR_bootchartd 0 +#ifdef CLEANUP_bootchartd +#undef CLEANUP_bootchartd +#undef FOR_bootchartd +#endif + +// brctl <1 +#undef OPTSTR_brctl +#define OPTSTR_brctl "<1" +#ifdef CLEANUP_brctl +#undef CLEANUP_brctl +#undef FOR_brctl +#endif + +// bunzip2 cftkv +#undef OPTSTR_bunzip2 +#define OPTSTR_bunzip2 "cftkv" +#ifdef CLEANUP_bunzip2 +#undef CLEANUP_bunzip2 +#undef FOR_bunzip2 +#undef FLAG_v +#undef FLAG_k +#undef FLAG_t +#undef FLAG_f +#undef FLAG_c +#endif + +// bzcat +#undef OPTSTR_bzcat +#define OPTSTR_bzcat 0 +#ifdef CLEANUP_bzcat +#undef CLEANUP_bzcat +#undef FOR_bzcat +#endif + +// cal >2h >2h +#undef OPTSTR_cal +#define OPTSTR_cal ">2h" +#ifdef CLEANUP_cal +#undef CLEANUP_cal +#undef FOR_cal +#undef FLAG_h +#endif + +// cat uvte uvte +#undef OPTSTR_cat +#define OPTSTR_cat "uvte" +#ifdef CLEANUP_cat +#undef CLEANUP_cat +#undef FOR_cat +#undef FLAG_e +#undef FLAG_t +#undef FLAG_v +#undef FLAG_u +#endif + +// catv vte +#undef OPTSTR_catv +#define OPTSTR_catv "vte" +#ifdef CLEANUP_catv +#undef CLEANUP_catv +#undef FOR_catv +#undef FLAG_e +#undef FLAG_t +#undef FLAG_v +#endif + +// cd >1LP[-LP] +#undef OPTSTR_cd +#define OPTSTR_cd ">1LP[-LP]" +#ifdef CLEANUP_cd +#undef CLEANUP_cd +#undef FOR_cd +#undef FLAG_P +#undef FLAG_L +#endif + +// chattr ?p#v#R ?p#v#R +#undef OPTSTR_chattr +#define OPTSTR_chattr "?p#v#R" +#ifdef CLEANUP_chattr +#undef CLEANUP_chattr +#undef FOR_chattr +#undef FLAG_R +#undef FLAG_v +#undef FLAG_p +#endif + +// chcon <2hvR <2hvR +#undef OPTSTR_chcon +#define OPTSTR_chcon "<2hvR" +#ifdef CLEANUP_chcon +#undef CLEANUP_chcon +#undef FOR_chcon +#undef FLAG_R +#undef FLAG_v +#undef FLAG_h +#endif + +// chgrp <2hPLHRfv[-HLP] <2hPLHRfv[-HLP] +#undef OPTSTR_chgrp +#define OPTSTR_chgrp "<2hPLHRfv[-HLP]" +#ifdef CLEANUP_chgrp +#undef CLEANUP_chgrp +#undef FOR_chgrp +#undef FLAG_v +#undef FLAG_f +#undef FLAG_R +#undef FLAG_H +#undef FLAG_L +#undef FLAG_P +#undef FLAG_h +#endif + +// chmod <2?vRf[-vf] <2?vRf[-vf] +#undef OPTSTR_chmod +#define OPTSTR_chmod "<2?vRf[-vf]" +#ifdef CLEANUP_chmod +#undef CLEANUP_chmod +#undef FOR_chmod +#undef FLAG_f +#undef FLAG_R +#undef FLAG_v +#endif + +// chroot ^<1 ^<1 +#undef OPTSTR_chroot +#define OPTSTR_chroot "^<1" +#ifdef CLEANUP_chroot +#undef CLEANUP_chroot +#undef FOR_chroot +#endif + +// chrt ^mp#<0iRbrfo[!ibrfo] ^mp#<0iRbrfo[!ibrfo] +#undef OPTSTR_chrt +#define OPTSTR_chrt "^mp#<0iRbrfo[!ibrfo]" +#ifdef CLEANUP_chrt +#undef CLEANUP_chrt +#undef FOR_chrt +#undef FLAG_o +#undef FLAG_f +#undef FLAG_r +#undef FLAG_b +#undef FLAG_R +#undef FLAG_i +#undef FLAG_p +#undef FLAG_m +#endif + +// chvt <1 +#undef OPTSTR_chvt +#define OPTSTR_chvt "<1" +#ifdef CLEANUP_chvt +#undef CLEANUP_chvt +#undef FOR_chvt +#endif + +// cksum HIPLN HIPLN +#undef OPTSTR_cksum +#define OPTSTR_cksum "HIPLN" +#ifdef CLEANUP_cksum +#undef CLEANUP_cksum +#undef FOR_cksum +#undef FLAG_N +#undef FLAG_L +#undef FLAG_P +#undef FLAG_I +#undef FLAG_H +#endif + +// clear +#undef OPTSTR_clear +#define OPTSTR_clear 0 +#ifdef CLEANUP_clear +#undef CLEANUP_clear +#undef FOR_clear +#endif + +// cmp <1>2ls(silent)(quiet)[!ls] <1>2ls(silent)(quiet)[!ls] +#undef OPTSTR_cmp +#define OPTSTR_cmp "<1>2ls(silent)(quiet)[!ls]" +#ifdef CLEANUP_cmp +#undef CLEANUP_cmp +#undef FOR_cmp +#undef FLAG_s +#undef FLAG_l +#endif + +// comm <2>2321 <2>2321 +#undef OPTSTR_comm +#define OPTSTR_comm "<2>2321" +#ifdef CLEANUP_comm +#undef CLEANUP_comm +#undef FOR_comm +#undef FLAG_1 +#undef FLAG_2 +#undef FLAG_3 +#endif + +// count +#undef OPTSTR_count +#define OPTSTR_count 0 +#ifdef CLEANUP_count +#undef CLEANUP_count +#undef FOR_count +#endif + +// cp <2(preserve):;D(parents)RHLPprdaslvnF(remove-destination)fiT[-HLPd][-ni] <2(preserve):;D(parents)RHLPprdaslvnF(remove-destination)fiT[-HLPd][-ni] +#undef OPTSTR_cp +#define OPTSTR_cp "<2(preserve):;D(parents)RHLPprdaslvnF(remove-destination)fiT[-HLPd][-ni]" +#ifdef CLEANUP_cp +#undef CLEANUP_cp +#undef FOR_cp +#undef FLAG_T +#undef FLAG_i +#undef FLAG_f +#undef FLAG_F +#undef FLAG_n +#undef FLAG_v +#undef FLAG_l +#undef FLAG_s +#undef FLAG_a +#undef FLAG_d +#undef FLAG_r +#undef FLAG_p +#undef FLAG_P +#undef FLAG_L +#undef FLAG_H +#undef FLAG_R +#undef FLAG_D +#undef FLAG_preserve +#endif + +// cpio (no-preserve-owner)(trailer)mduH:p:|i|t|F:v(verbose)o|[!pio][!pot][!pF] (no-preserve-owner)(trailer)mduH:p:|i|t|F:v(verbose)o|[!pio][!pot][!pF] +#undef OPTSTR_cpio +#define OPTSTR_cpio "(no-preserve-owner)(trailer)mduH:p:|i|t|F:v(verbose)o|[!pio][!pot][!pF]" +#ifdef CLEANUP_cpio +#undef CLEANUP_cpio +#undef FOR_cpio +#undef FLAG_o +#undef FLAG_v +#undef FLAG_F +#undef FLAG_t +#undef FLAG_i +#undef FLAG_p +#undef FLAG_H +#undef FLAG_u +#undef FLAG_d +#undef FLAG_m +#undef FLAG_trailer +#undef FLAG_no_preserve_owner +#endif + +// crc32 +#undef OPTSTR_crc32 +#define OPTSTR_crc32 0 +#ifdef CLEANUP_crc32 +#undef CLEANUP_crc32 +#undef FOR_crc32 +#endif + +// crond fbSl#<0=8d#<0L:c:[-bf][-LS][-ld] +#undef OPTSTR_crond +#define OPTSTR_crond "fbSl#<0=8d#<0L:c:[-bf][-LS][-ld]" +#ifdef CLEANUP_crond +#undef CLEANUP_crond +#undef FOR_crond +#undef FLAG_c +#undef FLAG_L +#undef FLAG_d +#undef FLAG_l +#undef FLAG_S +#undef FLAG_b +#undef FLAG_f +#endif + +// crontab c:u:elr[!elr] +#undef OPTSTR_crontab +#define OPTSTR_crontab "c:u:elr[!elr]" +#ifdef CLEANUP_crontab +#undef CLEANUP_crontab +#undef FOR_crontab +#undef FLAG_r +#undef FLAG_l +#undef FLAG_e +#undef FLAG_u +#undef FLAG_c +#endif + +// cut b*|c*|f*|F*|C*|O(output-delimiter):d:sDn[!cbf] b*|c*|f*|F*|C*|O(output-delimiter):d:sDn[!cbf] +#undef OPTSTR_cut +#define OPTSTR_cut "b*|c*|f*|F*|C*|O(output-delimiter):d:sDn[!cbf]" +#ifdef CLEANUP_cut +#undef CLEANUP_cut +#undef FOR_cut +#undef FLAG_n +#undef FLAG_D +#undef FLAG_s +#undef FLAG_d +#undef FLAG_O +#undef FLAG_C +#undef FLAG_F +#undef FLAG_f +#undef FLAG_c +#undef FLAG_b +#endif + +// date d:D:r:u[!dr] d:D:r:u[!dr] +#undef OPTSTR_date +#define OPTSTR_date "d:D:r:u[!dr]" +#ifdef CLEANUP_date +#undef CLEANUP_date +#undef FOR_date +#undef FLAG_u +#undef FLAG_r +#undef FLAG_D +#undef FLAG_d +#endif + +// dd +#undef OPTSTR_dd +#define OPTSTR_dd 0 +#ifdef CLEANUP_dd +#undef CLEANUP_dd +#undef FOR_dd +#endif + +// deallocvt >1 +#undef OPTSTR_deallocvt +#define OPTSTR_deallocvt ">1" +#ifdef CLEANUP_deallocvt +#undef CLEANUP_deallocvt +#undef FOR_deallocvt +#endif + +// demo_many_options ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba +#undef OPTSTR_demo_many_options +#define OPTSTR_demo_many_options "ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba" +#ifdef CLEANUP_demo_many_options +#undef CLEANUP_demo_many_options +#undef FOR_demo_many_options +#undef FLAG_a +#undef FLAG_b +#undef FLAG_c +#undef FLAG_d +#undef FLAG_e +#undef FLAG_f +#undef FLAG_g +#undef FLAG_h +#undef FLAG_i +#undef FLAG_j +#undef FLAG_k +#undef FLAG_l +#undef FLAG_m +#undef FLAG_n +#undef FLAG_o +#undef FLAG_p +#undef FLAG_q +#undef FLAG_r +#undef FLAG_s +#undef FLAG_t +#undef FLAG_u +#undef FLAG_v +#undef FLAG_w +#undef FLAG_x +#undef FLAG_y +#undef FLAG_z +#undef FLAG_A +#undef FLAG_B +#undef FLAG_C +#undef FLAG_D +#undef FLAG_E +#undef FLAG_F +#undef FLAG_G +#undef FLAG_H +#undef FLAG_I +#undef FLAG_J +#undef FLAG_K +#undef FLAG_L +#undef FLAG_M +#undef FLAG_N +#undef FLAG_O +#undef FLAG_P +#undef FLAG_Q +#undef FLAG_R +#undef FLAG_S +#undef FLAG_T +#undef FLAG_U +#undef FLAG_V +#undef FLAG_W +#undef FLAG_X +#undef FLAG_Y +#undef FLAG_Z +#endif + +// demo_number D#=3<3hdbs +#undef OPTSTR_demo_number +#define OPTSTR_demo_number "D#=3<3hdbs" +#ifdef CLEANUP_demo_number +#undef CLEANUP_demo_number +#undef FOR_demo_number +#undef FLAG_s +#undef FLAG_b +#undef FLAG_d +#undef FLAG_h +#undef FLAG_D +#endif + +// demo_scankey +#undef OPTSTR_demo_scankey +#define OPTSTR_demo_scankey 0 +#ifdef CLEANUP_demo_scankey +#undef CLEANUP_demo_scankey +#undef FOR_demo_scankey +#endif + +// demo_utf8towc +#undef OPTSTR_demo_utf8towc +#define OPTSTR_demo_utf8towc 0 +#ifdef CLEANUP_demo_utf8towc +#undef CLEANUP_demo_utf8towc +#undef FOR_demo_utf8towc +#endif + +// devmem <1>3 <1>3 +#undef OPTSTR_devmem +#define OPTSTR_devmem "<1>3" +#ifdef CLEANUP_devmem +#undef CLEANUP_devmem +#undef FOR_devmem +#endif + +// df HPkhit*a[-HPkh] HPkhit*a[-HPkh] +#undef OPTSTR_df +#define OPTSTR_df "HPkhit*a[-HPkh]" +#ifdef CLEANUP_df +#undef CLEANUP_df +#undef FOR_df +#undef FLAG_a +#undef FLAG_t +#undef FLAG_i +#undef FLAG_h +#undef FLAG_k +#undef FLAG_P +#undef FLAG_H +#endif + +// dhcp V:H:F:x*r:O*A#<0=20T#<0=3t#<0=3s:p:i:SBRCaovqnbf +#undef OPTSTR_dhcp +#define OPTSTR_dhcp "V:H:F:x*r:O*A#<0=20T#<0=3t#<0=3s:p:i:SBRCaovqnbf" +#ifdef CLEANUP_dhcp +#undef CLEANUP_dhcp +#undef FOR_dhcp +#undef FLAG_f +#undef FLAG_b +#undef FLAG_n +#undef FLAG_q +#undef FLAG_v +#undef FLAG_o +#undef FLAG_a +#undef FLAG_C +#undef FLAG_R +#undef FLAG_B +#undef FLAG_S +#undef FLAG_i +#undef FLAG_p +#undef FLAG_s +#undef FLAG_t +#undef FLAG_T +#undef FLAG_A +#undef FLAG_O +#undef FLAG_r +#undef FLAG_x +#undef FLAG_F +#undef FLAG_H +#undef FLAG_V +#endif + +// dhcp6 r:A#<0T#<0t#<0s:p:i:SRvqnbf +#undef OPTSTR_dhcp6 +#define OPTSTR_dhcp6 "r:A#<0T#<0t#<0s:p:i:SRvqnbf" +#ifdef CLEANUP_dhcp6 +#undef CLEANUP_dhcp6 +#undef FOR_dhcp6 +#undef FLAG_f +#undef FLAG_b +#undef FLAG_n +#undef FLAG_q +#undef FLAG_v +#undef FLAG_R +#undef FLAG_S +#undef FLAG_i +#undef FLAG_p +#undef FLAG_s +#undef FLAG_t +#undef FLAG_T +#undef FLAG_A +#undef FLAG_r +#endif + +// dhcpd >1P#<0>65535fi:S46[!46] +#undef OPTSTR_dhcpd +#define OPTSTR_dhcpd ">1P#<0>65535fi:S46[!46]" +#ifdef CLEANUP_dhcpd +#undef CLEANUP_dhcpd +#undef FOR_dhcpd +#undef FLAG_6 +#undef FLAG_4 +#undef FLAG_S +#undef FLAG_i +#undef FLAG_f +#undef FLAG_P +#endif + +// diff <2>2(color)(strip-trailing-cr)B(ignore-blank-lines)d(minimal)b(ignore-space-change)ut(expand-tabs)w(ignore-all-space)i(ignore-case)T(initial-tab)s(report-identical-files)q(brief)a(text)L(label)*S(starting-file):N(new-file)r(recursive)U(unified)#<0=3 <2>2(color)(strip-trailing-cr)B(ignore-blank-lines)d(minimal)b(ignore-space-change)ut(expand-tabs)w(ignore-all-space)i(ignore-case)T(initial-tab)s(report-identical-files)q(brief)a(text)L(label)*S(starting-file):N(new-file)r(recursive)U(unified)#<0=3 +#undef OPTSTR_diff +#define OPTSTR_diff "<2>2(color)(strip-trailing-cr)B(ignore-blank-lines)d(minimal)b(ignore-space-change)ut(expand-tabs)w(ignore-all-space)i(ignore-case)T(initial-tab)s(report-identical-files)q(brief)a(text)L(label)*S(starting-file):N(new-file)r(recursive)U(unified)#<0=3" +#ifdef CLEANUP_diff +#undef CLEANUP_diff +#undef FOR_diff +#undef FLAG_U +#undef FLAG_r +#undef FLAG_N +#undef FLAG_S +#undef FLAG_L +#undef FLAG_a +#undef FLAG_q +#undef FLAG_s +#undef FLAG_T +#undef FLAG_i +#undef FLAG_w +#undef FLAG_t +#undef FLAG_u +#undef FLAG_b +#undef FLAG_d +#undef FLAG_B +#undef FLAG_strip_trailing_cr +#undef FLAG_color +#endif + +// dirname <1 <1 +#undef OPTSTR_dirname +#define OPTSTR_dirname "<1" +#ifdef CLEANUP_dirname +#undef CLEANUP_dirname +#undef FOR_dirname +#endif + +// dmesg w(follow)CSTtrs#<1n#c[!Ttr][!Cc][!Sw] w(follow)CSTtrs#<1n#c[!Ttr][!Cc][!Sw] +#undef OPTSTR_dmesg +#define OPTSTR_dmesg "w(follow)CSTtrs#<1n#c[!Ttr][!Cc][!Sw]" +#ifdef CLEANUP_dmesg +#undef CLEANUP_dmesg +#undef FOR_dmesg +#undef FLAG_c +#undef FLAG_n +#undef FLAG_s +#undef FLAG_r +#undef FLAG_t +#undef FLAG_T +#undef FLAG_S +#undef FLAG_C +#undef FLAG_w +#endif + +// dnsdomainname >0 +#undef OPTSTR_dnsdomainname +#define OPTSTR_dnsdomainname ">0" +#ifdef CLEANUP_dnsdomainname +#undef CLEANUP_dnsdomainname +#undef FOR_dnsdomainname +#endif + +// dos2unix +#undef OPTSTR_dos2unix +#define OPTSTR_dos2unix 0 +#ifdef CLEANUP_dos2unix +#undef CLEANUP_dos2unix +#undef FOR_dos2unix +#endif + +// du d#<0=-1hmlcaHkKLsx[-HL][-kKmh] d#<0=-1hmlcaHkKLsx[-HL][-kKmh] +#undef OPTSTR_du +#define OPTSTR_du "d#<0=-1hmlcaHkKLsx[-HL][-kKmh]" +#ifdef CLEANUP_du +#undef CLEANUP_du +#undef FOR_du +#undef FLAG_x +#undef FLAG_s +#undef FLAG_L +#undef FLAG_K +#undef FLAG_k +#undef FLAG_H +#undef FLAG_a +#undef FLAG_c +#undef FLAG_l +#undef FLAG_m +#undef FLAG_h +#undef FLAG_d +#endif + +// dumpleases >0arf:[!ar] +#undef OPTSTR_dumpleases +#define OPTSTR_dumpleases ">0arf:[!ar]" +#ifdef CLEANUP_dumpleases +#undef CLEANUP_dumpleases +#undef FOR_dumpleases +#undef FLAG_f +#undef FLAG_r +#undef FLAG_a +#endif + +// echo ^?Een[-eE] ^?Een[-eE] +#undef OPTSTR_echo +#define OPTSTR_echo "^?Een[-eE]" +#ifdef CLEANUP_echo +#undef CLEANUP_echo +#undef FOR_echo +#undef FLAG_n +#undef FLAG_e +#undef FLAG_E +#endif + +// eject >1stT[!tT] +#undef OPTSTR_eject +#define OPTSTR_eject ">1stT[!tT]" +#ifdef CLEANUP_eject +#undef CLEANUP_eject +#undef FOR_eject +#undef FLAG_T +#undef FLAG_t +#undef FLAG_s +#endif + +// env ^0iu* ^0iu* +#undef OPTSTR_env +#define OPTSTR_env "^0iu*" +#ifdef CLEANUP_env +#undef CLEANUP_env +#undef FOR_env +#undef FLAG_u +#undef FLAG_i +#undef FLAG_0 +#endif + +// exit +#undef OPTSTR_exit +#define OPTSTR_exit 0 +#ifdef CLEANUP_exit +#undef CLEANUP_exit +#undef FOR_exit +#endif + +// expand t* t* +#undef OPTSTR_expand +#define OPTSTR_expand "t*" +#ifdef CLEANUP_expand +#undef CLEANUP_expand +#undef FOR_expand +#undef FLAG_t +#endif + +// expr +#undef OPTSTR_expr +#define OPTSTR_expr 0 +#ifdef CLEANUP_expr +#undef CLEANUP_expr +#undef FOR_expr +#endif + +// factor +#undef OPTSTR_factor +#define OPTSTR_factor 0 +#ifdef CLEANUP_factor +#undef CLEANUP_factor +#undef FOR_factor +#endif + +// fallocate >1l#|o# >1l#|o# +#undef OPTSTR_fallocate +#define OPTSTR_fallocate ">1l#|o#" +#ifdef CLEANUP_fallocate +#undef CLEANUP_fallocate +#undef FOR_fallocate +#undef FLAG_o +#undef FLAG_l +#endif + +// false +#undef OPTSTR_false +#define OPTSTR_false 0 +#ifdef CLEANUP_false +#undef CLEANUP_false +#undef FOR_false +#endif + +// fdisk C#<0H#<0S#<0b#<512ul +#undef OPTSTR_fdisk +#define OPTSTR_fdisk "C#<0H#<0S#<0b#<512ul" +#ifdef CLEANUP_fdisk +#undef CLEANUP_fdisk +#undef FOR_fdisk +#undef FLAG_l +#undef FLAG_u +#undef FLAG_b +#undef FLAG_S +#undef FLAG_H +#undef FLAG_C +#endif + +// file <1bhLs[!hL] <1bhLs[!hL] +#undef OPTSTR_file +#define OPTSTR_file "<1bhLs[!hL]" +#ifdef CLEANUP_file +#undef CLEANUP_file +#undef FOR_file +#undef FLAG_s +#undef FLAG_L +#undef FLAG_h +#undef FLAG_b +#endif + +// find ?^HL[-HL] ?^HL[-HL] +#undef OPTSTR_find +#define OPTSTR_find "?^HL[-HL]" +#ifdef CLEANUP_find +#undef CLEANUP_find +#undef FOR_find +#undef FLAG_L +#undef FLAG_H +#endif + +// flock <1>1nsux[-sux] <1>1nsux[-sux] +#undef OPTSTR_flock +#define OPTSTR_flock "<1>1nsux[-sux]" +#ifdef CLEANUP_flock +#undef CLEANUP_flock +#undef FOR_flock +#undef FLAG_x +#undef FLAG_u +#undef FLAG_s +#undef FLAG_n +#endif + +// fmt w#<0=75 w#<0=75 +#undef OPTSTR_fmt +#define OPTSTR_fmt "w#<0=75" +#ifdef CLEANUP_fmt +#undef CLEANUP_fmt +#undef FOR_fmt +#undef FLAG_w +#endif + +// fold bsuw#<1 +#undef OPTSTR_fold +#define OPTSTR_fold "bsuw#<1" +#ifdef CLEANUP_fold +#undef CLEANUP_fold +#undef FOR_fold +#undef FLAG_w +#undef FLAG_u +#undef FLAG_s +#undef FLAG_b +#endif + +// free htgmkb[!htgmkb] htgmkb[!htgmkb] +#undef OPTSTR_free +#define OPTSTR_free "htgmkb[!htgmkb]" +#ifdef CLEANUP_free +#undef CLEANUP_free +#undef FOR_free +#undef FLAG_b +#undef FLAG_k +#undef FLAG_m +#undef FLAG_g +#undef FLAG_t +#undef FLAG_h +#endif + +// freeramdisk <1>1 <1>1 +#undef OPTSTR_freeramdisk +#define OPTSTR_freeramdisk "<1>1" +#ifdef CLEANUP_freeramdisk +#undef CLEANUP_freeramdisk +#undef FOR_freeramdisk +#endif + +// fsck ?t:ANPRTVsC# +#undef OPTSTR_fsck +#define OPTSTR_fsck "?t:ANPRTVsC#" +#ifdef CLEANUP_fsck +#undef CLEANUP_fsck +#undef FOR_fsck +#undef FLAG_C +#undef FLAG_s +#undef FLAG_V +#undef FLAG_T +#undef FLAG_R +#undef FLAG_P +#undef FLAG_N +#undef FLAG_A +#undef FLAG_t +#endif + +// fsfreeze <1>1f|u|[!fu] <1>1f|u|[!fu] +#undef OPTSTR_fsfreeze +#define OPTSTR_fsfreeze "<1>1f|u|[!fu]" +#ifdef CLEANUP_fsfreeze +#undef CLEANUP_fsfreeze +#undef FOR_fsfreeze +#undef FLAG_u +#undef FLAG_f +#endif + +// fstype <1 +#undef OPTSTR_fstype +#define OPTSTR_fstype "<1" +#ifdef CLEANUP_fstype +#undef CLEANUP_fstype +#undef FOR_fstype +#endif + +// fsync <1d <1d +#undef OPTSTR_fsync +#define OPTSTR_fsync "<1d" +#ifdef CLEANUP_fsync +#undef CLEANUP_fsync +#undef FOR_fsync +#undef FLAG_d +#endif + +// ftpget <2>3P:cp:u:vgslLmMdD[-gs][!gslLmMdD][!clL] +#undef OPTSTR_ftpget +#define OPTSTR_ftpget "<2>3P:cp:u:vgslLmMdD[-gs][!gslLmMdD][!clL]" +#ifdef CLEANUP_ftpget +#undef CLEANUP_ftpget +#undef FOR_ftpget +#undef FLAG_D +#undef FLAG_d +#undef FLAG_M +#undef FLAG_m +#undef FLAG_L +#undef FLAG_l +#undef FLAG_s +#undef FLAG_g +#undef FLAG_v +#undef FLAG_u +#undef FLAG_p +#undef FLAG_c +#undef FLAG_P +#endif + +// getconf >2al >2al +#undef OPTSTR_getconf +#define OPTSTR_getconf ">2al" +#ifdef CLEANUP_getconf +#undef CLEANUP_getconf +#undef FOR_getconf +#undef FLAG_l +#undef FLAG_a +#endif + +// getenforce >0 >0 +#undef OPTSTR_getenforce +#define OPTSTR_getenforce ">0" +#ifdef CLEANUP_getenforce +#undef CLEANUP_getenforce +#undef FOR_getenforce +#endif + +// getfattr (only-values)dhn: (only-values)dhn: +#undef OPTSTR_getfattr +#define OPTSTR_getfattr "(only-values)dhn:" +#ifdef CLEANUP_getfattr +#undef CLEANUP_getfattr +#undef FOR_getfattr +#undef FLAG_n +#undef FLAG_h +#undef FLAG_d +#undef FLAG_only_values +#endif + +// getopt ^a(alternative)n:(name)o:(options)l*(long)(longoptions)Tu ^a(alternative)n:(name)o:(options)l*(long)(longoptions)Tu +#undef OPTSTR_getopt +#define OPTSTR_getopt "^a(alternative)n:(name)o:(options)l*(long)(longoptions)Tu" +#ifdef CLEANUP_getopt +#undef CLEANUP_getopt +#undef FOR_getopt +#undef FLAG_u +#undef FLAG_T +#undef FLAG_l +#undef FLAG_o +#undef FLAG_n +#undef FLAG_a +#endif + +// getty <2t#<0H:I:l:f:iwnmLh +#undef OPTSTR_getty +#define OPTSTR_getty "<2t#<0H:I:l:f:iwnmLh" +#ifdef CLEANUP_getty +#undef CLEANUP_getty +#undef FOR_getty +#undef FLAG_h +#undef FLAG_L +#undef FLAG_m +#undef FLAG_n +#undef FLAG_w +#undef FLAG_i +#undef FLAG_f +#undef FLAG_l +#undef FLAG_I +#undef FLAG_H +#undef FLAG_t +#endif + +// grep (line-buffered)(color):;(exclude-dir)*S(exclude)*M(include)*ZzEFHIab(byte-offset)h(no-filename)ino(only-matching)rRsvwcl(files-with-matches)q(quiet)(silent)e*f*C#B#A#m#x[!wx][!EFw] (line-buffered)(color):;(exclude-dir)*S(exclude)*M(include)*ZzEFHIab(byte-offset)h(no-filename)ino(only-matching)rRsvwcl(files-with-matches)q(quiet)(silent)e*f*C#B#A#m#x[!wx][!EFw] +#undef OPTSTR_grep +#define OPTSTR_grep "(line-buffered)(color):;(exclude-dir)*S(exclude)*M(include)*ZzEFHIab(byte-offset)h(no-filename)ino(only-matching)rRsvwcl(files-with-matches)q(quiet)(silent)e*f*C#B#A#m#x[!wx][!EFw]" +#ifdef CLEANUP_grep +#undef CLEANUP_grep +#undef FOR_grep +#undef FLAG_x +#undef FLAG_m +#undef FLAG_A +#undef FLAG_B +#undef FLAG_C +#undef FLAG_f +#undef FLAG_e +#undef FLAG_q +#undef FLAG_l +#undef FLAG_c +#undef FLAG_w +#undef FLAG_v +#undef FLAG_s +#undef FLAG_R +#undef FLAG_r +#undef FLAG_o +#undef FLAG_n +#undef FLAG_i +#undef FLAG_h +#undef FLAG_b +#undef FLAG_a +#undef FLAG_I +#undef FLAG_H +#undef FLAG_F +#undef FLAG_E +#undef FLAG_z +#undef FLAG_Z +#undef FLAG_M +#undef FLAG_S +#undef FLAG_exclude_dir +#undef FLAG_color +#undef FLAG_line_buffered +#endif + +// groupadd <1>2g#<0S +#undef OPTSTR_groupadd +#define OPTSTR_groupadd "<1>2g#<0S" +#ifdef CLEANUP_groupadd +#undef CLEANUP_groupadd +#undef FOR_groupadd +#undef FLAG_S +#undef FLAG_g +#endif + +// groupdel <1>2 +#undef OPTSTR_groupdel +#define OPTSTR_groupdel "<1>2" +#ifdef CLEANUP_groupdel +#undef CLEANUP_groupdel +#undef FOR_groupdel +#endif + +// groups +#undef OPTSTR_groups +#define OPTSTR_groups 0 +#ifdef CLEANUP_groups +#undef CLEANUP_groups +#undef FOR_groups +#endif + +// gunzip cdfk123456789[-123456789] cdfk123456789[-123456789] +#undef OPTSTR_gunzip +#define OPTSTR_gunzip "cdfk123456789[-123456789]" +#ifdef CLEANUP_gunzip +#undef CLEANUP_gunzip +#undef FOR_gunzip +#undef FLAG_9 +#undef FLAG_8 +#undef FLAG_7 +#undef FLAG_6 +#undef FLAG_5 +#undef FLAG_4 +#undef FLAG_3 +#undef FLAG_2 +#undef FLAG_1 +#undef FLAG_k +#undef FLAG_f +#undef FLAG_d +#undef FLAG_c +#endif + +// gzip ncdfk123456789[-123456789] ncdfk123456789[-123456789] +#undef OPTSTR_gzip +#define OPTSTR_gzip "ncdfk123456789[-123456789]" +#ifdef CLEANUP_gzip +#undef CLEANUP_gzip +#undef FOR_gzip +#undef FLAG_9 +#undef FLAG_8 +#undef FLAG_7 +#undef FLAG_6 +#undef FLAG_5 +#undef FLAG_4 +#undef FLAG_3 +#undef FLAG_2 +#undef FLAG_1 +#undef FLAG_k +#undef FLAG_f +#undef FLAG_d +#undef FLAG_c +#undef FLAG_n +#endif + +// head ?n(lines)#<0=10c(bytes)#<0qv[-nc] ?n(lines)#<0=10c(bytes)#<0qv[-nc] +#undef OPTSTR_head +#define OPTSTR_head "?n(lines)#<0=10c(bytes)#<0qv[-nc]" +#ifdef CLEANUP_head +#undef CLEANUP_head +#undef FOR_head +#undef FLAG_v +#undef FLAG_q +#undef FLAG_c +#undef FLAG_n +#endif + +// hello +#undef OPTSTR_hello +#define OPTSTR_hello 0 +#ifdef CLEANUP_hello +#undef CLEANUP_hello +#undef FOR_hello +#endif + +// help ahu ahu +#undef OPTSTR_help +#define OPTSTR_help "ahu" +#ifdef CLEANUP_help +#undef CLEANUP_help +#undef FOR_help +#undef FLAG_u +#undef FLAG_h +#undef FLAG_a +#endif + +// hexedit <1>1r +#undef OPTSTR_hexedit +#define OPTSTR_hexedit "<1>1r" +#ifdef CLEANUP_hexedit +#undef CLEANUP_hexedit +#undef FOR_hexedit +#undef FLAG_r +#endif + +// host <1>2avt: +#undef OPTSTR_host +#define OPTSTR_host "<1>2avt:" +#ifdef CLEANUP_host +#undef CLEANUP_host +#undef FOR_host +#undef FLAG_t +#undef FLAG_v +#undef FLAG_a +#endif + +// hostid >0 +#undef OPTSTR_hostid +#define OPTSTR_hostid ">0" +#ifdef CLEANUP_hostid +#undef CLEANUP_hostid +#undef FOR_hostid +#endif + +// hostname >1bdsfF:[!bdsf] >1bdsfF:[!bdsf] +#undef OPTSTR_hostname +#define OPTSTR_hostname ">1bdsfF:[!bdsf]" +#ifdef CLEANUP_hostname +#undef CLEANUP_hostname +#undef FOR_hostname +#undef FLAG_F +#undef FLAG_f +#undef FLAG_s +#undef FLAG_d +#undef FLAG_b +#endif + +// hwclock >0(fast)f(rtc):u(utc)l(localtime)t(systz)s(hctosys)r(show)w(systohc)[-ul][!rtsw] >0(fast)f(rtc):u(utc)l(localtime)t(systz)s(hctosys)r(show)w(systohc)[-ul][!rtsw] +#undef OPTSTR_hwclock +#define OPTSTR_hwclock ">0(fast)f(rtc):u(utc)l(localtime)t(systz)s(hctosys)r(show)w(systohc)[-ul][!rtsw]" +#ifdef CLEANUP_hwclock +#undef CLEANUP_hwclock +#undef FOR_hwclock +#undef FLAG_w +#undef FLAG_r +#undef FLAG_s +#undef FLAG_t +#undef FLAG_l +#undef FLAG_u +#undef FLAG_f +#undef FLAG_fast +#endif + +// i2cdetect >3aFly >3aFly +#undef OPTSTR_i2cdetect +#define OPTSTR_i2cdetect ">3aFly" +#ifdef CLEANUP_i2cdetect +#undef CLEANUP_i2cdetect +#undef FOR_i2cdetect +#undef FLAG_y +#undef FLAG_l +#undef FLAG_F +#undef FLAG_a +#endif + +// i2cdump <2>2fy <2>2fy +#undef OPTSTR_i2cdump +#define OPTSTR_i2cdump "<2>2fy" +#ifdef CLEANUP_i2cdump +#undef CLEANUP_i2cdump +#undef FOR_i2cdump +#undef FLAG_y +#undef FLAG_f +#endif + +// i2cget <3>3fy <3>3fy +#undef OPTSTR_i2cget +#define OPTSTR_i2cget "<3>3fy" +#ifdef CLEANUP_i2cget +#undef CLEANUP_i2cget +#undef FOR_i2cget +#undef FLAG_y +#undef FLAG_f +#endif + +// i2cset <4fy <4fy +#undef OPTSTR_i2cset +#define OPTSTR_i2cset "<4fy" +#ifdef CLEANUP_i2cset +#undef CLEANUP_i2cset +#undef FOR_i2cset +#undef FLAG_y +#undef FLAG_f +#endif + +// iconv cst:f: cst:f: +#undef OPTSTR_iconv +#define OPTSTR_iconv "cst:f:" +#ifdef CLEANUP_iconv +#undef CLEANUP_iconv +#undef FOR_iconv +#undef FLAG_f +#undef FLAG_t +#undef FLAG_s +#undef FLAG_c +#endif + +// id >1ZnGgru[!ZGgu] >1ZnGgru[!ZGgu] +#undef OPTSTR_id +#define OPTSTR_id ">1ZnGgru[!ZGgu]" +#ifdef CLEANUP_id +#undef CLEANUP_id +#undef FOR_id +#undef FLAG_u +#undef FLAG_r +#undef FLAG_g +#undef FLAG_G +#undef FLAG_n +#undef FLAG_Z +#endif + +// ifconfig ^?aS ^?aS +#undef OPTSTR_ifconfig +#define OPTSTR_ifconfig "^?aS" +#ifdef CLEANUP_ifconfig +#undef CLEANUP_ifconfig +#undef FOR_ifconfig +#undef FLAG_S +#undef FLAG_a +#endif + +// init +#undef OPTSTR_init +#define OPTSTR_init 0 +#ifdef CLEANUP_init +#undef CLEANUP_init +#undef FOR_init +#endif + +// inotifyd <2 <2 +#undef OPTSTR_inotifyd +#define OPTSTR_inotifyd "<2" +#ifdef CLEANUP_inotifyd +#undef CLEANUP_inotifyd +#undef FOR_inotifyd +#endif + +// insmod <1 <1 +#undef OPTSTR_insmod +#define OPTSTR_insmod "<1" +#ifdef CLEANUP_insmod +#undef CLEANUP_insmod +#undef FOR_insmod +#endif + +// install <1cdDpsvm:o:g: <1cdDpsvm:o:g: +#undef OPTSTR_install +#define OPTSTR_install "<1cdDpsvm:o:g:" +#ifdef CLEANUP_install +#undef CLEANUP_install +#undef FOR_install +#undef FLAG_g +#undef FLAG_o +#undef FLAG_m +#undef FLAG_v +#undef FLAG_s +#undef FLAG_p +#undef FLAG_D +#undef FLAG_d +#undef FLAG_c +#endif + +// ionice ^tc#<0>3=2n#<0>7=5p# ^tc#<0>3=2n#<0>7=5p# +#undef OPTSTR_ionice +#define OPTSTR_ionice "^tc#<0>3=2n#<0>7=5p#" +#ifdef CLEANUP_ionice +#undef CLEANUP_ionice +#undef FOR_ionice +#undef FLAG_p +#undef FLAG_n +#undef FLAG_c +#undef FLAG_t +#endif + +// iorenice ?<1>3 ?<1>3 +#undef OPTSTR_iorenice +#define OPTSTR_iorenice "?<1>3" +#ifdef CLEANUP_iorenice +#undef CLEANUP_iorenice +#undef FOR_iorenice +#endif + +// iotop >0AaKOHk*o*p*u*s#<1=7d%<100=3000m#n#<1bq >0AaKOHk*o*p*u*s#<1=7d%<100=3000m#n#<1bq +#undef OPTSTR_iotop +#define OPTSTR_iotop ">0AaKOHk*o*p*u*s#<1=7d%<100=3000m#n#<1bq" +#ifdef CLEANUP_iotop +#undef CLEANUP_iotop +#undef FOR_iotop +#undef FLAG_q +#undef FLAG_b +#undef FLAG_n +#undef FLAG_m +#undef FLAG_d +#undef FLAG_s +#undef FLAG_u +#undef FLAG_p +#undef FLAG_o +#undef FLAG_k +#undef FLAG_H +#undef FLAG_O +#undef FLAG_K +#undef FLAG_a +#undef FLAG_A +#endif + +// ip +#undef OPTSTR_ip +#define OPTSTR_ip 0 +#ifdef CLEANUP_ip +#undef CLEANUP_ip +#undef FOR_ip +#endif + +// ipcrm m*M*s*S*q*Q* +#undef OPTSTR_ipcrm +#define OPTSTR_ipcrm "m*M*s*S*q*Q*" +#ifdef CLEANUP_ipcrm +#undef CLEANUP_ipcrm +#undef FOR_ipcrm +#undef FLAG_Q +#undef FLAG_q +#undef FLAG_S +#undef FLAG_s +#undef FLAG_M +#undef FLAG_m +#endif + +// ipcs acptulsqmi# +#undef OPTSTR_ipcs +#define OPTSTR_ipcs "acptulsqmi#" +#ifdef CLEANUP_ipcs +#undef CLEANUP_ipcs +#undef FOR_ipcs +#undef FLAG_i +#undef FLAG_m +#undef FLAG_q +#undef FLAG_s +#undef FLAG_l +#undef FLAG_u +#undef FLAG_t +#undef FLAG_p +#undef FLAG_c +#undef FLAG_a +#endif + +// kill ?ls: ?ls: +#undef OPTSTR_kill +#define OPTSTR_kill "?ls: " +#ifdef CLEANUP_kill +#undef CLEANUP_kill +#undef FOR_kill +#undef FLAG_s +#undef FLAG_l +#endif + +// killall ?s:ilqvw ?s:ilqvw +#undef OPTSTR_killall +#define OPTSTR_killall "?s:ilqvw" +#ifdef CLEANUP_killall +#undef CLEANUP_killall +#undef FOR_killall +#undef FLAG_w +#undef FLAG_v +#undef FLAG_q +#undef FLAG_l +#undef FLAG_i +#undef FLAG_s +#endif + +// killall5 ?o*ls: [!lo][!ls] +#undef OPTSTR_killall5 +#define OPTSTR_killall5 "?o*ls: [!lo][!ls]" +#ifdef CLEANUP_killall5 +#undef CLEANUP_killall5 +#undef FOR_killall5 +#undef FLAG_s +#undef FLAG_l +#undef FLAG_o +#endif + +// klogd c#<1>8n +#undef OPTSTR_klogd +#define OPTSTR_klogd "c#<1>8n" +#ifdef CLEANUP_klogd +#undef CLEANUP_klogd +#undef FOR_klogd +#undef FLAG_n +#undef FLAG_c +#endif + +// last f:W +#undef OPTSTR_last +#define OPTSTR_last "f:W" +#ifdef CLEANUP_last +#undef CLEANUP_last +#undef FOR_last +#undef FLAG_W +#undef FLAG_f +#endif + +// link <2>2 +#undef OPTSTR_link +#define OPTSTR_link "<2>2" +#ifdef CLEANUP_link +#undef CLEANUP_link +#undef FOR_link +#endif + +// ln <1rt:Tvnfs <1rt:Tvnfs +#undef OPTSTR_ln +#define OPTSTR_ln "<1rt:Tvnfs" +#ifdef CLEANUP_ln +#undef CLEANUP_ln +#undef FOR_ln +#undef FLAG_s +#undef FLAG_f +#undef FLAG_n +#undef FLAG_v +#undef FLAG_T +#undef FLAG_t +#undef FLAG_r +#endif + +// load_policy <1>1 <1>1 +#undef OPTSTR_load_policy +#define OPTSTR_load_policy "<1>1" +#ifdef CLEANUP_load_policy +#undef CLEANUP_load_policy +#undef FOR_load_policy +#endif + +// log <1p:t: <1p:t: +#undef OPTSTR_log +#define OPTSTR_log "<1p:t:" +#ifdef CLEANUP_log +#undef CLEANUP_log +#undef FOR_log +#undef FLAG_t +#undef FLAG_p +#endif + +// logger st:p: +#undef OPTSTR_logger +#define OPTSTR_logger "st:p:" +#ifdef CLEANUP_logger +#undef CLEANUP_logger +#undef FOR_logger +#undef FLAG_p +#undef FLAG_t +#undef FLAG_s +#endif + +// login >1f:ph: +#undef OPTSTR_login +#define OPTSTR_login ">1f:ph:" +#ifdef CLEANUP_login +#undef CLEANUP_login +#undef FOR_login +#undef FLAG_h +#undef FLAG_p +#undef FLAG_f +#endif + +// logname >0 >0 +#undef OPTSTR_logname +#define OPTSTR_logname ">0" +#ifdef CLEANUP_logname +#undef CLEANUP_logname +#undef FOR_logname +#endif + +// logwrapper +#undef OPTSTR_logwrapper +#define OPTSTR_logwrapper 0 +#ifdef CLEANUP_logwrapper +#undef CLEANUP_logwrapper +#undef FOR_logwrapper +#endif + +// losetup >2S(sizelimit)#s(show)ro#j:fdcaD[!afj] >2S(sizelimit)#s(show)ro#j:fdcaD[!afj] +#undef OPTSTR_losetup +#define OPTSTR_losetup ">2S(sizelimit)#s(show)ro#j:fdcaD[!afj]" +#ifdef CLEANUP_losetup +#undef CLEANUP_losetup +#undef FOR_losetup +#undef FLAG_D +#undef FLAG_a +#undef FLAG_c +#undef FLAG_d +#undef FLAG_f +#undef FLAG_j +#undef FLAG_o +#undef FLAG_r +#undef FLAG_s +#undef FLAG_S +#endif + +// ls (color):;(full-time)(show-control-chars)ZgoACFHLRSabcdfhikl@mnpqrstuw#=80<0x1[-Cxm1][-Cxml][-Cxmo][-Cxmg][-cu][-ftS][-HL][!qb] (color):;(full-time)(show-control-chars)ZgoACFHLRSabcdfhikl@mnpqrstuw#=80<0x1[-Cxm1][-Cxml][-Cxmo][-Cxmg][-cu][-ftS][-HL][!qb] +#undef OPTSTR_ls +#define OPTSTR_ls "(color):;(full-time)(show-control-chars)ZgoACFHLRSabcdfhikl@mnpqrstuw#=80<0x1[-Cxm1][-Cxml][-Cxmo][-Cxmg][-cu][-ftS][-HL][!qb]" +#ifdef CLEANUP_ls +#undef CLEANUP_ls +#undef FOR_ls +#undef FLAG_1 +#undef FLAG_x +#undef FLAG_w +#undef FLAG_u +#undef FLAG_t +#undef FLAG_s +#undef FLAG_r +#undef FLAG_q +#undef FLAG_p +#undef FLAG_n +#undef FLAG_m +#undef FLAG_l +#undef FLAG_k +#undef FLAG_i +#undef FLAG_h +#undef FLAG_f +#undef FLAG_d +#undef FLAG_c +#undef FLAG_b +#undef FLAG_a +#undef FLAG_S +#undef FLAG_R +#undef FLAG_L +#undef FLAG_H +#undef FLAG_F +#undef FLAG_C +#undef FLAG_A +#undef FLAG_o +#undef FLAG_g +#undef FLAG_Z +#undef FLAG_show_control_chars +#undef FLAG_full_time +#undef FLAG_color +#endif + +// lsattr ldapvR ldapvR +#undef OPTSTR_lsattr +#define OPTSTR_lsattr "ldapvR" +#ifdef CLEANUP_lsattr +#undef CLEANUP_lsattr +#undef FOR_lsattr +#undef FLAG_R +#undef FLAG_v +#undef FLAG_p +#undef FLAG_a +#undef FLAG_d +#undef FLAG_l +#endif + +// lsmod +#undef OPTSTR_lsmod +#define OPTSTR_lsmod 0 +#ifdef CLEANUP_lsmod +#undef CLEANUP_lsmod +#undef FOR_lsmod +#endif + +// lsof lp*t lp*t +#undef OPTSTR_lsof +#define OPTSTR_lsof "lp*t" +#ifdef CLEANUP_lsof +#undef CLEANUP_lsof +#undef FOR_lsof +#undef FLAG_t +#undef FLAG_p +#undef FLAG_l +#endif + +// lspci emkn emkn@i: +#undef OPTSTR_lspci +#define OPTSTR_lspci "emkn" +#ifdef CLEANUP_lspci +#undef CLEANUP_lspci +#undef FOR_lspci +#undef FLAG_i +#undef FLAG_n +#undef FLAG_k +#undef FLAG_m +#undef FLAG_e +#endif + +// lsusb +#undef OPTSTR_lsusb +#define OPTSTR_lsusb 0 +#ifdef CLEANUP_lsusb +#undef CLEANUP_lsusb +#undef FOR_lsusb +#endif + +// makedevs <1>1d: <1>1d: +#undef OPTSTR_makedevs +#define OPTSTR_makedevs "<1>1d:" +#ifdef CLEANUP_makedevs +#undef CLEANUP_makedevs +#undef FOR_makedevs +#undef FLAG_d +#endif + +// man k:M: +#undef OPTSTR_man +#define OPTSTR_man "k:M:" +#ifdef CLEANUP_man +#undef CLEANUP_man +#undef FOR_man +#undef FLAG_M +#undef FLAG_k +#endif + +// mcookie v(verbose)V(version) +#undef OPTSTR_mcookie +#define OPTSTR_mcookie "v(verbose)V(version)" +#ifdef CLEANUP_mcookie +#undef CLEANUP_mcookie +#undef FOR_mcookie +#undef FLAG_V +#undef FLAG_v +#endif + +// md5sum bc(check)s(status)[!bc] bc(check)s(status)[!bc] +#undef OPTSTR_md5sum +#define OPTSTR_md5sum "bc(check)s(status)[!bc]" +#ifdef CLEANUP_md5sum +#undef CLEANUP_md5sum +#undef FOR_md5sum +#undef FLAG_s +#undef FLAG_c +#undef FLAG_b +#endif + +// mdev s +#undef OPTSTR_mdev +#define OPTSTR_mdev "s" +#ifdef CLEANUP_mdev +#undef CLEANUP_mdev +#undef FOR_mdev +#undef FLAG_s +#endif + +// microcom <1>1s:X <1>1s:X +#undef OPTSTR_microcom +#define OPTSTR_microcom "<1>1s:X" +#ifdef CLEANUP_microcom +#undef CLEANUP_microcom +#undef FOR_microcom +#undef FLAG_X +#undef FLAG_s +#endif + +// mix c:d:l#r# +#undef OPTSTR_mix +#define OPTSTR_mix "c:d:l#r#" +#ifdef CLEANUP_mix +#undef CLEANUP_mix +#undef FOR_mix +#undef FLAG_r +#undef FLAG_l +#undef FLAG_d +#undef FLAG_c +#endif + +// mkdir <1Z:vp(parent)(parents)m: <1Z:vp(parent)(parents)m: +#undef OPTSTR_mkdir +#define OPTSTR_mkdir "<1Z:vp(parent)(parents)m:" +#ifdef CLEANUP_mkdir +#undef CLEANUP_mkdir +#undef FOR_mkdir +#undef FLAG_m +#undef FLAG_p +#undef FLAG_v +#undef FLAG_Z +#endif + +// mke2fs <1>2g:Fnqm#N#i#b# +#undef OPTSTR_mke2fs +#define OPTSTR_mke2fs "<1>2g:Fnqm#N#i#b#" +#ifdef CLEANUP_mke2fs +#undef CLEANUP_mke2fs +#undef FOR_mke2fs +#undef FLAG_b +#undef FLAG_i +#undef FLAG_N +#undef FLAG_m +#undef FLAG_q +#undef FLAG_n +#undef FLAG_F +#undef FLAG_g +#endif + +// mkfifo <1Z:m: <1Z:m: +#undef OPTSTR_mkfifo +#define OPTSTR_mkfifo "<1Z:m:" +#ifdef CLEANUP_mkfifo +#undef CLEANUP_mkfifo +#undef FOR_mkfifo +#undef FLAG_m +#undef FLAG_Z +#endif + +// mknod <2>4m(mode):Z: <2>4m(mode):Z: +#undef OPTSTR_mknod +#define OPTSTR_mknod "<2>4m(mode):Z:" +#ifdef CLEANUP_mknod +#undef CLEANUP_mknod +#undef FOR_mknod +#undef FLAG_Z +#undef FLAG_m +#endif + +// mkpasswd >2S:m:P#=0<0 +#undef OPTSTR_mkpasswd +#define OPTSTR_mkpasswd ">2S:m:P#=0<0" +#ifdef CLEANUP_mkpasswd +#undef CLEANUP_mkpasswd +#undef FOR_mkpasswd +#undef FLAG_P +#undef FLAG_m +#undef FLAG_S +#endif + +// mkswap <1>1L: <1>1L: +#undef OPTSTR_mkswap +#define OPTSTR_mkswap "<1>1L:" +#ifdef CLEANUP_mkswap +#undef CLEANUP_mkswap +#undef FOR_mkswap +#undef FLAG_L +#endif + +// mktemp >1(tmpdir);:uqd(directory)p:t >1(tmpdir);:uqd(directory)p:t +#undef OPTSTR_mktemp +#define OPTSTR_mktemp ">1(tmpdir);:uqd(directory)p:t" +#ifdef CLEANUP_mktemp +#undef CLEANUP_mktemp +#undef FOR_mktemp +#undef FLAG_t +#undef FLAG_p +#undef FLAG_d +#undef FLAG_q +#undef FLAG_u +#undef FLAG_tmpdir +#endif + +// modinfo <1b:k:F:0 <1b:k:F:0 +#undef OPTSTR_modinfo +#define OPTSTR_modinfo "<1b:k:F:0" +#ifdef CLEANUP_modinfo +#undef CLEANUP_modinfo +#undef FOR_modinfo +#undef FLAG_0 +#undef FLAG_F +#undef FLAG_k +#undef FLAG_b +#endif + +// modprobe alrqvsDbd* alrqvsDbd* +#undef OPTSTR_modprobe +#define OPTSTR_modprobe "alrqvsDbd*" +#ifdef CLEANUP_modprobe +#undef CLEANUP_modprobe +#undef FOR_modprobe +#undef FLAG_d +#undef FLAG_b +#undef FLAG_D +#undef FLAG_s +#undef FLAG_v +#undef FLAG_q +#undef FLAG_r +#undef FLAG_l +#undef FLAG_a +#endif + +// more +#undef OPTSTR_more +#define OPTSTR_more 0 +#ifdef CLEANUP_more +#undef CLEANUP_more +#undef FOR_more +#endif + +// mount ?O:afnrvwt:o*[-rw] ?O:afnrvwt:o*[-rw] +#undef OPTSTR_mount +#define OPTSTR_mount "?O:afnrvwt:o*[-rw]" +#ifdef CLEANUP_mount +#undef CLEANUP_mount +#undef FOR_mount +#undef FLAG_o +#undef FLAG_t +#undef FLAG_w +#undef FLAG_v +#undef FLAG_r +#undef FLAG_n +#undef FLAG_f +#undef FLAG_a +#undef FLAG_O +#endif + +// mountpoint <1qdx[-dx] <1qdx[-dx] +#undef OPTSTR_mountpoint +#define OPTSTR_mountpoint "<1qdx[-dx]" +#ifdef CLEANUP_mountpoint +#undef CLEANUP_mountpoint +#undef FOR_mountpoint +#undef FLAG_x +#undef FLAG_d +#undef FLAG_q +#endif + +// mv <2vnF(remove-destination)fiT[-ni] <2vnF(remove-destination)fiT[-ni] +#undef OPTSTR_mv +#define OPTSTR_mv "<2vnF(remove-destination)fiT[-ni]" +#ifdef CLEANUP_mv +#undef CLEANUP_mv +#undef FOR_mv +#undef FLAG_T +#undef FLAG_i +#undef FLAG_f +#undef FLAG_F +#undef FLAG_n +#undef FLAG_v +#endif + +// nbd_client <3>3ns <3>3ns +#undef OPTSTR_nbd_client +#define OPTSTR_nbd_client "<3>3ns" +#ifdef CLEANUP_nbd_client +#undef CLEANUP_nbd_client +#undef FOR_nbd_client +#undef FLAG_s +#undef FLAG_n +#endif + +// netcat ^tlLw#<1W#<1p#<1>65535q#<1s:f:46uU[!tlL][!Lw][!46U] ^tlLw#<1W#<1p#<1>65535q#<1s:f:46uU[!tlL][!Lw][!46U] +#undef OPTSTR_netcat +#define OPTSTR_netcat "^tlLw#<1W#<1p#<1>65535q#<1s:f:46uU[!tlL][!Lw][!46U]" +#ifdef CLEANUP_netcat +#undef CLEANUP_netcat +#undef FOR_netcat +#undef FLAG_U +#undef FLAG_u +#undef FLAG_6 +#undef FLAG_4 +#undef FLAG_f +#undef FLAG_s +#undef FLAG_q +#undef FLAG_p +#undef FLAG_W +#undef FLAG_w +#undef FLAG_L +#undef FLAG_l +#undef FLAG_t +#endif + +// netstat pWrxwutneal pWrxwutneal +#undef OPTSTR_netstat +#define OPTSTR_netstat "pWrxwutneal" +#ifdef CLEANUP_netstat +#undef CLEANUP_netstat +#undef FOR_netstat +#undef FLAG_l +#undef FLAG_a +#undef FLAG_e +#undef FLAG_n +#undef FLAG_t +#undef FLAG_u +#undef FLAG_w +#undef FLAG_x +#undef FLAG_r +#undef FLAG_W +#undef FLAG_p +#endif + +// nice ^<1n# ^<1n# +#undef OPTSTR_nice +#define OPTSTR_nice "^<1n#" +#ifdef CLEANUP_nice +#undef CLEANUP_nice +#undef FOR_nice +#undef FLAG_n +#endif + +// nl v#=1l#w#<0=6Eb:n:s: v#=1l#w#<0=6Eb:n:s: +#undef OPTSTR_nl +#define OPTSTR_nl "v#=1l#w#<0=6Eb:n:s:" +#ifdef CLEANUP_nl +#undef CLEANUP_nl +#undef FOR_nl +#undef FLAG_s +#undef FLAG_n +#undef FLAG_b +#undef FLAG_E +#undef FLAG_w +#undef FLAG_l +#undef FLAG_v +#endif + +// nohup <1^ <1^ +#undef OPTSTR_nohup +#define OPTSTR_nohup "<1^" +#ifdef CLEANUP_nohup +#undef CLEANUP_nohup +#undef FOR_nohup +#endif + +// nproc (all) (all) +#undef OPTSTR_nproc +#define OPTSTR_nproc "(all)" +#ifdef CLEANUP_nproc +#undef CLEANUP_nproc +#undef FOR_nproc +#undef FLAG_all +#endif + +// nsenter <1F(no-fork)t#<1(target)i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user); <1F(no-fork)t#<1(target)i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user); +#undef OPTSTR_nsenter +#define OPTSTR_nsenter "<1F(no-fork)t#<1(target)i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user);" +#ifdef CLEANUP_nsenter +#undef CLEANUP_nsenter +#undef FOR_nsenter +#undef FLAG_U +#undef FLAG_u +#undef FLAG_p +#undef FLAG_n +#undef FLAG_m +#undef FLAG_i +#undef FLAG_t +#undef FLAG_F +#endif + +// od j#vw#<1=16N#xsodcbA:t* j#vw#<1=16N#xsodcbA:t* +#undef OPTSTR_od +#define OPTSTR_od "j#vw#<1=16N#xsodcbA:t*" +#ifdef CLEANUP_od +#undef CLEANUP_od +#undef FOR_od +#undef FLAG_t +#undef FLAG_A +#undef FLAG_b +#undef FLAG_c +#undef FLAG_d +#undef FLAG_o +#undef FLAG_s +#undef FLAG_x +#undef FLAG_N +#undef FLAG_w +#undef FLAG_v +#undef FLAG_j +#endif + +// oneit ^<1nc:p3[!pn] +#undef OPTSTR_oneit +#define OPTSTR_oneit "^<1nc:p3[!pn]" +#ifdef CLEANUP_oneit +#undef CLEANUP_oneit +#undef FOR_oneit +#undef FLAG_3 +#undef FLAG_p +#undef FLAG_c +#undef FLAG_n +#endif + +// openvt c#<1>63sw +#undef OPTSTR_openvt +#define OPTSTR_openvt "c#<1>63sw" +#ifdef CLEANUP_openvt +#undef CLEANUP_openvt +#undef FOR_openvt +#undef FLAG_w +#undef FLAG_s +#undef FLAG_c +#endif + +// partprobe <1 <1 +#undef OPTSTR_partprobe +#define OPTSTR_partprobe "<1" +#ifdef CLEANUP_partprobe +#undef CLEANUP_partprobe +#undef FOR_partprobe +#endif + +// passwd >1a:dlu +#undef OPTSTR_passwd +#define OPTSTR_passwd ">1a:dlu" +#ifdef CLEANUP_passwd +#undef CLEANUP_passwd +#undef FOR_passwd +#undef FLAG_u +#undef FLAG_l +#undef FLAG_d +#undef FLAG_a +#endif + +// paste d:s d:s +#undef OPTSTR_paste +#define OPTSTR_paste "d:s" +#ifdef CLEANUP_paste +#undef CLEANUP_paste +#undef FOR_paste +#undef FLAG_s +#undef FLAG_d +#endif + +// patch >2(no-backup-if-mismatch)(dry-run)F#g#fulp#d:i:Rs(quiet) >2(no-backup-if-mismatch)(dry-run)xF#g#fulp#d:i:Rs(quiet) +#undef OPTSTR_patch +#define OPTSTR_patch ">2(no-backup-if-mismatch)(dry-run)F#g#fulp#d:i:Rs(quiet)" +#ifdef CLEANUP_patch +#undef CLEANUP_patch +#undef FOR_patch +#undef FLAG_s +#undef FLAG_R +#undef FLAG_i +#undef FLAG_d +#undef FLAG_p +#undef FLAG_l +#undef FLAG_u +#undef FLAG_f +#undef FLAG_g +#undef FLAG_F +#undef FLAG_x +#undef FLAG_dry_run +#undef FLAG_no_backup_if_mismatch +#endif + +// pgrep ?cld:u*U*t*s*P*g*G*fnovxL:[-no] ?cld:u*U*t*s*P*g*G*fnovxL:[-no] +#undef OPTSTR_pgrep +#define OPTSTR_pgrep "?cld:u*U*t*s*P*g*G*fnovxL:[-no]" +#ifdef CLEANUP_pgrep +#undef CLEANUP_pgrep +#undef FOR_pgrep +#undef FLAG_L +#undef FLAG_x +#undef FLAG_v +#undef FLAG_o +#undef FLAG_n +#undef FLAG_f +#undef FLAG_G +#undef FLAG_g +#undef FLAG_P +#undef FLAG_s +#undef FLAG_t +#undef FLAG_U +#undef FLAG_u +#undef FLAG_d +#undef FLAG_l +#undef FLAG_c +#endif + +// pidof <1so:x <1so:x +#undef OPTSTR_pidof +#define OPTSTR_pidof "<1so:x" +#ifdef CLEANUP_pidof +#undef CLEANUP_pidof +#undef FOR_pidof +#undef FLAG_x +#undef FLAG_o +#undef FLAG_s +#endif + +// ping <1>1m#t#<0>255=64c#<0=3s#<0>4088=56i%W#<0=3w#<0qf46I:[-46] <1>1m#t#<0>255=64c#<0=3s#<0>4088=56i%W#<0=3w#<0qf46I:[-46] +#undef OPTSTR_ping +#define OPTSTR_ping "<1>1m#t#<0>255=64c#<0=3s#<0>4088=56i%W#<0=3w#<0qf46I:[-46]" +#ifdef CLEANUP_ping +#undef CLEANUP_ping +#undef FOR_ping +#undef FLAG_I +#undef FLAG_6 +#undef FLAG_4 +#undef FLAG_f +#undef FLAG_q +#undef FLAG_w +#undef FLAG_W +#undef FLAG_i +#undef FLAG_s +#undef FLAG_c +#undef FLAG_t +#undef FLAG_m +#endif + +// pivot_root <2>2 <2>2 +#undef OPTSTR_pivot_root +#define OPTSTR_pivot_root "<2>2" +#ifdef CLEANUP_pivot_root +#undef CLEANUP_pivot_root +#undef FOR_pivot_root +#endif + +// pkill ?Vu*U*t*s*P*g*G*fnovxl:[-no] ?Vu*U*t*s*P*g*G*fnovxl:[-no] +#undef OPTSTR_pkill +#define OPTSTR_pkill "?Vu*U*t*s*P*g*G*fnovxl:[-no]" +#ifdef CLEANUP_pkill +#undef CLEANUP_pkill +#undef FOR_pkill +#undef FLAG_l +#undef FLAG_x +#undef FLAG_v +#undef FLAG_o +#undef FLAG_n +#undef FLAG_f +#undef FLAG_G +#undef FLAG_g +#undef FLAG_P +#undef FLAG_s +#undef FLAG_t +#undef FLAG_U +#undef FLAG_u +#undef FLAG_V +#endif + +// pmap <1xq <1xq +#undef OPTSTR_pmap +#define OPTSTR_pmap "<1xq" +#ifdef CLEANUP_pmap +#undef CLEANUP_pmap +#undef FOR_pmap +#undef FLAG_q +#undef FLAG_x +#endif + +// printenv 0(null) 0(null) +#undef OPTSTR_printenv +#define OPTSTR_printenv "0(null)" +#ifdef CLEANUP_printenv +#undef CLEANUP_printenv +#undef FOR_printenv +#undef FLAG_0 +#endif + +// printf <1?^ <1?^ +#undef OPTSTR_printf +#define OPTSTR_printf "<1?^" +#ifdef CLEANUP_printf +#undef CLEANUP_printf +#undef FOR_printf +#endif + +// ps k(sort)*P(ppid)*aAdeflMno*O*p(pid)*s*t*Tu*U*g*G*wZ[!ol][+Ae][!oO] k(sort)*P(ppid)*aAdeflMno*O*p(pid)*s*t*Tu*U*g*G*wZ[!ol][+Ae][!oO] +#undef OPTSTR_ps +#define OPTSTR_ps "k(sort)*P(ppid)*aAdeflMno*O*p(pid)*s*t*Tu*U*g*G*wZ[!ol][+Ae][!oO]" +#ifdef CLEANUP_ps +#undef CLEANUP_ps +#undef FOR_ps +#undef FLAG_Z +#undef FLAG_w +#undef FLAG_G +#undef FLAG_g +#undef FLAG_U +#undef FLAG_u +#undef FLAG_T +#undef FLAG_t +#undef FLAG_s +#undef FLAG_p +#undef FLAG_O +#undef FLAG_o +#undef FLAG_n +#undef FLAG_M +#undef FLAG_l +#undef FLAG_f +#undef FLAG_e +#undef FLAG_d +#undef FLAG_A +#undef FLAG_a +#undef FLAG_P +#undef FLAG_k +#endif + +// pwd >0LP[-LP] >0LP[-LP] +#undef OPTSTR_pwd +#define OPTSTR_pwd ">0LP[-LP]" +#ifdef CLEANUP_pwd +#undef CLEANUP_pwd +#undef FOR_pwd +#undef FLAG_P +#undef FLAG_L +#endif + +// pwdx <1a <1a +#undef OPTSTR_pwdx +#define OPTSTR_pwdx "<1a" +#ifdef CLEANUP_pwdx +#undef CLEANUP_pwdx +#undef FOR_pwdx +#undef FLAG_a +#endif + +// readahead +#undef OPTSTR_readahead +#define OPTSTR_readahead 0 +#ifdef CLEANUP_readahead +#undef CLEANUP_readahead +#undef FOR_readahead +#endif + +// readelf <1(dyn-syms)adhlnp:SsWx: <1(dyn-syms)adhlnp:SsWx: +#undef OPTSTR_readelf +#define OPTSTR_readelf "<1(dyn-syms)adhlnp:SsWx:" +#ifdef CLEANUP_readelf +#undef CLEANUP_readelf +#undef FOR_readelf +#undef FLAG_x +#undef FLAG_W +#undef FLAG_s +#undef FLAG_S +#undef FLAG_p +#undef FLAG_n +#undef FLAG_l +#undef FLAG_h +#undef FLAG_d +#undef FLAG_a +#undef FLAG_dyn_syms +#endif + +// readlink <1nqmef(canonicalize)[-mef] <1nqmef(canonicalize)[-mef] +#undef OPTSTR_readlink +#define OPTSTR_readlink "<1nqmef(canonicalize)[-mef]" +#ifdef CLEANUP_readlink +#undef CLEANUP_readlink +#undef FOR_readlink +#undef FLAG_f +#undef FLAG_e +#undef FLAG_m +#undef FLAG_q +#undef FLAG_n +#endif + +// realpath <1 <1 +#undef OPTSTR_realpath +#define OPTSTR_realpath "<1" +#ifdef CLEANUP_realpath +#undef CLEANUP_realpath +#undef FOR_realpath +#endif + +// reboot fn +#undef OPTSTR_reboot +#define OPTSTR_reboot "fn" +#ifdef CLEANUP_reboot +#undef CLEANUP_reboot +#undef FOR_reboot +#undef FLAG_n +#undef FLAG_f +#endif + +// renice <1gpun#| <1gpun#| +#undef OPTSTR_renice +#define OPTSTR_renice "<1gpun#|" +#ifdef CLEANUP_renice +#undef CLEANUP_renice +#undef FOR_renice +#undef FLAG_n +#undef FLAG_u +#undef FLAG_p +#undef FLAG_g +#endif + +// reset +#undef OPTSTR_reset +#define OPTSTR_reset 0 +#ifdef CLEANUP_reset +#undef CLEANUP_reset +#undef FOR_reset +#endif + +// restorecon <1DFnRrv <1DFnRrv +#undef OPTSTR_restorecon +#define OPTSTR_restorecon "<1DFnRrv" +#ifdef CLEANUP_restorecon +#undef CLEANUP_restorecon +#undef FOR_restorecon +#undef FLAG_v +#undef FLAG_r +#undef FLAG_R +#undef FLAG_n +#undef FLAG_F +#undef FLAG_D +#endif + +// rev +#undef OPTSTR_rev +#define OPTSTR_rev 0 +#ifdef CLEANUP_rev +#undef CLEANUP_rev +#undef FOR_rev +#endif + +// rfkill <1>2 <1>2 +#undef OPTSTR_rfkill +#define OPTSTR_rfkill "<1>2" +#ifdef CLEANUP_rfkill +#undef CLEANUP_rfkill +#undef FOR_rfkill +#endif + +// rm fiRrv[-fi] fiRrv[-fi] +#undef OPTSTR_rm +#define OPTSTR_rm "fiRrv[-fi]" +#ifdef CLEANUP_rm +#undef CLEANUP_rm +#undef FOR_rm +#undef FLAG_v +#undef FLAG_r +#undef FLAG_R +#undef FLAG_i +#undef FLAG_f +#endif + +// rmdir <1(ignore-fail-on-non-empty)p <1(ignore-fail-on-non-empty)p +#undef OPTSTR_rmdir +#define OPTSTR_rmdir "<1(ignore-fail-on-non-empty)p" +#ifdef CLEANUP_rmdir +#undef CLEANUP_rmdir +#undef FOR_rmdir +#undef FLAG_p +#undef FLAG_ignore_fail_on_non_empty +#endif + +// rmmod <1wf <1wf +#undef OPTSTR_rmmod +#define OPTSTR_rmmod "<1wf" +#ifdef CLEANUP_rmmod +#undef CLEANUP_rmmod +#undef FOR_rmmod +#undef FLAG_f +#undef FLAG_w +#endif + +// route ?neA: +#undef OPTSTR_route +#define OPTSTR_route "?neA:" +#ifdef CLEANUP_route +#undef CLEANUP_route +#undef FOR_route +#undef FLAG_A +#undef FLAG_e +#undef FLAG_n +#endif + +// runcon <2 <2 +#undef OPTSTR_runcon +#define OPTSTR_runcon "<2" +#ifdef CLEANUP_runcon +#undef CLEANUP_runcon +#undef FOR_runcon +#endif + +// sed (help)(version)e*f*i:;nErz(null-data)[+Er] (help)(version)e*f*i:;nErz(null-data)[+Er] +#undef OPTSTR_sed +#define OPTSTR_sed "(help)(version)e*f*i:;nErz(null-data)[+Er]" +#ifdef CLEANUP_sed +#undef CLEANUP_sed +#undef FOR_sed +#undef FLAG_z +#undef FLAG_r +#undef FLAG_E +#undef FLAG_n +#undef FLAG_i +#undef FLAG_f +#undef FLAG_e +#undef FLAG_version +#undef FLAG_help +#endif + +// sendevent <4>4 <4>4 +#undef OPTSTR_sendevent +#define OPTSTR_sendevent "<4>4" +#ifdef CLEANUP_sendevent +#undef CLEANUP_sendevent +#undef FOR_sendevent +#endif + +// seq <1>3?f:s:w[!fw] <1>3?f:s:w[!fw] +#undef OPTSTR_seq +#define OPTSTR_seq "<1>3?f:s:w[!fw]" +#ifdef CLEANUP_seq +#undef CLEANUP_seq +#undef FOR_seq +#undef FLAG_w +#undef FLAG_s +#undef FLAG_f +#endif + +// setenforce <1>1 <1>1 +#undef OPTSTR_setenforce +#define OPTSTR_setenforce "<1>1" +#ifdef CLEANUP_setenforce +#undef CLEANUP_setenforce +#undef FOR_setenforce +#endif + +// setfattr hn:|v:x:|[!xv] hn:|v:x:|[!xv] +#undef OPTSTR_setfattr +#define OPTSTR_setfattr "hn:|v:x:|[!xv]" +#ifdef CLEANUP_setfattr +#undef CLEANUP_setfattr +#undef FOR_setfattr +#undef FLAG_x +#undef FLAG_v +#undef FLAG_n +#undef FLAG_h +#endif + +// setsid ^<1wcd[!dc] ^<1wcd[!dc] +#undef OPTSTR_setsid +#define OPTSTR_setsid "^<1wcd[!dc]" +#ifdef CLEANUP_setsid +#undef CLEANUP_setsid +#undef FOR_setsid +#undef FLAG_d +#undef FLAG_c +#undef FLAG_w +#endif + +// sh (noediting)(noprofile)(norc)sc:i +#undef OPTSTR_sh +#define OPTSTR_sh "(noediting)(noprofile)(norc)sc:i" +#ifdef CLEANUP_sh +#undef CLEANUP_sh +#undef FOR_sh +#undef FLAG_i +#undef FLAG_c +#undef FLAG_s +#undef FLAG_norc +#undef FLAG_noprofile +#undef FLAG_noediting +#endif + +// sha1sum bc(check)s(status)[!bc] bc(check)s(status)[!bc] +#undef OPTSTR_sha1sum +#define OPTSTR_sha1sum "bc(check)s(status)[!bc]" +#ifdef CLEANUP_sha1sum +#undef CLEANUP_sha1sum +#undef FOR_sha1sum +#undef FLAG_s +#undef FLAG_c +#undef FLAG_b +#endif + +// shred <1zxus#<1n#<1o#<0f +#undef OPTSTR_shred +#define OPTSTR_shred "<1zxus#<1n#<1o#<0f" +#ifdef CLEANUP_shred +#undef CLEANUP_shred +#undef FOR_shred +#undef FLAG_f +#undef FLAG_o +#undef FLAG_n +#undef FLAG_s +#undef FLAG_u +#undef FLAG_x +#undef FLAG_z +#endif + +// skeleton (walrus)(blubber):;(also):e@d*c#b:a +#undef OPTSTR_skeleton +#define OPTSTR_skeleton "(walrus)(blubber):;(also):e@d*c#b:a" +#ifdef CLEANUP_skeleton +#undef CLEANUP_skeleton +#undef FOR_skeleton +#undef FLAG_a +#undef FLAG_b +#undef FLAG_c +#undef FLAG_d +#undef FLAG_e +#undef FLAG_also +#undef FLAG_blubber +#undef FLAG_walrus +#endif + +// skeleton_alias b#dq +#undef OPTSTR_skeleton_alias +#define OPTSTR_skeleton_alias "b#dq" +#ifdef CLEANUP_skeleton_alias +#undef CLEANUP_skeleton_alias +#undef FOR_skeleton_alias +#undef FLAG_q +#undef FLAG_d +#undef FLAG_b +#endif + +// sleep <1 <1 +#undef OPTSTR_sleep +#define OPTSTR_sleep "<1" +#ifdef CLEANUP_sleep +#undef CLEANUP_sleep +#undef FOR_sleep +#endif + +// sntp >1M :m :Sp:t#<0=1>16asdDqr#<4>17=10[!as] +#undef OPTSTR_sntp +#define OPTSTR_sntp ">1M :m :Sp:t#<0=1>16asdDqr#<4>17=10[!as]" +#ifdef CLEANUP_sntp +#undef CLEANUP_sntp +#undef FOR_sntp +#undef FLAG_r +#undef FLAG_q +#undef FLAG_D +#undef FLAG_d +#undef FLAG_s +#undef FLAG_a +#undef FLAG_t +#undef FLAG_p +#undef FLAG_S +#undef FLAG_m +#undef FLAG_M +#endif + +// sort gS:T:mo:k*t:xVbMcszdfirun gS:T:mo:k*t:xVbMcszdfirun +#undef OPTSTR_sort +#define OPTSTR_sort "gS:T:mo:k*t:xVbMcszdfirun" +#ifdef CLEANUP_sort +#undef CLEANUP_sort +#undef FOR_sort +#undef FLAG_n +#undef FLAG_u +#undef FLAG_r +#undef FLAG_i +#undef FLAG_f +#undef FLAG_d +#undef FLAG_z +#undef FLAG_s +#undef FLAG_c +#undef FLAG_M +#undef FLAG_b +#undef FLAG_V +#undef FLAG_x +#undef FLAG_t +#undef FLAG_k +#undef FLAG_o +#undef FLAG_m +#undef FLAG_T +#undef FLAG_S +#undef FLAG_g +#endif + +// split >2a#<1=2>9b#<1l#<1[!bl] >2a#<1=2>9b#<1l#<1[!bl] +#undef OPTSTR_split +#define OPTSTR_split ">2a#<1=2>9b#<1l#<1[!bl]" +#ifdef CLEANUP_split +#undef CLEANUP_split +#undef FOR_split +#undef FLAG_l +#undef FLAG_b +#undef FLAG_a +#endif + +// stat <1c:(format)fLt <1c:(format)fLt +#undef OPTSTR_stat +#define OPTSTR_stat "<1c:(format)fLt" +#ifdef CLEANUP_stat +#undef CLEANUP_stat +#undef FOR_stat +#undef FLAG_t +#undef FLAG_L +#undef FLAG_f +#undef FLAG_c +#endif + +// strings t:an#=4<1fo t:an#=4<1fo +#undef OPTSTR_strings +#define OPTSTR_strings "t:an#=4<1fo" +#ifdef CLEANUP_strings +#undef CLEANUP_strings +#undef FOR_strings +#undef FLAG_o +#undef FLAG_f +#undef FLAG_n +#undef FLAG_a +#undef FLAG_t +#endif + +// stty ?aF:g[!ag] ?aF:g[!ag] +#undef OPTSTR_stty +#define OPTSTR_stty "?aF:g[!ag]" +#ifdef CLEANUP_stty +#undef CLEANUP_stty +#undef FOR_stty +#undef FLAG_g +#undef FLAG_F +#undef FLAG_a +#endif + +// su ^lmpu:g:c:s:[!lmp] +#undef OPTSTR_su +#define OPTSTR_su "^lmpu:g:c:s:[!lmp]" +#ifdef CLEANUP_su +#undef CLEANUP_su +#undef FOR_su +#undef FLAG_s +#undef FLAG_c +#undef FLAG_g +#undef FLAG_u +#undef FLAG_p +#undef FLAG_m +#undef FLAG_l +#endif + +// sulogin t#<0=0 +#undef OPTSTR_sulogin +#define OPTSTR_sulogin "t#<0=0" +#ifdef CLEANUP_sulogin +#undef CLEANUP_sulogin +#undef FOR_sulogin +#undef FLAG_t +#endif + +// swapoff <1>1 <1>1 +#undef OPTSTR_swapoff +#define OPTSTR_swapoff "<1>1" +#ifdef CLEANUP_swapoff +#undef CLEANUP_swapoff +#undef FOR_swapoff +#endif + +// swapon <1>1p#<0>32767d <1>1p#<0>32767d +#undef OPTSTR_swapon +#define OPTSTR_swapon "<1>1p#<0>32767d" +#ifdef CLEANUP_swapon +#undef CLEANUP_swapon +#undef FOR_swapon +#undef FLAG_d +#undef FLAG_p +#endif + +// switch_root <2c:h +#undef OPTSTR_switch_root +#define OPTSTR_switch_root "<2c:h" +#ifdef CLEANUP_switch_root +#undef CLEANUP_switch_root +#undef FOR_switch_root +#undef FLAG_h +#undef FLAG_c +#endif + +// sync +#undef OPTSTR_sync +#define OPTSTR_sync 0 +#ifdef CLEANUP_sync +#undef CLEANUP_sync +#undef FOR_sync +#endif + +// sysctl ^neNqwpaA[!ap][!aq][!aw][+aA] ^neNqwpaA[!ap][!aq][!aw][+aA] +#undef OPTSTR_sysctl +#define OPTSTR_sysctl "^neNqwpaA[!ap][!aq][!aw][+aA]" +#ifdef CLEANUP_sysctl +#undef CLEANUP_sysctl +#undef FOR_sysctl +#undef FLAG_A +#undef FLAG_a +#undef FLAG_p +#undef FLAG_w +#undef FLAG_q +#undef FLAG_N +#undef FLAG_e +#undef FLAG_n +#endif + +// syslogd >0l#<1>8=8R:b#<0>99=1s#<0=200m#<0>71582787=20O:p:f:a:nSKLD +#undef OPTSTR_syslogd +#define OPTSTR_syslogd ">0l#<1>8=8R:b#<0>99=1s#<0=200m#<0>71582787=20O:p:f:a:nSKLD" +#ifdef CLEANUP_syslogd +#undef CLEANUP_syslogd +#undef FOR_syslogd +#undef FLAG_D +#undef FLAG_L +#undef FLAG_K +#undef FLAG_S +#undef FLAG_n +#undef FLAG_a +#undef FLAG_f +#undef FLAG_p +#undef FLAG_O +#undef FLAG_m +#undef FLAG_s +#undef FLAG_b +#undef FLAG_R +#undef FLAG_l +#endif + +// tac +#undef OPTSTR_tac +#define OPTSTR_tac 0 +#ifdef CLEANUP_tac +#undef CLEANUP_tac +#undef FOR_tac +#endif + +// tail ?fc-n-[-cn] ?fc-n-[-cn] +#undef OPTSTR_tail +#define OPTSTR_tail "?fc-n-[-cn]" +#ifdef CLEANUP_tail +#undef CLEANUP_tail +#undef FOR_tail +#undef FLAG_n +#undef FLAG_c +#undef FLAG_f +#endif + +// tar &(restrict)(full-time)(no-recursion)(numeric-owner)(no-same-permissions)(overwrite)(exclude)*(mode):(mtime):(group):(owner):(to-command):o(no-same-owner)p(same-permissions)k(keep-old)c(create)|h(dereference)x(extract)|t(list)|v(verbose)J(xz)j(bzip2)z(gzip)S(sparse)O(to-stdout)m(touch)X(exclude-from)*T(files-from)*C(directory):f(file):a[!txc][!jzJa] &(restrict)(full-time)(no-recursion)(numeric-owner)(no-same-permissions)(overwrite)(exclude)*(mode):(mtime):(group):(owner):(to-command):o(no-same-owner)p(same-permissions)k(keep-old)c(create)|h(dereference)x(extract)|t(list)|v(verbose)J(xz)j(bzip2)z(gzip)S(sparse)O(to-stdout)m(touch)X(exclude-from)*T(files-from)*C(directory):f(file):a[!txc][!jzJa] +#undef OPTSTR_tar +#define OPTSTR_tar "&(restrict)(full-time)(no-recursion)(numeric-owner)(no-same-permissions)(overwrite)(exclude)*(mode):(mtime):(group):(owner):(to-command):o(no-same-owner)p(same-permissions)k(keep-old)c(create)|h(dereference)x(extract)|t(list)|v(verbose)J(xz)j(bzip2)z(gzip)S(sparse)O(to-stdout)m(touch)X(exclude-from)*T(files-from)*C(directory):f(file):a[!txc][!jzJa]" +#ifdef CLEANUP_tar +#undef CLEANUP_tar +#undef FOR_tar +#undef FLAG_a +#undef FLAG_f +#undef FLAG_C +#undef FLAG_T +#undef FLAG_X +#undef FLAG_m +#undef FLAG_O +#undef FLAG_S +#undef FLAG_z +#undef FLAG_j +#undef FLAG_J +#undef FLAG_v +#undef FLAG_t +#undef FLAG_x +#undef FLAG_h +#undef FLAG_c +#undef FLAG_k +#undef FLAG_p +#undef FLAG_o +#undef FLAG_to_command +#undef FLAG_owner +#undef FLAG_group +#undef FLAG_mtime +#undef FLAG_mode +#undef FLAG_exclude +#undef FLAG_overwrite +#undef FLAG_no_same_permissions +#undef FLAG_numeric_owner +#undef FLAG_no_recursion +#undef FLAG_full_time +#undef FLAG_restrict +#endif + +// taskset <1^pa <1^pa +#undef OPTSTR_taskset +#define OPTSTR_taskset "<1^pa" +#ifdef CLEANUP_taskset +#undef CLEANUP_taskset +#undef FOR_taskset +#undef FLAG_a +#undef FLAG_p +#endif + +// tcpsvd ^<3c#=30<1C:b#=20<0u:l:hEv +#undef OPTSTR_tcpsvd +#define OPTSTR_tcpsvd "^<3c#=30<1C:b#=20<0u:l:hEv" +#ifdef CLEANUP_tcpsvd +#undef CLEANUP_tcpsvd +#undef FOR_tcpsvd +#undef FLAG_v +#undef FLAG_E +#undef FLAG_h +#undef FLAG_l +#undef FLAG_u +#undef FLAG_b +#undef FLAG_C +#undef FLAG_c +#endif + +// tee ia ia +#undef OPTSTR_tee +#define OPTSTR_tee "ia" +#ifdef CLEANUP_tee +#undef CLEANUP_tee +#undef FOR_tee +#undef FLAG_a +#undef FLAG_i +#endif + +// telnet <1>2 +#undef OPTSTR_telnet +#define OPTSTR_telnet "<1>2" +#ifdef CLEANUP_telnet +#undef CLEANUP_telnet +#undef FOR_telnet +#endif + +// telnetd w#<0b:p#<0>65535=23f:l:FSKi[!wi] +#undef OPTSTR_telnetd +#define OPTSTR_telnetd "w#<0b:p#<0>65535=23f:l:FSKi[!wi]" +#ifdef CLEANUP_telnetd +#undef CLEANUP_telnetd +#undef FOR_telnetd +#undef FLAG_i +#undef FLAG_K +#undef FLAG_S +#undef FLAG_F +#undef FLAG_l +#undef FLAG_f +#undef FLAG_p +#undef FLAG_b +#undef FLAG_w +#endif + +// test +#undef OPTSTR_test +#define OPTSTR_test 0 +#ifdef CLEANUP_test +#undef CLEANUP_test +#undef FOR_test +#endif + +// tftp <1b#<8>65464r:l:g|p|[!gp] +#undef OPTSTR_tftp +#define OPTSTR_tftp "<1b#<8>65464r:l:g|p|[!gp]" +#ifdef CLEANUP_tftp +#undef CLEANUP_tftp +#undef FOR_tftp +#undef FLAG_p +#undef FLAG_g +#undef FLAG_l +#undef FLAG_r +#undef FLAG_b +#endif + +// tftpd rcu:l +#undef OPTSTR_tftpd +#define OPTSTR_tftpd "rcu:l" +#ifdef CLEANUP_tftpd +#undef CLEANUP_tftpd +#undef FOR_tftpd +#undef FLAG_l +#undef FLAG_u +#undef FLAG_c +#undef FLAG_r +#endif + +// time <1^pv <1^pv +#undef OPTSTR_time +#define OPTSTR_time "<1^pv" +#ifdef CLEANUP_time +#undef CLEANUP_time +#undef FOR_time +#undef FLAG_v +#undef FLAG_p +#endif + +// timeout <2^(foreground)(preserve-status)vk:s(signal): <2^(foreground)(preserve-status)vk:s(signal): +#undef OPTSTR_timeout +#define OPTSTR_timeout "<2^(foreground)(preserve-status)vk:s(signal):" +#ifdef CLEANUP_timeout +#undef CLEANUP_timeout +#undef FOR_timeout +#undef FLAG_s +#undef FLAG_k +#undef FLAG_v +#undef FLAG_preserve_status +#undef FLAG_foreground +#endif + +// top >0O*Hk*o*p*u*s#<1d%<100=3000m#n#<1bq[!oO] >0O*Hk*o*p*u*s#<1d%<100=3000m#n#<1bq[!oO] +#undef OPTSTR_top +#define OPTSTR_top ">0O*Hk*o*p*u*s#<1d%<100=3000m#n#<1bq[!oO]" +#ifdef CLEANUP_top +#undef CLEANUP_top +#undef FOR_top +#undef FLAG_q +#undef FLAG_b +#undef FLAG_n +#undef FLAG_m +#undef FLAG_d +#undef FLAG_s +#undef FLAG_u +#undef FLAG_p +#undef FLAG_o +#undef FLAG_k +#undef FLAG_H +#undef FLAG_O +#endif + +// touch <1acd:fmr:t:h[!dtr] <1acd:fmr:t:h[!dtr] +#undef OPTSTR_touch +#define OPTSTR_touch "<1acd:fmr:t:h[!dtr]" +#ifdef CLEANUP_touch +#undef CLEANUP_touch +#undef FOR_touch +#undef FLAG_h +#undef FLAG_t +#undef FLAG_r +#undef FLAG_m +#undef FLAG_f +#undef FLAG_d +#undef FLAG_c +#undef FLAG_a +#endif + +// toybox +#undef OPTSTR_toybox +#define OPTSTR_toybox 0 +#ifdef CLEANUP_toybox +#undef CLEANUP_toybox +#undef FOR_toybox +#endif + +// tr ^>2<1Ccsd[+cC] ^>2<1Ccsd[+cC] +#undef OPTSTR_tr +#define OPTSTR_tr "^>2<1Ccsd[+cC]" +#ifdef CLEANUP_tr +#undef CLEANUP_tr +#undef FOR_tr +#undef FLAG_d +#undef FLAG_s +#undef FLAG_c +#undef FLAG_C +#endif + +// traceroute <1>2i:f#<1>255=1z#<0>86400=0g*w#<0>86400=5t#<0>255=0s:q#<1>255=3p#<1>65535=33434m#<1>255=30rvndlIUF64 <1>2i:f#<1>255=1z#<0>86400=0g*w#<0>86400=5t#<0>255=0s:q#<1>255=3p#<1>65535=33434m#<1>255=30rvndlIUF64 +#undef OPTSTR_traceroute +#define OPTSTR_traceroute "<1>2i:f#<1>255=1z#<0>86400=0g*w#<0>86400=5t#<0>255=0s:q#<1>255=3p#<1>65535=33434m#<1>255=30rvndlIUF64" +#ifdef CLEANUP_traceroute +#undef CLEANUP_traceroute +#undef FOR_traceroute +#undef FLAG_4 +#undef FLAG_6 +#undef FLAG_F +#undef FLAG_U +#undef FLAG_I +#undef FLAG_l +#undef FLAG_d +#undef FLAG_n +#undef FLAG_v +#undef FLAG_r +#undef FLAG_m +#undef FLAG_p +#undef FLAG_q +#undef FLAG_s +#undef FLAG_t +#undef FLAG_w +#undef FLAG_g +#undef FLAG_z +#undef FLAG_f +#undef FLAG_i +#endif + +// true +#undef OPTSTR_true +#define OPTSTR_true 0 +#ifdef CLEANUP_true +#undef CLEANUP_true +#undef FOR_true +#endif + +// truncate <1s:|c <1s:|c +#undef OPTSTR_truncate +#define OPTSTR_truncate "<1s:|c" +#ifdef CLEANUP_truncate +#undef CLEANUP_truncate +#undef FOR_truncate +#undef FLAG_c +#undef FLAG_s +#endif + +// tty s s +#undef OPTSTR_tty +#define OPTSTR_tty "s" +#ifdef CLEANUP_tty +#undef CLEANUP_tty +#undef FOR_tty +#undef FLAG_s +#endif + +// tunctl <1>1t|d|u:T[!td] <1>1t|d|u:T[!td] +#undef OPTSTR_tunctl +#define OPTSTR_tunctl "<1>1t|d|u:T[!td]" +#ifdef CLEANUP_tunctl +#undef CLEANUP_tunctl +#undef FOR_tunctl +#undef FLAG_T +#undef FLAG_u +#undef FLAG_d +#undef FLAG_t +#endif + +// ulimit >1P#<1SHavutsrRqpnmlifedc[-SH][!apvutsrRqnmlifedc] >1P#<1SHavutsrRqpnmlifedc[-SH][!apvutsrRqnmlifedc] +#undef OPTSTR_ulimit +#define OPTSTR_ulimit ">1P#<1SHavutsrRqpnmlifedc[-SH][!apvutsrRqnmlifedc]" +#ifdef CLEANUP_ulimit +#undef CLEANUP_ulimit +#undef FOR_ulimit +#undef FLAG_c +#undef FLAG_d +#undef FLAG_e +#undef FLAG_f +#undef FLAG_i +#undef FLAG_l +#undef FLAG_m +#undef FLAG_n +#undef FLAG_p +#undef FLAG_q +#undef FLAG_R +#undef FLAG_r +#undef FLAG_s +#undef FLAG_t +#undef FLAG_u +#undef FLAG_v +#undef FLAG_a +#undef FLAG_H +#undef FLAG_S +#undef FLAG_P +#endif + +// umount cndDflrat*v[!na] cndDflrat*v[!na] +#undef OPTSTR_umount +#define OPTSTR_umount "cndDflrat*v[!na]" +#ifdef CLEANUP_umount +#undef CLEANUP_umount +#undef FOR_umount +#undef FLAG_v +#undef FLAG_t +#undef FLAG_a +#undef FLAG_r +#undef FLAG_l +#undef FLAG_f +#undef FLAG_D +#undef FLAG_d +#undef FLAG_n +#undef FLAG_c +#endif + +// uname oamvrns[+os] oamvrns[+os] +#undef OPTSTR_uname +#define OPTSTR_uname "oamvrns[+os]" +#ifdef CLEANUP_uname +#undef CLEANUP_uname +#undef FOR_uname +#undef FLAG_s +#undef FLAG_n +#undef FLAG_r +#undef FLAG_v +#undef FLAG_m +#undef FLAG_a +#undef FLAG_o +#endif + +// uniq f#s#w#zicdu f#s#w#zicdu +#undef OPTSTR_uniq +#define OPTSTR_uniq "f#s#w#zicdu" +#ifdef CLEANUP_uniq +#undef CLEANUP_uniq +#undef FOR_uniq +#undef FLAG_u +#undef FLAG_d +#undef FLAG_c +#undef FLAG_i +#undef FLAG_z +#undef FLAG_w +#undef FLAG_s +#undef FLAG_f +#endif + +// unix2dos +#undef OPTSTR_unix2dos +#define OPTSTR_unix2dos 0 +#ifdef CLEANUP_unix2dos +#undef CLEANUP_unix2dos +#undef FOR_unix2dos +#endif + +// unlink <1>1 <1>1 +#undef OPTSTR_unlink +#define OPTSTR_unlink "<1>1" +#ifdef CLEANUP_unlink +#undef CLEANUP_unlink +#undef FOR_unlink +#endif + +// unshare <1^f(fork);r(map-root-user);i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user); <1^f(fork);r(map-root-user);i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user); +#undef OPTSTR_unshare +#define OPTSTR_unshare "<1^f(fork);r(map-root-user);i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user);" +#ifdef CLEANUP_unshare +#undef CLEANUP_unshare +#undef FOR_unshare +#undef FLAG_U +#undef FLAG_u +#undef FLAG_p +#undef FLAG_n +#undef FLAG_m +#undef FLAG_i +#undef FLAG_r +#undef FLAG_f +#endif + +// uptime >0ps >0ps +#undef OPTSTR_uptime +#define OPTSTR_uptime ">0ps" +#ifdef CLEANUP_uptime +#undef CLEANUP_uptime +#undef FOR_uptime +#undef FLAG_s +#undef FLAG_p +#endif + +// useradd <1>2u#<0G:s:g:h:SDH +#undef OPTSTR_useradd +#define OPTSTR_useradd "<1>2u#<0G:s:g:h:SDH" +#ifdef CLEANUP_useradd +#undef CLEANUP_useradd +#undef FOR_useradd +#undef FLAG_H +#undef FLAG_D +#undef FLAG_S +#undef FLAG_h +#undef FLAG_g +#undef FLAG_s +#undef FLAG_G +#undef FLAG_u +#endif + +// userdel <1>1r +#undef OPTSTR_userdel +#define OPTSTR_userdel "<1>1r" +#ifdef CLEANUP_userdel +#undef CLEANUP_userdel +#undef FOR_userdel +#undef FLAG_r +#endif + +// usleep <1 <1 +#undef OPTSTR_usleep +#define OPTSTR_usleep "<1" +#ifdef CLEANUP_usleep +#undef CLEANUP_usleep +#undef FOR_usleep +#endif + +// uudecode >1o: >1o: +#undef OPTSTR_uudecode +#define OPTSTR_uudecode ">1o:" +#ifdef CLEANUP_uudecode +#undef CLEANUP_uudecode +#undef FOR_uudecode +#undef FLAG_o +#endif + +// uuencode <1>2m <1>2m +#undef OPTSTR_uuencode +#define OPTSTR_uuencode "<1>2m" +#ifdef CLEANUP_uuencode +#undef CLEANUP_uuencode +#undef FOR_uuencode +#undef FLAG_m +#endif + +// uuidgen >0r(random) >0r(random) +#undef OPTSTR_uuidgen +#define OPTSTR_uuidgen ">0r(random)" +#ifdef CLEANUP_uuidgen +#undef CLEANUP_uuidgen +#undef FOR_uuidgen +#undef FLAG_r +#endif + +// vconfig <2>4 <2>4 +#undef OPTSTR_vconfig +#define OPTSTR_vconfig "<2>4" +#ifdef CLEANUP_vconfig +#undef CLEANUP_vconfig +#undef FOR_vconfig +#endif + +// vi >1s: >1s: +#undef OPTSTR_vi +#define OPTSTR_vi ">1s:" +#ifdef CLEANUP_vi +#undef CLEANUP_vi +#undef FOR_vi +#undef FLAG_s +#endif + +// vmstat >2n >2n +#undef OPTSTR_vmstat +#define OPTSTR_vmstat ">2n" +#ifdef CLEANUP_vmstat +#undef CLEANUP_vmstat +#undef FOR_vmstat +#undef FLAG_n +#endif + +// w +#undef OPTSTR_w +#define OPTSTR_w 0 +#ifdef CLEANUP_w +#undef CLEANUP_w +#undef FOR_w +#endif + +// watch ^<1n%<100=2000tebx ^<1n%<100=2000tebx +#undef OPTSTR_watch +#define OPTSTR_watch "^<1n%<100=2000tebx" +#ifdef CLEANUP_watch +#undef CLEANUP_watch +#undef FOR_watch +#undef FLAG_x +#undef FLAG_b +#undef FLAG_e +#undef FLAG_t +#undef FLAG_n +#endif + +// wc mcwl mcwl +#undef OPTSTR_wc +#define OPTSTR_wc "mcwl" +#ifdef CLEANUP_wc +#undef CLEANUP_wc +#undef FOR_wc +#undef FLAG_l +#undef FLAG_w +#undef FLAG_c +#undef FLAG_m +#endif + +// wget (no-check-certificate)O: +#undef OPTSTR_wget +#define OPTSTR_wget "(no-check-certificate)O:" +#ifdef CLEANUP_wget +#undef CLEANUP_wget +#undef FOR_wget +#undef FLAG_O +#undef FLAG_no_check_certificate +#endif + +// which <1a <1a +#undef OPTSTR_which +#define OPTSTR_which "<1a" +#ifdef CLEANUP_which +#undef CLEANUP_which +#undef FOR_which +#undef FLAG_a +#endif + +// who a +#undef OPTSTR_who +#define OPTSTR_who "a" +#ifdef CLEANUP_who +#undef CLEANUP_who +#undef FOR_who +#undef FLAG_a +#endif + +// xargs ^E:P#optrn#<1(max-args)s#0[!0E] ^E:P#optrn#<1(max-args)s#0[!0E] +#undef OPTSTR_xargs +#define OPTSTR_xargs "^E:P#optrn#<1(max-args)s#0[!0E]" +#ifdef CLEANUP_xargs +#undef CLEANUP_xargs +#undef FOR_xargs +#undef FLAG_0 +#undef FLAG_s +#undef FLAG_n +#undef FLAG_r +#undef FLAG_t +#undef FLAG_p +#undef FLAG_o +#undef FLAG_P +#undef FLAG_E +#endif + +// xxd >1c#l#o#g#<1=2iprs#[!rs] >1c#l#o#g#<1=2iprs#[!rs] +#undef OPTSTR_xxd +#define OPTSTR_xxd ">1c#l#o#g#<1=2iprs#[!rs]" +#ifdef CLEANUP_xxd +#undef CLEANUP_xxd +#undef FOR_xxd +#undef FLAG_s +#undef FLAG_r +#undef FLAG_p +#undef FLAG_i +#undef FLAG_g +#undef FLAG_o +#undef FLAG_l +#undef FLAG_c +#endif + +// xzcat +#undef OPTSTR_xzcat +#define OPTSTR_xzcat 0 +#ifdef CLEANUP_xzcat +#undef CLEANUP_xzcat +#undef FOR_xzcat +#endif + +// yes +#undef OPTSTR_yes +#define OPTSTR_yes 0 +#ifdef CLEANUP_yes +#undef CLEANUP_yes +#undef FOR_yes +#endif + +// zcat cdfk123456789[-123456789] cdfk123456789[-123456789] +#undef OPTSTR_zcat +#define OPTSTR_zcat "cdfk123456789[-123456789]" +#ifdef CLEANUP_zcat +#undef CLEANUP_zcat +#undef FOR_zcat +#undef FLAG_9 +#undef FLAG_8 +#undef FLAG_7 +#undef FLAG_6 +#undef FLAG_5 +#undef FLAG_4 +#undef FLAG_3 +#undef FLAG_2 +#undef FLAG_1 +#undef FLAG_k +#undef FLAG_f +#undef FLAG_d +#undef FLAG_c +#endif + +#ifdef FOR_acpi +#ifndef TT +#define TT this.acpi +#endif +#define FLAG_V (1<<0) +#define FLAG_t (1<<1) +#define FLAG_c (1<<2) +#define FLAG_b (1<<3) +#define FLAG_a (1<<4) +#endif + +#ifdef FOR_arch +#ifndef TT +#define TT this.arch +#endif +#endif + +#ifdef FOR_arp +#ifndef TT +#define TT this.arp +#endif +#define FLAG_H (FORCED_FLAG<<0) +#define FLAG_A (FORCED_FLAG<<1) +#define FLAG_p (FORCED_FLAG<<2) +#define FLAG_a (FORCED_FLAG<<3) +#define FLAG_d (FORCED_FLAG<<4) +#define FLAG_s (FORCED_FLAG<<5) +#define FLAG_D (FORCED_FLAG<<6) +#define FLAG_n (FORCED_FLAG<<7) +#define FLAG_i (FORCED_FLAG<<8) +#define FLAG_v (FORCED_FLAG<<9) +#endif + +#ifdef FOR_arping +#ifndef TT +#define TT this.arping +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_q (FORCED_FLAG<<1) +#define FLAG_b (FORCED_FLAG<<2) +#define FLAG_D (FORCED_FLAG<<3) +#define FLAG_U (FORCED_FLAG<<4) +#define FLAG_A (FORCED_FLAG<<5) +#define FLAG_c (FORCED_FLAG<<6) +#define FLAG_w (FORCED_FLAG<<7) +#define FLAG_I (FORCED_FLAG<<8) +#define FLAG_s (FORCED_FLAG<<9) +#endif + +#ifdef FOR_ascii +#ifndef TT +#define TT this.ascii +#endif +#endif + +#ifdef FOR_base64 +#ifndef TT +#define TT this.base64 +#endif +#define FLAG_w (1<<0) +#define FLAG_i (1<<1) +#define FLAG_d (1<<2) +#endif + +#ifdef FOR_basename +#ifndef TT +#define TT this.basename +#endif +#define FLAG_s (1<<0) +#define FLAG_a (1<<1) +#endif + +#ifdef FOR_bc +#ifndef TT +#define TT this.bc +#endif +#define FLAG_w (FORCED_FLAG<<0) +#define FLAG_s (FORCED_FLAG<<1) +#define FLAG_q (FORCED_FLAG<<2) +#define FLAG_l (FORCED_FLAG<<3) +#define FLAG_i (FORCED_FLAG<<4) +#endif + +#ifdef FOR_blkid +#ifndef TT +#define TT this.blkid +#endif +#define FLAG_s (1<<0) +#define FLAG_L (1<<1) +#define FLAG_U (1<<2) +#endif + +#ifdef FOR_blockdev +#ifndef TT +#define TT this.blockdev +#endif +#define FLAG_rereadpt (1<<0) +#define FLAG_flushbufs (1<<1) +#define FLAG_setra (1<<2) +#define FLAG_getra (1<<3) +#define FLAG_getsize64 (1<<4) +#define FLAG_getsize (1<<5) +#define FLAG_getsz (1<<6) +#define FLAG_setbsz (1<<7) +#define FLAG_getbsz (1<<8) +#define FLAG_getss (1<<9) +#define FLAG_getro (1<<10) +#define FLAG_setrw (1<<11) +#define FLAG_setro (1<<12) +#endif + +#ifdef FOR_bootchartd +#ifndef TT +#define TT this.bootchartd +#endif +#endif + +#ifdef FOR_brctl +#ifndef TT +#define TT this.brctl +#endif +#endif + +#ifdef FOR_bunzip2 +#ifndef TT +#define TT this.bunzip2 +#endif +#define FLAG_v (FORCED_FLAG<<0) +#define FLAG_k (FORCED_FLAG<<1) +#define FLAG_t (FORCED_FLAG<<2) +#define FLAG_f (FORCED_FLAG<<3) +#define FLAG_c (FORCED_FLAG<<4) +#endif + +#ifdef FOR_bzcat +#ifndef TT +#define TT this.bzcat +#endif +#endif + +#ifdef FOR_cal +#ifndef TT +#define TT this.cal +#endif +#define FLAG_h (1<<0) +#endif + +#ifdef FOR_cat +#ifndef TT +#define TT this.cat +#endif +#define FLAG_e (1<<0) +#define FLAG_t (1<<1) +#define FLAG_v (1<<2) +#define FLAG_u (1<<3) +#endif + +#ifdef FOR_catv +#ifndef TT +#define TT this.catv +#endif +#define FLAG_e (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_v (FORCED_FLAG<<2) +#endif + +#ifdef FOR_cd +#ifndef TT +#define TT this.cd +#endif +#define FLAG_P (FORCED_FLAG<<0) +#define FLAG_L (FORCED_FLAG<<1) +#endif + +#ifdef FOR_chattr +#ifndef TT +#define TT this.chattr +#endif +#define FLAG_R (1<<0) +#define FLAG_v (1<<1) +#define FLAG_p (1<<2) +#endif + +#ifdef FOR_chcon +#ifndef TT +#define TT this.chcon +#endif +#define FLAG_R (1<<0) +#define FLAG_v (1<<1) +#define FLAG_h (1<<2) +#endif + +#ifdef FOR_chgrp +#ifndef TT +#define TT this.chgrp +#endif +#define FLAG_v (1<<0) +#define FLAG_f (1<<1) +#define FLAG_R (1<<2) +#define FLAG_H (1<<3) +#define FLAG_L (1<<4) +#define FLAG_P (1<<5) +#define FLAG_h (1<<6) +#endif + +#ifdef FOR_chmod +#ifndef TT +#define TT this.chmod +#endif +#define FLAG_f (1<<0) +#define FLAG_R (1<<1) +#define FLAG_v (1<<2) +#endif + +#ifdef FOR_chroot +#ifndef TT +#define TT this.chroot +#endif +#endif + +#ifdef FOR_chrt +#ifndef TT +#define TT this.chrt +#endif +#define FLAG_o (1<<0) +#define FLAG_f (1<<1) +#define FLAG_r (1<<2) +#define FLAG_b (1<<3) +#define FLAG_R (1<<4) +#define FLAG_i (1<<5) +#define FLAG_p (1<<6) +#define FLAG_m (1<<7) +#endif + +#ifdef FOR_chvt +#ifndef TT +#define TT this.chvt +#endif +#endif + +#ifdef FOR_cksum +#ifndef TT +#define TT this.cksum +#endif +#define FLAG_N (1<<0) +#define FLAG_L (1<<1) +#define FLAG_P (1<<2) +#define FLAG_I (1<<3) +#define FLAG_H (1<<4) +#endif + +#ifdef FOR_clear +#ifndef TT +#define TT this.clear +#endif +#endif + +#ifdef FOR_cmp +#ifndef TT +#define TT this.cmp +#endif +#define FLAG_s (1<<0) +#define FLAG_l (1<<1) +#endif + +#ifdef FOR_comm +#ifndef TT +#define TT this.comm +#endif +#define FLAG_1 (1<<0) +#define FLAG_2 (1<<1) +#define FLAG_3 (1<<2) +#endif + +#ifdef FOR_count +#ifndef TT +#define TT this.count +#endif +#endif + +#ifdef FOR_cp +#ifndef TT +#define TT this.cp +#endif +#define FLAG_T (1<<0) +#define FLAG_i (1<<1) +#define FLAG_f (1<<2) +#define FLAG_F (1<<3) +#define FLAG_n (1<<4) +#define FLAG_v (1<<5) +#define FLAG_l (1<<6) +#define FLAG_s (1<<7) +#define FLAG_a (1<<8) +#define FLAG_d (1<<9) +#define FLAG_r (1<<10) +#define FLAG_p (1<<11) +#define FLAG_P (1<<12) +#define FLAG_L (1<<13) +#define FLAG_H (1<<14) +#define FLAG_R (1<<15) +#define FLAG_D (1<<16) +#define FLAG_preserve (1<<17) +#endif + +#ifdef FOR_cpio +#ifndef TT +#define TT this.cpio +#endif +#define FLAG_o (1<<0) +#define FLAG_v (1<<1) +#define FLAG_F (1<<2) +#define FLAG_t (1<<3) +#define FLAG_i (1<<4) +#define FLAG_p (1<<5) +#define FLAG_H (1<<6) +#define FLAG_u (1<<7) +#define FLAG_d (1<<8) +#define FLAG_m (1<<9) +#define FLAG_trailer (1<<10) +#define FLAG_no_preserve_owner (1<<11) +#endif + +#ifdef FOR_crc32 +#ifndef TT +#define TT this.crc32 +#endif +#endif + +#ifdef FOR_crond +#ifndef TT +#define TT this.crond +#endif +#define FLAG_c (FORCED_FLAG<<0) +#define FLAG_L (FORCED_FLAG<<1) +#define FLAG_d (FORCED_FLAG<<2) +#define FLAG_l (FORCED_FLAG<<3) +#define FLAG_S (FORCED_FLAG<<4) +#define FLAG_b (FORCED_FLAG<<5) +#define FLAG_f (FORCED_FLAG<<6) +#endif + +#ifdef FOR_crontab +#ifndef TT +#define TT this.crontab +#endif +#define FLAG_r (FORCED_FLAG<<0) +#define FLAG_l (FORCED_FLAG<<1) +#define FLAG_e (FORCED_FLAG<<2) +#define FLAG_u (FORCED_FLAG<<3) +#define FLAG_c (FORCED_FLAG<<4) +#endif + +#ifdef FOR_cut +#ifndef TT +#define TT this.cut +#endif +#define FLAG_n (1<<0) +#define FLAG_D (1<<1) +#define FLAG_s (1<<2) +#define FLAG_d (1<<3) +#define FLAG_O (1<<4) +#define FLAG_C (1<<5) +#define FLAG_F (1<<6) +#define FLAG_f (1<<7) +#define FLAG_c (1<<8) +#define FLAG_b (1<<9) +#endif + +#ifdef FOR_date +#ifndef TT +#define TT this.date +#endif +#define FLAG_u (1<<0) +#define FLAG_r (1<<1) +#define FLAG_D (1<<2) +#define FLAG_d (1<<3) +#endif + +#ifdef FOR_dd +#ifndef TT +#define TT this.dd +#endif +#endif + +#ifdef FOR_deallocvt +#ifndef TT +#define TT this.deallocvt +#endif +#endif + +#ifdef FOR_demo_many_options +#ifndef TT +#define TT this.demo_many_options +#endif +#define FLAG_a (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#define FLAG_d (FORCED_FLAG<<3) +#define FLAG_e (FORCED_FLAG<<4) +#define FLAG_f (FORCED_FLAG<<5) +#define FLAG_g (FORCED_FLAG<<6) +#define FLAG_h (FORCED_FLAG<<7) +#define FLAG_i (FORCED_FLAG<<8) +#define FLAG_j (FORCED_FLAG<<9) +#define FLAG_k (FORCED_FLAG<<10) +#define FLAG_l (FORCED_FLAG<<11) +#define FLAG_m (FORCED_FLAG<<12) +#define FLAG_n (FORCED_FLAG<<13) +#define FLAG_o (FORCED_FLAG<<14) +#define FLAG_p (FORCED_FLAG<<15) +#define FLAG_q (FORCED_FLAG<<16) +#define FLAG_r (FORCED_FLAG<<17) +#define FLAG_s (FORCED_FLAG<<18) +#define FLAG_t (FORCED_FLAG<<19) +#define FLAG_u (FORCED_FLAG<<20) +#define FLAG_v (FORCED_FLAG<<21) +#define FLAG_w (FORCED_FLAG<<22) +#define FLAG_x (FORCED_FLAG<<23) +#define FLAG_y (FORCED_FLAG<<24) +#define FLAG_z (FORCED_FLAG<<25) +#define FLAG_A (FORCED_FLAG<<26) +#define FLAG_B (FORCED_FLAG<<27) +#define FLAG_C (FORCED_FLAG<<28) +#define FLAG_D (FORCED_FLAG<<29) +#define FLAG_E (FORCED_FLAG<<30) +#define FLAG_F (FORCED_FLAGLL<<31) +#define FLAG_G (FORCED_FLAGLL<<32) +#define FLAG_H (FORCED_FLAGLL<<33) +#define FLAG_I (FORCED_FLAGLL<<34) +#define FLAG_J (FORCED_FLAGLL<<35) +#define FLAG_K (FORCED_FLAGLL<<36) +#define FLAG_L (FORCED_FLAGLL<<37) +#define FLAG_M (FORCED_FLAGLL<<38) +#define FLAG_N (FORCED_FLAGLL<<39) +#define FLAG_O (FORCED_FLAGLL<<40) +#define FLAG_P (FORCED_FLAGLL<<41) +#define FLAG_Q (FORCED_FLAGLL<<42) +#define FLAG_R (FORCED_FLAGLL<<43) +#define FLAG_S (FORCED_FLAGLL<<44) +#define FLAG_T (FORCED_FLAGLL<<45) +#define FLAG_U (FORCED_FLAGLL<<46) +#define FLAG_V (FORCED_FLAGLL<<47) +#define FLAG_W (FORCED_FLAGLL<<48) +#define FLAG_X (FORCED_FLAGLL<<49) +#define FLAG_Y (FORCED_FLAGLL<<50) +#define FLAG_Z (FORCED_FLAGLL<<51) +#endif + +#ifdef FOR_demo_number +#ifndef TT +#define TT this.demo_number +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_d (FORCED_FLAG<<2) +#define FLAG_h (FORCED_FLAG<<3) +#define FLAG_D (FORCED_FLAG<<4) +#endif + +#ifdef FOR_demo_scankey +#ifndef TT +#define TT this.demo_scankey +#endif +#endif + +#ifdef FOR_demo_utf8towc +#ifndef TT +#define TT this.demo_utf8towc +#endif +#endif + +#ifdef FOR_devmem +#ifndef TT +#define TT this.devmem +#endif +#endif + +#ifdef FOR_df +#ifndef TT +#define TT this.df +#endif +#define FLAG_a (1<<0) +#define FLAG_t (1<<1) +#define FLAG_i (1<<2) +#define FLAG_h (1<<3) +#define FLAG_k (1<<4) +#define FLAG_P (1<<5) +#define FLAG_H (1<<6) +#endif + +#ifdef FOR_dhcp +#ifndef TT +#define TT this.dhcp +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#define FLAG_q (FORCED_FLAG<<3) +#define FLAG_v (FORCED_FLAG<<4) +#define FLAG_o (FORCED_FLAG<<5) +#define FLAG_a (FORCED_FLAG<<6) +#define FLAG_C (FORCED_FLAG<<7) +#define FLAG_R (FORCED_FLAG<<8) +#define FLAG_B (FORCED_FLAG<<9) +#define FLAG_S (FORCED_FLAG<<10) +#define FLAG_i (FORCED_FLAG<<11) +#define FLAG_p (FORCED_FLAG<<12) +#define FLAG_s (FORCED_FLAG<<13) +#define FLAG_t (FORCED_FLAG<<14) +#define FLAG_T (FORCED_FLAG<<15) +#define FLAG_A (FORCED_FLAG<<16) +#define FLAG_O (FORCED_FLAG<<17) +#define FLAG_r (FORCED_FLAG<<18) +#define FLAG_x (FORCED_FLAG<<19) +#define FLAG_F (FORCED_FLAG<<20) +#define FLAG_H (FORCED_FLAG<<21) +#define FLAG_V (FORCED_FLAG<<22) +#endif + +#ifdef FOR_dhcp6 +#ifndef TT +#define TT this.dhcp6 +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#define FLAG_q (FORCED_FLAG<<3) +#define FLAG_v (FORCED_FLAG<<4) +#define FLAG_R (FORCED_FLAG<<5) +#define FLAG_S (FORCED_FLAG<<6) +#define FLAG_i (FORCED_FLAG<<7) +#define FLAG_p (FORCED_FLAG<<8) +#define FLAG_s (FORCED_FLAG<<9) +#define FLAG_t (FORCED_FLAG<<10) +#define FLAG_T (FORCED_FLAG<<11) +#define FLAG_A (FORCED_FLAG<<12) +#define FLAG_r (FORCED_FLAG<<13) +#endif + +#ifdef FOR_dhcpd +#ifndef TT +#define TT this.dhcpd +#endif +#define FLAG_6 (FORCED_FLAG<<0) +#define FLAG_4 (FORCED_FLAG<<1) +#define FLAG_S (FORCED_FLAG<<2) +#define FLAG_i (FORCED_FLAG<<3) +#define FLAG_f (FORCED_FLAG<<4) +#define FLAG_P (FORCED_FLAG<<5) +#endif + +#ifdef FOR_diff +#ifndef TT +#define TT this.diff +#endif +#define FLAG_U (1<<0) +#define FLAG_r (1<<1) +#define FLAG_N (1<<2) +#define FLAG_S (1<<3) +#define FLAG_L (1<<4) +#define FLAG_a (1<<5) +#define FLAG_q (1<<6) +#define FLAG_s (1<<7) +#define FLAG_T (1<<8) +#define FLAG_i (1<<9) +#define FLAG_w (1<<10) +#define FLAG_t (1<<11) +#define FLAG_u (1<<12) +#define FLAG_b (1<<13) +#define FLAG_d (1<<14) +#define FLAG_B (1<<15) +#define FLAG_strip_trailing_cr (1<<16) +#define FLAG_color (1<<17) +#endif + +#ifdef FOR_dirname +#ifndef TT +#define TT this.dirname +#endif +#endif + +#ifdef FOR_dmesg +#ifndef TT +#define TT this.dmesg +#endif +#define FLAG_c (1<<0) +#define FLAG_n (1<<1) +#define FLAG_s (1<<2) +#define FLAG_r (1<<3) +#define FLAG_t (1<<4) +#define FLAG_T (1<<5) +#define FLAG_S (1<<6) +#define FLAG_C (1<<7) +#define FLAG_w (1<<8) +#endif + +#ifdef FOR_dnsdomainname +#ifndef TT +#define TT this.dnsdomainname +#endif +#endif + +#ifdef FOR_dos2unix +#ifndef TT +#define TT this.dos2unix +#endif +#endif + +#ifdef FOR_du +#ifndef TT +#define TT this.du +#endif +#define FLAG_x (1<<0) +#define FLAG_s (1<<1) +#define FLAG_L (1<<2) +#define FLAG_K (1<<3) +#define FLAG_k (1<<4) +#define FLAG_H (1<<5) +#define FLAG_a (1<<6) +#define FLAG_c (1<<7) +#define FLAG_l (1<<8) +#define FLAG_m (1<<9) +#define FLAG_h (1<<10) +#define FLAG_d (1<<11) +#endif + +#ifdef FOR_dumpleases +#ifndef TT +#define TT this.dumpleases +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_r (FORCED_FLAG<<1) +#define FLAG_a (FORCED_FLAG<<2) +#endif + +#ifdef FOR_echo +#ifndef TT +#define TT this.echo +#endif +#define FLAG_n (1<<0) +#define FLAG_e (1<<1) +#define FLAG_E (1<<2) +#endif + +#ifdef FOR_eject +#ifndef TT +#define TT this.eject +#endif +#define FLAG_T (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#endif + +#ifdef FOR_env +#ifndef TT +#define TT this.env +#endif +#define FLAG_u (1<<0) +#define FLAG_i (1<<1) +#define FLAG_0 (1<<2) +#endif + +#ifdef FOR_exit +#ifndef TT +#define TT this.exit +#endif +#endif + +#ifdef FOR_expand +#ifndef TT +#define TT this.expand +#endif +#define FLAG_t (1<<0) +#endif + +#ifdef FOR_expr +#ifndef TT +#define TT this.expr +#endif +#endif + +#ifdef FOR_factor +#ifndef TT +#define TT this.factor +#endif +#endif + +#ifdef FOR_fallocate +#ifndef TT +#define TT this.fallocate +#endif +#define FLAG_o (1<<0) +#define FLAG_l (1<<1) +#endif + +#ifdef FOR_false +#ifndef TT +#define TT this.false +#endif +#endif + +#ifdef FOR_fdisk +#ifndef TT +#define TT this.fdisk +#endif +#define FLAG_l (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_b (FORCED_FLAG<<2) +#define FLAG_S (FORCED_FLAG<<3) +#define FLAG_H (FORCED_FLAG<<4) +#define FLAG_C (FORCED_FLAG<<5) +#endif + +#ifdef FOR_file +#ifndef TT +#define TT this.file +#endif +#define FLAG_s (1<<0) +#define FLAG_L (1<<1) +#define FLAG_h (1<<2) +#define FLAG_b (1<<3) +#endif + +#ifdef FOR_find +#ifndef TT +#define TT this.find +#endif +#define FLAG_L (1<<0) +#define FLAG_H (1<<1) +#endif + +#ifdef FOR_flock +#ifndef TT +#define TT this.flock +#endif +#define FLAG_x (1<<0) +#define FLAG_u (1<<1) +#define FLAG_s (1<<2) +#define FLAG_n (1<<3) +#endif + +#ifdef FOR_fmt +#ifndef TT +#define TT this.fmt +#endif +#define FLAG_w (1<<0) +#endif + +#ifdef FOR_fold +#ifndef TT +#define TT this.fold +#endif +#define FLAG_w (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#define FLAG_b (FORCED_FLAG<<3) +#endif + +#ifdef FOR_free +#ifndef TT +#define TT this.free +#endif +#define FLAG_b (1<<0) +#define FLAG_k (1<<1) +#define FLAG_m (1<<2) +#define FLAG_g (1<<3) +#define FLAG_t (1<<4) +#define FLAG_h (1<<5) +#endif + +#ifdef FOR_freeramdisk +#ifndef TT +#define TT this.freeramdisk +#endif +#endif + +#ifdef FOR_fsck +#ifndef TT +#define TT this.fsck +#endif +#define FLAG_C (FORCED_FLAG<<0) +#define FLAG_s (FORCED_FLAG<<1) +#define FLAG_V (FORCED_FLAG<<2) +#define FLAG_T (FORCED_FLAG<<3) +#define FLAG_R (FORCED_FLAG<<4) +#define FLAG_P (FORCED_FLAG<<5) +#define FLAG_N (FORCED_FLAG<<6) +#define FLAG_A (FORCED_FLAG<<7) +#define FLAG_t (FORCED_FLAG<<8) +#endif + +#ifdef FOR_fsfreeze +#ifndef TT +#define TT this.fsfreeze +#endif +#define FLAG_u (1<<0) +#define FLAG_f (1<<1) +#endif + +#ifdef FOR_fstype +#ifndef TT +#define TT this.fstype +#endif +#endif + +#ifdef FOR_fsync +#ifndef TT +#define TT this.fsync +#endif +#define FLAG_d (1<<0) +#endif + +#ifdef FOR_ftpget +#ifndef TT +#define TT this.ftpget +#endif +#define FLAG_D (FORCED_FLAG<<0) +#define FLAG_d (FORCED_FLAG<<1) +#define FLAG_M (FORCED_FLAG<<2) +#define FLAG_m (FORCED_FLAG<<3) +#define FLAG_L (FORCED_FLAG<<4) +#define FLAG_l (FORCED_FLAG<<5) +#define FLAG_s (FORCED_FLAG<<6) +#define FLAG_g (FORCED_FLAG<<7) +#define FLAG_v (FORCED_FLAG<<8) +#define FLAG_u (FORCED_FLAG<<9) +#define FLAG_p (FORCED_FLAG<<10) +#define FLAG_c (FORCED_FLAG<<11) +#define FLAG_P (FORCED_FLAG<<12) +#endif + +#ifdef FOR_getconf +#ifndef TT +#define TT this.getconf +#endif +#define FLAG_l (1<<0) +#define FLAG_a (1<<1) +#endif + +#ifdef FOR_getenforce +#ifndef TT +#define TT this.getenforce +#endif +#endif + +#ifdef FOR_getfattr +#ifndef TT +#define TT this.getfattr +#endif +#define FLAG_n (1<<0) +#define FLAG_h (1<<1) +#define FLAG_d (1<<2) +#define FLAG_only_values (1<<3) +#endif + +#ifdef FOR_getopt +#ifndef TT +#define TT this.getopt +#endif +#define FLAG_u (1<<0) +#define FLAG_T (1<<1) +#define FLAG_l (1<<2) +#define FLAG_o (1<<3) +#define FLAG_n (1<<4) +#define FLAG_a (1<<5) +#endif + +#ifdef FOR_getty +#ifndef TT +#define TT this.getty +#endif +#define FLAG_h (FORCED_FLAG<<0) +#define FLAG_L (FORCED_FLAG<<1) +#define FLAG_m (FORCED_FLAG<<2) +#define FLAG_n (FORCED_FLAG<<3) +#define FLAG_w (FORCED_FLAG<<4) +#define FLAG_i (FORCED_FLAG<<5) +#define FLAG_f (FORCED_FLAG<<6) +#define FLAG_l (FORCED_FLAG<<7) +#define FLAG_I (FORCED_FLAG<<8) +#define FLAG_H (FORCED_FLAG<<9) +#define FLAG_t (FORCED_FLAG<<10) +#endif + +#ifdef FOR_grep +#ifndef TT +#define TT this.grep +#endif +#define FLAG_x (1<<0) +#define FLAG_m (1<<1) +#define FLAG_A (1<<2) +#define FLAG_B (1<<3) +#define FLAG_C (1<<4) +#define FLAG_f (1<<5) +#define FLAG_e (1<<6) +#define FLAG_q (1<<7) +#define FLAG_l (1<<8) +#define FLAG_c (1<<9) +#define FLAG_w (1<<10) +#define FLAG_v (1<<11) +#define FLAG_s (1<<12) +#define FLAG_R (1<<13) +#define FLAG_r (1<<14) +#define FLAG_o (1<<15) +#define FLAG_n (1<<16) +#define FLAG_i (1<<17) +#define FLAG_h (1<<18) +#define FLAG_b (1<<19) +#define FLAG_a (1<<20) +#define FLAG_I (1<<21) +#define FLAG_H (1<<22) +#define FLAG_F (1<<23) +#define FLAG_E (1<<24) +#define FLAG_z (1<<25) +#define FLAG_Z (1<<26) +#define FLAG_M (1<<27) +#define FLAG_S (1<<28) +#define FLAG_exclude_dir (1<<29) +#define FLAG_color (1<<30) +#define FLAG_line_buffered (1LL<<31) +#endif + +#ifdef FOR_groupadd +#ifndef TT +#define TT this.groupadd +#endif +#define FLAG_S (FORCED_FLAG<<0) +#define FLAG_g (FORCED_FLAG<<1) +#endif + +#ifdef FOR_groupdel +#ifndef TT +#define TT this.groupdel +#endif +#endif + +#ifdef FOR_groups +#ifndef TT +#define TT this.groups +#endif +#endif + +#ifdef FOR_gunzip +#ifndef TT +#define TT this.gunzip +#endif +#define FLAG_9 (1<<0) +#define FLAG_8 (1<<1) +#define FLAG_7 (1<<2) +#define FLAG_6 (1<<3) +#define FLAG_5 (1<<4) +#define FLAG_4 (1<<5) +#define FLAG_3 (1<<6) +#define FLAG_2 (1<<7) +#define FLAG_1 (1<<8) +#define FLAG_k (1<<9) +#define FLAG_f (1<<10) +#define FLAG_d (1<<11) +#define FLAG_c (1<<12) +#endif + +#ifdef FOR_gzip +#ifndef TT +#define TT this.gzip +#endif +#define FLAG_9 (1<<0) +#define FLAG_8 (1<<1) +#define FLAG_7 (1<<2) +#define FLAG_6 (1<<3) +#define FLAG_5 (1<<4) +#define FLAG_4 (1<<5) +#define FLAG_3 (1<<6) +#define FLAG_2 (1<<7) +#define FLAG_1 (1<<8) +#define FLAG_k (1<<9) +#define FLAG_f (1<<10) +#define FLAG_d (1<<11) +#define FLAG_c (1<<12) +#define FLAG_n (1<<13) +#endif + +#ifdef FOR_head +#ifndef TT +#define TT this.head +#endif +#define FLAG_v (1<<0) +#define FLAG_q (1<<1) +#define FLAG_c (1<<2) +#define FLAG_n (1<<3) +#endif + +#ifdef FOR_hello +#ifndef TT +#define TT this.hello +#endif +#endif + +#ifdef FOR_help +#ifndef TT +#define TT this.help +#endif +#define FLAG_u (1<<0) +#define FLAG_h (1<<1) +#define FLAG_a (1<<2) +#endif + +#ifdef FOR_hexedit +#ifndef TT +#define TT this.hexedit +#endif +#define FLAG_r (FORCED_FLAG<<0) +#endif + +#ifdef FOR_host +#ifndef TT +#define TT this.host +#endif +#define FLAG_t (FORCED_FLAG<<0) +#define FLAG_v (FORCED_FLAG<<1) +#define FLAG_a (FORCED_FLAG<<2) +#endif + +#ifdef FOR_hostid +#ifndef TT +#define TT this.hostid +#endif +#endif + +#ifdef FOR_hostname +#ifndef TT +#define TT this.hostname +#endif +#define FLAG_F (1<<0) +#define FLAG_f (1<<1) +#define FLAG_s (1<<2) +#define FLAG_d (1<<3) +#define FLAG_b (1<<4) +#endif + +#ifdef FOR_hwclock +#ifndef TT +#define TT this.hwclock +#endif +#define FLAG_w (1<<0) +#define FLAG_r (1<<1) +#define FLAG_s (1<<2) +#define FLAG_t (1<<3) +#define FLAG_l (1<<4) +#define FLAG_u (1<<5) +#define FLAG_f (1<<6) +#define FLAG_fast (1<<7) +#endif + +#ifdef FOR_i2cdetect +#ifndef TT +#define TT this.i2cdetect +#endif +#define FLAG_y (1<<0) +#define FLAG_l (1<<1) +#define FLAG_F (1<<2) +#define FLAG_a (1<<3) +#endif + +#ifdef FOR_i2cdump +#ifndef TT +#define TT this.i2cdump +#endif +#define FLAG_y (1<<0) +#define FLAG_f (1<<1) +#endif + +#ifdef FOR_i2cget +#ifndef TT +#define TT this.i2cget +#endif +#define FLAG_y (1<<0) +#define FLAG_f (1<<1) +#endif + +#ifdef FOR_i2cset +#ifndef TT +#define TT this.i2cset +#endif +#define FLAG_y (1<<0) +#define FLAG_f (1<<1) +#endif + +#ifdef FOR_iconv +#ifndef TT +#define TT this.iconv +#endif +#define FLAG_f (1<<0) +#define FLAG_t (1<<1) +#define FLAG_s (1<<2) +#define FLAG_c (1<<3) +#endif + +#ifdef FOR_id +#ifndef TT +#define TT this.id +#endif +#define FLAG_u (1<<0) +#define FLAG_r (1<<1) +#define FLAG_g (1<<2) +#define FLAG_G (1<<3) +#define FLAG_n (1<<4) +#define FLAG_Z (1<<5) +#endif + +#ifdef FOR_ifconfig +#ifndef TT +#define TT this.ifconfig +#endif +#define FLAG_S (1<<0) +#define FLAG_a (1<<1) +#endif + +#ifdef FOR_init +#ifndef TT +#define TT this.init +#endif +#endif + +#ifdef FOR_inotifyd +#ifndef TT +#define TT this.inotifyd +#endif +#endif + +#ifdef FOR_insmod +#ifndef TT +#define TT this.insmod +#endif +#endif + +#ifdef FOR_install +#ifndef TT +#define TT this.install +#endif +#define FLAG_g (1<<0) +#define FLAG_o (1<<1) +#define FLAG_m (1<<2) +#define FLAG_v (1<<3) +#define FLAG_s (1<<4) +#define FLAG_p (1<<5) +#define FLAG_D (1<<6) +#define FLAG_d (1<<7) +#define FLAG_c (1<<8) +#endif + +#ifdef FOR_ionice +#ifndef TT +#define TT this.ionice +#endif +#define FLAG_p (1<<0) +#define FLAG_n (1<<1) +#define FLAG_c (1<<2) +#define FLAG_t (1<<3) +#endif + +#ifdef FOR_iorenice +#ifndef TT +#define TT this.iorenice +#endif +#endif + +#ifdef FOR_iotop +#ifndef TT +#define TT this.iotop +#endif +#define FLAG_q (1<<0) +#define FLAG_b (1<<1) +#define FLAG_n (1<<2) +#define FLAG_m (1<<3) +#define FLAG_d (1<<4) +#define FLAG_s (1<<5) +#define FLAG_u (1<<6) +#define FLAG_p (1<<7) +#define FLAG_o (1<<8) +#define FLAG_k (1<<9) +#define FLAG_H (1<<10) +#define FLAG_O (1<<11) +#define FLAG_K (1<<12) +#define FLAG_a (1<<13) +#define FLAG_A (1<<14) +#endif + +#ifdef FOR_ip +#ifndef TT +#define TT this.ip +#endif +#endif + +#ifdef FOR_ipcrm +#ifndef TT +#define TT this.ipcrm +#endif +#define FLAG_Q (FORCED_FLAG<<0) +#define FLAG_q (FORCED_FLAG<<1) +#define FLAG_S (FORCED_FLAG<<2) +#define FLAG_s (FORCED_FLAG<<3) +#define FLAG_M (FORCED_FLAG<<4) +#define FLAG_m (FORCED_FLAG<<5) +#endif + +#ifdef FOR_ipcs +#ifndef TT +#define TT this.ipcs +#endif +#define FLAG_i (FORCED_FLAG<<0) +#define FLAG_m (FORCED_FLAG<<1) +#define FLAG_q (FORCED_FLAG<<2) +#define FLAG_s (FORCED_FLAG<<3) +#define FLAG_l (FORCED_FLAG<<4) +#define FLAG_u (FORCED_FLAG<<5) +#define FLAG_t (FORCED_FLAG<<6) +#define FLAG_p (FORCED_FLAG<<7) +#define FLAG_c (FORCED_FLAG<<8) +#define FLAG_a (FORCED_FLAG<<9) +#endif + +#ifdef FOR_kill +#ifndef TT +#define TT this.kill +#endif +#define FLAG_s (1<<0) +#define FLAG_l (1<<1) +#endif + +#ifdef FOR_killall +#ifndef TT +#define TT this.killall +#endif +#define FLAG_w (1<<0) +#define FLAG_v (1<<1) +#define FLAG_q (1<<2) +#define FLAG_l (1<<3) +#define FLAG_i (1<<4) +#define FLAG_s (1<<5) +#endif + +#ifdef FOR_killall5 +#ifndef TT +#define TT this.killall5 +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_l (FORCED_FLAG<<1) +#define FLAG_o (FORCED_FLAG<<2) +#endif + +#ifdef FOR_klogd +#ifndef TT +#define TT this.klogd +#endif +#define FLAG_n (FORCED_FLAG<<0) +#define FLAG_c (FORCED_FLAG<<1) +#endif + +#ifdef FOR_last +#ifndef TT +#define TT this.last +#endif +#define FLAG_W (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#endif + +#ifdef FOR_link +#ifndef TT +#define TT this.link +#endif +#endif + +#ifdef FOR_ln +#ifndef TT +#define TT this.ln +#endif +#define FLAG_s (1<<0) +#define FLAG_f (1<<1) +#define FLAG_n (1<<2) +#define FLAG_v (1<<3) +#define FLAG_T (1<<4) +#define FLAG_t (1<<5) +#define FLAG_r (1<<6) +#endif + +#ifdef FOR_load_policy +#ifndef TT +#define TT this.load_policy +#endif +#endif + +#ifdef FOR_log +#ifndef TT +#define TT this.log +#endif +#define FLAG_t (1<<0) +#define FLAG_p (1<<1) +#endif + +#ifdef FOR_logger +#ifndef TT +#define TT this.logger +#endif +#define FLAG_p (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#endif + +#ifdef FOR_login +#ifndef TT +#define TT this.login +#endif +#define FLAG_h (FORCED_FLAG<<0) +#define FLAG_p (FORCED_FLAG<<1) +#define FLAG_f (FORCED_FLAG<<2) +#endif + +#ifdef FOR_logname +#ifndef TT +#define TT this.logname +#endif +#endif + +#ifdef FOR_logwrapper +#ifndef TT +#define TT this.logwrapper +#endif +#endif + +#ifdef FOR_losetup +#ifndef TT +#define TT this.losetup +#endif +#define FLAG_D (1<<0) +#define FLAG_a (1<<1) +#define FLAG_c (1<<2) +#define FLAG_d (1<<3) +#define FLAG_f (1<<4) +#define FLAG_j (1<<5) +#define FLAG_o (1<<6) +#define FLAG_r (1<<7) +#define FLAG_s (1<<8) +#define FLAG_S (1<<9) +#endif + +#ifdef FOR_ls +#ifndef TT +#define TT this.ls +#endif +#define FLAG_1 (1<<0) +#define FLAG_x (1<<1) +#define FLAG_w (1<<2) +#define FLAG_u (1<<3) +#define FLAG_t (1<<4) +#define FLAG_s (1<<5) +#define FLAG_r (1<<6) +#define FLAG_q (1<<7) +#define FLAG_p (1<<8) +#define FLAG_n (1<<9) +#define FLAG_m (1<<10) +#define FLAG_l (1<<11) +#define FLAG_k (1<<12) +#define FLAG_i (1<<13) +#define FLAG_h (1<<14) +#define FLAG_f (1<<15) +#define FLAG_d (1<<16) +#define FLAG_c (1<<17) +#define FLAG_b (1<<18) +#define FLAG_a (1<<19) +#define FLAG_S (1<<20) +#define FLAG_R (1<<21) +#define FLAG_L (1<<22) +#define FLAG_H (1<<23) +#define FLAG_F (1<<24) +#define FLAG_C (1<<25) +#define FLAG_A (1<<26) +#define FLAG_o (1<<27) +#define FLAG_g (1<<28) +#define FLAG_Z (1<<29) +#define FLAG_show_control_chars (1<<30) +#define FLAG_full_time (1LL<<31) +#define FLAG_color (1LL<<32) +#endif + +#ifdef FOR_lsattr +#ifndef TT +#define TT this.lsattr +#endif +#define FLAG_R (1<<0) +#define FLAG_v (1<<1) +#define FLAG_p (1<<2) +#define FLAG_a (1<<3) +#define FLAG_d (1<<4) +#define FLAG_l (1<<5) +#endif + +#ifdef FOR_lsmod +#ifndef TT +#define TT this.lsmod +#endif +#endif + +#ifdef FOR_lsof +#ifndef TT +#define TT this.lsof +#endif +#define FLAG_t (1<<0) +#define FLAG_p (1<<1) +#define FLAG_l (1<<2) +#endif + +#ifdef FOR_lspci +#ifndef TT +#define TT this.lspci +#endif +#define FLAG_i (FORCED_FLAG<<0) +#define FLAG_n (1<<1) +#define FLAG_k (1<<2) +#define FLAG_m (1<<3) +#define FLAG_e (1<<4) +#endif + +#ifdef FOR_lsusb +#ifndef TT +#define TT this.lsusb +#endif +#endif + +#ifdef FOR_makedevs +#ifndef TT +#define TT this.makedevs +#endif +#define FLAG_d (1<<0) +#endif + +#ifdef FOR_man +#ifndef TT +#define TT this.man +#endif +#define FLAG_M (FORCED_FLAG<<0) +#define FLAG_k (FORCED_FLAG<<1) +#endif + +#ifdef FOR_mcookie +#ifndef TT +#define TT this.mcookie +#endif +#define FLAG_V (FORCED_FLAG<<0) +#define FLAG_v (FORCED_FLAG<<1) +#endif + +#ifdef FOR_md5sum +#ifndef TT +#define TT this.md5sum +#endif +#define FLAG_s (1<<0) +#define FLAG_c (1<<1) +#define FLAG_b (1<<2) +#endif + +#ifdef FOR_mdev +#ifndef TT +#define TT this.mdev +#endif +#define FLAG_s (FORCED_FLAG<<0) +#endif + +#ifdef FOR_microcom +#ifndef TT +#define TT this.microcom +#endif +#define FLAG_X (1<<0) +#define FLAG_s (1<<1) +#endif + +#ifdef FOR_mix +#ifndef TT +#define TT this.mix +#endif +#define FLAG_r (FORCED_FLAG<<0) +#define FLAG_l (FORCED_FLAG<<1) +#define FLAG_d (FORCED_FLAG<<2) +#define FLAG_c (FORCED_FLAG<<3) +#endif + +#ifdef FOR_mkdir +#ifndef TT +#define TT this.mkdir +#endif +#define FLAG_m (1<<0) +#define FLAG_p (1<<1) +#define FLAG_v (1<<2) +#define FLAG_Z (1<<3) +#endif + +#ifdef FOR_mke2fs +#ifndef TT +#define TT this.mke2fs +#endif +#define FLAG_b (FORCED_FLAG<<0) +#define FLAG_i (FORCED_FLAG<<1) +#define FLAG_N (FORCED_FLAG<<2) +#define FLAG_m (FORCED_FLAG<<3) +#define FLAG_q (FORCED_FLAG<<4) +#define FLAG_n (FORCED_FLAG<<5) +#define FLAG_F (FORCED_FLAG<<6) +#define FLAG_g (FORCED_FLAG<<7) +#endif + +#ifdef FOR_mkfifo +#ifndef TT +#define TT this.mkfifo +#endif +#define FLAG_m (1<<0) +#define FLAG_Z (1<<1) +#endif + +#ifdef FOR_mknod +#ifndef TT +#define TT this.mknod +#endif +#define FLAG_Z (1<<0) +#define FLAG_m (1<<1) +#endif + +#ifdef FOR_mkpasswd +#ifndef TT +#define TT this.mkpasswd +#endif +#define FLAG_P (FORCED_FLAG<<0) +#define FLAG_m (FORCED_FLAG<<1) +#define FLAG_S (FORCED_FLAG<<2) +#endif + +#ifdef FOR_mkswap +#ifndef TT +#define TT this.mkswap +#endif +#define FLAG_L (1<<0) +#endif + +#ifdef FOR_mktemp +#ifndef TT +#define TT this.mktemp +#endif +#define FLAG_t (1<<0) +#define FLAG_p (1<<1) +#define FLAG_d (1<<2) +#define FLAG_q (1<<3) +#define FLAG_u (1<<4) +#define FLAG_tmpdir (1<<5) +#endif + +#ifdef FOR_modinfo +#ifndef TT +#define TT this.modinfo +#endif +#define FLAG_0 (1<<0) +#define FLAG_F (1<<1) +#define FLAG_k (1<<2) +#define FLAG_b (1<<3) +#endif + +#ifdef FOR_modprobe +#ifndef TT +#define TT this.modprobe +#endif +#define FLAG_d (1<<0) +#define FLAG_b (1<<1) +#define FLAG_D (1<<2) +#define FLAG_s (1<<3) +#define FLAG_v (1<<4) +#define FLAG_q (1<<5) +#define FLAG_r (1<<6) +#define FLAG_l (1<<7) +#define FLAG_a (1<<8) +#endif + +#ifdef FOR_more +#ifndef TT +#define TT this.more +#endif +#endif + +#ifdef FOR_mount +#ifndef TT +#define TT this.mount +#endif +#define FLAG_o (1<<0) +#define FLAG_t (1<<1) +#define FLAG_w (1<<2) +#define FLAG_v (1<<3) +#define FLAG_r (1<<4) +#define FLAG_n (1<<5) +#define FLAG_f (1<<6) +#define FLAG_a (1<<7) +#define FLAG_O (1<<8) +#endif + +#ifdef FOR_mountpoint +#ifndef TT +#define TT this.mountpoint +#endif +#define FLAG_x (1<<0) +#define FLAG_d (1<<1) +#define FLAG_q (1<<2) +#endif + +#ifdef FOR_mv +#ifndef TT +#define TT this.mv +#endif +#define FLAG_T (1<<0) +#define FLAG_i (1<<1) +#define FLAG_f (1<<2) +#define FLAG_F (1<<3) +#define FLAG_n (1<<4) +#define FLAG_v (1<<5) +#endif + +#ifdef FOR_nbd_client +#ifndef TT +#define TT this.nbd_client +#endif +#define FLAG_s (1<<0) +#define FLAG_n (1<<1) +#endif + +#ifdef FOR_netcat +#ifndef TT +#define TT this.netcat +#endif +#define FLAG_U (1<<0) +#define FLAG_u (1<<1) +#define FLAG_6 (1<<2) +#define FLAG_4 (1<<3) +#define FLAG_f (1<<4) +#define FLAG_s (1<<5) +#define FLAG_q (1<<6) +#define FLAG_p (1<<7) +#define FLAG_W (1<<8) +#define FLAG_w (1<<9) +#define FLAG_L (1<<10) +#define FLAG_l (1<<11) +#define FLAG_t (1<<12) +#endif + +#ifdef FOR_netstat +#ifndef TT +#define TT this.netstat +#endif +#define FLAG_l (1<<0) +#define FLAG_a (1<<1) +#define FLAG_e (1<<2) +#define FLAG_n (1<<3) +#define FLAG_t (1<<4) +#define FLAG_u (1<<5) +#define FLAG_w (1<<6) +#define FLAG_x (1<<7) +#define FLAG_r (1<<8) +#define FLAG_W (1<<9) +#define FLAG_p (1<<10) +#endif + +#ifdef FOR_nice +#ifndef TT +#define TT this.nice +#endif +#define FLAG_n (1<<0) +#endif + +#ifdef FOR_nl +#ifndef TT +#define TT this.nl +#endif +#define FLAG_s (1<<0) +#define FLAG_n (1<<1) +#define FLAG_b (1<<2) +#define FLAG_E (1<<3) +#define FLAG_w (1<<4) +#define FLAG_l (1<<5) +#define FLAG_v (1<<6) +#endif + +#ifdef FOR_nohup +#ifndef TT +#define TT this.nohup +#endif +#endif + +#ifdef FOR_nproc +#ifndef TT +#define TT this.nproc +#endif +#define FLAG_all (1<<0) +#endif + +#ifdef FOR_nsenter +#ifndef TT +#define TT this.nsenter +#endif +#define FLAG_U (1<<0) +#define FLAG_u (1<<1) +#define FLAG_p (1<<2) +#define FLAG_n (1<<3) +#define FLAG_m (1<<4) +#define FLAG_i (1<<5) +#define FLAG_t (1<<6) +#define FLAG_F (1<<7) +#endif + +#ifdef FOR_od +#ifndef TT +#define TT this.od +#endif +#define FLAG_t (1<<0) +#define FLAG_A (1<<1) +#define FLAG_b (1<<2) +#define FLAG_c (1<<3) +#define FLAG_d (1<<4) +#define FLAG_o (1<<5) +#define FLAG_s (1<<6) +#define FLAG_x (1<<7) +#define FLAG_N (1<<8) +#define FLAG_w (1<<9) +#define FLAG_v (1<<10) +#define FLAG_j (1<<11) +#endif + +#ifdef FOR_oneit +#ifndef TT +#define TT this.oneit +#endif +#define FLAG_3 (FORCED_FLAG<<0) +#define FLAG_p (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#define FLAG_n (FORCED_FLAG<<3) +#endif + +#ifdef FOR_openvt +#ifndef TT +#define TT this.openvt +#endif +#define FLAG_w (FORCED_FLAG<<0) +#define FLAG_s (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#endif + +#ifdef FOR_partprobe +#ifndef TT +#define TT this.partprobe +#endif +#endif + +#ifdef FOR_passwd +#ifndef TT +#define TT this.passwd +#endif +#define FLAG_u (FORCED_FLAG<<0) +#define FLAG_l (FORCED_FLAG<<1) +#define FLAG_d (FORCED_FLAG<<2) +#define FLAG_a (FORCED_FLAG<<3) +#endif + +#ifdef FOR_paste +#ifndef TT +#define TT this.paste +#endif +#define FLAG_s (1<<0) +#define FLAG_d (1<<1) +#endif + +#ifdef FOR_patch +#ifndef TT +#define TT this.patch +#endif +#define FLAG_s (1<<0) +#define FLAG_R (1<<1) +#define FLAG_i (1<<2) +#define FLAG_d (1<<3) +#define FLAG_p (1<<4) +#define FLAG_l (1<<5) +#define FLAG_u (1<<6) +#define FLAG_f (1<<7) +#define FLAG_g (1<<8) +#define FLAG_F (1<<9) +#define FLAG_x (FORCED_FLAG<<10) +#define FLAG_dry_run (1<<11) +#define FLAG_no_backup_if_mismatch (1<<12) +#endif + +#ifdef FOR_pgrep +#ifndef TT +#define TT this.pgrep +#endif +#define FLAG_L (1<<0) +#define FLAG_x (1<<1) +#define FLAG_v (1<<2) +#define FLAG_o (1<<3) +#define FLAG_n (1<<4) +#define FLAG_f (1<<5) +#define FLAG_G (1<<6) +#define FLAG_g (1<<7) +#define FLAG_P (1<<8) +#define FLAG_s (1<<9) +#define FLAG_t (1<<10) +#define FLAG_U (1<<11) +#define FLAG_u (1<<12) +#define FLAG_d (1<<13) +#define FLAG_l (1<<14) +#define FLAG_c (1<<15) +#endif + +#ifdef FOR_pidof +#ifndef TT +#define TT this.pidof +#endif +#define FLAG_x (1<<0) +#define FLAG_o (1<<1) +#define FLAG_s (1<<2) +#endif + +#ifdef FOR_ping +#ifndef TT +#define TT this.ping +#endif +#define FLAG_I (1<<0) +#define FLAG_6 (1<<1) +#define FLAG_4 (1<<2) +#define FLAG_f (1<<3) +#define FLAG_q (1<<4) +#define FLAG_w (1<<5) +#define FLAG_W (1<<6) +#define FLAG_i (1<<7) +#define FLAG_s (1<<8) +#define FLAG_c (1<<9) +#define FLAG_t (1<<10) +#define FLAG_m (1<<11) +#endif + +#ifdef FOR_pivot_root +#ifndef TT +#define TT this.pivot_root +#endif +#endif + +#ifdef FOR_pkill +#ifndef TT +#define TT this.pkill +#endif +#define FLAG_l (1<<0) +#define FLAG_x (1<<1) +#define FLAG_v (1<<2) +#define FLAG_o (1<<3) +#define FLAG_n (1<<4) +#define FLAG_f (1<<5) +#define FLAG_G (1<<6) +#define FLAG_g (1<<7) +#define FLAG_P (1<<8) +#define FLAG_s (1<<9) +#define FLAG_t (1<<10) +#define FLAG_U (1<<11) +#define FLAG_u (1<<12) +#define FLAG_V (1<<13) +#endif + +#ifdef FOR_pmap +#ifndef TT +#define TT this.pmap +#endif +#define FLAG_q (1<<0) +#define FLAG_x (1<<1) +#endif + +#ifdef FOR_printenv +#ifndef TT +#define TT this.printenv +#endif +#define FLAG_0 (1<<0) +#endif + +#ifdef FOR_printf +#ifndef TT +#define TT this.printf +#endif +#endif + +#ifdef FOR_ps +#ifndef TT +#define TT this.ps +#endif +#define FLAG_Z (1<<0) +#define FLAG_w (1<<1) +#define FLAG_G (1<<2) +#define FLAG_g (1<<3) +#define FLAG_U (1<<4) +#define FLAG_u (1<<5) +#define FLAG_T (1<<6) +#define FLAG_t (1<<7) +#define FLAG_s (1<<8) +#define FLAG_p (1<<9) +#define FLAG_O (1<<10) +#define FLAG_o (1<<11) +#define FLAG_n (1<<12) +#define FLAG_M (1<<13) +#define FLAG_l (1<<14) +#define FLAG_f (1<<15) +#define FLAG_e (1<<16) +#define FLAG_d (1<<17) +#define FLAG_A (1<<18) +#define FLAG_a (1<<19) +#define FLAG_P (1<<20) +#define FLAG_k (1<<21) +#endif + +#ifdef FOR_pwd +#ifndef TT +#define TT this.pwd +#endif +#define FLAG_P (1<<0) +#define FLAG_L (1<<1) +#endif + +#ifdef FOR_pwdx +#ifndef TT +#define TT this.pwdx +#endif +#define FLAG_a (1<<0) +#endif + +#ifdef FOR_readahead +#ifndef TT +#define TT this.readahead +#endif +#endif + +#ifdef FOR_readelf +#ifndef TT +#define TT this.readelf +#endif +#define FLAG_x (1<<0) +#define FLAG_W (1<<1) +#define FLAG_s (1<<2) +#define FLAG_S (1<<3) +#define FLAG_p (1<<4) +#define FLAG_n (1<<5) +#define FLAG_l (1<<6) +#define FLAG_h (1<<7) +#define FLAG_d (1<<8) +#define FLAG_a (1<<9) +#define FLAG_dyn_syms (1<<10) +#endif + +#ifdef FOR_readlink +#ifndef TT +#define TT this.readlink +#endif +#define FLAG_f (1<<0) +#define FLAG_e (1<<1) +#define FLAG_m (1<<2) +#define FLAG_q (1<<3) +#define FLAG_n (1<<4) +#endif + +#ifdef FOR_realpath +#ifndef TT +#define TT this.realpath +#endif +#endif + +#ifdef FOR_reboot +#ifndef TT +#define TT this.reboot +#endif +#define FLAG_n (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#endif + +#ifdef FOR_renice +#ifndef TT +#define TT this.renice +#endif +#define FLAG_n (1<<0) +#define FLAG_u (1<<1) +#define FLAG_p (1<<2) +#define FLAG_g (1<<3) +#endif + +#ifdef FOR_reset +#ifndef TT +#define TT this.reset +#endif +#endif + +#ifdef FOR_restorecon +#ifndef TT +#define TT this.restorecon +#endif +#define FLAG_v (1<<0) +#define FLAG_r (1<<1) +#define FLAG_R (1<<2) +#define FLAG_n (1<<3) +#define FLAG_F (1<<4) +#define FLAG_D (1<<5) +#endif + +#ifdef FOR_rev +#ifndef TT +#define TT this.rev +#endif +#endif + +#ifdef FOR_rfkill +#ifndef TT +#define TT this.rfkill +#endif +#endif + +#ifdef FOR_rm +#ifndef TT +#define TT this.rm +#endif +#define FLAG_v (1<<0) +#define FLAG_r (1<<1) +#define FLAG_R (1<<2) +#define FLAG_i (1<<3) +#define FLAG_f (1<<4) +#endif + +#ifdef FOR_rmdir +#ifndef TT +#define TT this.rmdir +#endif +#define FLAG_p (1<<0) +#define FLAG_ignore_fail_on_non_empty (1<<1) +#endif + +#ifdef FOR_rmmod +#ifndef TT +#define TT this.rmmod +#endif +#define FLAG_f (1<<0) +#define FLAG_w (1<<1) +#endif + +#ifdef FOR_route +#ifndef TT +#define TT this.route +#endif +#define FLAG_A (FORCED_FLAG<<0) +#define FLAG_e (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#endif + +#ifdef FOR_runcon +#ifndef TT +#define TT this.runcon +#endif +#endif + +#ifdef FOR_sed +#ifndef TT +#define TT this.sed +#endif +#define FLAG_z (1<<0) +#define FLAG_r (1<<1) +#define FLAG_E (1<<2) +#define FLAG_n (1<<3) +#define FLAG_i (1<<4) +#define FLAG_f (1<<5) +#define FLAG_e (1<<6) +#define FLAG_version (1<<7) +#define FLAG_help (1<<8) +#endif + +#ifdef FOR_sendevent +#ifndef TT +#define TT this.sendevent +#endif +#endif + +#ifdef FOR_seq +#ifndef TT +#define TT this.seq +#endif +#define FLAG_w (1<<0) +#define FLAG_s (1<<1) +#define FLAG_f (1<<2) +#endif + +#ifdef FOR_setenforce +#ifndef TT +#define TT this.setenforce +#endif +#endif + +#ifdef FOR_setfattr +#ifndef TT +#define TT this.setfattr +#endif +#define FLAG_x (1<<0) +#define FLAG_v (1<<1) +#define FLAG_n (1<<2) +#define FLAG_h (1<<3) +#endif + +#ifdef FOR_setsid +#ifndef TT +#define TT this.setsid +#endif +#define FLAG_d (1<<0) +#define FLAG_c (1<<1) +#define FLAG_w (1<<2) +#endif + +#ifdef FOR_sh +#ifndef TT +#define TT this.sh +#endif +#define FLAG_i (FORCED_FLAG<<0) +#define FLAG_c (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#define FLAG_norc (FORCED_FLAG<<3) +#define FLAG_noprofile (FORCED_FLAG<<4) +#define FLAG_noediting (FORCED_FLAG<<5) +#endif + +#ifdef FOR_sha1sum +#ifndef TT +#define TT this.sha1sum +#endif +#define FLAG_s (1<<0) +#define FLAG_c (1<<1) +#define FLAG_b (1<<2) +#endif + +#ifdef FOR_shred +#ifndef TT +#define TT this.shred +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_o (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#define FLAG_s (FORCED_FLAG<<3) +#define FLAG_u (FORCED_FLAG<<4) +#define FLAG_x (FORCED_FLAG<<5) +#define FLAG_z (FORCED_FLAG<<6) +#endif + +#ifdef FOR_skeleton +#ifndef TT +#define TT this.skeleton +#endif +#define FLAG_a (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#define FLAG_d (FORCED_FLAG<<3) +#define FLAG_e (FORCED_FLAG<<4) +#define FLAG_also (FORCED_FLAG<<5) +#define FLAG_blubber (FORCED_FLAG<<6) +#define FLAG_walrus (FORCED_FLAG<<7) +#endif + +#ifdef FOR_skeleton_alias +#ifndef TT +#define TT this.skeleton_alias +#endif +#define FLAG_q (FORCED_FLAG<<0) +#define FLAG_d (FORCED_FLAG<<1) +#define FLAG_b (FORCED_FLAG<<2) +#endif + +#ifdef FOR_sleep +#ifndef TT +#define TT this.sleep +#endif +#endif + +#ifdef FOR_sntp +#ifndef TT +#define TT this.sntp +#endif +#define FLAG_r (FORCED_FLAG<<0) +#define FLAG_q (FORCED_FLAG<<1) +#define FLAG_D (FORCED_FLAG<<2) +#define FLAG_d (FORCED_FLAG<<3) +#define FLAG_s (FORCED_FLAG<<4) +#define FLAG_a (FORCED_FLAG<<5) +#define FLAG_t (FORCED_FLAG<<6) +#define FLAG_p (FORCED_FLAG<<7) +#define FLAG_S (FORCED_FLAG<<8) +#define FLAG_m (FORCED_FLAG<<9) +#define FLAG_M (FORCED_FLAG<<10) +#endif + +#ifdef FOR_sort +#ifndef TT +#define TT this.sort +#endif +#define FLAG_n (1<<0) +#define FLAG_u (1<<1) +#define FLAG_r (1<<2) +#define FLAG_i (1<<3) +#define FLAG_f (1<<4) +#define FLAG_d (1<<5) +#define FLAG_z (1<<6) +#define FLAG_s (1<<7) +#define FLAG_c (1<<8) +#define FLAG_M (1<<9) +#define FLAG_b (1<<10) +#define FLAG_V (1<<11) +#define FLAG_x (1<<12) +#define FLAG_t (1<<13) +#define FLAG_k (1<<14) +#define FLAG_o (1<<15) +#define FLAG_m (1<<16) +#define FLAG_T (1<<17) +#define FLAG_S (1<<18) +#define FLAG_g (1<<19) +#endif + +#ifdef FOR_split +#ifndef TT +#define TT this.split +#endif +#define FLAG_l (1<<0) +#define FLAG_b (1<<1) +#define FLAG_a (1<<2) +#endif + +#ifdef FOR_stat +#ifndef TT +#define TT this.stat +#endif +#define FLAG_t (1<<0) +#define FLAG_L (1<<1) +#define FLAG_f (1<<2) +#define FLAG_c (1<<3) +#endif + +#ifdef FOR_strings +#ifndef TT +#define TT this.strings +#endif +#define FLAG_o (1<<0) +#define FLAG_f (1<<1) +#define FLAG_n (1<<2) +#define FLAG_a (1<<3) +#define FLAG_t (1<<4) +#endif + +#ifdef FOR_stty +#ifndef TT +#define TT this.stty +#endif +#define FLAG_g (1<<0) +#define FLAG_F (1<<1) +#define FLAG_a (1<<2) +#endif + +#ifdef FOR_su +#ifndef TT +#define TT this.su +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_c (FORCED_FLAG<<1) +#define FLAG_g (FORCED_FLAG<<2) +#define FLAG_u (FORCED_FLAG<<3) +#define FLAG_p (FORCED_FLAG<<4) +#define FLAG_m (FORCED_FLAG<<5) +#define FLAG_l (FORCED_FLAG<<6) +#endif + +#ifdef FOR_sulogin +#ifndef TT +#define TT this.sulogin +#endif +#define FLAG_t (FORCED_FLAG<<0) +#endif + +#ifdef FOR_swapoff +#ifndef TT +#define TT this.swapoff +#endif +#endif + +#ifdef FOR_swapon +#ifndef TT +#define TT this.swapon +#endif +#define FLAG_d (1<<0) +#define FLAG_p (1<<1) +#endif + +#ifdef FOR_switch_root +#ifndef TT +#define TT this.switch_root +#endif +#define FLAG_h (FORCED_FLAG<<0) +#define FLAG_c (FORCED_FLAG<<1) +#endif + +#ifdef FOR_sync +#ifndef TT +#define TT this.sync +#endif +#endif + +#ifdef FOR_sysctl +#ifndef TT +#define TT this.sysctl +#endif +#define FLAG_A (1<<0) +#define FLAG_a (1<<1) +#define FLAG_p (1<<2) +#define FLAG_w (1<<3) +#define FLAG_q (1<<4) +#define FLAG_N (1<<5) +#define FLAG_e (1<<6) +#define FLAG_n (1<<7) +#endif + +#ifdef FOR_syslogd +#ifndef TT +#define TT this.syslogd +#endif +#define FLAG_D (FORCED_FLAG<<0) +#define FLAG_L (FORCED_FLAG<<1) +#define FLAG_K (FORCED_FLAG<<2) +#define FLAG_S (FORCED_FLAG<<3) +#define FLAG_n (FORCED_FLAG<<4) +#define FLAG_a (FORCED_FLAG<<5) +#define FLAG_f (FORCED_FLAG<<6) +#define FLAG_p (FORCED_FLAG<<7) +#define FLAG_O (FORCED_FLAG<<8) +#define FLAG_m (FORCED_FLAG<<9) +#define FLAG_s (FORCED_FLAG<<10) +#define FLAG_b (FORCED_FLAG<<11) +#define FLAG_R (FORCED_FLAG<<12) +#define FLAG_l (FORCED_FLAG<<13) +#endif + +#ifdef FOR_tac +#ifndef TT +#define TT this.tac +#endif +#endif + +#ifdef FOR_tail +#ifndef TT +#define TT this.tail +#endif +#define FLAG_n (1<<0) +#define FLAG_c (1<<1) +#define FLAG_f (1<<2) +#endif + +#ifdef FOR_tar +#ifndef TT +#define TT this.tar +#endif +#define FLAG_a (1<<0) +#define FLAG_f (1<<1) +#define FLAG_C (1<<2) +#define FLAG_T (1<<3) +#define FLAG_X (1<<4) +#define FLAG_m (1<<5) +#define FLAG_O (1<<6) +#define FLAG_S (1<<7) +#define FLAG_z (1<<8) +#define FLAG_j (1<<9) +#define FLAG_J (1<<10) +#define FLAG_v (1<<11) +#define FLAG_t (1<<12) +#define FLAG_x (1<<13) +#define FLAG_h (1<<14) +#define FLAG_c (1<<15) +#define FLAG_k (1<<16) +#define FLAG_p (1<<17) +#define FLAG_o (1<<18) +#define FLAG_to_command (1<<19) +#define FLAG_owner (1<<20) +#define FLAG_group (1<<21) +#define FLAG_mtime (1<<22) +#define FLAG_mode (1<<23) +#define FLAG_exclude (1<<24) +#define FLAG_overwrite (1<<25) +#define FLAG_no_same_permissions (1<<26) +#define FLAG_numeric_owner (1<<27) +#define FLAG_no_recursion (1<<28) +#define FLAG_full_time (1<<29) +#define FLAG_restrict (1<<30) +#endif + +#ifdef FOR_taskset +#ifndef TT +#define TT this.taskset +#endif +#define FLAG_a (1<<0) +#define FLAG_p (1<<1) +#endif + +#ifdef FOR_tcpsvd +#ifndef TT +#define TT this.tcpsvd +#endif +#define FLAG_v (FORCED_FLAG<<0) +#define FLAG_E (FORCED_FLAG<<1) +#define FLAG_h (FORCED_FLAG<<2) +#define FLAG_l (FORCED_FLAG<<3) +#define FLAG_u (FORCED_FLAG<<4) +#define FLAG_b (FORCED_FLAG<<5) +#define FLAG_C (FORCED_FLAG<<6) +#define FLAG_c (FORCED_FLAG<<7) +#endif + +#ifdef FOR_tee +#ifndef TT +#define TT this.tee +#endif +#define FLAG_a (1<<0) +#define FLAG_i (1<<1) +#endif + +#ifdef FOR_telnet +#ifndef TT +#define TT this.telnet +#endif +#endif + +#ifdef FOR_telnetd +#ifndef TT +#define TT this.telnetd +#endif +#define FLAG_i (FORCED_FLAG<<0) +#define FLAG_K (FORCED_FLAG<<1) +#define FLAG_S (FORCED_FLAG<<2) +#define FLAG_F (FORCED_FLAG<<3) +#define FLAG_l (FORCED_FLAG<<4) +#define FLAG_f (FORCED_FLAG<<5) +#define FLAG_p (FORCED_FLAG<<6) +#define FLAG_b (FORCED_FLAG<<7) +#define FLAG_w (FORCED_FLAG<<8) +#endif + +#ifdef FOR_test +#ifndef TT +#define TT this.test +#endif +#endif + +#ifdef FOR_tftp +#ifndef TT +#define TT this.tftp +#endif +#define FLAG_p (FORCED_FLAG<<0) +#define FLAG_g (FORCED_FLAG<<1) +#define FLAG_l (FORCED_FLAG<<2) +#define FLAG_r (FORCED_FLAG<<3) +#define FLAG_b (FORCED_FLAG<<4) +#endif + +#ifdef FOR_tftpd +#ifndef TT +#define TT this.tftpd +#endif +#define FLAG_l (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#define FLAG_r (FORCED_FLAG<<3) +#endif + +#ifdef FOR_time +#ifndef TT +#define TT this.time +#endif +#define FLAG_v (1<<0) +#define FLAG_p (1<<1) +#endif + +#ifdef FOR_timeout +#ifndef TT +#define TT this.timeout +#endif +#define FLAG_s (1<<0) +#define FLAG_k (1<<1) +#define FLAG_v (1<<2) +#define FLAG_preserve_status (1<<3) +#define FLAG_foreground (1<<4) +#endif + +#ifdef FOR_top +#ifndef TT +#define TT this.top +#endif +#define FLAG_q (1<<0) +#define FLAG_b (1<<1) +#define FLAG_n (1<<2) +#define FLAG_m (1<<3) +#define FLAG_d (1<<4) +#define FLAG_s (1<<5) +#define FLAG_u (1<<6) +#define FLAG_p (1<<7) +#define FLAG_o (1<<8) +#define FLAG_k (1<<9) +#define FLAG_H (1<<10) +#define FLAG_O (1<<11) +#endif + +#ifdef FOR_touch +#ifndef TT +#define TT this.touch +#endif +#define FLAG_h (1<<0) +#define FLAG_t (1<<1) +#define FLAG_r (1<<2) +#define FLAG_m (1<<3) +#define FLAG_f (1<<4) +#define FLAG_d (1<<5) +#define FLAG_c (1<<6) +#define FLAG_a (1<<7) +#endif + +#ifdef FOR_toybox +#ifndef TT +#define TT this.toybox +#endif +#endif + +#ifdef FOR_tr +#ifndef TT +#define TT this.tr +#endif +#define FLAG_d (1<<0) +#define FLAG_s (1<<1) +#define FLAG_c (1<<2) +#define FLAG_C (1<<3) +#endif + +#ifdef FOR_traceroute +#ifndef TT +#define TT this.traceroute +#endif +#define FLAG_4 (1<<0) +#define FLAG_6 (1<<1) +#define FLAG_F (1<<2) +#define FLAG_U (1<<3) +#define FLAG_I (1<<4) +#define FLAG_l (1<<5) +#define FLAG_d (1<<6) +#define FLAG_n (1<<7) +#define FLAG_v (1<<8) +#define FLAG_r (1<<9) +#define FLAG_m (1<<10) +#define FLAG_p (1<<11) +#define FLAG_q (1<<12) +#define FLAG_s (1<<13) +#define FLAG_t (1<<14) +#define FLAG_w (1<<15) +#define FLAG_g (1<<16) +#define FLAG_z (1<<17) +#define FLAG_f (1<<18) +#define FLAG_i (1<<19) +#endif + +#ifdef FOR_true +#ifndef TT +#define TT this.true +#endif +#endif + +#ifdef FOR_truncate +#ifndef TT +#define TT this.truncate +#endif +#define FLAG_c (1<<0) +#define FLAG_s (1<<1) +#endif + +#ifdef FOR_tty +#ifndef TT +#define TT this.tty +#endif +#define FLAG_s (1<<0) +#endif + +#ifdef FOR_tunctl +#ifndef TT +#define TT this.tunctl +#endif +#define FLAG_T (1<<0) +#define FLAG_u (1<<1) +#define FLAG_d (1<<2) +#define FLAG_t (1<<3) +#endif + +#ifdef FOR_ulimit +#ifndef TT +#define TT this.ulimit +#endif +#define FLAG_c (1<<0) +#define FLAG_d (1<<1) +#define FLAG_e (1<<2) +#define FLAG_f (1<<3) +#define FLAG_i (1<<4) +#define FLAG_l (1<<5) +#define FLAG_m (1<<6) +#define FLAG_n (1<<7) +#define FLAG_p (1<<8) +#define FLAG_q (1<<9) +#define FLAG_R (1<<10) +#define FLAG_r (1<<11) +#define FLAG_s (1<<12) +#define FLAG_t (1<<13) +#define FLAG_u (1<<14) +#define FLAG_v (1<<15) +#define FLAG_a (1<<16) +#define FLAG_H (1<<17) +#define FLAG_S (1<<18) +#define FLAG_P (1<<19) +#endif + +#ifdef FOR_umount +#ifndef TT +#define TT this.umount +#endif +#define FLAG_v (1<<0) +#define FLAG_t (1<<1) +#define FLAG_a (1<<2) +#define FLAG_r (1<<3) +#define FLAG_l (1<<4) +#define FLAG_f (1<<5) +#define FLAG_D (1<<6) +#define FLAG_d (1<<7) +#define FLAG_n (1<<8) +#define FLAG_c (1<<9) +#endif + +#ifdef FOR_uname +#ifndef TT +#define TT this.uname +#endif +#define FLAG_s (1<<0) +#define FLAG_n (1<<1) +#define FLAG_r (1<<2) +#define FLAG_v (1<<3) +#define FLAG_m (1<<4) +#define FLAG_a (1<<5) +#define FLAG_o (1<<6) +#endif + +#ifdef FOR_uniq +#ifndef TT +#define TT this.uniq +#endif +#define FLAG_u (1<<0) +#define FLAG_d (1<<1) +#define FLAG_c (1<<2) +#define FLAG_i (1<<3) +#define FLAG_z (1<<4) +#define FLAG_w (1<<5) +#define FLAG_s (1<<6) +#define FLAG_f (1<<7) +#endif + +#ifdef FOR_unix2dos +#ifndef TT +#define TT this.unix2dos +#endif +#endif + +#ifdef FOR_unlink +#ifndef TT +#define TT this.unlink +#endif +#endif + +#ifdef FOR_unshare +#ifndef TT +#define TT this.unshare +#endif +#define FLAG_U (1<<0) +#define FLAG_u (1<<1) +#define FLAG_p (1<<2) +#define FLAG_n (1<<3) +#define FLAG_m (1<<4) +#define FLAG_i (1<<5) +#define FLAG_r (1<<6) +#define FLAG_f (1<<7) +#endif + +#ifdef FOR_uptime +#ifndef TT +#define TT this.uptime +#endif +#define FLAG_s (1<<0) +#define FLAG_p (1<<1) +#endif + +#ifdef FOR_useradd +#ifndef TT +#define TT this.useradd +#endif +#define FLAG_H (FORCED_FLAG<<0) +#define FLAG_D (FORCED_FLAG<<1) +#define FLAG_S (FORCED_FLAG<<2) +#define FLAG_h (FORCED_FLAG<<3) +#define FLAG_g (FORCED_FLAG<<4) +#define FLAG_s (FORCED_FLAG<<5) +#define FLAG_G (FORCED_FLAG<<6) +#define FLAG_u (FORCED_FLAG<<7) +#endif + +#ifdef FOR_userdel +#ifndef TT +#define TT this.userdel +#endif +#define FLAG_r (FORCED_FLAG<<0) +#endif + +#ifdef FOR_usleep +#ifndef TT +#define TT this.usleep +#endif +#endif + +#ifdef FOR_uudecode +#ifndef TT +#define TT this.uudecode +#endif +#define FLAG_o (1<<0) +#endif + +#ifdef FOR_uuencode +#ifndef TT +#define TT this.uuencode +#endif +#define FLAG_m (1<<0) +#endif + +#ifdef FOR_uuidgen +#ifndef TT +#define TT this.uuidgen +#endif +#define FLAG_r (1<<0) +#endif + +#ifdef FOR_vconfig +#ifndef TT +#define TT this.vconfig +#endif +#endif + +#ifdef FOR_vi +#ifndef TT +#define TT this.vi +#endif +#define FLAG_s (1<<0) +#endif + +#ifdef FOR_vmstat +#ifndef TT +#define TT this.vmstat +#endif +#define FLAG_n (1<<0) +#endif + +#ifdef FOR_w +#ifndef TT +#define TT this.w +#endif +#endif + +#ifdef FOR_watch +#ifndef TT +#define TT this.watch +#endif +#define FLAG_x (1<<0) +#define FLAG_b (1<<1) +#define FLAG_e (1<<2) +#define FLAG_t (1<<3) +#define FLAG_n (1<<4) +#endif + +#ifdef FOR_wc +#ifndef TT +#define TT this.wc +#endif +#define FLAG_l (1<<0) +#define FLAG_w (1<<1) +#define FLAG_c (1<<2) +#define FLAG_m (1<<3) +#endif + +#ifdef FOR_wget +#ifndef TT +#define TT this.wget +#endif +#define FLAG_O (FORCED_FLAG<<0) +#define FLAG_no_check_certificate (FORCED_FLAG<<1) +#endif + +#ifdef FOR_which +#ifndef TT +#define TT this.which +#endif +#define FLAG_a (1<<0) +#endif + +#ifdef FOR_who +#ifndef TT +#define TT this.who +#endif +#define FLAG_a (FORCED_FLAG<<0) +#endif + +#ifdef FOR_xargs +#ifndef TT +#define TT this.xargs +#endif +#define FLAG_0 (1<<0) +#define FLAG_s (1<<1) +#define FLAG_n (1<<2) +#define FLAG_r (1<<3) +#define FLAG_t (1<<4) +#define FLAG_p (1<<5) +#define FLAG_o (1<<6) +#define FLAG_P (1<<7) +#define FLAG_E (1<<8) +#endif + +#ifdef FOR_xxd +#ifndef TT +#define TT this.xxd +#endif +#define FLAG_s (1<<0) +#define FLAG_r (1<<1) +#define FLAG_p (1<<2) +#define FLAG_i (1<<3) +#define FLAG_g (1<<4) +#define FLAG_o (1<<5) +#define FLAG_l (1<<6) +#define FLAG_c (1<<7) +#endif + +#ifdef FOR_xzcat +#ifndef TT +#define TT this.xzcat +#endif +#endif + +#ifdef FOR_yes +#ifndef TT +#define TT this.yes +#endif +#endif + +#ifdef FOR_zcat +#ifndef TT +#define TT this.zcat +#endif +#define FLAG_9 (1<<0) +#define FLAG_8 (1<<1) +#define FLAG_7 (1<<2) +#define FLAG_6 (1<<3) +#define FLAG_5 (1<<4) +#define FLAG_4 (1<<5) +#define FLAG_3 (1<<6) +#define FLAG_2 (1<<7) +#define FLAG_1 (1<<8) +#define FLAG_k (1<<9) +#define FLAG_f (1<<10) +#define FLAG_d (1<<11) +#define FLAG_c (1<<12) +#endif + diff --git a/aosp/external/toybox/android/device/generated/globals.h b/aosp/external/toybox/android/device/generated/globals.h new file mode 100644 index 0000000000000000000000000000000000000000..4a201bf0354b587fc3eae3f1e7a353d2aaf7dbe1 --- /dev/null +++ b/aosp/external/toybox/android/device/generated/globals.h @@ -0,0 +1,1664 @@ +// toys/android/log.c + +struct log_data { + char *t, *p; +}; + +// toys/example/demo_number.c + +struct demo_number_data { + long D; +}; + +// toys/example/hello.c + +struct hello_data { + int unused; +}; + +// toys/example/skeleton.c + +struct skeleton_data { + union { + struct { + char *b; + long c; + struct arg_list *d; + long e; + char *also, *blubber; + } s; + struct { + long b; + } a; + }; + + int more_globals; +}; + +// toys/lsb/dmesg.c + +struct dmesg_data { + long n, s; + + int use_color; + time_t tea; +}; + +// toys/lsb/gzip.c + +struct gzip_data { + int level; +}; + +// toys/lsb/hostname.c + +struct hostname_data { + char *F; +}; + +// toys/lsb/killall.c + +struct killall_data { + char *s; + + int signum; + pid_t cur_pid; + char **names; + short *err; + struct int_list { struct int_list *next; int val; } *pids; +}; + +// toys/lsb/md5sum.c + +struct md5sum_data { + int sawline; + + // Crypto variables blanked after summing + unsigned state[5]; + unsigned oldstate[5]; + uint64_t count; + union { + char c[64]; + unsigned i[16]; + } buffer; +}; + +// toys/lsb/mknod.c + +struct mknod_data { + char *Z, *m; +}; + +// toys/lsb/mktemp.c + +struct mktemp_data { + char *p, *tmpdir; +}; + +// toys/lsb/mount.c + +struct mount_data { + struct arg_list *optlist; + char *type; + char *bigO; + + unsigned long flags; + char *opts; + int okuser; +}; + +// toys/lsb/passwd.c + +struct passwd_data { + char *a; +}; + +// toys/lsb/pidof.c + +struct pidof_data { + char *omit; +}; + +// toys/lsb/seq.c + +struct seq_data { + char *s, *f; + + int precision; +}; + +// toys/lsb/su.c + +struct su_data { + char *s; + char *c; +}; + +// toys/lsb/umount.c + +struct umount_data { + struct arg_list *t; + + char *types; +}; + +// toys/net/ftpget.c + +struct ftpget_data { + char *u, *p, *P; + + int fd; +}; + +// toys/net/ifconfig.c + +struct ifconfig_data { + int sockfd; +}; + +// toys/net/microcom.c + +struct microcom_data { + char *s; + + int fd; + struct termios original_stdin_state, original_fd_state; +}; + +// toys/net/netcat.c + +struct netcat_data { + char *f, *s; + long q, p, W, w; +}; + +// toys/net/netstat.c + +struct netstat_data { + struct num_cache *inodes; + int wpad; +};; + +// toys/net/ping.c + +struct ping_data { + char *I; + long w, W, i, s, c, t, m; + + struct sockaddr *sa; + int sock; + unsigned long sent, recv, fugit, min, max; +}; + +// toys/net/sntp.c + +struct sntp_data { + long r, t; + char *p, *m, *M; +}; + +// toys/net/tunctl.c + +struct tunctl_data { + char *u; +}; + +// toys/other/acpi.c + +struct acpi_data { + int ac, bat, therm, cool; + char *cpath; +}; + +// toys/other/base64.c + +struct base64_data { + long w; + + unsigned total; +}; + +// toys/other/blkid.c + +struct blkid_data { + struct arg_list *s; +}; + +// toys/other/blockdev.c + +struct blockdev_data { + long setbsz, setra; +}; + +// toys/other/chrt.c + +struct chrt_data { + long p; +}; + +// toys/other/dos2unix.c + +struct dos2unix_data { + char *tempfile; +}; + +// toys/other/fallocate.c + +struct fallocate_data { + long o, l; +}; + +// toys/other/fmt.c + +struct fmt_data { + int width; + + int level, pos; +}; + +// toys/other/free.c + +struct free_data { + unsigned bits; + unsigned long long units; + char *buf; +}; + +// toys/other/hexedit.c + +struct hexedit_data { + char *data; + long long len, base; + int numlen, undo, undolen; + unsigned height; +}; + +// toys/other/hwclock.c + +struct hwclock_data { + char *f; + + int utc; +}; + +// toys/other/ionice.c + +struct ionice_data { + long p, n, c; +}; + +// toys/other/login.c + +struct login_data { + char *h, *f; + + int login_timeout, login_fail_timeout; +}; + +// toys/other/losetup.c + +struct losetup_data { + char *j; + long o, S; + + int openflags; + dev_t jdev; + ino_t jino; + char *dir; +}; + +// toys/other/lsattr.c + +struct lsattr_data { + long v; + long p; + + long add, rm, set; + // !add and !rm tell us whether they were used, but `chattr =` is meaningful. + int have_set; +}; + +// toys/other/lspci.c + +struct lspci_data { + char *i; + long n; + + FILE *db; +}; + +// toys/other/makedevs.c + +struct makedevs_data { + char *d; +}; + +// toys/other/mix.c + +struct mix_data { + long r, l; + char *d, *c; +}; + +// toys/other/mkpasswd.c + +struct mkpasswd_data { + long P; + char *m, *S; +}; + +// toys/other/mkswap.c + +struct mkswap_data { + char *L; +}; + +// toys/other/modinfo.c + +struct modinfo_data { + char *F, *k, *b; + + long mod; + int count; +}; + +// toys/other/nsenter.c + +struct nsenter_data { + char *Uupnmi[6]; + long t; +}; + +// toys/other/oneit.c + +struct oneit_data { + char *c; +}; + +// toys/other/setfattr.c + +struct setfattr_data { + char *x, *v, *n; +}; + +// toys/other/shred.c + +struct shred_data { + long o, n, s; +}; + +// toys/other/stat.c + +struct stat_data { + char *c; + + union { + struct stat st; + struct statfs sf; + } stat; + char *file, *pattern; + int patlen; +}; + +// toys/other/swapon.c + +struct swapon_data { + long p; +}; + +// toys/other/switch_root.c + +struct switch_root_data { + char *c; + + dev_t rootdev; +}; + +// toys/other/tac.c + +struct tac_data { + struct double_list *dl; +}; + +// toys/other/timeout.c + +struct timeout_data { + char *s, *k; + + int nextsig; + pid_t pid; + struct timeval ktv; + struct itimerval itv; +}; + +// toys/other/truncate.c + +struct truncate_data { + char *s; + + long size; + int type; +}; + +// toys/other/watch.c + +struct watch_data { + int n; + + pid_t pid, oldpid; +}; + +// toys/other/xxd.c + +struct xxd_data { + long s, g, o, l, c; +}; + +// toys/pending/arp.c + +struct arp_data { + char *hw_type; + char *af_type_A; + char *af_type_p; + char *interface; + + int sockfd; + char *device; +}; + +// toys/pending/arping.c + +struct arping_data { + long count; + unsigned long time_out; + char *iface; + char *src_ip; + + int sockfd; + unsigned long start, end; + unsigned sent_at, sent_nr, rcvd_nr, brd_sent, rcvd_req, brd_rcv, + unicast_flag; +}; + +// toys/pending/bc.c + +struct bc_data { + // This actually needs to be a BcVm*, but the toybox build + // system complains if I make it so. Instead, we'll just cast. + char *vm; + + size_t nchars; + char *file, sig, max_ibase; + uint16_t line_len; +}; + +// toys/pending/bootchartd.c + +struct bootchartd_data { + char buf[32]; + long smpl_period_usec; + int proc_accounting; + int is_login; + + pid_t cur_pid; +}; + +// toys/pending/brctl.c + +struct brctl_data { + int sockfd; +}; + +// toys/pending/crond.c + +struct crond_data { + char *crontabs_dir; + char *logfile; + int loglevel_d; + int loglevel; + + time_t crontabs_dir_mtime; + uint8_t flagd; +}; + +// toys/pending/crontab.c + +struct crontab_data { + char *user; + char *cdir; +}; + +// toys/pending/dd.c + +struct dd_data { + int show_xfer, show_records; + unsigned long long bytes, c_count, in_full, in_part, out_full, out_part; + struct timeval start; + struct { + char *name; + int fd; + unsigned char *buff, *bp; + long sz, count; + unsigned long long offset; + } in, out; + unsigned conv, iflag, oflag; +};; + +// toys/pending/dhcp.c + +struct dhcp_data { + char *iface; + char *pidfile; + char *script; + long retries; + long timeout; + long tryagain; + struct arg_list *req_opt; + char *req_ip; + struct arg_list *pkt_opt; + char *fdn_name; + char *hostname; + char *vendor_cls; +}; + +// toys/pending/dhcp6.c + +struct dhcp6_data { + char *interface_name, *pidfile, *script; + long retry, timeout, errortimeout; + char *req_ip; + int length, state, request_length, sock, sock1, status, retval, retries; + struct timeval tv; + uint8_t transction_id[3]; + struct sockaddr_in6 input_socket6; +}; + +// toys/pending/dhcpd.c + +struct dhcpd_data { + char *iface; + long port; +};; + +// toys/pending/diff.c + +struct diff_data { + long ct; + char *start; + struct arg_list *L_list; + + int dir_num, size, is_binary, status, change, len[2]; + int *offset[2]; + struct stat st[2]; +}; + +// toys/pending/dumpleases.c + +struct dumpleases_data { + char *file; +}; + +// toys/pending/expr.c + +struct expr_data { + char **tok; // current token, not on the stack since recursive calls mutate it + + char *refree; +}; + +// toys/pending/fdisk.c + +struct fdisk_data { + long sect_sz; + long sectors; + long heads; + long cylinders; +}; + +// toys/pending/fold.c + +struct fold_data { + int width; +}; + +// toys/pending/fsck.c + +struct fsck_data { + int fd_num; + char *t_list; + + struct double_list *devices; + char *arr_flag; + char **arr_type; + int negate; + int sum_status; + int nr_run; + int sig_num; + long max_nr_run; +}; + +// toys/pending/getfattr.c + +struct getfattr_data { + char *n; +}; + +// toys/pending/getopt.c + +struct getopt_data { + struct arg_list *l; + char *o, *n; +}; + +// toys/pending/getty.c + +struct getty_data { + char *issue_str; + char *login_str; + char *init_str; + char *host_str; + long timeout; + + char *tty_name; + int speeds[20]; + int sc; + struct termios termios; + char buff[128]; +}; + +// toys/pending/groupadd.c + +struct groupadd_data { + long gid; +}; + +// toys/pending/host.c + +struct host_data { + char *type_str; +}; + +// toys/pending/ip.c + +struct ip_data { + char stats, singleline, flush, *filter_dev, gbuf[8192]; + int sockfd, connected, from_ok, route_cmd; + int8_t addressfamily, is_addr; +}; + +// toys/pending/ipcrm.c + +struct ipcrm_data { + struct arg_list *qkey; + struct arg_list *qid; + struct arg_list *skey; + struct arg_list *sid; + struct arg_list *mkey; + struct arg_list *mid; +}; + +// toys/pending/ipcs.c + +struct ipcs_data { + int id; +}; + +// toys/pending/klogd.c + +struct klogd_data { + long level; + + int fd; +}; + +// toys/pending/last.c + +struct last_data { + char *file; + + struct arg_list *list; +}; + +// toys/pending/lsof.c + +struct lsof_data { + struct arg_list *p; + + struct stat *sought_files; + struct double_list *all_sockets, *files; + int last_shown_pid, shown_header; +}; + +// toys/pending/man.c + +struct man_data { + char *M, *k; + + char any, cell, ex, *f, k_done, *line, *m, **sct, **scts, **sufs; + regex_t reg; +}; + +// toys/pending/mke2fs.c + +struct mke2fs_data { + // Command line arguments. + long blocksize; + long bytes_per_inode; + long inodes; // Total inodes in filesystem. + long reserved_percent; // Integer precent of space to reserve for root. + char *gendir; // Where to read dirtree from. + + // Internal data. + struct dirtree *dt; // Tree of files to copy into the new filesystem. + unsigned treeblocks; // Blocks used by dt + unsigned treeinodes; // Inodes used by dt + + unsigned blocks; // Total blocks in the filesystem. + unsigned freeblocks; // Free blocks in the filesystem. + unsigned inodespg; // Inodes per group + unsigned groups; // Total number of block groups. + unsigned blockbits; // Bits per block. (Also blocks per group.) + + // For gene2fs + unsigned nextblock; // Next data block to allocate + unsigned nextgroup; // Next group we'll be allocating from + int fsfd; // File descriptor of filesystem (to output to). +}; + +// toys/pending/modprobe.c + +struct modprobe_data { + struct arg_list *dirs; + + struct arg_list *probes; + struct arg_list *dbase[256]; + char *cmdopts; + int nudeps; + uint8_t symreq; +}; + +// toys/pending/more.c + +struct more_data { + struct termios inf; + int cin_fd; +}; + +// toys/pending/openvt.c + +struct openvt_data { + unsigned long vt_num; +}; + +// toys/pending/readelf.c + +struct readelf_data { + char *x, *p; + + char *elf, *shstrtab, *f; + long long shoff, phoff, size; + int bits, shnum, shentsize, phentsize; + int64_t (*elf_int)(void *ptr, unsigned size); +}; + +// toys/pending/route.c + +struct route_data { + char *family; +}; + +// toys/pending/sh.c + +struct sh_data { + char *c; + + long lineno; + char **locals, *subshell_env; + struct double_list functions; + unsigned options, jobcnt, loc_ro, loc_magic; + int hfd; // next high filehandle (>= 10) + + // Running jobs. + struct sh_job { + struct sh_job *next, *prev; + unsigned jobno; + + // Every pipeline has at least one set of arguments or it's Not A Thing + struct sh_arg { + char **v; + int c; + } pipeline; + + // null terminated array of running processes in pipeline + struct sh_process { + struct sh_process *next, *prev; + struct arg_list *delete; // expanded strings + int *urd, envlen, pid, exit; // undo redirects, child PID, exit status + struct sh_arg arg; + } *procs, *proc; + } *jobs, *job; +}; + +// toys/pending/stty.c + +struct stty_data { + char *device; + + int fd, col; + unsigned output_cols; +}; + +// toys/pending/sulogin.c + +struct sulogin_data { + long timeout; + struct termios crntio; +}; + +// toys/pending/syslogd.c + +struct syslogd_data { + char *socket; + char *config_file; + char *unix_socket; + char *logfile; + long interval; + long rot_size; + long rot_count; + char *remote_log; + long log_prio; + + struct unsocks *lsocks; // list of listen sockets + struct logfile *lfiles; // list of write logfiles + int sigfd[2]; +}; + +// toys/pending/tcpsvd.c + +struct tcpsvd_data { + char *name; + char *user; + long bn; + char *nmsg; + long cn; + + int maxc; + int count_all; + int udp; +}; + +// toys/pending/telnet.c + +struct telnet_data { + int port; + int sfd; + char buff[128]; + int pbuff; + char iac[256]; + int piac; + char *ttype; + struct termios def_term; + struct termios raw_term; + uint8_t term_ok; + uint8_t term_mode; + uint8_t flags; + unsigned win_width; + unsigned win_height; +}; + +// toys/pending/telnetd.c + +struct telnetd_data { + char *login_path; + char *issue_path; + int port; + char *host_addr; + long w_sec; + + int gmax_fd; + pid_t fork_pid; +}; + +// toys/pending/tftp.c + +struct tftp_data { + char *local_file; + char *remote_file; + long block_size; + + struct sockaddr_storage inaddr; + int af; +}; + +// toys/pending/tftpd.c + +struct tftpd_data { + char *user; + + long sfd; + struct passwd *pw; +}; + +// toys/pending/tr.c + +struct tr_data { + short map[256]; //map of chars + int len1, len2; +}; + +// toys/pending/traceroute.c + +struct traceroute_data { + long max_ttl; + long port; + long ttl_probes; + char *src_ip; + long tos; + long wait_time; + struct arg_list *loose_source; + long pause_time; + long first_ttl; + char *iface; + + uint32_t gw_list[9]; + int recv_sock; + int snd_sock; + unsigned msg_len; + char *packet; + uint32_t ident; + int istraceroute6; +}; + +// toys/pending/useradd.c + +struct useradd_data { + char *dir; + char *gecos; + char *shell; + char *u_grp; + long uid; + + long gid; +}; + +// toys/pending/vi.c + +struct vi_data { + char *s; + int cur_col; + int cur_row; + int scr_row; + int drawn_row; + int drawn_col; + unsigned screen_height; + unsigned screen_width; + int vi_mode; + int count0; + int count1; + int vi_mov_flag; + int modified; + char vi_reg; + char *last_search; + int tabstop; + int list; + struct str_line { + int alloc; + int len; + char *data; + } *il; + size_t screen; //offset in slices must be higher than cursor + size_t cursor; //offset in slices + //yank buffer + struct yank_buf { + char reg; + int alloc; + char* data; + } yank; + +// mem_block contains RO data that is either original file as mmap +// or heap allocated inserted data +// +// +// + struct block_list { + struct block_list *next, *prev; + struct mem_block { + size_t size; + size_t len; + enum alloc_flag { + MMAP, //can be munmap() before exit() + HEAP, //can be free() before exit() + STACK, //global or stack perhaps toybuf + } alloc; + const char *data; + } *node; + } *text; + +// slices do not contain actual allocated data but slices of data in mem_block +// when file is first opened it has only one slice. +// after inserting data into middle new mem_block is allocated for insert data +// and 3 slices are created, where first and last slice are pointing to original +// mem_block with offsets, and middle slice is pointing to newly allocated block +// When deleting, data is not freed but mem_blocks are sliced more such way that +// deleted data left between 2 slices + struct slice_list { + struct slice_list *next, *prev; + struct slice { + size_t len; + const char *data; + } *node; + } *slices; + + size_t filesize; + int fd; //file_handle + +}; + +// toys/pending/wget.c + +struct wget_data { + char *filename; +}; + +// toys/posix/basename.c + +struct basename_data { + char *s; +}; + +// toys/posix/cal.c + +struct cal_data { + struct tm *now; +}; + +// toys/posix/chgrp.c + +struct chgrp_data { + uid_t owner; + gid_t group; + char *owner_name, *group_name; + int symfollow; +}; + +// toys/posix/chmod.c + +struct chmod_data { + char *mode; +}; + +// toys/posix/cksum.c + +struct cksum_data { + unsigned crc_table[256]; +}; + +// toys/posix/cmp.c + +struct cmp_data { + int fd; + char *name; +}; + +// toys/posix/cp.c + +struct cp_data { + union { + // install's options + struct { + char *g, *o, *m; + } i; + // cp's options + struct { + char *preserve; + } c; + }; + + char *destname; + struct stat top; + int (*callback)(struct dirtree *try); + uid_t uid; + gid_t gid; + int pflags; +}; + +// toys/posix/cpio.c + +struct cpio_data { + char *F, *p, *H; +}; + +// toys/posix/cut.c + +struct cut_data { + char *d, *O; + struct arg_list *select[5]; // we treat them the same, so loop through + + int pairs; + regex_t reg; +}; + +// toys/posix/date.c + +struct date_data { + char *r, *D, *d; + + unsigned nano; +}; + +// toys/posix/df.c + +struct df_data { + struct arg_list *t; + + long units; + int column_widths[5]; + int header_shown; +}; + +// toys/posix/du.c + +struct du_data { + long d; + + unsigned long depth, total; + dev_t st_dev; + void *inodes; +}; + +// toys/posix/env.c + +struct env_data { + struct arg_list *u; +};; + +// toys/posix/expand.c + +struct expand_data { + struct arg_list *t; + + unsigned tabcount, *tab; +}; + +// toys/posix/file.c + +struct file_data { + int max_name_len; + + off_t len; +}; + +// toys/posix/find.c + +struct find_data { + char **filter; + struct double_list *argdata; + int topdir, xdev, depth; + time_t now; + long max_bytes; + char *start; +}; + +// toys/posix/grep.c + +struct grep_data { + long m, A, B, C; + struct arg_list *f, *e, *M, *S, *exclude_dir; + char *color; + + char *purple, *cyan, *red, *green, *grey; + struct double_list *reg; + char indelim, outdelim; + int found, tried; +}; + +// toys/posix/head.c + +struct head_data { + long c, n; + + int file_no; +}; + +// toys/posix/iconv.c + +struct iconv_data { + char *f, *t; + + void *ic; +}; + +// toys/posix/id.c + +struct id_data { + int is_groups; +}; + +// toys/posix/kill.c + +struct kill_data { + char *s; + struct arg_list *o; +}; + +// toys/posix/ln.c + +struct ln_data { + char *t; +}; + +// toys/posix/logger.c + +struct logger_data { + char *p, *t; +}; + +// toys/posix/ls.c + +struct ls_data { + long w; + long l; + char *color; + + struct dirtree *files, *singledir; + unsigned screen_width; + int nl_title; + char *escmore; +}; + +// toys/posix/mkdir.c + +struct mkdir_data { + char *m, *Z; +}; + +// toys/posix/mkfifo.c + +struct mkfifo_data { + char *m; + char *Z; + + mode_t mode; +}; + +// toys/posix/nice.c + +struct nice_data { + long n; +}; + +// toys/posix/nl.c + +struct nl_data { + char *s, *n, *b; + long w, l, v; + + // Count of consecutive blank lines for -l has to persist between files + long lcount; + long slen; +}; + +// toys/posix/od.c + +struct od_data { + struct arg_list *t; + char *A; + long N, w, j; + + int address_idx; + unsigned types, leftover, star; + char *buf; // Points to buffers[0] or buffers[1]. + char *bufs[2]; // Used to detect duplicate lines. + off_t pos; +}; + +// toys/posix/paste.c + +struct paste_data { + char *d; + + int files; +}; + +// toys/posix/patch.c + +struct patch_data { + char *i, *d; + long p, g, F; + + void *current_hunk; + long oldline, oldlen, newline, newlen, linenum, outnum; + int context, state, filein, fileout, filepatch, hunknum; + char *tempname; +}; + +// toys/posix/ps.c + +struct ps_data { + union { + struct { + struct arg_list *G, *g, *U, *u, *t, *s, *p, *O, *o, *P, *k; + } ps; + struct { + long n, m, d, s; + struct arg_list *u, *p, *o, *k, *O; + } top; + struct { + char *L; + struct arg_list *G, *g, *P, *s, *t, *U, *u; + char *d; + + void *regexes, *snapshot; + int signal; + pid_t self, match; + } pgrep; + }; + + struct ptr_len gg, GG, pp, PP, ss, tt, uu, UU; + struct dirtree *threadparent; + unsigned width, height; + dev_t tty; + void *fields, *kfields; + long long ticks, bits, time; + int kcount, forcek, sortpos; + int (*match_process)(long long *slot); + void (*show_process)(void *tb); +}; + +// toys/posix/renice.c + +struct renice_data { + long n; +}; + +// toys/posix/sed.c + +struct sed_data { + char *i; + struct arg_list *f, *e; + + // processed pattern list + struct double_list *pattern; + + char *nextline, *remember; + void *restart, *lastregex; + long nextlen, rememberlen, count; + int fdout, noeol; + unsigned xx; + char delim; +}; + +// toys/posix/sort.c + +struct sort_data { + char *t; + struct arg_list *k; + char *o, *T, S; + + void *key_list; + int linecount; + char **lines, *name; +}; + +// toys/posix/split.c + +struct split_data { + long l, b, a; + + char *outfile; +}; + +// toys/posix/strings.c + +struct strings_data { + long n; + char *t; +}; + +// toys/posix/tail.c + +struct tail_data { + long n, c; + + int file_no, last_fd; + struct xnotify *not; +}; + +// toys/posix/tar.c + +struct tar_data { + char *f, *C; + struct arg_list *T, *X; + char *to_command, *owner, *group, *mtime, *mode; + struct arg_list *exclude; + + struct double_list *incl, *excl, *seen; + struct string_list *dirs; + char *cwd; + int fd, ouid, ggid, hlc, warn, adev, aino, sparselen; + long long *sparse; + time_t mtt; + + // hardlinks seen so far (hlc many) + struct { + char *arg; + ino_t ino; + dev_t dev; + } *hlx; + + // Parsed information about a tar header. + struct tar_header { + char *name, *link_target, *uname, *gname; + long long size, ssize; + uid_t uid; + gid_t gid; + mode_t mode; + time_t mtime; + dev_t device; + } hdr; +}; + +// toys/posix/tee.c + +struct tee_data { + void *outputs; +}; + +// toys/posix/touch.c + +struct touch_data { + char *t, *r, *d; +}; + +// toys/posix/ulimit.c + +struct ulimit_data { + long P; +}; + +// toys/posix/uniq.c + +struct uniq_data { + long w, s, f; + + long repeats; +}; + +// toys/posix/uudecode.c + +struct uudecode_data { + char *o; +}; + +// toys/posix/wc.c + +struct wc_data { + unsigned long totals[4]; +}; + +// toys/posix/xargs.c + +struct xargs_data { + long s, n, P; + char *E; + + long entries, bytes; + char delim; + FILE *tty; +}; + +extern union global_union { + struct log_data log; + struct demo_number_data demo_number; + struct hello_data hello; + struct skeleton_data skeleton; + struct dmesg_data dmesg; + struct gzip_data gzip; + struct hostname_data hostname; + struct killall_data killall; + struct md5sum_data md5sum; + struct mknod_data mknod; + struct mktemp_data mktemp; + struct mount_data mount; + struct passwd_data passwd; + struct pidof_data pidof; + struct seq_data seq; + struct su_data su; + struct umount_data umount; + struct ftpget_data ftpget; + struct ifconfig_data ifconfig; + struct microcom_data microcom; + struct netcat_data netcat; + struct netstat_data netstat; + struct ping_data ping; + struct sntp_data sntp; + struct tunctl_data tunctl; + struct acpi_data acpi; + struct base64_data base64; + struct blkid_data blkid; + struct blockdev_data blockdev; + struct chrt_data chrt; + struct dos2unix_data dos2unix; + struct fallocate_data fallocate; + struct fmt_data fmt; + struct free_data free; + struct hexedit_data hexedit; + struct hwclock_data hwclock; + struct ionice_data ionice; + struct login_data login; + struct losetup_data losetup; + struct lsattr_data lsattr; + struct lspci_data lspci; + struct makedevs_data makedevs; + struct mix_data mix; + struct mkpasswd_data mkpasswd; + struct mkswap_data mkswap; + struct modinfo_data modinfo; + struct nsenter_data nsenter; + struct oneit_data oneit; + struct setfattr_data setfattr; + struct shred_data shred; + struct stat_data stat; + struct swapon_data swapon; + struct switch_root_data switch_root; + struct tac_data tac; + struct timeout_data timeout; + struct truncate_data truncate; + struct watch_data watch; + struct xxd_data xxd; + struct arp_data arp; + struct arping_data arping; + struct bc_data bc; + struct bootchartd_data bootchartd; + struct brctl_data brctl; + struct crond_data crond; + struct crontab_data crontab; + struct dd_data dd; + struct dhcp_data dhcp; + struct dhcp6_data dhcp6; + struct dhcpd_data dhcpd; + struct diff_data diff; + struct dumpleases_data dumpleases; + struct expr_data expr; + struct fdisk_data fdisk; + struct fold_data fold; + struct fsck_data fsck; + struct getfattr_data getfattr; + struct getopt_data getopt; + struct getty_data getty; + struct groupadd_data groupadd; + struct host_data host; + struct ip_data ip; + struct ipcrm_data ipcrm; + struct ipcs_data ipcs; + struct klogd_data klogd; + struct last_data last; + struct lsof_data lsof; + struct man_data man; + struct mke2fs_data mke2fs; + struct modprobe_data modprobe; + struct more_data more; + struct openvt_data openvt; + struct readelf_data readelf; + struct route_data route; + struct sh_data sh; + struct stty_data stty; + struct sulogin_data sulogin; + struct syslogd_data syslogd; + struct tcpsvd_data tcpsvd; + struct telnet_data telnet; + struct telnetd_data telnetd; + struct tftp_data tftp; + struct tftpd_data tftpd; + struct tr_data tr; + struct traceroute_data traceroute; + struct useradd_data useradd; + struct vi_data vi; + struct wget_data wget; + struct basename_data basename; + struct cal_data cal; + struct chgrp_data chgrp; + struct chmod_data chmod; + struct cksum_data cksum; + struct cmp_data cmp; + struct cp_data cp; + struct cpio_data cpio; + struct cut_data cut; + struct date_data date; + struct df_data df; + struct du_data du; + struct env_data env; + struct expand_data expand; + struct file_data file; + struct find_data find; + struct grep_data grep; + struct head_data head; + struct iconv_data iconv; + struct id_data id; + struct kill_data kill; + struct ln_data ln; + struct logger_data logger; + struct ls_data ls; + struct mkdir_data mkdir; + struct mkfifo_data mkfifo; + struct nice_data nice; + struct nl_data nl; + struct od_data od; + struct paste_data paste; + struct patch_data patch; + struct ps_data ps; + struct renice_data renice; + struct sed_data sed; + struct sort_data sort; + struct split_data split; + struct strings_data strings; + struct tail_data tail; + struct tar_data tar; + struct tee_data tee; + struct touch_data touch; + struct ulimit_data ulimit; + struct uniq_data uniq; + struct uudecode_data uudecode; + struct wc_data wc; + struct xargs_data xargs; +} this; diff --git a/aosp/external/toybox/android/device/generated/help.h b/aosp/external/toybox/android/device/generated/help.h new file mode 100644 index 0000000000000000000000000000000000000000..92e19c0c1f4a009f57e058fc4633ba5276f620bb --- /dev/null +++ b/aosp/external/toybox/android/device/generated/help.h @@ -0,0 +1,607 @@ +#define HELP_toybox_force_nommu "When using musl-libc on a nommu system, you'll need to say \"y\" here\nunless you used the patch in the mcm-buildall.sh script. You can also\nsay \"y\" here to test the nommu codepaths on an mmu system.\n\nA nommu system can't use fork(), it can only vfork() which suspends\nthe parent until the child calls exec() or exits. When a program\nneeds a second instance of itself to run specific code at the same\ntime as the parent, it must use a more complicated approach (such as\nexec(\"/proc/self/exe\") then pass data to the new child through a pipe)\nwhich is larger and slower, especially for things like toysh subshells\nthat need to duplicate a lot of internal state in the child process\nfork() gives you for free.\n\nLibraries like uclibc omit fork() on nommu systems, allowing\ncompile-time probes to select which codepath to use. But musl\nintentionally includes a broken version of fork() that always returns\n-ENOSYS on nommu systems, and goes out of its way to prevent any\ncross-compile compatible compile-time probes for a nommu system.\n(It doesn't even #define __MUSL__ in features.h.) Musl does this\ndespite the fact that a nommu system can't even run standard ELF\nbinaries (requiring specially packaged executables) because it wants\nto force every program to either include all nommu code in every\ninstance ever built, or drop nommu support altogether.\n\nBuilding a toolchain scripts/mcm-buildall.sh patches musl to fix this." + +#define HELP_toybox_uid_usr "When commands like useradd/groupadd allocate user IDs, start here." + +#define HELP_toybox_uid_sys "When commands like useradd/groupadd allocate system IDs, start here." + +#define HELP_toybox_pedantic_args "Check arguments for commands that have no arguments." + +#define HELP_toybox_debug "Enable extra checks for debugging purposes. All of them catch\nthings that can only go wrong at development time, not runtime." + +#define HELP_toybox_norecurse "When one toybox command calls another, usually it just calls the new\ncommand's main() function rather than searching the $PATH and calling\nexec on another file (which is much slower).\n\nThis disables that optimization, so toybox will run external commands\n even when it has a built-in version of that command. This requires\n toybox symlinks to be installed in the $PATH, or re-invoking the\n \"toybox\" multiplexer command by name." + +#define HELP_toybox_free "When a program exits, the operating system will clean up after it\n(free memory, close files, etc). To save size, toybox usually relies\non this behavior. If you're running toybox under a debugger or\nwithout a real OS (ala newlib+libgloss), enable this to make toybox\nclean up after itself." + +#define HELP_toybox_i18n "Support for UTF-8 character sets, and some locale support." + +#define HELP_toybox_help_dashdash "Support --help argument in all commands, even ones with a NULL\noptstring. (Use TOYFLAG_NOHELP to disable.) Produces the same output\nas \"help command\". --version shows toybox version." + +#define HELP_toybox_help "Include help text for each command." + +#define HELP_toybox_float "Include floating point support infrastructure and commands that\nrequire it." + +#define HELP_toybox_libz "Use libz for gz support." + +#define HELP_toybox_libcrypto "Use faster hash functions out of external -lcrypto library." + +#define HELP_toybox_smack "Include SMACK options in commands like ls for systems like Tizen." + +#define HELP_toybox_selinux "Include SELinux options in commands such as ls, and add\nSELinux-specific commands such as chcon to the Android menu." + +#define HELP_toybox_lsm_none "Don't try to achieve \"watertight\" by plugging the holes in a\ncollander, instead use conventional unix security (and possibly\nLinux Containers) for a simple straightforward system." + +#define HELP_toybox_suid "Support for the Set User ID bit, to install toybox suid root and drop\npermissions for commands which do not require root access. To use\nthis change ownership of the file to the root user and set the suid\nbit in the file permissions:\n\nchown root:root toybox; chmod +s toybox\n\nprompt \"Security Blanket\"\ndefault TOYBOX_LSM_NONE\nhelp\nSelect a Linux Security Module to complicate your system\nuntil you can't find holes in it." + +#define HELP_toybox "usage: toybox [--long | --help | --version | [command] [arguments...]]\n\nWith no arguments, shows available commands. First argument is\nname of a command to run, followed by any arguments to that command.\n\n--long Show path to each command\n\nTo install command symlinks with paths, try:\n for i in $(/bin/toybox --long); do ln -s /bin/toybox $i; done\nor all in one directory:\n for i in $(./toybox); do ln -s toybox $i; done; PATH=$PWD:$PATH\n\nMost toybox commands also understand the following arguments:\n\n--help Show command help (only)\n--version Show toybox version (only)\n\nThe filename \"-\" means stdin/stdout, and \"--\" stops argument parsing.\n\nNumerical arguments accept a single letter suffix for\nkilo, mega, giga, tera, peta, and exabytes, plus an additional\n\"d\" to indicate decimal 1000's instead of 1024.\n\nDurations can be decimal fractions and accept minute (\"m\"), hour (\"h\"),\nor day (\"d\") suffixes (so 0.1m = 6s)." + +#define HELP_setenforce "usage: setenforce [enforcing|permissive|1|0]\n\nSets whether SELinux is enforcing (1) or permissive (0)." + +#define HELP_sendevent "usage: sendevent DEVICE TYPE CODE VALUE\n\nSends a Linux input event." + +#define HELP_runcon "usage: runcon CONTEXT COMMAND [ARGS...]\n\nRun a command in a specified security context." + +#define HELP_restorecon "usage: restorecon [-D] [-F] [-R] [-n] [-v] FILE...\n\nRestores the default security contexts for the given files.\n\n-D Apply to /data/data too\n-F Force reset\n-R Recurse into directories\n-n Don't make any changes; useful with -v to see what would change\n-v Verbose" + +#define HELP_log "usage: log [-p PRI] [-t TAG] MESSAGE...\n\nLogs message to logcat.\n\n-p Use the given priority instead of INFO:\n d: DEBUG e: ERROR f: FATAL i: INFO v: VERBOSE w: WARN s: SILENT\n-t Use the given tag instead of \"log\"" + +#define HELP_load_policy "usage: load_policy FILE\n\nLoad the specified SELinux policy file." + +#define HELP_getenforce "usage: getenforce\n\nShows whether SELinux is disabled, enforcing, or permissive." + +#define HELP_skeleton_alias "usage: skeleton_alias [-dq] [-b NUMBER]\n\nExample of a second command with different arguments in the same source\nfile as the first. This allows shared infrastructure not added to lib/." + +#define HELP_skeleton "usage: skeleton [-a] [-b STRING] [-c NUMBER] [-d LIST] [-e COUNT] [...]\n\nTemplate for new commands. You don't need this.\n\nWhen creating a new command, copy this file and delete the parts you\ndon't need. Be sure to replace all instances of \"skeleton\" (upper and lower\ncase) with your new command name.\n\nFor simple commands, \"hello.c\" is probably a better starting point." + +#define HELP_logwrapper "usage: logwrapper ...\n\nAppend command line to $WRAPLOG, then call second instance\nof command in $PATH." + +#define HELP_hostid "usage: hostid\n\nPrint the numeric identifier for the current host." + +#define HELP_hello "usage: hello\n\nA hello world program.\n\nMostly used as a simple template for adding new commands.\nOccasionally nice to smoketest kernel booting via \"init=/usr/bin/hello\"." + +#define HELP_demo_utf8towc "usage: demo_utf8towc\n\nPrint differences between toybox's utf8 conversion routines vs libc du jour." + +#define HELP_demo_scankey "usage: demo_scankey\n\nMove a letter around the screen. Hit ESC to exit." + +#define HELP_demo_number "usage: demo_number [-hsbi] NUMBER...\n\n-b Use \"B\" for single byte units (HR_B)\n-d Decimal units\n-h Human readable\n-s Space between number and units (HR_SPACE)" + +#define HELP_demo_many_options "usage: demo_many_options -[a-zA-Z]\n\nPrint the optflags value of the command arguments, in hex." + +#define HELP_umount "usage: umount [-a [-t TYPE[,TYPE...]]] [-vrfD] [DIR...]\n\nUnmount the listed filesystems.\n\n-a Unmount all mounts in /proc/mounts instead of command line list\n-D Don't free loopback device(s)\n-f Force unmount\n-l Lazy unmount (detach from filesystem now, close when last user does)\n-n Don't use /proc/mounts\n-r Remount read only if unmounting fails\n-t Restrict \"all\" to mounts of TYPE (or use \"noTYPE\" to skip)\n-v Verbose" + +#define HELP_sync "usage: sync\n\nWrite pending cached data to disk (synchronize), blocking until done." + +#define HELP_su "usage: su [-lp] [-u UID] [-g GID,...] [-s SHELL] [-c CMD] [USER [COMMAND...]]\n\nSwitch user, prompting for password of new user when not run as root.\n\nWith one argument, switch to USER and run user's shell from /etc/passwd.\nWith no arguments, USER is root. If COMMAND line provided after USER,\nexec() it as new USER (bypasing shell). If -u or -g specified, first\nargument (if any) isn't USER (it's COMMAND).\n\nfirst argument is USER name to switch to (which must exist).\nNon-root users are prompted for new user's password.\n\n-s Shell to use (default is user's shell from /etc/passwd)\n-c Command line to pass to -s shell (ala sh -c \"CMD\")\n-l Reset environment as if new login.\n-u Switch to UID instead of USER\n-g Switch to GID (only root allowed, can be comma separated list)\n-p Preserve environment (except for $PATH and $IFS)" + +#define HELP_seq "usage: seq [-w|-f fmt_str] [-s sep_str] [first] [increment] last\n\nCount from first to last, by increment. Omitted arguments default\nto 1. Two arguments are used as first and last. Arguments can be\nnegative or floating point.\n\n-f Use fmt_str as a printf-style floating point format string\n-s Use sep_str as separator, default is a newline character\n-w Pad to equal width with leading zeroes" + +#define HELP_pidof "usage: pidof [-s] [-o omitpid[,omitpid...]] [NAME]...\n\nPrint the PIDs of all processes with the given names.\n\n-s Single shot, only return one pid\n-o Omit PID(s)\n-x Match shell scripts too" + +#define HELP_passwd_sad "Password changes are checked to make sure they're at least 6 chars long,\ndon't include the entire username (but not a subset of it), or the entire\nprevious password (but changing password1, password2, password3 is fine).\nThis heuristic accepts \"aaaaaa\" and \"123456\"." + +#define HELP_passwd "usage: passwd [-a ALGO] [-dlu] [USER]\n\nUpdate user's authentication tokens. Defaults to current user.\n\n-a ALGO Encryption method (des, md5, sha256, sha512) default: des\n-d Set password to ''\n-l Lock (disable) account\n-u Unlock (enable) account" + +#define HELP_mount "usage: mount [-afFrsvw] [-t TYPE] [-o OPTION,] [[DEVICE] DIR]\n\nMount new filesystem(s) on directories. With no arguments, display existing\nmounts.\n\n-a Mount all entries in /etc/fstab (with -t, only entries of that TYPE)\n-O Only mount -a entries that have this option\n-f Fake it (don't actually mount)\n-r Read only (same as -o ro)\n-w Read/write (default, same as -o rw)\n-t Specify filesystem type\n-v Verbose\n\nOPTIONS is a comma separated list of options, which can also be supplied\nas --longopts.\n\nAutodetects loopback mounts (a file on a directory) and bind mounts (file\non file, directory on directory), so you don't need to say --bind or --loop.\nYou can also \"mount -a /path\" to mount everything in /etc/fstab under /path,\neven if it's noauto. DEVICE starting with UUID= is identified by blkid -U." + +#define HELP_mktemp "usage: mktemp [-dqu] [-p DIR] [TEMPLATE]\n\nSafely create a new file \"DIR/TEMPLATE\" and print its name.\n\n-d Create directory instead of file (--directory)\n-p Put new file in DIR (--tmpdir)\n-q Quiet, no error messages\n-t Prefer $TMPDIR > DIR > /tmp (default DIR > $TMPDIR > /tmp)\n-u Don't create anything, just print what would be created\n\nEach X in TEMPLATE is replaced with a random printable character. The\ndefault TEMPLATE is tmp.XXXXXXXXXX." + +#define HELP_mknod_z "usage: mknod [-Z CONTEXT] ...\n\n-Z Set security context to created file" + +#define HELP_mknod "usage: mknod [-m MODE] NAME TYPE [MAJOR MINOR]\n\nCreate a special file NAME with a given type. TYPE is b for block device,\nc or u for character device, p for named pipe (which ignores MAJOR/MINOR).\n\n-m Mode (file permissions) of new device, in octal or u+x format" + +#define HELP_sha512sum "See sha1sum" + +#define HELP_sha384sum "See sha1sum" + +#define HELP_sha256sum "See sha1sum" + +#define HELP_sha224sum "See sha1sum" + +#define HELP_sha1sum "usage: sha?sum [-bcs] [FILE]...\n\nCalculate sha hash for each input file, reading from stdin if none. Output\none hash (40 hex digits for sha1, 56 for sha224, 64 for sha256, 96 for sha384,\nand 128 for sha512) for each input file, followed by filename.\n\n-b Brief (hash only, no filename)\n-c Check each line of each FILE is the same hash+filename we'd output\n-s No output, exit status 0 if all hashes match, 1 otherwise" + +#define HELP_md5sum "usage: md5sum [-bcs] [FILE]...\n\nCalculate md5 hash for each input file, reading from stdin if none.\nOutput one hash (32 hex digits) for each input file, followed by filename.\n\n-b Brief (hash only, no filename)\n-c Check each line of each FILE is the same hash+filename we'd output\n-s No output, exit status 0 if all hashes match, 1 otherwise" + +#define HELP_killall "usage: killall [-l] [-iqv] [-SIGNAL|-s SIGNAL] PROCESS_NAME...\n\nSend a signal (default: TERM) to all processes with the given names.\n\n-i Ask for confirmation before killing\n-l Print list of all available signals\n-q Don't print any warnings or error messages\n-s Send SIGNAL instead of SIGTERM\n-v Report if the signal was successfully sent\n-w Wait until all signaled processes are dead" + +#define HELP_dnsdomainname "usage: dnsdomainname\n\nShow domain this system belongs to (same as hostname -d)." + +#define HELP_hostname "usage: hostname [-bdsf] [-F FILENAME] [newname]\n\nGet/set the current hostname.\n\n-b Set hostname to 'localhost' if otherwise unset\n-d Show DNS domain name (no host)\n-f Show fully-qualified name (host+domain, FQDN)\n-F Set hostname to contents of FILENAME\n-s Show short host name (no domain)" + +#define HELP_zcat "usage: zcat [FILE...]\n\nDecompress files to stdout. Like `gzip -dc`.\n\n-f Force: allow read from tty" + +#define HELP_gunzip "usage: gunzip [-cfk] [FILE...]\n\nDecompress files. With no files, decompresses stdin to stdout.\nOn success, the input files are removed and replaced by new\nfiles without the .gz suffix.\n\n-c Output to stdout (act as zcat)\n-f Force: allow read from tty\n-k Keep input files (default is to remove)" + +#define HELP_gzip "usage: gzip [-19cdfk] [FILE...]\n\nCompress files. With no files, compresses stdin to stdout.\nOn success, the input files are removed and replaced by new\nfiles with the .gz suffix.\n\n-c Output to stdout\n-d Decompress (act as gunzip)\n-f Force: allow overwrite of output file\n-k Keep input files (default is to remove)\n-# Compression level 1-9 (1:fastest, 6:default, 9:best)" + +#define HELP_dmesg "usage: dmesg [-Cc] [-r|-t|-T] [-n LEVEL] [-s SIZE] [-w]\n\nPrint or control the kernel ring buffer.\n\n-C Clear ring buffer without printing\n-c Clear ring buffer after printing\n-n Set kernel logging LEVEL (1-9)\n-r Raw output (with )\n-S Use syslog(2) rather than /dev/kmsg\n-s Show the last SIZE many bytes\n-T Human readable timestamps\n-t Don't print timestamps\n-w Keep waiting for more output (aka --follow)" + +#define HELP_tunctl "usage: tunctl [-dtT] [-u USER] NAME\n\nCreate and delete tun/tap virtual ethernet devices.\n\n-T Use tap (ethernet frames) instead of tun (ip packets)\n-d Delete tun/tap device\n-t Create tun/tap device\n-u Set owner (user who can read/write device without root access)" + +#define HELP_sntp "usage: sntp [-saSdDq] [-r SHIFT] [-mM[ADDRESS]] [-p PORT] [SERVER]\n\nSimple Network Time Protocol client. Query SERVER and display time.\n\n-p Use PORT (default 123)\n-s Set system clock suddenly\n-a Adjust system clock gradually\n-S Serve time instead of querying (bind to SERVER address if specified)\n-m Wait for updates from multicast ADDRESS (RFC 4330 default 224.0.1.1)\n-M Multicast server on ADDRESS (deault 224.0.0.1)\n-t TTL (multicast only, default 1)\n-d Daemonize (run in background re-querying )\n-D Daemonize but stay in foreground: re-query time every 1000 seconds\n-r Retry shift (every 1< expand to,\n / multiple rounding down, % multiple rounding up\nSIZE suffix: k=1024, m=1024^2, g=1024^3, t=1024^4, p=1024^5, e=1024^6" + +#define HELP_timeout "usage: timeout [-k DURATION] [-s SIGNAL] DURATION COMMAND...\n\nRun command line as a child process, sending child a signal if the\ncommand doesn't exit soon enough.\n\nDURATION can be a decimal fraction. An optional suffix can be \"m\"\n(minutes), \"h\" (hours), \"d\" (days), or \"s\" (seconds, the default).\n\n-s Send specified signal (default TERM)\n-k Send KILL signal if child still running this long after first signal\n-v Verbose\n--foreground Don't create new process group\n--preserve-status Exit with the child's exit status" + +#define HELP_taskset "usage: taskset [-ap] [mask] [PID | cmd [args...]]\n\nLaunch a new task which may only run on certain processors, or change\nthe processor affinity of an existing PID.\n\nMask is a hex string where each bit represents a processor the process\nis allowed to run on. PID without a mask displays existing affinity.\n\n-p Set/get the affinity of given PID instead of a new command\n-a Set/get the affinity of all threads of the PID" + +#define HELP_nproc "usage: nproc [--all]\n\nPrint number of processors.\n\n--all Show all processors, not just ones this task can run on" + +#define HELP_tac "usage: tac [FILE...]\n\nOutput lines in reverse order." + +#define HELP_sysctl "usage: sysctl [-aAeNnqw] [-p [FILE] | KEY[=VALUE]...]\n\nRead/write system control data (under /proc/sys).\n\n-a,A Show all values\n-e Don't warn about unknown keys\n-N Don't print key values\n-n Don't print key names\n-p Read values from FILE (default /etc/sysctl.conf)\n-q Don't show value after write\n-w Only write values (object to reading)" + +#define HELP_switch_root "usage: switch_root [-c /dev/console] NEW_ROOT NEW_INIT...\n\nUse from PID 1 under initramfs to free initramfs, chroot to NEW_ROOT,\nand exec NEW_INIT.\n\n-c Redirect console to device in NEW_ROOT\n-h Hang instead of exiting on failure (avoids kernel panic)" + +#define HELP_swapon "usage: swapon [-d] [-p priority] filename\n\nEnable swapping on a given device/file.\n\n-d Discard freed SSD pages\n-p Priority (highest priority areas allocated first)" + +#define HELP_swapoff "usage: swapoff swapregion\n\nDisable swapping on a given swapregion." + +#define HELP_stat "usage: stat [-tfL] [-c FORMAT] FILE...\n\nDisplay status of files or filesystems.\n\n-c Output specified FORMAT string instead of default\n-f Display filesystem status instead of file status\n-L Follow symlinks\n-t terse (-c \"%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %o\")\n (with -f = -c \"%n %i %l %t %s %S %b %f %a %c %d\")\n\nThe valid format escape sequences for files:\n%a Access bits (octal) |%A Access bits (flags)|%b Size/512\n%B Bytes per %b (512) |%C Security context |%d Device ID (dec)\n%D Device ID (hex) |%f All mode bits (hex)|%F File type\n%g Group ID |%G Group name |%h Hard links\n%i Inode |%m Mount point |%n Filename\n%N Long filename |%o I/O block size |%s Size (bytes)\n%t Devtype major (hex) |%T Devtype minor (hex)|%u User ID\n%U User name |%x Access time |%X Access unix time\n%y Modification time |%Y Mod unix time |%z Creation time\n%Z Creation unix time\n\nThe valid format escape sequences for filesystems:\n%a Available blocks |%b Total blocks |%c Total inodes\n%d Free inodes |%f Free blocks |%i File system ID\n%l Max filename length |%n File name |%s Fragment size\n%S Best transfer size |%t FS type (hex) |%T FS type (driver name)" + +#define HELP_shred "usage: shred [-fuz] [-n COUNT] [-s SIZE] FILE...\n\nSecurely delete a file by overwriting its contents with random data.\n\n-f Force (chmod if necessary)\n-n COUNT Random overwrite iterations (default 1)\n-o OFFSET Start at OFFSET\n-s SIZE Use SIZE instead of detecting file size\n-u Unlink (actually delete file when done)\n-x Use exact size (default without -s rounds up to next 4k)\n-z Zero at end\n\nNote: data journaling filesystems render this command useless, you must\noverwrite all free space (fill up disk) to erase old data on those." + +#define HELP_setsid "usage: setsid [-cdw] command [args...]\n\nRun process in a new session.\n\n-d Detach from tty\n-c Control tty (become foreground process & receive keyboard signals)\n-w Wait for child (and exit with its status)" + +#define HELP_setfattr "usage: setfattr [-h] [-x|-n NAME] [-v VALUE] FILE...\n\nWrite POSIX extended attributes.\n\n-h Do not dereference symlink\n-n Set given attribute\n-x Remove given attribute\n-v Set value for attribute -n (default is empty)" + +#define HELP_rmmod "usage: rmmod [-wf] [MODULE]\n\nUnload the module named MODULE from the Linux kernel.\n-f Force unload of a module\n-w Wait until the module is no longer used" + +#define HELP_rev "usage: rev [FILE...]\n\nOutput each line reversed, when no files are given stdin is used." + +#define HELP_reset "usage: reset\n\nReset the terminal." + +#define HELP_reboot "usage: reboot/halt/poweroff [-fn]\n\nRestart, halt or powerdown the system.\n\n-f Don't signal init\n-n Don't sync before stopping the system" + +#define HELP_realpath "usage: realpath FILE...\n\nDisplay the canonical absolute pathname" + +#define HELP_readlink "usage: readlink FILE...\n\nWith no options, show what symlink points to, return error if not symlink.\n\nOptions for producing canonical paths (all symlinks/./.. resolved):\n\n-e Canonical path to existing entry (fail if missing)\n-f Full path (fail if directory missing)\n-m Ignore missing entries, show where it would be\n-n No trailing newline\n-q Quiet (no output, just error code)" + +#define HELP_readahead "usage: readahead FILE...\n\nPreload files into disk cache." + +#define HELP_pwdx "usage: pwdx PID...\n\nPrint working directory of processes listed on command line." + +#define HELP_printenv "usage: printenv [-0] [env_var...]\n\nPrint environment variables.\n\n-0 Use \\0 as delimiter instead of \\n" + +#define HELP_pmap "usage: pmap [-xq] [pids...]\n\nReport the memory map of a process or processes.\n\n-x Show the extended format\n-q Do not display some header/footer lines" + +#define HELP_pivot_root "usage: pivot_root OLD NEW\n\nSwap OLD and NEW filesystems (as if by simultaneous mount --move), and\nmove all processes with chdir or chroot under OLD into NEW (including\nkernel threads) so OLD may be unmounted.\n\nThe directory NEW must exist under OLD. This doesn't work on initramfs,\nwhich can't be moved (about the same way PID 1 can't be killed; see\nswitch_root instead)." + +#define HELP_partprobe "usage: partprobe DEVICE...\n\nTell the kernel about partition table changes\n\nAsk the kernel to re-read the partition table on the specified devices." + +#define HELP_oneit "usage: oneit [-p] [-c /dev/tty0] command [...]\n\nSimple init program that runs a single supplied command line with a\ncontrolling tty (so CTRL-C can kill it).\n\n-c Which console device to use (/dev/console doesn't do CTRL-C, etc)\n-p Power off instead of rebooting when command exits\n-r Restart child when it exits\n-3 Write 32 bit PID of each exiting reparented process to fd 3 of child\n (Blocking writes, child must read to avoid eventual deadlock.)\n\nSpawns a single child process (because PID 1 has signals blocked)\nin its own session, reaps zombies until the child exits, then\nreboots the system (or powers off with -p, or restarts the child with -r).\n\nResponds to SIGUSR1 by halting the system, SIGUSR2 by powering off,\nand SIGTERM or SIGINT reboot." + +#define HELP_nsenter "usage: nsenter [-t pid] [-F] [-i] [-m] [-n] [-p] [-u] [-U] COMMAND...\n\nRun COMMAND in an existing (set of) namespace(s).\n\n-t PID to take namespaces from (--target)\n-F don't fork, even if -p is used (--no-fork)\n\nThe namespaces to switch are:\n\n-i SysV IPC: message queues, semaphores, shared memory (--ipc)\n-m Mount/unmount tree (--mount)\n-n Network address, sockets, routing, iptables (--net)\n-p Process IDs and init, will fork unless -F is used (--pid)\n-u Host and domain names (--uts)\n-U UIDs, GIDs, capabilities (--user)\n\nIf -t isn't specified, each namespace argument must provide a path\nto a namespace file, ala \"-i=/proc/$PID/ns/ipc\"" + +#define HELP_unshare "usage: unshare [-imnpuUr] COMMAND...\n\nCreate new container namespace(s) for this process and its children, so\nsome attribute is not shared with the parent process.\n\n-f Fork command in the background (--fork)\n-i SysV IPC (message queues, semaphores, shared memory) (--ipc)\n-m Mount/unmount tree (--mount)\n-n Network address, sockets, routing, iptables (--net)\n-p Process IDs and init (--pid)\n-r Become root (map current euid/egid to 0/0, implies -U) (--map-root-user)\n-u Host and domain names (--uts)\n-U UIDs, GIDs, capabilities (--user)\n\nA namespace allows a set of processes to have a different view of the\nsystem than other sets of processes." + +#define HELP_nbd_client "usage: nbd-client [-ns] HOST PORT DEVICE\n\n-n Do not fork into background\n-s nbd swap support (lock server into memory)" + +#define HELP_mountpoint "usage: mountpoint [-qd] DIR\n mountpoint [-qx] DEVICE\n\nCheck whether the directory or device is a mountpoint.\n\n-q Be quiet, return zero if directory is a mountpoint\n-d Print major/minor device number of the directory\n-x Print major/minor device number of the block device" + +#define HELP_modinfo "usage: modinfo [-0] [-b basedir] [-k kernel] [-F field] [module|file...]\n\nDisplay module fields for modules specified by name or .ko path.\n\n-F Only show the given field\n-0 Separate fields with NUL rather than newline\n-b Use as root for /lib/modules/\n-k Look in given directory under /lib/modules/" + +#define HELP_mkswap "usage: mkswap [-L LABEL] DEVICE\n\nSet up a Linux swap area on a device or file." + +#define HELP_mkpasswd "usage: mkpasswd [-P FD] [-m TYPE] [-S SALT] [PASSWORD] [SALT]\n\nCrypt PASSWORD using crypt(3)\n\n-P FD Read password from file descriptor FD\n-m TYPE Encryption method (des, md5, sha256, or sha512; default is des)\n-S SALT" + +#define HELP_mix "usage: mix [-d DEV] [-c CHANNEL] [-l VOL] [-r RIGHT]\n\nList OSS sound channels (module snd-mixer-oss), or set volume(s).\n\n-c CHANNEL Set/show volume of CHANNEL (default first channel found)\n-d DEV Device node (default /dev/mixer)\n-l VOL Volume level\n-r RIGHT Volume of right stereo channel (with -r, -l sets left volume)" + +#define HELP_mcookie "usage: mcookie [-vV]\n\nGenerate a 128-bit strong random number.\n\n-v show entropy source (verbose)\n-V show version" + +#define HELP_makedevs "usage: makedevs [-d device_table] rootdir\n\nCreate a range of special files as specified in a device table.\n\n-d File containing device table (default reads from stdin)\n\nEach line of the device table has the fields:\n \nWhere name is the file name, and type is one of the following:\n\nb Block device\nc Character device\nd Directory\nf Regular file\np Named pipe (fifo)\n\nOther fields specify permissions, user and group id owning the file,\nand additional fields for device special files. Use '-' for blank entries,\nunspecified fields are treated as '-'." + +#define HELP_lsusb "usage: lsusb\n\nList USB hosts/devices." + +#define HELP_lspci_text "usage: lspci [-n] [-i FILE ]\n\n-n Numeric output (repeat for readable and numeric)\n-i PCI ID database (default /usr/share/misc/pci.ids)" + +#define HELP_lspci "usage: lspci [-ekm]\n\nList PCI devices.\n\n-e Print all 6 digits in class\n-k Print kernel driver\n-m Machine parseable format" + +#define HELP_lsmod "usage: lsmod\n\nDisplay the currently loaded modules, their sizes and their dependencies." + +#define HELP_chattr "usage: chattr [-R] [-+=AacDdijsStTu] [-p PROJID] [-v VERSION] [FILE...]\n\nChange file attributes on a Linux file system.\n\n-R Recurse\n-p Set the file's project number\n-v Set the file's version/generation number\n\nOperators:\n '-' Remove attributes\n '+' Add attributes\n '=' Set attributes\n\nAttributes:\n A No atime a Append only\n C No COW c Compression\n D Synchronous dir updates d No dump\n E Encrypted e Extents\n F Case-insensitive (casefold)\n I Indexed directory i Immutable\n j Journal data\n N Inline data in inode\n P Project hierarchy\n S Synchronous file updates s Secure delete\n T Top of dir hierarchy t No tail-merging\n u Allow undelete\n V Verity" + +#define HELP_lsattr "usage: lsattr [-Radlpv] [FILE...]\n\nList file attributes on a Linux file system.\nFlag letters are defined in chattr help.\n\n-R Recursively list attributes of directories and their contents\n-a List all files in directories, including files that start with '.'\n-d List directories like other files, rather than listing their contents\n-l List long flag names\n-p List the file's project number\n-v List the file's version/generation number" + +#define HELP_losetup "usage: losetup [-cdrs] [-o OFFSET] [-S SIZE] {-d DEVICE...|-j FILE|-af|{DEVICE FILE}}\n\nAssociate a loopback device with a file, or show current file (if any)\nassociated with a loop device.\n\nInstead of a device:\n-a Iterate through all loopback devices\n-f Find first unused loop device (may create one)\n-j FILE Iterate through all loopback devices associated with FILE\n\nexisting:\n-c Check capacity (file size changed)\n-d DEV Detach loopback device\n-D Detach all loopback devices\n\nnew:\n-s Show device name (alias --show)\n-o OFF Start association at offset OFF into FILE\n-r Read only\n-S SIZE Limit SIZE of loopback association (alias --sizelimit)" + +#define HELP_login "usage: login [-p] [-h host] [-f USERNAME] [USERNAME]\n\nLog in as a user, prompting for username and password if necessary.\n\n-p Preserve environment\n-h The name of the remote host for this login\n-f login as USERNAME without authentication" + +#define HELP_iorenice "usage: iorenice PID [CLASS] [PRIORITY]\n\nDisplay or change I/O priority of existing process. CLASS can be\n\"rt\" for realtime, \"be\" for best effort, \"idle\" for only when idle, or\n\"none\" to leave it alone. PRIORITY can be 0-7 (0 is highest, default 4)." + +#define HELP_ionice "usage: ionice [-t] [-c CLASS] [-n LEVEL] [COMMAND...|-p PID]\n\nChange the I/O scheduling priority of a process. With no arguments\n(or just -p), display process' existing I/O class/priority.\n\n-c CLASS = 1-3: 1(realtime), 2(best-effort, default), 3(when-idle)\n-n LEVEL = 0-7: (0 is highest priority, default = 5)\n-p Affect existing PID instead of spawning new child\n-t Ignore failure to set I/O priority\n\nSystem default iopriority is generally -c 2 -n 4." + +#define HELP_insmod "usage: insmod MODULE [MODULE_OPTIONS]\n\nLoad the module named MODULE passing options if given." + +#define HELP_inotifyd "usage: inotifyd PROG FILE[:MASK] ...\n\nWhen a filesystem event matching MASK occurs to a FILE, run PROG as:\n\n PROG EVENTS FILE [DIRFILE]\n\nIf PROG is \"-\" events are sent to stdout.\n\nThis file is:\n a accessed c modified e metadata change w closed (writable)\n r opened D deleted M moved 0 closed (unwritable)\n u unmounted o overflow x unwatchable\n\nA file in this directory is:\n m moved in y moved out n created d deleted\n\nWhen x event happens for all FILEs, inotifyd exits (after waiting for PROG)." + +#define HELP_i2cset "usage: i2cset [-fy] BUS CHIP ADDR VALUE... MODE\n\nWrite an i2c register. MODE is b for byte, w for 16-bit word, i for I2C block.\n\n-f Force access to busy devices\n-y Answer \"yes\" to confirmation prompts (for script use)" + +#define HELP_i2cget "usage: i2cget [-fy] BUS CHIP ADDR\n\nRead an i2c register.\n\n-f Force access to busy devices\n-y Answer \"yes\" to confirmation prompts (for script use)" + +#define HELP_i2cdump "usage: i2cdump [-fy] BUS CHIP\n\nDump i2c registers.\n\n-f Force access to busy devices\n-y Answer \"yes\" to confirmation prompts (for script use)" + +#define HELP_i2cdetect "usage: i2cdetect [-ary] BUS [FIRST LAST]\nusage: i2cdetect -F BUS\nusage: i2cdetect -l\n\nDetect i2c devices.\n\n-a All addresses (0x00-0x7f rather than 0x03-0x77)\n-F Show functionality\n-l List all buses\n-r Probe with SMBus Read Byte\n-y Answer \"yes\" to confirmation prompts (for script use)" + +#define HELP_hwclock "usage: hwclock [-rswtluf]\n\nGet/set the hardware clock.\n\n-f FILE Use specified device file instead of /dev/rtc (--rtc)\n-l Hardware clock uses localtime (--localtime)\n-r Show hardware clock time (--show)\n-s Set system time from hardware clock (--hctosys)\n-t Set the system time based on the current timezone (--systz)\n-u Hardware clock uses UTC (--utc)\n-w Set hardware clock from system time (--systohc)" + +#define HELP_hexedit "usage: hexedit FILENAME\n\nHexadecimal file editor. All changes are written to disk immediately.\n\n-r Read only (display but don't edit)\n\nKeys:\nArrows Move left/right/up/down by one line/column\nPg Up/Pg Dn Move up/down by one page\n0-9, a-f Change current half-byte to hexadecimal value\nu Undo\nq/^c/^d/ Quit" + +#define HELP_help "usage: help [-ahu] [COMMAND]\n\n-a All commands\n-u Usage only\n-h HTML output\n\nShow usage information for toybox commands.\nRun \"toybox\" with no arguments for a list of available commands." + +#define HELP_fsync "usage: fsync [-d] [FILE...]\n\nSynchronize a file's in-core state with storage device.\n\n-d Avoid syncing metadata" + +#define HELP_fsfreeze "usage: fsfreeze {-f | -u} MOUNTPOINT\n\nFreeze or unfreeze a filesystem.\n\n-f Freeze\n-u Unfreeze" + +#define HELP_freeramdisk "usage: freeramdisk [RAM device]\n\nFree all memory allocated to specified ramdisk" + +#define HELP_free "usage: free [-bkmgt]\n\nDisplay the total, free and used amount of physical memory and swap space.\n\n-bkmgt Output units (default is bytes)\n-h Human readable (K=1024)" + +#define HELP_fmt "usage: fmt [-w WIDTH] [FILE...]\n\nReformat input to wordwrap at a given line length, preserving existing\nindentation level, writing to stdout.\n\n-w WIDTH Maximum characters per line (default 75)" + +#define HELP_flock "usage: flock [-sxun] fd\n\nManage advisory file locks.\n\n-s Shared lock\n-x Exclusive lock (default)\n-u Unlock\n-n Non-blocking: fail rather than wait for the lock" + +#define HELP_fallocate "usage: fallocate [-l size] [-o offset] file\n\nTell the filesystem to allocate space for a file." + +#define HELP_factor "usage: factor NUMBER...\n\nFactor integers." + +#define HELP_eject "usage: eject [-stT] [DEVICE]\n\nEject DEVICE or default /dev/cdrom\n\n-s SCSI device\n-t Close tray\n-T Open/close tray (toggle)" + +#define HELP_unix2dos "usage: unix2dos [FILE...]\n\nConvert newline format from unix \"\\n\" to dos \"\\r\\n\".\nIf no files listed copy from stdin, \"-\" is a synonym for stdin." + +#define HELP_dos2unix "usage: dos2unix [FILE...]\n\nConvert newline format from dos \"\\r\\n\" to unix \"\\n\".\nIf no files listed copy from stdin, \"-\" is a synonym for stdin." + +#define HELP_devmem "usage: devmem ADDR [WIDTH [DATA]]\n\nRead/write physical address via /dev/mem.\n\nWIDTH is 1, 2, 4, or 8 bytes (default 4)." + +#define HELP_count "usage: count\n\nCopy stdin to stdout, displaying simple progress indicator to stderr." + +#define HELP_clear "Clear the screen." + +#define HELP_chvt "usage: chvt N\n\nChange to virtual terminal number N. (This only works in text mode.)\n\nVirtual terminals are the Linux VGA text mode displays, ordinarily\nswitched between via alt-F1, alt-F2, etc. Use ctrl-alt-F1 to switch\nfrom X to a virtual terminal, and alt-F6 (or F7, or F8) to get back." + +#define HELP_chrt "usage: chrt [-Rmofrbi] {-p PID [PRIORITY] | [PRIORITY COMMAND...]}\n\nGet/set a process' real-time scheduling policy and priority.\n\n-p Set/query given pid (instead of running COMMAND)\n-R Set SCHED_RESET_ON_FORK\n-m Show min/max priorities available\n\nSet policy (default -r):\n\n -o SCHED_OTHER -f SCHED_FIFO -r SCHED_RR\n -b SCHED_BATCH -i SCHED_IDLE" + +#define HELP_chroot "usage: chroot NEWROOT [COMMAND [ARG...]]\n\nRun command within a new root directory. If no command, run /bin/sh." + +#define HELP_chcon "usage: chcon [-hRv] CONTEXT FILE...\n\nChange the SELinux security context of listed file[s].\n\n-h Change symlinks instead of what they point to\n-R Recurse into subdirectories\n-v Verbose" + +#define HELP_bzcat "usage: bzcat [FILE...]\n\nDecompress listed files to stdout. Use stdin if no files listed." + +#define HELP_bunzip2 "usage: bunzip2 [-cftkv] [FILE...]\n\nDecompress listed files (file.bz becomes file) deleting archive file(s).\nRead from stdin if no files listed.\n\n-c Force output to stdout\n-f Force decompression (if FILE doesn't end in .bz, replace original)\n-k Keep input files (-c and -t imply this)\n-t Test integrity\n-v Verbose" + +#define HELP_blockdev "usage: blockdev --OPTION... BLOCKDEV...\n\nCall ioctl(s) on each listed block device\n\n--setro Set read only\n--setrw Set read write\n--getro Get read only\n--getss Get sector size\n--getbsz Get block size\n--setbsz BYTES Set block size\n--getsz Get device size in 512-byte sectors\n--getsize Get device size in sectors (deprecated)\n--getsize64 Get device size in bytes\n--getra Get readahead in 512-byte sectors\n--setra SECTORS Set readahead\n--flushbufs Flush buffers\n--rereadpt Reread partition table" + +#define HELP_fstype "usage: fstype DEV...\n\nPrint type of filesystem on a block device or image." + +#define HELP_blkid "usage: blkid [-s TAG] [-UL] DEV...\n\nPrint type, label and UUID of filesystem on a block device or image.\n\n-U Show UUID only (or device with that UUID)\n-L Show LABEL only (or device with that LABEL)\n-s TAG Only show matching tags (default all)" + +#define HELP_base64 "usage: base64 [-di] [-w COLUMNS] [FILE...]\n\nEncode or decode in base64.\n\n-d Decode\n-i Ignore non-alphabetic characters\n-w Wrap output at COLUMNS (default 76 or 0 for no wrap)" + +#define HELP_ascii "usage: ascii\n\nDisplay ascii character set." + +#define HELP_acpi "usage: acpi [-abctV]\n\nShow status of power sources and thermal devices.\n\n-a Show power adapters\n-b Show batteries\n-c Show cooling device state\n-t Show temperatures\n-V Show everything" + +#define HELP_xzcat "usage: xzcat [filename...]\n\nDecompress listed files to stdout. Use stdin if no files listed." + +#define HELP_wget "usage: wget -O filename URL\n-O filename: specify output filename\nURL: uniform resource location, FTP/HTTP only, not HTTPS\n\nexamples:\n wget -O index.html http://www.example.com\n wget -O sample.jpg ftp://ftp.example.com:21/sample.jpg" + +#define HELP_vi "usage: vi [-s script] FILE\n-s script: run script file\nVisual text editor. Predates the existence of standardized cursor keys,\nso the controls are weird and historical." + +#define HELP_userdel "usage: userdel [-r] USER\nusage: deluser [-r] USER\n\nDelete USER from the SYSTEM\n\n-r remove home directory" + +#define HELP_useradd "usage: useradd [-SDH] [-h DIR] [-s SHELL] [-G GRP] [-g NAME] [-u UID] USER [GROUP]\n\nCreate new user, or add USER to GROUP\n\n-D Don't assign a password\n-g NAME Real name\n-G GRP Add user to existing group\n-h DIR Home directory\n-H Don't create home directory\n-s SHELL Login shell\n-S Create a system user\n-u UID User id" + +#define HELP_traceroute "usage: traceroute [-46FUIldnvr] [-f 1ST_TTL] [-m MAXTTL] [-p PORT] [-q PROBES]\n[-s SRC_IP] [-t TOS] [-w WAIT_SEC] [-g GATEWAY] [-i IFACE] [-z PAUSE_MSEC] HOST [BYTES]\n\ntraceroute6 [-dnrv] [-m MAXTTL] [-p PORT] [-q PROBES][-s SRC_IP] [-t TOS] [-w WAIT_SEC]\n [-i IFACE] HOST [BYTES]\n\nTrace the route to HOST\n\n-4,-6 Force IP or IPv6 name resolution\n-F Set the don't fragment bit (supports IPV4 only)\n-U Use UDP datagrams instead of ICMP ECHO (supports IPV4 only)\n-I Use ICMP ECHO instead of UDP datagrams (supports IPV4 only)\n-l Display the TTL value of the returned packet (supports IPV4 only)\n-d Set SO_DEBUG options to socket\n-n Print numeric addresses\n-v verbose\n-r Bypass routing tables, send directly to HOST\n-m Max time-to-live (max number of hops)(RANGE 1 to 255)\n-p Base UDP port number used in probes(default 33434)(RANGE 1 to 65535)\n-q Number of probes per TTL (default 3)(RANGE 1 to 255)\n-s IP address to use as the source address\n-t Type-of-service in probe packets (default 0)(RANGE 0 to 255)\n-w Time in seconds to wait for a response (default 3)(RANGE 0 to 86400)\n-g Loose source route gateway (8 max) (supports IPV4 only)\n-z Pause Time in ms (default 0)(RANGE 0 to 86400) (supports IPV4 only)\n-f Start from the 1ST_TTL hop (instead from 1)(RANGE 1 to 255) (supports IPV4 only)\n-i Specify a network interface to operate with" + +#define HELP_tr "usage: tr [-cds] SET1 [SET2]\n\nTranslate, squeeze, or delete characters from stdin, writing to stdout\n\n-c/-C Take complement of SET1\n-d Delete input characters coded SET1\n-s Squeeze multiple output characters of SET2 into one character" + +#define HELP_tftpd "usage: tftpd [-cr] [-u USER] [DIR]\n\nTransfer file from/to tftp server.\n\n-r read only\n-c Allow file creation via upload\n-u run as USER\n-l Log to syslog (inetd mode requires this)" + +#define HELP_tftp "usage: tftp [OPTIONS] HOST [PORT]\n\nTransfer file from/to tftp server.\n\n-l FILE Local FILE\n-r FILE Remote FILE\n-g Get file\n-p Put file\n-b SIZE Transfer blocks of SIZE octets(8 <= SIZE <= 65464)" + +#define HELP_telnetd "Handle incoming telnet connections\n\n-l LOGIN Exec LOGIN on connect\n-f ISSUE_FILE Display ISSUE_FILE instead of /etc/issue\n-K Close connection as soon as login exits\n-p PORT Port to listen on\n-b ADDR[:PORT] Address to bind to\n-F Run in foreground\n-i Inetd mode\n-w SEC Inetd 'wait' mode, linger time SEC\n-S Log to syslog (implied by -i or without -F and -w)" + +#define HELP_telnet "usage: telnet HOST [PORT]\n\nConnect to telnet server" + +#define HELP_tcpsvd "usage: tcpsvd [-hEv] [-c N] [-C N[:MSG]] [-b N] [-u User] [-l Name] IP Port Prog\nusage: udpsvd [-hEv] [-c N] [-u User] [-l Name] IP Port Prog\n\nCreate TCP/UDP socket, bind to IP:PORT and listen for incoming connection.\nRun PROG for each connection.\n\nIP IP to listen on, 0 = all\nPORT Port to listen on\nPROG ARGS Program to run\n-l NAME Local hostname (else looks up local hostname in DNS)\n-u USER[:GRP] Change to user/group after bind\n-c N Handle up to N (> 0) connections simultaneously\n-b N (TCP Only) Allow a backlog of approximately N TCP SYNs\n-C N[:MSG] (TCP Only) Allow only up to N (> 0) connections from the same IP\n New connections from this IP address are closed\n immediately. MSG is written to the peer before close\n-h Look up peer's hostname\n-E Don't set up environment variables\n-v Verbose" + +#define HELP_syslogd "usage: syslogd [-a socket] [-O logfile] [-f config file] [-m interval]\n [-p socket] [-s SIZE] [-b N] [-R HOST] [-l N] [-nSLKD]\n\nSystem logging utility\n\n-a Extra unix socket for listen\n-O FILE Default log file \n-f FILE Config file \n-p Alternative unix domain socket \n-n Avoid auto-backgrounding\n-S Smaller output\n-m MARK interval (RANGE: 0 to 71582787)\n-R HOST Log to IP or hostname on PORT (default PORT=514/UDP)\"\n-L Log locally and via network (default is network only if -R)\"\n-s SIZE Max size (KB) before rotation (default:200KB, 0=off)\n-b N rotated logs to keep (default:1, max=99, 0=purge)\n-K Log to kernel printk buffer (use dmesg to read it)\n-l N Log only messages more urgent than prio(default:8 max:8 min:1)\n-D Drop duplicates" + +#define HELP_sulogin "usage: sulogin [-t time] [tty]\n\nSingle User Login.\n-t Default Time for Single User Login" + +#define HELP_stty "usage: stty [-ag] [-F device] SETTING...\n\nGet/set terminal configuration.\n\n-F Open device instead of stdin\n-a Show all current settings (default differences from \"sane\")\n-g Show all current settings usable as input to stty\n\nSpecial characters (syntax ^c or undef): intr quit erase kill eof eol eol2\nswtch start stop susp rprnt werase lnext discard\n\nControl/input/output/local settings as shown by -a, '-' prefix to disable\n\nCombo settings: cooked/raw, evenp/oddp/parity, nl, ek, sane\n\nN set input and output speed (ispeed N or ospeed N for just one)\ncols N set number of columns\nrows N set number of rows\nline N set line discipline\nmin N set minimum chars per read\ntime N set read timeout\nspeed show speed only\nsize show size only" + +#define HELP_exit "usage: exit [status]\n\nExit shell. If no return value supplied on command line, use value\nof most recent command, or 0 if none." + +#define HELP_cd "usage: cd [-PL] [path]\n\nChange current directory. With no arguments, go $HOME.\n\n-P Physical path: resolve symlinks in path\n-L Local path: .. trims directories off $PWD (default)" + +#define HELP_sh "usage: sh [-c command] [script]\n\nCommand shell. Runs a shell script, or reads input interactively\nand responds to it.\n\n-c command line to execute\n-i interactive mode (default when STDIN is a tty)" + +#define HELP_route "usage: route [-ne] [-A [46]] [add|del TARGET [OPTIONS]]\n\nDisplay, add or delete network routes in the \"Forwarding Information Base\".\n\n-n Show numerical addresses (no DNS lookups)\n-e display netstat fields\n\nRouting means sending packets out a network interface to an address.\nThe kernel can tell where to send packets one hop away by examining each\ninterface's address and netmask, so the most common use of this command\nis to identify a \"gateway\" that forwards other traffic.\n\nAssigning an address to an interface automatically creates an appropriate\nnetwork route (\"ifconfig eth0 10.0.2.15/8\" does \"route add 10.0.0.0/8 eth0\"\nfor you), although some devices (such as loopback) won't show it in the\ntable. For machines more than one hop away, you need to specify a gateway\n(ala \"route add default gw 10.0.2.2\").\n\nThe address \"default\" is a wildcard address (0.0.0.0/0) matching all\npackets without a more specific route.\n\nAvailable OPTIONS include:\nreject - blocking route (force match failure)\ndev NAME - force packets out this interface (ala \"eth0\")\nnetmask - old way of saying things like ADDR/24\ngw ADDR - forward packets to gateway ADDR" + +#define HELP_readelf "usage: readelf [-adhlnSsW] [-p SECTION] [-x SECTION] [file...]\n\nDisplays information about ELF files.\n\n-a Equivalent to -dhlnSs\n-d Show dynamic section\n-h Show ELF header\n-l Show program headers\n-n Show notes\n-p S Dump strings found in named/numbered section\n-S Show section headers\n-s Show symbol tables (.dynsym and .symtab)\n-W Don't truncate fields (default in toybox)\n-x S Hex dump of named/numbered section\n\n--dyn-syms Show just .dynsym symbol table" + +#define HELP_deallocvt "usage: deallocvt [N]\n\nDeallocate unused virtual terminal /dev/ttyN, or all unused consoles." + +#define HELP_openvt "usage: openvt [-c N] [-sw] [command [command_options]]\n\nstart a program on a new virtual terminal (VT)\n\n-c N Use VT N\n-s Switch to new VT\n-w Wait for command to exit\n\nif -sw used together, switch back to originating VT when command completes" + +#define HELP_more "usage: more [FILE...]\n\nView FILE(s) (or stdin) one screenfull at a time." + +#define HELP_modprobe "usage: modprobe [-alrqvsDb] [-d DIR] MODULE [symbol=value][...]\n\nmodprobe utility - inserts modules and dependencies.\n\n-a Load multiple MODULEs\n-d Load modules from DIR, option may be used multiple times\n-l List (MODULE is a pattern)\n-r Remove MODULE (stacks) or do autoclean\n-q Quiet\n-v Verbose\n-s Log to syslog\n-D Show dependencies\n-b Apply blacklist to module names too" + +#define HELP_mke2fs_extended "usage: mke2fs [-E stride=###] [-O option[,option]]\n\n-E stride= Set RAID stripe size (in blocks)\n-O [opts] Specify fewer ext2 option flags (for old kernels)\n All of these are on by default (as appropriate)\n none Clear default options (all but journaling)\n dir_index Use htree indexes for large directories\n filetype Store file type info in directory entry\n has_journal Set by -j\n journal_dev Set by -J device=XXX\n sparse_super Don't allocate huge numbers of redundant superblocks" + +#define HELP_mke2fs_label "usage: mke2fs [-L label] [-M path] [-o string]\n\n-L Volume label\n-M Path to mount point\n-o Created by" + +#define HELP_mke2fs_gen "usage: gene2fs [options] device filename\n\nThe [options] are the same as mke2fs." + +#define HELP_mke2fs_journal "usage: mke2fs [-j] [-J size=###,device=XXX]\n\n-j Create journal (ext3)\n-J Journal options\n size: Number of blocks (1024-102400)\n device: Specify an external journal" + +#define HELP_mke2fs "usage: mke2fs [-Fnq] [-b ###] [-N|i ###] [-m ###] device\n\nCreate an ext2 filesystem on a block device or filesystem image.\n\n-F Force to run on a mounted device\n-n Don't write to device\n-q Quiet (no output)\n-b size Block size (1024, 2048, or 4096)\n-N inodes Allocate this many inodes\n-i bytes Allocate one inode for every XXX bytes of device\n-m percent Reserve this percent of filesystem space for root user" + +#define HELP_mdev_conf "The mdev config file (/etc/mdev.conf) contains lines that look like:\nhd[a-z][0-9]* 0:3 660\n(sd[a-z]) root:disk 660 =usb_storage\n\nEach line must contain three whitespace separated fields. The first\nfield is a regular expression matching one or more device names,\nthe second and third fields are uid:gid and file permissions for\nmatching devices. Fourth field is optional. It could be used to change\ndevice name (prefix '='), path (prefix '=' and postfix '/') or create a\nsymlink (prefix '>')." + +#define HELP_mdev "usage: mdev [-s]\n\nCreate devices in /dev using information from /sys.\n\n-s Scan all entries in /sys to populate /dev" + +#define HELP_man "usage: man [-M PATH] [-k STRING] | [SECTION] COMMAND\n\nRead manual page for system command.\n\n-k List pages with STRING in their short description\n-M Override $MANPATH\n\nMan pages are divided into 8 sections:\n1 commands 2 system calls 3 library functions 4 /dev files\n5 file formats 6 games 7 miscellaneous 8 system management\n\nSections are searched in the order 1 8 3 2 5 4 6 7 unless you specify a\nsection. Each section has a page called \"intro\", and there's a global\nintroduction under \"man-pages\"." + +#define HELP_lsof "usage: lsof [-lt] [-p PID1,PID2,...] [FILE...]\n\nList all open files belonging to all active processes, or processes using\nlisted FILE(s).\n\n-l list uids numerically\n-p for given comma-separated pids only (default all pids)\n-t terse (pid only) output" + +#define HELP_last "usage: last [-W] [-f FILE]\n\nShow listing of last logged in users.\n\n-W Display the information without host-column truncation\n-f FILE Read from file FILE instead of /var/log/wtmp" + +#define HELP_klogd "usage: klogd [-n] [-c N]\n\n-c N Print to console messages more urgent than prio N (1-8)\"\n-n Run in foreground" + +#define HELP_ipcs "usage: ipcs [[-smq] -i shmid] | [[-asmq] [-tcplu]]\n\n-i Show specific resource\nResource specification:\n-a All (default)\n-m Shared memory segments\n-q Message queues\n-s Semaphore arrays\nOutput format:\n-c Creator\n-l Limits\n-p Pid\n-t Time\n-u Summary" + +#define HELP_ipcrm "usage: ipcrm [ [-q msqid] [-m shmid] [-s semid]\n [-Q msgkey] [-M shmkey] [-S semkey] ... ]\n\n-mM Remove memory segment after last detach\n-qQ Remove message queue\n-sS Remove semaphore" + +#define HELP_ip "usage: ip [ OPTIONS ] OBJECT { COMMAND }\n\nShow / manipulate routing, devices, policy routing and tunnels.\n\nwhere OBJECT := {address | link | route | rule | tunnel}\nOPTIONS := { -f[amily] { inet | inet6 | link } | -o[neline] }" + +#define HELP_init "usage: init\n\nSystem V style init.\n\nFirst program to run (as PID 1) when the system comes up, reading\n/etc/inittab to determine actions." + +#define HELP_host "usage: host [-av] [-t TYPE] NAME [SERVER]\n\nPerform DNS lookup on NAME, which can be a domain name to lookup,\nor an IPv4 dotted or IPv6 colon-separated address to reverse lookup.\nSERVER (if present) is the DNS server to use.\n\n-a -v -t ANY\n-t TYPE query records of type TYPE\n-v verbose" + +#define HELP_groupdel "usage: groupdel [USER] GROUP\n\nDelete a group or remove a user from a group" + +#define HELP_groupadd "usage: groupadd [-S] [-g GID] [USER] GROUP\n\nAdd a group or add a user to a group\n\n -g GID Group id\n -S Create a system group" + +#define HELP_getty "usage: getty [OPTIONS] BAUD_RATE[,BAUD_RATE]... TTY [TERMTYPE]\n\n-h Enable hardware RTS/CTS flow control\n-L Set CLOCAL (ignore Carrier Detect state)\n-m Get baud rate from modem's CONNECT status message\n-n Don't prompt for login name\n-w Wait for CR or LF before sending /etc/issue\n-i Don't display /etc/issue\n-f ISSUE_FILE Display ISSUE_FILE instead of /etc/issue\n-l LOGIN Invoke LOGIN instead of /bin/login\n-t SEC Terminate after SEC if no login name is read\n-I INITSTR Send INITSTR before anything else\n-H HOST Log HOST into the utmp file as the hostname" + +#define HELP_getopt "usage: getopt [OPTIONS] [--] ARG...\n\nParse command-line options for use in shell scripts.\n\n-a Allow long options starting with a single -.\n-l OPTS Specify long options.\n-n NAME Command name for error messages.\n-o OPTS Specify short options.\n-T Test whether this is a modern getopt.\n-u Output options unquoted." + +#define HELP_getfattr "usage: getfattr [-d] [-h] [-n NAME] FILE...\n\nRead POSIX extended attributes.\n\n-d Show values as well as names\n-h Do not dereference symbolic links\n-n Show only attributes with the given name\n--only-values Don't show names" + +#define HELP_fsck "usage: fsck [-ANPRTV] [-C FD] [-t FSTYPE] [FS_OPTS] [BLOCKDEV]...\n\nCheck and repair filesystems\n\n-A Walk /etc/fstab and check all filesystems\n-N Don't execute, just show what would be done\n-P With -A, check filesystems in parallel\n-R With -A, skip the root filesystem\n-T Don't show title on startup\n-V Verbose\n-C n Write status information to specified file descriptor\n-t TYPE List of filesystem types to check" + +#define HELP_fold "usage: fold [-bsu] [-w WIDTH] [FILE...]\n\nFolds (wraps) or unfolds ascii text by adding or removing newlines.\nDefault line width is 80 columns for folding and infinite for unfolding.\n\n-b Fold based on bytes instead of columns\n-s Fold/unfold at whitespace boundaries if possible\n-u Unfold text (and refold if -w is given)\n-w Set lines to WIDTH columns or bytes" + +#define HELP_fdisk "usage: fdisk [-lu] [-C CYLINDERS] [-H HEADS] [-S SECTORS] [-b SECTSZ] DISK\n\nChange partition table\n\n-u Start and End are in sectors (instead of cylinders)\n-l Show partition table for each DISK, then exit\n-b size sector size (512, 1024, 2048 or 4096)\n-C CYLINDERS Set number of cylinders/heads/sectors\n-H HEADS\n-S SECTORS" + +#define HELP_expr "usage: expr ARG1 OPERATOR ARG2...\n\nEvaluate expression and print result. For example, \"expr 1 + 2\".\n\nThe supported operators are (grouped from highest to lowest priority):\n\n ( ) : * / % + - != <= < >= > = & |\n\nEach constant and operator must be a separate command line argument.\nAll operators are infix, meaning they expect a constant (or expression\nthat resolves to a constant) on each side of the operator. Operators of\nthe same priority (within each group above) are evaluated left to right.\nParentheses may be used (as separate arguments) to elevate the priority\nof expressions.\n\nCalling expr from a command shell requires a lot of \\( or '*' escaping\nto avoid interpreting shell control characters.\n\nThe & and | operators are logical (not bitwise) and may operate on\nstrings (a blank string is \"false\"). Comparison operators may also\noperate on strings (alphabetical sort).\n\nConstants may be strings or integers. Comparison, logical, and regex\noperators may operate on strings (a blank string is \"false\"), other\noperators require integers." + +#define HELP_dumpleases "usage: dumpleases [-r|-a] [-f LEASEFILE]\n\nDisplay DHCP leases granted by udhcpd\n-f FILE, Lease file\n-r Show remaining time\n-a Show expiration time" + +#define HELP_diff "usage: diff [-abBdiNqrTstw] [-L LABEL] [-S FILE] [-U LINES] FILE1 FILE2\n\n-a Treat all files as text\n-b Ignore changes in the amount of whitespace\n-B Ignore changes whose lines are all blank\n-d Try hard to find a smaller set of changes\n-i Ignore case differences\n-L Use LABEL instead of the filename in the unified header\n-N Treat absent files as empty\n-q Output only whether files differ\n-r Recurse\n-S Start with FILE when comparing directories\n-T Make tabs line up by prefixing a tab when necessary\n-s Report when two files are the same\n-t Expand tabs to spaces in output\n-u Unified diff\n-U Output LINES lines of context\n-w Ignore all whitespace\n\n--color Colored output\n--strip-trailing-cr Strip trailing '\\r's from input lines" + +#define HELP_dhcpd "usage: dhcpd [-46fS] [-i IFACE] [-P N] [CONFFILE]\n\n -f Run in foreground\n -i Interface to use\n -S Log to syslog too\n -P N Use port N (default ipv4 67, ipv6 547)\n -4, -6 Run as a DHCPv4 or DHCPv6 server" + +#define HELP_dhcp6 "usage: dhcp6 [-fbnqvR] [-i IFACE] [-r IP] [-s PROG] [-p PIDFILE]\n\n Configure network dynamically using DHCP.\n\n -i Interface to use (default eth0)\n -p Create pidfile\n -s Run PROG at DHCP events\n -t Send up to N Solicit packets\n -T Pause between packets (default 3 seconds)\n -A Wait N seconds after failure (default 20)\n -f Run in foreground\n -b Background if lease is not obtained\n -n Exit if lease is not obtained\n -q Exit after obtaining lease\n -R Release IP on exit\n -S Log to syslog too\n -r Request this IP address\n -v Verbose\n\n Signals:\n USR1 Renew current lease\n USR2 Release current lease" + +#define HELP_dhcp "usage: dhcp [-fbnqvoCRB] [-i IFACE] [-r IP] [-s PROG] [-p PIDFILE]\n [-H HOSTNAME] [-V VENDOR] [-x OPT:VAL] [-O OPT]\n\n Configure network dynamically using DHCP.\n\n -i Interface to use (default eth0)\n -p Create pidfile\n -s Run PROG at DHCP events (default /usr/share/dhcp/default.script)\n -B Request broadcast replies\n -t Send up to N discover packets\n -T Pause between packets (default 3 seconds)\n -A Wait N seconds after failure (default 20)\n -f Run in foreground\n -b Background if lease is not obtained\n -n Exit if lease is not obtained\n -q Exit after obtaining lease\n -R Release IP on exit\n -S Log to syslog too\n -a Use arping to validate offered address\n -O Request option OPT from server (cumulative)\n -o Don't request any options (unless -O is given)\n -r Request this IP address\n -x OPT:VAL Include option OPT in sent packets (cumulative)\n -F Ask server to update DNS mapping for NAME\n -H Send NAME as client hostname (default none)\n -V VENDOR Vendor identifier (default 'toybox VERSION')\n -C Don't send MAC as client identifier\n -v Verbose\n\n Signals:\n USR1 Renew current lease\n USR2 Release current lease" + +#define HELP_dd "usage: dd [if=FILE] [of=FILE] [ibs=N] [obs=N] [iflag=FLAGS] [oflag=FLAGS]\n [bs=N] [count=N] [seek=N] [skip=N]\n [conv=notrunc|noerror|sync|fsync] [status=noxfer|none]\n\nCopy/convert files.\n\nif=FILE Read from FILE instead of stdin\nof=FILE Write to FILE instead of stdout\nbs=N Read and write N bytes at a time\nibs=N Input block size\nobs=N Output block size\ncount=N Copy only N input blocks\nskip=N Skip N input blocks\nseek=N Skip N output blocks\niflag=FLAGS Set input flags\noflag=FLAGS Set output flags\nconv=notrunc Don't truncate output file\nconv=noerror Continue after read errors\nconv=sync Pad blocks with zeros\nconv=fsync Physically write data out before finishing\nstatus=noxfer Don't show transfer rate\nstatus=none Don't show transfer rate or records in/out\n\nFLAGS is a comma-separated list of:\n\ncount_bytes (iflag) interpret count=N in bytes, not blocks\nseek_bytes (oflag) interpret seek=N in bytes, not blocks\nskip_bytes (iflag) interpret skip=N in bytes, not blocks\n\nNumbers may be suffixed by c (*1), w (*2), b (*512), kD (*1000), k (*1024),\nMD (*1000*1000), M (*1024*1024), GD (*1000*1000*1000) or G (*1024*1024*1024)." + +#define HELP_crontab "usage: crontab [-u user] FILE\n [-u user] [-e | -l | -r]\n [-c dir]\n\nFiles used to schedule the execution of programs.\n\n-c crontab dir\n-e edit user's crontab\n-l list user's crontab\n-r delete user's crontab\n-u user\nFILE Replace crontab by FILE ('-': stdin)" + +#define HELP_crond "usage: crond [-fbS] [-l N] [-d N] [-L LOGFILE] [-c DIR]\n\nA daemon to execute scheduled commands.\n\n-b Background (default)\n-c crontab dir\n-d Set log level, log to stderr\n-f Foreground\n-l Set log level. 0 is the most verbose, default 8\n-S Log to syslog (default)\n-L Log to file" + +#define HELP_brctl "usage: brctl COMMAND [BRIDGE [INTERFACE]]\n\nManage ethernet bridges\n\nCommands:\nshow Show a list of bridges\naddbr BRIDGE Create BRIDGE\ndelbr BRIDGE Delete BRIDGE\naddif BRIDGE IFACE Add IFACE to BRIDGE\ndelif BRIDGE IFACE Delete IFACE from BRIDGE\nsetageing BRIDGE TIME Set ageing time\nsetfd BRIDGE TIME Set bridge forward delay\nsethello BRIDGE TIME Set hello time\nsetmaxage BRIDGE TIME Set max message age\nsetpathcost BRIDGE PORT COST Set path cost\nsetportprio BRIDGE PORT PRIO Set port priority\nsetbridgeprio BRIDGE PRIO Set bridge priority\nstp BRIDGE [1/yes/on|0/no/off] STP on/off" + +#define HELP_bootchartd "usage: bootchartd {start [PROG ARGS]}|stop|init\n\nCreate /var/log/bootlog.tgz with boot chart data\n\nstart: start background logging; with PROG, run PROG,\n then kill logging with USR1\nstop: send USR1 to all bootchartd processes\ninit: start background logging; stop when getty/xdm is seen\n (for init scripts)\n\nUnder PID 1: as init, then exec $bootchart_init, /init, /sbin/init" + +#define HELP_bc "usage: bc [-ilqsw] [file ...]\n\nbc is a command-line calculator with a Turing-complete language.\n\noptions:\n\n -i --interactive force interactive mode\n -l --mathlib use predefined math routines:\n\n s(expr) = sine of expr in radians\n c(expr) = cosine of expr in radians\n a(expr) = arctangent of expr, returning radians\n l(expr) = natural log of expr\n e(expr) = raises e to the power of expr\n j(n, x) = Bessel function of integer order n of x\n\n -q --quiet don't print version and copyright\n -s --standard error if any non-POSIX extensions are used\n -w --warn warn if any non-POSIX extensions are used" + +#define HELP_arping "usage: arping [-fqbDUA] [-c CNT] [-w TIMEOUT] [-I IFACE] [-s SRC_IP] DST_IP\n\nSend ARP requests/replies\n\n-f Quit on first ARP reply\n-q Quiet\n-b Keep broadcasting, don't go unicast\n-D Duplicated address detection mode\n-U Unsolicited ARP mode, update your neighbors\n-A ARP answer mode, update your neighbors\n-c N Stop after sending N ARP requests\n-w TIMEOUT Time to wait for ARP reply, seconds\n-I IFACE Interface to use (default eth0)\n-s SRC_IP Sender IP address\nDST_IP Target IP address" + +#define HELP_arp "usage: arp\n[-vn] [-H HWTYPE] [-i IF] -a [HOSTNAME]\n[-v] [-i IF] -d HOSTNAME [pub]\n[-v] [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [temp]\n[-v] [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [netmask MASK] pub\n[-v] [-H HWTYPE] [-i IF] -Ds HOSTNAME IFACE [netmask MASK] pub\n\nManipulate ARP cache\n\n-a Display (all) hosts\n-s Set new ARP entry\n-d Delete a specified entry\n-v Verbose\n-n Don't resolve names\n-i IF Network interface\n-D Read from given device\n-A,-p AF Protocol family\n-H HWTYPE Hardware address type" + +#define HELP_xargs "usage: xargs [-0prt] [-s NUM] [-n NUM] [-E STR] COMMAND...\n\nRun command line one or more times, appending arguments from stdin.\n\nIf COMMAND exits with 255, don't launch another even if arguments remain.\n\n-0 Each argument is NULL terminated, no whitespace or quote processing\n-E Stop at line matching string\n-n Max number of arguments per command\n-o Open tty for COMMAND's stdin (default /dev/null)\n-p Prompt for y/n from tty before running each command\n-r Don't run command with empty input (otherwise always run command once)\n-s Size in bytes per command line\n-t Trace, print command line to stderr" + +#define HELP_who "usage: who\n\nPrint information about logged in users." + +#define HELP_wc "usage: wc -lwcm [FILE...]\n\nCount lines, words, and characters in input.\n\n-l Show lines\n-w Show words\n-c Show bytes\n-m Show characters\n\nBy default outputs lines, words, bytes, and filename for each\nargument (or from stdin if none). Displays only either bytes\nor characters." + +#define HELP_uuencode "usage: uuencode [-m] [INFILE] ENCODE_FILENAME\n\nUuencode stdin (or INFILE) to stdout, with ENCODE_FILENAME in the output.\n\n-m Base64" + +#define HELP_uudecode "usage: uudecode [-o OUTFILE] [INFILE]\n\nDecode file from stdin (or INFILE).\n\n-o Write to OUTFILE instead of filename in header" + +#define HELP_unlink "usage: unlink FILE\n\nDelete one file." + +#define HELP_uniq "usage: uniq [-cduiz] [-w MAXCHARS] [-f FIELDS] [-s CHAR] [INFILE [OUTFILE]]\n\nReport or filter out repeated lines in a file\n\n-c Show counts before each line\n-d Show only lines that are repeated\n-u Show only lines that are unique\n-i Ignore case when comparing lines\n-z Lines end with \\0 not \\n\n-w Compare maximum X chars per line\n-f Ignore first X fields\n-s Ignore first X chars" + +#define HELP_uname "usage: uname [-asnrvm]\n\nPrint system information.\n\n-s System name\n-n Network (domain) name\n-r Kernel Release number\n-v Kernel Version\n-m Machine (hardware) name\n-a All of the above" + +#define HELP_arch "usage: arch\n\nPrint machine (hardware) name, same as uname -m." + +#define HELP_ulimit "usage: ulimit [-P PID] [-SHRacdefilmnpqrstuv] [LIMIT]\n\nPrint or set resource limits for process number PID. If no LIMIT specified\n(or read-only -ap selected) display current value (sizes in bytes).\nDefault is ulimit -P $PPID -Sf\" (show soft filesize of your shell).\n\n-S Set/show soft limit -H Set/show hard (maximum) limit\n-a Show all limits -c Core file size\n-d Process data segment -e Max scheduling priority\n-f Output file size -i Pending signal count\n-l Locked memory -m Resident Set Size\n-n Number of open files -p Pipe buffer\n-q Posix message queue -r Max Real-time priority\n-R Realtime latency (usec) -s Stack size\n-t Total CPU time (in seconds) -u Maximum processes (under this UID)\n-v Virtual memory size -P PID to affect (default $PPID)" + +#define HELP_tty "usage: tty [-s]\n\nShow filename of terminal connected to stdin.\n\nPrints \"not a tty\" and exits with nonzero status if no terminal\nis connected to stdin.\n\n-s Silent, exit code only" + +#define HELP_true "usage: true\n\nReturn zero." + +#define HELP_touch "usage: touch [-amch] [-d DATE] [-t TIME] [-r FILE] FILE...\n\nUpdate the access and modification times of each FILE to the current time.\n\n-a Change access time\n-m Change modification time\n-c Don't create file\n-h Change symlink\n-d Set time to DATE (in YYYY-MM-DDThh:mm:SS[.frac][tz] format)\n-t Set time to TIME (in [[CC]YY]MMDDhhmm[.ss][frac] format)\n-r Set time same as reference FILE" + +#define HELP_time "usage: time [-pv] COMMAND...\n\nRun command line and report real, user, and system time elapsed in seconds.\n(real = clock on the wall, user = cpu used by command's code,\nsystem = cpu used by OS on behalf of command.)\n\n-p POSIX format output (default)\n-v Verbose" + +#define HELP_test "usage: test [-bcdefghLPrSsuwx PATH] [-nz STRING] [-t FD] [X ?? Y]\n\nReturn true or false by performing tests. (With no arguments return false.)\n\n--- Tests with a single argument (after the option):\nPATH is/has:\n -b block device -f regular file -p fifo -u setuid bit\n -c char device -g setgid -r read bit -w write bit\n -d directory -h symlink -S socket -x execute bit\n -e exists -L symlink -s nonzero size\nSTRING is:\n -n nonzero size -z zero size (STRING by itself implies -n)\nFD (integer file descriptor) is:\n -t a TTY\n\n--- Tests with one argument on each side of an operator:\nTwo strings:\n = are identical != differ\nTwo integers:\n -eq equal -gt first > second -lt first < second\n -ne not equal -ge first >= second -le first <= second\n\n--- Modify or combine tests:\n ! EXPR not (swap true/false) EXPR -a EXPR and (are both true)\n ( EXPR ) evaluate this first EXPR -o EXPR or (is either true)" + +#define HELP_tee "usage: tee [-ai] [FILE...]\n\nCopy stdin to each listed file, and also to stdout.\nFilename \"-\" is a synonym for stdout.\n\n-a Append to files\n-i Ignore SIGINT" + +#define HELP_tar "usage: tar [-cxt] [-fvohmjkOS] [-XTCf NAME] [FILE...]\n\nCreate, extract, or list files in a .tar (or compressed t?z) file.\n\nOptions:\nc Create x Extract t Test (list)\nf tar FILE (default -) C Change to DIR first v Verbose display\no Ignore owner h Follow symlinks m Ignore mtime\nJ xz compression j bzip2 compression z gzip compression\nO Extract to stdout X exclude names in FILE T include names in FILE\n\n--exclude FILENAME to exclude --full-time Show seconds with -tv\n--mode MODE Adjust modes --mtime TIME Override timestamps\n--owner NAME Set file owner to NAME --group NAME Set file group to NAME\n--sparse Record sparse files\n--restrict All archive contents must extract under one subdirctory\n--numeric-owner Save/use/display uid and gid, not user/group name\n--no-recursion Don't store directory contents" + +#define HELP_tail "usage: tail [-n|c NUMBER] [-f] [FILE...]\n\nCopy last lines from files to stdout. If no files listed, copy from\nstdin. Filename \"-\" is a synonym for stdin.\n\n-n Output the last NUMBER lines (default 10), +X counts from start\n-c Output the last NUMBER bytes, +NUMBER counts from start\n-f Follow FILE(s), waiting for more data to be appended" + +#define HELP_strings "usage: strings [-fo] [-t oxd] [-n LEN] [FILE...]\n\nDisplay printable strings in a binary file\n\n-f Show filename\n-n At least LEN characters form a string (default 4)\n-o Show offset (ala -t d)\n-t Show offset type (o=octal, d=decimal, x=hexadecimal)" + +#define HELP_split "usage: split [-a SUFFIX_LEN] [-b BYTES] [-l LINES] [INPUT [OUTPUT]]\n\nCopy INPUT (or stdin) data to a series of OUTPUT (or \"x\") files with\nalphabetically increasing suffix (aa, ab, ac... az, ba, bb...).\n\n-a Suffix length (default 2)\n-b BYTES/file (10, 10k, 10m, 10g...)\n-l LINES/file (default 1000)" + +#define HELP_sort "usage: sort [-Mbcdfginrsuz] [FILE...] [-k#[,#[x]] [-t X]] [-o FILE]\n\nSort all lines of text from input files (or stdin) to stdout.\n-M Month sort (jan, feb, etc)\n-V Version numbers (name-1.234-rc6.5b.tgz)\n-b Ignore leading blanks (or trailing blanks in second part of key)\n-c Check whether input is sorted\n-d Dictionary order (use alphanumeric and whitespace chars only)\n-f Force uppercase (case insensitive sort)\n-g General numeric sort (double precision with nan and inf)\n-i Ignore nonprinting characters\n-k Sort by \"key\" (see below)\n-n Numeric order (instead of alphabetical)\n-o Output to FILE instead of stdout\n-r Reverse\n-s Skip fallback sort (only sort with keys)\n-t Use a key separator other than whitespace\n-u Unique lines only\n-x Hexadecimal numerical sort\n-z Zero (null) terminated lines\n\nSorting by key looks at a subset of the words on each line. -k2 uses the\nsecond word to the end of the line, -k2,2 looks at only the second word,\n-k2,4 looks from the start of the second to the end of the fourth word.\n-k2.4,5 starts from the fourth character of the second word, to the end\nof the fifth word. Specifying multiple keys uses the later keys as tie\nbreakers, in order. A type specifier appended to a sort key (such as -2,2n)\napplies only to sorting that key." + +#define HELP_sleep "usage: sleep DURATION\n\nWait before exiting.\n\nDURATION can be a decimal fraction. An optional suffix can be \"m\"\n(minutes), \"h\" (hours), \"d\" (days), or \"s\" (seconds, the default)." + +#define HELP_sed "usage: sed [-inrzE] [-e SCRIPT]...|SCRIPT [-f SCRIPT_FILE]... [FILE...]\n\nStream editor. Apply one or more editing SCRIPTs to each line of input\n(from FILE or stdin) producing output (by default to stdout).\n\n-e Add SCRIPT to list\n-f Add contents of SCRIPT_FILE to list\n-i Edit each file in place (-iEXT keeps backup file with extension EXT)\n-n No default output (use the p command to output matched lines)\n-r Use extended regular expression syntax\n-E POSIX alias for -r\n-s Treat input files separately (implied by -i)\n-z Use \\0 rather than \\n as the input line separator\n\nA SCRIPT is a series of one or more COMMANDs separated by newlines or\nsemicolons. All -e SCRIPTs are concatenated together as if separated\nby newlines, followed by all lines from -f SCRIPT_FILEs, in order.\nIf no -e or -f SCRIPTs are specified, the first argument is the SCRIPT.\n\nEach COMMAND may be preceded by an address which limits the command to\napply only to the specified line(s). Commands without an address apply to\nevery line. Addresses are of the form:\n\n [ADDRESS[,ADDRESS]][!]COMMAND\n\nThe ADDRESS may be a decimal line number (starting at 1), a /regular\nexpression/ within a pair of forward slashes, or the character \"$\" which\nmatches the last line of input. (In -s or -i mode this matches the last\nline of each file, otherwise just the last line of the last file.) A single\naddress matches one line, a pair of comma separated addresses match\neverything from the first address to the second address (inclusive). If\nboth addresses are regular expressions, more than one range of lines in\neach file can match. The second address can be +N to end N lines later.\n\nREGULAR EXPRESSIONS in sed are started and ended by the same character\n(traditionally / but anything except a backslash or a newline works).\nBackslashes may be used to escape the delimiter if it occurs in the\nregex, and for the usual printf escapes (\\abcefnrtv and octal, hex,\nand unicode). An empty regex repeats the previous one. ADDRESS regexes\n(above) require the first delimiter to be escaped with a backslash when\nit isn't a forward slash (to distinguish it from the COMMANDs below).\n\nSed mostly operates on individual lines one at a time. It reads each line,\nprocesses it, and either writes it to the output or discards it before\nreading the next line. Sed can remember one additional line in a separate\nbuffer (using the h, H, g, G, and x commands), and can read the next line\nof input early (using the n and N command), but other than that command\nscripts operate on individual lines of text.\n\nEach COMMAND starts with a single character. The following commands take\nno arguments:\n\n ! Run this command when the test _didn't_ match.\n\n { Start a new command block, continuing until a corresponding \"}\".\n Command blocks may nest. If the block has an address, commands within\n the block are only run for lines within the block's address range.\n\n } End command block (this command cannot have an address)\n\n d Delete this line and move on to the next one\n (ignores remaining COMMANDs)\n\n D Delete one line of input and restart command SCRIPT (same as \"d\"\n unless you've glued lines together with \"N\" or similar)\n\n g Get remembered line (overwriting current line)\n\n G Get remembered line (appending to current line)\n\n h Remember this line (overwriting remembered line)\n\n H Remember this line (appending to remembered line, if any)\n\n l Print line, escaping \\abfrtv (but not newline), octal escaping other\n nonprintable characters, wrapping lines to terminal width with a\n backslash, and appending $ to actual end of line.\n\n n Print default output and read next line, replacing current line\n (If no next line available, quit processing script)\n\n N Append next line of input to this line, separated by a newline\n (This advances the line counter for address matching and \"=\", if no\n next line available quit processing script without default output)\n\n p Print this line\n\n P Print this line up to first newline (from \"N\")\n\n q Quit (print default output, no more commands processed or lines read)\n\n x Exchange this line with remembered line (overwrite in both directions)\n\n = Print the current line number (followed by a newline)\n\nThe following commands (may) take an argument. The \"text\" arguments (to\nthe \"a\", \"b\", and \"c\" commands) may end with an unescaped \"\\\" to append\nthe next line (for which leading whitespace is not skipped), and also\ntreat \";\" as a literal character (use \"\\;\" instead).\n\n a [text] Append text to output before attempting to read next line\n\n b [label] Branch, jumps to :label (or with no label, to end of SCRIPT)\n\n c [text] Delete line, output text at end of matching address range\n (ignores remaining COMMANDs)\n\n i [text] Print text\n\n r [file] Append contents of file to output before attempting to read\n next line.\n\n s/S/R/F Search for regex S, replace matched text with R using flags F.\n The first character after the \"s\" (anything but newline or\n backslash) is the delimiter, escape with \\ to use normally.\n\n The replacement text may contain \"&\" to substitute the matched\n text (escape it with backslash for a literal &), or \\1 through\n \\9 to substitute a parenthetical subexpression in the regex.\n You can also use the normal backslash escapes such as \\n and\n a backslash at the end of the line appends the next line.\n\n The flags are:\n\n [0-9] A number, substitute only that occurrence of pattern\n g Global, substitute all occurrences of pattern\n i Ignore case when matching\n p Print the line if match was found and replaced\n w [file] Write (append) line to file if match replaced\n\n t [label] Test, jump to :label only if an \"s\" command found a match in\n this line since last test (replacing with same text counts)\n\n T [label] Test false, jump only if \"s\" hasn't found a match.\n\n w [file] Write (append) line to file\n\n y/old/new/ Change each character in 'old' to corresponding character\n in 'new' (with standard backslash escapes, delimiter can be\n any repeated character except \\ or \\n)\n\n : [label] Labeled target for jump commands\n\n # Comment, ignore rest of this line of SCRIPT\n\nDeviations from POSIX: allow extended regular expressions with -r,\nediting in place with -i, separate with -s, NUL-separated input with -z,\nprintf escapes in text, line continuations, semicolons after all commands,\n2-address anywhere an address is allowed, \"T\" command, multiline\ncontinuations for [abc], \\; to end [abc] argument before end of line." + +#define HELP_rmdir "usage: rmdir [-p] [DIR...]\n\nRemove one or more directories.\n\n-p Remove path\n--ignore-fail-on-non-empty Ignore failures caused by non-empty directories" + +#define HELP_rm "usage: rm [-fiRrv] FILE...\n\nRemove each argument from the filesystem.\n\n-f Force: remove without confirmation, no error if it doesn't exist\n-i Interactive: prompt for confirmation\n-rR Recursive: remove directory contents\n-v Verbose" + +#define HELP_renice "usage: renice [-gpu] -n INCREMENT ID..." + +#define HELP_pwd "usage: pwd [-L|-P]\n\nPrint working (current) directory.\n\n-L Use shell's path from $PWD (when applicable)\n-P Print canonical absolute path" + +#define HELP_pkill "usage: pkill [-fnovx] [-SIGNAL|-l SIGNAL] [PATTERN] [-G GID,] [-g PGRP,] [-P PPID,] [-s SID,] [-t TERM,] [-U UID,] [-u EUID,]\n\n-l Send SIGNAL (default SIGTERM)\n-V Verbose\n-f Check full command line for PATTERN\n-G Match real Group ID(s)\n-g Match Process Group(s) (0 is current user)\n-n Newest match only\n-o Oldest match only\n-P Match Parent Process ID(s)\n-s Match Session ID(s) (0 for current)\n-t Match Terminal(s)\n-U Match real User ID(s)\n-u Match effective User ID(s)\n-v Negate the match\n-x Match whole command (not substring)" + +#define HELP_pgrep "usage: pgrep [-clfnovx] [-d DELIM] [-L SIGNAL] [PATTERN] [-G GID,] [-g PGRP,] [-P PPID,] [-s SID,] [-t TERM,] [-U UID,] [-u EUID,]\n\nSearch for process(es). PATTERN is an extended regular expression checked\nagainst command names.\n\n-c Show only count of matches\n-d Use DELIM instead of newline\n-L Send SIGNAL instead of printing name\n-l Show command name\n-f Check full command line for PATTERN\n-G Match real Group ID(s)\n-g Match Process Group(s) (0 is current user)\n-n Newest match only\n-o Oldest match only\n-P Match Parent Process ID(s)\n-s Match Session ID(s) (0 for current)\n-t Match Terminal(s)\n-U Match real User ID(s)\n-u Match effective User ID(s)\n-v Negate the match\n-x Match whole command (not substring)" + +#define HELP_iotop "usage: iotop [-AaKObq] [-n NUMBER] [-d SECONDS] [-p PID,] [-u USER,]\n\nRank processes by I/O.\n\n-A All I/O, not just disk\n-a Accumulated I/O (not percentage)\n-H Show threads\n-K Kilobytes\n-k Fallback sort FIELDS (default -[D]IO,-ETIME,-PID)\n-m Maximum number of tasks to show\n-O Only show processes doing I/O\n-o Show FIELDS (default PID,PR,USER,[D]READ,[D]WRITE,SWAP,[D]IO,COMM)\n-s Sort by field number (0-X, default 6)\n-b Batch mode (no tty)\n-d Delay SECONDS between each cycle (default 3)\n-n Exit after NUMBER iterations\n-p Show these PIDs\n-u Show these USERs\n-q Quiet (no header lines)\n\nCursor LEFT/RIGHT to change sort, UP/DOWN move list, space to force\nupdate, R to reverse sort, Q to exit." + +#define HELP_top "usage: top [-Hbq] [-k FIELD,] [-o FIELD,] [-s SORT] [-n NUMBER] [-m LINES] [-d SECONDS] [-p PID,] [-u USER,]\n\nShow process activity in real time.\n\n-H Show threads\n-k Fallback sort FIELDS (default -S,-%CPU,-ETIME,-PID)\n-o Show FIELDS (def PID,USER,PR,NI,VIRT,RES,SHR,S,%CPU,%MEM,TIME+,CMDLINE)\n-O Add FIELDS (replacing PR,NI,VIRT,RES,SHR,S from default)\n-s Sort by field number (1-X, default 9)\n-b Batch mode (no tty)\n-d Delay SECONDS between each cycle (default 3)\n-m Maximum number of tasks to show\n-n Exit after NUMBER iterations\n-p Show these PIDs\n-u Show these USERs\n-q Quiet (no header lines)\n\nCursor LEFT/RIGHT to change sort, UP/DOWN move list, space to force\nupdate, R to reverse sort, Q to exit." + +#define HELP_ps "usage: ps [-AadefLlnwZ] [-gG GROUP,] [-k FIELD,] [-o FIELD,] [-p PID,] [-t TTY,] [-uU USER,]\n\nList processes.\n\nWhich processes to show (-gGuUpPt selections may be comma separated lists):\n\n-A All -a Has terminal not session leader\n-d All but session leaders -e Synonym for -A\n-g In GROUPs -G In real GROUPs (before sgid)\n-p PIDs (--pid) -P Parent PIDs (--ppid)\n-s In session IDs -t Attached to selected TTYs\n-T Show threads also -u Owned by selected USERs\n-U Real USERs (before suid)\n\nOutput modifiers:\n\n-k Sort FIELDs (-FIELD to reverse) -M Measure/pad future field widths\n-n Show numeric USER and GROUP -w Wide output (don't truncate fields)\n\nWhich FIELDs to show. (-o HELP for list, default = -o PID,TTY,TIME,CMD)\n\n-f Full listing (-o USER:12=UID,PID,PPID,C,STIME,TTY,TIME,ARGS=CMD)\n-l Long listing (-o F,S,UID,PID,PPID,C,PRI,NI,ADDR,SZ,WCHAN,TTY,TIME,CMD)\n-o Output FIELDs instead of defaults, each with optional :size and =title\n-O Add FIELDS to defaults\n-Z Include LABEL" + +#define HELP_printf "usage: printf FORMAT [ARGUMENT...]\n\nFormat and print ARGUMENT(s) according to FORMAT, using C printf syntax\n(% escapes for cdeEfgGiosuxX, \\ escapes for abefnrtv0 or \\OCTAL or \\xHEX)." + +#define HELP_patch "usage: patch [-d DIR] [-i PATCH] [-p DEPTH] [-F FUZZ] [-Rlsu] [--dry-run] [FILE [PATCH]]\n\nApply a unified diff to one or more files.\n\n-d Modify files in DIR\n-i Input patch file (default=stdin)\n-l Loose match (ignore whitespace)\n-p Number of '/' to strip from start of file paths (default=all)\n-R Reverse patch\n-s Silent except for errors\n-u Ignored (only handles \"unified\" diffs)\n--dry-run Don't change files, just confirm patch applies\n\nThis version of patch only handles unified diffs, and only modifies\na file when all hunks to that file apply. Patch prints failed hunks\nto stderr, and exits with nonzero status if any hunks fail.\n\nA file compared against /dev/null (or with a date <= the epoch) is\ncreated/deleted as appropriate." + +#define HELP_paste "usage: paste [-s] [-d DELIMITERS] [FILE...]\n\nMerge corresponding lines from each input file.\n\n-d List of delimiter characters to separate fields with (default is \\t)\n-s Sequential mode: turn each input file into one line of output" + +#define HELP_od "usage: od [-bcdosxv] [-j #] [-N #] [-w #] [-A doxn] [-t acdfoux[#]]\n\nDump data in octal/hex.\n\n-A Address base (decimal, octal, hexadecimal, none)\n-j Skip this many bytes of input\n-N Stop dumping after this many bytes\n-t Output type a(scii) c(har) d(ecimal) f(loat) o(ctal) u(nsigned) (he)x\n plus optional size in bytes\n aliases: -b=-t o1, -c=-t c, -d=-t u2, -o=-t o2, -s=-t d2, -x=-t x2\n-v Don't collapse repeated lines together\n-w Total line width in bytes (default 16)" + +#define HELP_nohup "usage: nohup COMMAND...\n\nRun a command that survives the end of its terminal.\n\nRedirect tty on stdin to /dev/null, tty on stdout to \"nohup.out\"." + +#define HELP_nl "usage: nl [-E] [-l #] [-b MODE] [-n STYLE] [-s SEPARATOR] [-v #] [-w WIDTH] [FILE...]\n\nNumber lines of input.\n\n-E Use extended regex syntax (when doing -b pREGEX)\n-b Which lines to number: a (all) t (non-empty, default) pREGEX (pattern)\n-l Only count last of this many consecutive blank lines\n-n Number STYLE: ln (left justified) rn (right justified) rz (zero pad)\n-s Separator to use between number and line (instead of TAB)\n-v Starting line number for each section (default 1)\n-w Width of line numbers (default 6)" + +#define HELP_nice "usage: nice [-n PRIORITY] COMMAND...\n\nRun a command line at an increased or decreased scheduling priority.\n\nHigher numbers make a program yield more CPU time, from -20 (highest\npriority) to 19 (lowest). By default processes inherit their parent's\nniceness (usually 0). By default this command adds 10 to the parent's\npriority. Only root can set a negative niceness level." + +#define HELP_mkfifo "usage: mkfifo [-Z CONTEXT] [NAME...]\n\nCreate FIFOs (named pipes).\n\n-Z Security context" + +#define HELP_mkdir_z "usage: [-Z context]\n\n-Z Set security context" + +#define HELP_mkdir "usage: mkdir [-vp] [-m MODE] [DIR...]\n\nCreate one or more directories.\n\n-m Set permissions of directory to mode\n-p Make parent directories as needed\n-v Verbose" + +#define HELP_ls "usage: ls [-ACFHLRSZacdfhiklmnpqrstuwx1] [--color[=auto]] [FILE...]\n\nList files.\n\nwhat to show:\n-a all files including .hidden -b escape nongraphic chars\n-c use ctime for timestamps -d directory, not contents\n-i inode number -p put a '/' after dir names\n-q unprintable chars as '?' -s storage used (1024 byte units)\n-u use access time for timestamps -A list all files but . and ..\n-H follow command line symlinks -L follow symlinks\n-R recursively list in subdirs -F append /dir *exe @sym |FIFO\n-Z security context\n\noutput formats:\n-1 list one file per line -C columns (sorted vertically)\n-g like -l but no owner -h human readable sizes\n-l long (show full details) -m comma separated\n-n like -l but numeric uid/gid -o like -l but no group\n-w set column width -x columns (horizontal sort)\n-ll long with nanoseconds (--full-time)\n--color device=yellow symlink=turquoise/red dir=blue socket=purple\n files: exe=green suid=red suidfile=redback stickydir=greenback\n =auto means detect if output is a tty.\n\nsorting (default is alphabetical):\n-f unsorted -r reverse -t timestamp -S size" + +#define HELP_logger "usage: logger [-s] [-t TAG] [-p [FACILITY.]PRIORITY] [MESSAGE...]\n\nLog message (or stdin) to syslog.\n\n-s Also write message to stderr\n-t Use TAG instead of username to identify message source\n-p Specify PRIORITY with optional FACILITY. Default is \"user.notice\"" + +#define HELP_ln "usage: ln [-sfnv] [-t DIR] [FROM...] TO\n\nCreate a link between FROM and TO.\nOne/two/many arguments work like \"mv\" or \"cp\".\n\n-s Create a symbolic link\n-f Force the creation of the link, even if TO already exists\n-n Symlink at TO treated as file\n-r Create relative symlink from -> to\n-t Create links in DIR\n-T TO always treated as file, max 2 arguments\n-v Verbose" + +#define HELP_link "usage: link FILE NEWLINK\n\nCreate hardlink to a file." + +#define HELP_killall5 "usage: killall5 [-l [SIGNAL]] [-SIGNAL|-s SIGNAL] [-o PID]...\n\nSend a signal to all processes outside current session.\n\n-l List signal name(s) and number(s)\n-o PID Omit PID\n-s Send SIGNAL (default SIGTERM)" + +#define HELP_kill "usage: kill [-l [SIGNAL] | -s SIGNAL | -SIGNAL] PID...\n\nSend signal to process(es).\n\n-l List signal name(s) and number(s)\n-s Send SIGNAL (default SIGTERM)" + +#define HELP_whoami "usage: whoami\n\nPrint the current user name." + +#define HELP_logname "usage: logname\n\nPrint the current user name." + +#define HELP_groups "usage: groups [user]\n\nPrint the groups a user is in." + +#define HELP_id "usage: id [-GZgnru] [USER...]\n\nPrint user and group ID.\n-G Show all group IDs\n-Z Show only security context\n-g Show only the effective group ID\n-n Print names instead of numeric IDs (to be used with -Ggu)\n-r Show real ID instead of effective ID\n-u Show only the effective user ID" + +#define HELP_iconv "usage: iconv [-f FROM] [-t TO] [FILE...]\n\nConvert character encoding of files.\n\n-c Omit invalid chars\n-f Convert from (default UTF-8)\n-t Convert to (default UTF-8)" + +#define HELP_head "usage: head [-n NUM] [FILE...]\n\nCopy first lines from files to stdout. If no files listed, copy from\nstdin. Filename \"-\" is a synonym for stdin.\n\n-n Number of lines to copy\n-c Number of bytes to copy\n-q Never print headers\n-v Always print headers" + +#define HELP_grep "usage: grep [-EFrivwcloqsHbhn] [-ABC NUM] [-m MAX] [-e REGEX]... [-MS PATTERN]... [-f REGFILE] [FILE]...\n\nShow lines matching regular expressions. If no -e, first argument is\nregular expression to match. With no files (or \"-\" filename) read stdin.\nReturns 0 if matched, 1 if no match found, 2 for command errors.\n\n-e Regex to match. (May be repeated.)\n-f File listing regular expressions to match.\n\nfile search:\n-r Recurse into subdirectories (defaults FILE to \".\")\n-R Recurse into subdirectories and symlinks to directories\n-M Match filename pattern (--include)\n-S Skip filename pattern (--exclude)\n--exclude-dir=PATTERN Skip directory pattern\n-I Ignore binary files\n\nmatch type:\n-A Show NUM lines after -B Show NUM lines before match\n-C NUM lines context (A+B) -E extended regex syntax\n-F fixed (literal match) -a always text (not binary)\n-i case insensitive -m match MAX many lines\n-v invert match -w whole word (implies -E)\n-x whole line -z input NUL terminated\n\ndisplay modes: (default: matched line)\n-c count of matching lines -l show only matching filenames\n-o only matching part -q quiet (errors only)\n-s silent (no error msg) -Z output NUL terminated\n\noutput prefix (default: filename if checking more than 1 file)\n-H force filename -b byte offset of match\n-h hide filename -n line number of match" + +#define HELP_getconf "usage: getconf -a [PATH] | -l | NAME [PATH]\n\nGet system configuration values. Values from pathconf(3) require a path.\n\n-a Show all (defaults to \"/\" if no path given)\n-l List available value names (grouped by source)" + +#define HELP_find "usage: find [-HL] [DIR...] []\n\nSearch directories for matching files.\nDefault: search \".\", match all, -print matches.\n\n-H Follow command line symlinks -L Follow all symlinks\n\nMatch filters:\n-name PATTERN filename with wildcards (-iname case insensitive)\n-path PATTERN path name with wildcards (-ipath case insensitive)\n-user UNAME belongs to user UNAME -nouser user ID not known\n-group GROUP belongs to group GROUP -nogroup group ID not known\n-perm [-/]MODE permissions (-=min /=any) -prune ignore dir contents\n-size N[c] 512 byte blocks (c=bytes) -xdev only this filesystem\n-links N hardlink count -atime N[u] accessed N units ago\n-ctime N[u] created N units ago -mtime N[u] modified N units ago\n-newer FILE newer mtime than FILE -mindepth N at least N dirs down\n-depth ignore contents of dir -maxdepth N at most N dirs down\n-inum N inode number N -empty empty files and dirs\n-type [bcdflps] type is (block, char, dir, file, symlink, pipe, socket)\n-true always true -false always false\n-context PATTERN security context\n-newerXY FILE X=acm time > FILE's Y=acm time (Y=t: FILE is literal time)\n\nNumbers N may be prefixed by a - (less than) or + (greater than). Units for\n-Xtime are d (days, default), h (hours), m (minutes), or s (seconds).\n\nCombine matches with:\n!, -a, -o, ( ) not, and, or, group expressions\n\nActions:\n-print Print match with newline -print0 Print match with null\n-exec Run command with path -execdir Run command in file's dir\n-ok Ask before exec -okdir Ask before execdir\n-delete Remove matching file/dir -printf FORMAT Print using format string\n\nCommands substitute \"{}\" with matched file. End with \";\" to run each file,\nor \"+\" (next argument after \"{}\") to collect and run with multiple files.\n\n-printf FORMAT characters are \\ escapes and:\n%b 512 byte blocks used\n%f basename %g textual gid %G numeric gid\n%i decimal inode %l target of symlink %m octal mode\n%M ls format type/mode %p path to file %P path to file minus DIR\n%s size in bytes %T@ mod time as unixtime\n%u username %U numeric uid %Z security context" + +#define HELP_file "usage: file [-bhLs] [FILE...]\n\nExamine the given files and describe their content types.\n\n-b Brief (no filename)\n-h Don't follow symlinks (default)\n-L Follow symlinks\n-s Show block/char device contents" + +#define HELP_false "usage: false\n\nReturn nonzero." + +#define HELP_expand "usage: expand [-t TABLIST] [FILE...]\n\nExpand tabs to spaces according to tabstops.\n\n-t TABLIST\n\nSpecify tab stops, either a single number instead of the default 8,\nor a comma separated list of increasing numbers representing tabstop\npositions (absolute, not increments) with each additional tab beyond\nthat becoming one space." + +#define HELP_env "usage: env [-i] [-u NAME] [NAME=VALUE...] [COMMAND...]\n\nSet the environment for command invocation, or list environment variables.\n\n-i Clear existing environment\n-u NAME Remove NAME from the environment\n-0 Use null instead of newline in output" + +#define HELP_echo "usage: echo [-neE] [ARG...]\n\nWrite each argument to stdout, with one space between each, followed\nby a newline.\n\n-n No trailing newline\n-E Print escape sequences literally (default)\n-e Process the following escape sequences:\n \\\\ Backslash\n \\0NNN Octal values (1 to 3 digits)\n \\a Alert (beep/flash)\n \\b Backspace\n \\c Stop output here (avoids trailing newline)\n \\f Form feed\n \\n Newline\n \\r Carriage return\n \\t Horizontal tab\n \\v Vertical tab\n \\xHH Hexadecimal values (1 to 2 digits)" + +#define HELP_du "usage: du [-d N] [-askxHLlmc] [FILE...]\n\nShow disk usage, space consumed by files and directories.\n\nSize in:\n-k 1024 byte blocks (default)\n-K 512 byte blocks (posix)\n-m Megabytes\n-h Human readable (e.g., 1K 243M 2G)\n\nWhat to show:\n-a All files, not just directories\n-H Follow symlinks on cmdline\n-L Follow all symlinks\n-s Only total size of each argument\n-x Don't leave this filesystem\n-c Cumulative total\n-d N Only depth < N\n-l Disable hardlink filter" + +#define HELP_dirname "usage: dirname PATH...\n\nShow directory portion of path." + +#define HELP_df "usage: df [-HPkhi] [-t type] [FILE...]\n\nThe \"disk free\" command shows total/used/available disk space for\neach filesystem listed on the command line, or all currently mounted\nfilesystems.\n\n-a Show all (including /proc and friends)\n-P The SUSv3 \"Pedantic\" option\n-k Sets units back to 1024 bytes (the default without -P)\n-h Human readable (K=1024)\n-H Human readable (k=1000)\n-i Show inodes instead of blocks\n-t type Display only filesystems of this type\n\nPedantic provides a slightly less useful output format dictated by Posix,\nand sets the units to 512 bytes instead of the default 1024 bytes." + +#define HELP_date "usage: date [-u] [-r FILE] [-d DATE] [+DISPLAY_FORMAT] [-D SET_FORMAT] [SET]\n\nSet/get the current date/time. With no SET shows the current date.\n\n-d Show DATE instead of current time (convert date format)\n-D +FORMAT for SET or -d (instead of MMDDhhmm[[CC]YY][.ss])\n-r Use modification time of FILE instead of current date\n-u Use UTC instead of current timezone\n\nSupported input formats:\n\nMMDDhhmm[[CC]YY][.ss] POSIX\n@UNIXTIME[.FRACTION] seconds since midnight 1970-01-01\nYYYY-MM-DD [hh:mm[:ss]] ISO 8601\nhh:mm[:ss] 24-hour time today\n\nAll input formats can be preceded by TZ=\"id\" to set the input time zone\nseparately from the output time zone. Otherwise $TZ sets both.\n\n+FORMAT specifies display format string using strftime(3) syntax:\n\n%% literal % %n newline %t tab\n%S seconds (00-60) %M minute (00-59) %m month (01-12)\n%H hour (0-23) %I hour (01-12) %p AM/PM\n%y short year (00-99) %Y year %C century\n%a short weekday name %A weekday name %u day of week (1-7, 1=mon)\n%b short month name %B month name %Z timezone name\n%j day of year (001-366) %d day of month (01-31) %e day of month ( 1-31)\n%N nanosec (output only)\n\n%U Week of year (0-53 start sunday) %W Week of year (0-53 start monday)\n%V Week of year (1-53 start monday, week < 4 days not part of this year)\n\n%F \"%Y-%m-%d\" %R \"%H:%M\" %T \"%H:%M:%S\" %z numeric timezone\n%D \"%m/%d/%y\" %r \"%I:%M:%S %p\" %h \"%b\" %s unix epoch time\n%x locale date %X locale time %c locale date/time" + +#define HELP_cut "usage: cut [-Ds] [-bcfF LIST] [-dO DELIM] [FILE...]\n\nPrint selected parts of lines from each FILE to standard output.\n\nEach selection LIST is comma separated, either numbers (counting from 1)\nor dash separated ranges (inclusive, with X- meaning to end of line and -X\nfrom start). By default selection ranges are sorted and collated, use -D\nto prevent that.\n\n-b Select bytes\n-c Select UTF-8 characters\n-C Select unicode columns\n-d Use DELIM (default is TAB for -f, run of whitespace for -F)\n-D Don't sort/collate selections or match -fF lines without delimiter\n-f Select fields (words) separated by single DELIM character\n-F Select fields separated by DELIM regex\n-O Output delimiter (default one space for -F, input delim for -f)\n-s Skip lines without delimiters" + +#define HELP_cpio "usage: cpio -{o|t|i|p DEST} [-v] [--verbose] [-F FILE] [--no-preserve-owner]\n [ignored: -mdu -H newc]\n\nCopy files into and out of a \"newc\" format cpio archive.\n\n-F FILE Use archive FILE instead of stdin/stdout\n-p DEST Copy-pass mode, copy stdin file list to directory DEST\n-i Extract from archive into file system (stdin=archive)\n-o Create archive (stdin=list of files, stdout=archive)\n-t Test files (list only, stdin=archive, stdout=list of files)\n-v Verbose\n--no-preserve-owner (don't set ownership during extract)\n--trailer Add legacy trailer (prevents concatenation)" + +#define HELP_install "usage: install [-dDpsv] [-o USER] [-g GROUP] [-m MODE] [SOURCE...] DEST\n\nCopy files and set attributes.\n\n-d Act like mkdir -p\n-D Create leading directories for DEST\n-g Make copy belong to GROUP\n-m Set permissions to MODE\n-o Make copy belong to USER\n-p Preserve timestamps\n-s Call \"strip -p\"\n-v Verbose" + +#define HELP_mv "usage: mv [-finTv] SOURCE... DEST\n\n-f Force copy by deleting destination file\n-i Interactive, prompt before overwriting existing DEST\n-n No clobber (don't overwrite DEST)\n-T DEST always treated as file, max 2 arguments\n-v Verbose" + +#define HELP_cp_preserve "--preserve takes either a comma separated list of attributes, or the first\nletter(s) of:\n\n mode - permissions (ignore umask for rwx, copy suid and sticky bit)\n ownership - user and group\n timestamps - file creation, modification, and access times.\n context - security context\n xattr - extended attributes\n all - all of the above\n\nusage: cp [--preserve=motcxa] [-adfHiLlnPpRrsTv] SOURCE... DEST\n\nCopy files from SOURCE to DEST. If more than one SOURCE, DEST must\nbe a directory.\n-v Verbose\n-T DEST always treated as file, max 2 arguments\n-s Symlink instead of copy\n-r Synonym for -R\n-R Recurse into subdirectories (DEST must be a directory)\n-p Preserve timestamps, ownership, and mode\n-P Do not follow symlinks [default]\n-n No clobber (don't overwrite DEST)\n-l Hard link instead of copy\n-L Follow all symlinks\n-i Interactive, prompt before overwriting existing DEST\n-H Follow symlinks listed on command line\n-f Delete destination files we can't write to\n-F Delete any existing destination file first (--remove-destination)\n-d Don't dereference symlinks\n-D Create leading dirs under DEST (--parents)\n-a Same as -dpr" + +#define HELP_cp "usage: cp [--preserve=motcxa] [-adfHiLlnPpRrsTv] SOURCE... DEST\n\nCopy files from SOURCE to DEST. If more than one SOURCE, DEST must\nbe a directory.\n-v Verbose\n-T DEST always treated as file, max 2 arguments\n-s Symlink instead of copy\n-r Synonym for -R\n-R Recurse into subdirectories (DEST must be a directory)\n-p Preserve timestamps, ownership, and mode\n-P Do not follow symlinks [default]\n-n No clobber (don't overwrite DEST)\n-l Hard link instead of copy\n-L Follow all symlinks\n-i Interactive, prompt before overwriting existing DEST\n-H Follow symlinks listed on command line\n-f Delete destination files we can't write to\n-F Delete any existing destination file first (--remove-destination)\n-d Don't dereference symlinks\n-D Create leading dirs under DEST (--parents)\n-a Same as -dpr\n--preserve takes either a comma separated list of attributes, or the first\nletter(s) of:\n\n mode - permissions (ignore umask for rwx, copy suid and sticky bit)\n ownership - user and group\n timestamps - file creation, modification, and access times.\n context - security context\n xattr - extended attributes\n all - all of the above" + +#define HELP_comm "usage: comm [-123] FILE1 FILE2\n\nRead FILE1 and FILE2, which should be ordered, and produce three text\ncolumns as output: lines only in FILE1; lines only in FILE2; and lines\nin both files. Filename \"-\" is a synonym for stdin.\n\n-1 Suppress the output column of lines unique to FILE1\n-2 Suppress the output column of lines unique to FILE2\n-3 Suppress the output column of lines duplicated in FILE1 and FILE2" + +#define HELP_cmp "usage: cmp [-l] [-s] FILE1 [FILE2 [SKIP1 [SKIP2]]]\n\nCompare the contents of two files. (Or stdin and file if only one given.)\n\n-l Show all differing bytes\n-s Silent" + +#define HELP_crc32 "usage: crc32 [file...]\n\nOutput crc32 checksum for each file." + +#define HELP_cksum "usage: cksum [-IPLN] [FILE...]\n\nFor each file, output crc32 checksum value, length and name of file.\nIf no files listed, copy from stdin. Filename \"-\" is a synonym for stdin.\n\n-H Hexadecimal checksum (defaults to decimal)\n-L Little endian (defaults to big endian)\n-P Pre-inversion\n-I Skip post-inversion\n-N Do not include length in CRC calculation (or output)" + +#define HELP_chmod "usage: chmod [-R] MODE FILE...\n\nChange mode of listed file[s] (recursively with -R).\n\nMODE can be (comma-separated) stanzas: [ugoa][+-=][rwxstXugo]\n\nStanzas are applied in order: For each category (u = user,\ng = group, o = other, a = all three, if none specified default is a),\nset (+), clear (-), or copy (=), r = read, w = write, x = execute.\ns = u+s = suid, g+s = sgid, o+s = sticky. (+t is an alias for o+s).\nsuid/sgid: execute as the user/group who owns the file.\nsticky: can't delete files you don't own out of this directory\nX = x for directories or if any category already has x set.\n\nOr MODE can be an octal value up to 7777 ug uuugggooo top +\nbit 1 = o+x, bit 1<<8 = u+w, 1<<11 = g+1 sstrwxrwxrwx bottom\n\nExamples:\nchmod u+w file - allow owner of \"file\" to write to it.\nchmod 744 file - user can read/write/execute, everyone else read only" + +#define HELP_chown "see: chgrp" + +#define HELP_chgrp "usage: chgrp/chown [-RHLP] [-fvh] GROUP FILE...\n\nChange group of one or more files.\n\n-f Suppress most error messages\n-h Change symlinks instead of what they point to\n-R Recurse into subdirectories (implies -h)\n-H With -R change target of symlink, follow command line symlinks\n-L With -R change target of symlink, follow all symlinks\n-P With -R change symlink, do not follow symlinks (default)\n-v Verbose" + +#define HELP_catv "usage: catv [-evt] [FILE...]\n\nDisplay nonprinting characters as escape sequences. Use M-x for\nhigh ascii characters (>127), and ^x for other nonprinting chars.\n\n-e Mark each newline with $\n-t Show tabs as ^I\n-v Don't use ^x or M-x escapes" + +#define HELP_cat "usage: cat [-etuv] [FILE...]\n\nCopy (concatenate) files to stdout. If no files listed, copy from stdin.\nFilename \"-\" is a synonym for stdin.\n\n-e Mark each newline with $\n-t Show tabs as ^I\n-u Copy one byte at a time (slow)\n-v Display nonprinting characters as escape sequences with M-x for\n high ascii characters (>127), and ^x for other nonprinting chars" + +#define HELP_cal "usage: cal [[MONTH] YEAR]\n\nPrint a calendar.\n\nWith one argument, prints all months of the specified year.\nWith two arguments, prints calendar for month and year.\n\n-h Don't highlight today" + +#define HELP_basename "usage: basename [-a] [-s SUFFIX] NAME... | NAME [SUFFIX]\n\nReturn non-directory portion of a pathname removing suffix.\n\n-a All arguments are names\n-s SUFFIX Remove suffix (implies -a)" \ No newline at end of file diff --git a/aosp/external/toybox/android/device/generated/newtoys.h b/aosp/external/toybox/android/device/generated/newtoys.h new file mode 100644 index 0000000000000000000000000000000000000000..17f0b2578629ade42593e8548e3f23b1f8508e37 --- /dev/null +++ b/aosp/external/toybox/android/device/generated/newtoys.h @@ -0,0 +1,300 @@ +USE_TOYBOX(NEWTOY(toybox, NULL, TOYFLAG_STAYROOT)) +USE_SH(OLDTOY(-bash, sh, 0)) +USE_SH(OLDTOY(-sh, sh, 0)) +USE_SH(OLDTOY(-toysh, sh, 0)) +USE_TRUE(OLDTOY(:, true, TOYFLAG_NOFORK|TOYFLAG_NOHELP|TOYFLAG_MAYFORK)) +USE_TEST(OLDTOY([, test, TOYFLAG_NOFORK|TOYFLAG_NOHELP)) +USE_ACPI(NEWTOY(acpi, "abctV", TOYFLAG_USR|TOYFLAG_BIN)) +USE_GROUPADD(OLDTOY(addgroup, groupadd, TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_USERADD(OLDTOY(adduser, useradd, TOYFLAG_NEEDROOT|TOYFLAG_UMASK|TOYFLAG_SBIN)) +USE_ARCH(NEWTOY(arch, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_ARP(NEWTOY(arp, "vi:nDsdap:A:H:[+Ap][!sd]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ARPING(NEWTOY(arping, "<1>1s:I:w#<0c#<0AUDbqf[+AU][+Df]", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_ASCII(NEWTOY(ascii, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_BASE64(NEWTOY(base64, "diw#<0=76[!dw]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_BASENAME(NEWTOY(basename, "^<1as:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SH(OLDTOY(bash, sh, TOYFLAG_BIN)) +USE_BC(NEWTOY(bc, "i(interactive)l(mathlib)q(quiet)s(standard)w(warn)", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_BLKID(NEWTOY(blkid, "ULs*[!LU]", TOYFLAG_BIN)) +USE_BLOCKDEV(NEWTOY(blockdev, "<1>1(setro)(setrw)(getro)(getss)(getbsz)(setbsz)#<0(getsz)(getsize)(getsize64)(getra)(setra)#<0(flushbufs)(rereadpt)",TOYFLAG_SBIN)) +USE_BOOTCHARTD(NEWTOY(bootchartd, 0, TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN)) +USE_BRCTL(NEWTOY(brctl, "<1", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_BUNZIP2(NEWTOY(bunzip2, "cftkv", TOYFLAG_USR|TOYFLAG_BIN)) +USE_BZCAT(NEWTOY(bzcat, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_CAL(NEWTOY(cal, ">2h", TOYFLAG_USR|TOYFLAG_BIN)) +USE_CAT(NEWTOY(cat, "u"USE_CAT_V("vte"), TOYFLAG_BIN)) +USE_CATV(NEWTOY(catv, USE_CATV("vte"), TOYFLAG_USR|TOYFLAG_BIN)) +USE_SH(NEWTOY(cd, ">1LP[-LP]", TOYFLAG_NOFORK)) +USE_CHATTR(NEWTOY(chattr, "?p#v#R", TOYFLAG_BIN)) +USE_CHCON(NEWTOY(chcon, "<2hvR", TOYFLAG_USR|TOYFLAG_BIN)) +USE_CHGRP(NEWTOY(chgrp, "<2hPLHRfv[-HLP]", TOYFLAG_BIN)) +USE_CHMOD(NEWTOY(chmod, "<2?vRf[-vf]", TOYFLAG_BIN)) +USE_CHOWN(OLDTOY(chown, chgrp, TOYFLAG_BIN)) +USE_CHROOT(NEWTOY(chroot, "^<1", TOYFLAG_USR|TOYFLAG_SBIN|TOYFLAG_ARGFAIL(125))) +USE_CHRT(NEWTOY(chrt, "^mp#<0iRbrfo[!ibrfo]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_CHVT(NEWTOY(chvt, "<1", TOYFLAG_USR|TOYFLAG_BIN)) +USE_CKSUM(NEWTOY(cksum, "HIPLN", TOYFLAG_BIN)) +USE_CLEAR(NEWTOY(clear, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_CMP(NEWTOY(cmp, "<1>2ls(silent)(quiet)[!ls]", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_COMM(NEWTOY(comm, "<2>2321", TOYFLAG_USR|TOYFLAG_BIN)) +USE_COUNT(NEWTOY(count, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_CP(NEWTOY(cp, "<2"USE_CP_PRESERVE("(preserve):;")"D(parents)RHLPprdaslvnF(remove-destination)fiT[-HLPd][-ni]", TOYFLAG_BIN)) +USE_CPIO(NEWTOY(cpio, "(no-preserve-owner)(trailer)mduH:p:|i|t|F:v(verbose)o|[!pio][!pot][!pF]", TOYFLAG_BIN)) +USE_CRC32(NEWTOY(crc32, 0, TOYFLAG_BIN)) +USE_CROND(NEWTOY(crond, "fbSl#<0=8d#<0L:c:[-bf][-LS][-ld]", TOYFLAG_USR|TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_CRONTAB(NEWTOY(crontab, "c:u:elr[!elr]", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_STAYROOT)) +USE_CUT(NEWTOY(cut, "b*|c*|f*|F*|C*|O(output-delimiter):d:sDn[!cbf]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_DATE(NEWTOY(date, "d:D:r:u[!dr]", TOYFLAG_BIN)) +USE_DD(NEWTOY(dd, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_DEALLOCVT(NEWTOY(deallocvt, ">1", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_NEEDROOT)) +USE_GROUPDEL(OLDTOY(delgroup, groupdel, TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_USERDEL(OLDTOY(deluser, userdel, TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_DEMO_MANY_OPTIONS(NEWTOY(demo_many_options, "ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba", TOYFLAG_BIN)) +USE_DEMO_NUMBER(NEWTOY(demo_number, "D#=3<3hdbs", TOYFLAG_BIN)) +USE_DEMO_SCANKEY(NEWTOY(demo_scankey, 0, TOYFLAG_BIN)) +USE_DEMO_UTF8TOWC(NEWTOY(demo_utf8towc, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_DEVMEM(NEWTOY(devmem, "<1>3", TOYFLAG_USR|TOYFLAG_BIN)) +USE_DF(NEWTOY(df, "HPkhit*a[-HPkh]", TOYFLAG_SBIN)) +USE_DHCP(NEWTOY(dhcp, "V:H:F:x*r:O*A#<0=20T#<0=3t#<0=3s:p:i:SBRCaovqnbf", TOYFLAG_SBIN|TOYFLAG_ROOTONLY)) +USE_DHCP6(NEWTOY(dhcp6, "r:A#<0T#<0t#<0s:p:i:SRvqnbf", TOYFLAG_SBIN|TOYFLAG_ROOTONLY)) +USE_DHCPD(NEWTOY(dhcpd, ">1P#<0>65535fi:S46[!46]", TOYFLAG_SBIN|TOYFLAG_ROOTONLY)) +USE_DIFF(NEWTOY(diff, "<2>2(color)(strip-trailing-cr)B(ignore-blank-lines)d(minimal)b(ignore-space-change)ut(expand-tabs)w(ignore-all-space)i(ignore-case)T(initial-tab)s(report-identical-files)q(brief)a(text)L(label)*S(starting-file):N(new-file)r(recursive)U(unified)#<0=3", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_DIRNAME(NEWTOY(dirname, "<1", TOYFLAG_USR|TOYFLAG_BIN)) +USE_DMESG(NEWTOY(dmesg, "w(follow)CSTtrs#<1n#c[!Ttr][!Cc][!Sw]", TOYFLAG_BIN)) +USE_DNSDOMAINNAME(NEWTOY(dnsdomainname, ">0", TOYFLAG_BIN)) +USE_DOS2UNIX(NEWTOY(dos2unix, 0, TOYFLAG_BIN)) +USE_DU(NEWTOY(du, "d#<0=-1hmlcaHkKLsx[-HL][-kKmh]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_DUMPLEASES(NEWTOY(dumpleases, ">0arf:[!ar]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ECHO(NEWTOY(echo, "^?Een[-eE]", TOYFLAG_BIN|TOYFLAG_MAYFORK)) +USE_EGREP(OLDTOY(egrep, grep, TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_EJECT(NEWTOY(eject, ">1stT[!tT]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ENV(NEWTOY(env, "^0iu*", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(125))) +USE_SH(NEWTOY(exit, 0, TOYFLAG_NOFORK)) +USE_EXPAND(NEWTOY(expand, "t*", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_EXPR(NEWTOY(expr, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_FACTOR(NEWTOY(factor, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_FALLOCATE(NEWTOY(fallocate, ">1l#|o#", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FALSE(NEWTOY(false, NULL, TOYFLAG_BIN|TOYFLAG_NOHELP|TOYFLAG_MAYFORK)) +USE_FDISK(NEWTOY(fdisk, "C#<0H#<0S#<0b#<512ul", TOYFLAG_SBIN)) +USE_FGREP(OLDTOY(fgrep, grep, TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_FILE(NEWTOY(file, "<1bhLs[!hL]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FIND(NEWTOY(find, "?^HL[-HL]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FLOCK(NEWTOY(flock, "<1>1nsux[-sux]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FMT(NEWTOY(fmt, "w#<0=75", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_FOLD(NEWTOY(fold, "bsuw#<1", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FREE(NEWTOY(free, "htgmkb[!htgmkb]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FREERAMDISK(NEWTOY(freeramdisk, "<1>1", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_FSCK(NEWTOY(fsck, "?t:ANPRTVsC#", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FSFREEZE(NEWTOY(fsfreeze, "<1>1f|u|[!fu]", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_FSTYPE(NEWTOY(fstype, "<1", TOYFLAG_BIN)) +USE_FSYNC(NEWTOY(fsync, "<1d", TOYFLAG_BIN)) +USE_FTPGET(NEWTOY(ftpget, "<2>3P:cp:u:vgslLmMdD[-gs][!gslLmMdD][!clL]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FTPPUT(OLDTOY(ftpput, ftpget, TOYFLAG_USR|TOYFLAG_BIN)) +USE_GETCONF(NEWTOY(getconf, ">2al", TOYFLAG_USR|TOYFLAG_BIN)) +USE_GETENFORCE(NEWTOY(getenforce, ">0", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_GETFATTR(NEWTOY(getfattr, "(only-values)dhn:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_GETOPT(NEWTOY(getopt, "^a(alternative)n:(name)o:(options)l*(long)(longoptions)Tu", TOYFLAG_USR|TOYFLAG_BIN)) +USE_GETTY(NEWTOY(getty, "<2t#<0H:I:l:f:iwnmLh",TOYFLAG_SBIN)) +USE_GREP(NEWTOY(grep, "(line-buffered)(color):;(exclude-dir)*S(exclude)*M(include)*ZzEFHIab(byte-offset)h(no-filename)ino(only-matching)rRsvwcl(files-with-matches)q(quiet)(silent)e*f*C#B#A#m#x[!wx][!EFw]", TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_GROUPADD(NEWTOY(groupadd, "<1>2g#<0S", TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_GROUPDEL(NEWTOY(groupdel, "<1>2", TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_GROUPS(NEWTOY(groups, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_GUNZIP(NEWTOY(gunzip, "cdfk123456789[-123456789]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_GZIP(NEWTOY(gzip, "ncdfk123456789[-123456789]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_REBOOT(OLDTOY(halt, reboot, TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_HEAD(NEWTOY(head, "?n(lines)#<0=10c(bytes)#<0qv[-nc]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_HELLO(NEWTOY(hello, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_HELP(NEWTOY(help, "ahu", TOYFLAG_BIN|TOYFLAG_MAYFORK)) +USE_HEXEDIT(NEWTOY(hexedit, "<1>1r", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_HOST(NEWTOY(host, "<1>2avt:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_HOSTID(NEWTOY(hostid, ">0", TOYFLAG_USR|TOYFLAG_BIN)) +USE_HOSTNAME(NEWTOY(hostname, ">1bdsfF:[!bdsf]", TOYFLAG_BIN)) +USE_HWCLOCK(NEWTOY(hwclock, ">0(fast)f(rtc):u(utc)l(localtime)t(systz)s(hctosys)r(show)w(systohc)[-ul][!rtsw]", TOYFLAG_SBIN)) +USE_I2CDETECT(NEWTOY(i2cdetect, ">3aFly", TOYFLAG_USR|TOYFLAG_BIN)) +USE_I2CDUMP(NEWTOY(i2cdump, "<2>2fy", TOYFLAG_USR|TOYFLAG_BIN)) +USE_I2CGET(NEWTOY(i2cget, "<3>3fy", TOYFLAG_USR|TOYFLAG_BIN)) +USE_I2CSET(NEWTOY(i2cset, "<4fy", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ICONV(NEWTOY(iconv, "cst:f:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ID(NEWTOY(id, ">1"USE_ID_Z("Z")"nGgru[!"USE_ID_Z("Z")"Ggu]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_IFCONFIG(NEWTOY(ifconfig, "^?aS", TOYFLAG_SBIN)) +USE_INIT(NEWTOY(init, "", TOYFLAG_SBIN)) +USE_INOTIFYD(NEWTOY(inotifyd, "<2", TOYFLAG_USR|TOYFLAG_BIN)) +USE_INSMOD(NEWTOY(insmod, "<1", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_INSTALL(NEWTOY(install, "<1cdDpsvm:o:g:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_IONICE(NEWTOY(ionice, "^tc#<0>3=2n#<0>7=5p#", TOYFLAG_USR|TOYFLAG_BIN)) +USE_IORENICE(NEWTOY(iorenice, "?<1>3", TOYFLAG_USR|TOYFLAG_BIN)) +USE_IOTOP(NEWTOY(iotop, ">0AaKO" "Hk*o*p*u*s#<1=7d%<100=3000m#n#<1bq", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_STAYROOT|TOYFLAG_LOCALE)) +USE_IP(NEWTOY(ip, NULL, TOYFLAG_SBIN)) +USE_IP(OLDTOY(ipaddr, ip, TOYFLAG_SBIN)) +USE_IPCRM(NEWTOY(ipcrm, "m*M*s*S*q*Q*", TOYFLAG_USR|TOYFLAG_BIN)) +USE_IPCS(NEWTOY(ipcs, "acptulsqmi#", TOYFLAG_USR|TOYFLAG_BIN)) +USE_IP(OLDTOY(iplink, ip, TOYFLAG_SBIN)) +USE_IP(OLDTOY(iproute, ip, TOYFLAG_SBIN)) +USE_IP(OLDTOY(iprule, ip, TOYFLAG_SBIN)) +USE_IP(OLDTOY(iptunnel, ip, TOYFLAG_SBIN)) +USE_KILL(NEWTOY(kill, "?ls: ", TOYFLAG_BIN|TOYFLAG_MAYFORK)) +USE_KILLALL(NEWTOY(killall, "?s:ilqvw", TOYFLAG_USR|TOYFLAG_BIN)) +USE_KILLALL5(NEWTOY(killall5, "?o*ls: [!lo][!ls]", TOYFLAG_SBIN)) +USE_KLOGD(NEWTOY(klogd, "c#<1>8n", TOYFLAG_SBIN)) +USE_LAST(NEWTOY(last, "f:W", TOYFLAG_BIN)) +USE_LINK(NEWTOY(link, "<2>2", TOYFLAG_USR|TOYFLAG_BIN)) +USE_LN(NEWTOY(ln, "<1rt:Tvnfs", TOYFLAG_BIN)) +USE_LOAD_POLICY(NEWTOY(load_policy, "<1>1", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_LOG(NEWTOY(log, "<1p:t:", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_LOGGER(NEWTOY(logger, "st:p:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_LOGIN(NEWTOY(login, ">1f:ph:", TOYFLAG_BIN|TOYFLAG_NEEDROOT)) +USE_LOGNAME(NEWTOY(logname, ">0", TOYFLAG_USR|TOYFLAG_BIN)) +USE_LOGWRAPPER(NEWTOY(logwrapper, 0, TOYFLAG_NOHELP|TOYFLAG_USR|TOYFLAG_BIN)) +USE_LOSETUP(NEWTOY(losetup, ">2S(sizelimit)#s(show)ro#j:fdcaD[!afj]", TOYFLAG_SBIN)) +USE_LS(NEWTOY(ls, "(color):;(full-time)(show-control-chars)ZgoACFHLRSabcdfhikl@mnpqrstuw#=80<0x1[-Cxm1][-Cxml][-Cxmo][-Cxmg][-cu][-ftS][-HL][!qb]", TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_LSATTR(NEWTOY(lsattr, "ldapvR", TOYFLAG_BIN)) +USE_LSMOD(NEWTOY(lsmod, NULL, TOYFLAG_SBIN)) +USE_LSOF(NEWTOY(lsof, "lp*t", TOYFLAG_USR|TOYFLAG_BIN)) +USE_LSPCI(NEWTOY(lspci, "emkn"USE_LSPCI_TEXT("@i:"), TOYFLAG_USR|TOYFLAG_BIN)) +USE_LSUSB(NEWTOY(lsusb, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_MAKEDEVS(NEWTOY(makedevs, "<1>1d:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MAN(NEWTOY(man, "k:M:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MCOOKIE(NEWTOY(mcookie, "v(verbose)V(version)", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MD5SUM(NEWTOY(md5sum, "bc(check)s(status)[!bc]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MDEV(NEWTOY(mdev, "s", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_UMASK)) +USE_MICROCOM(NEWTOY(microcom, "<1>1s:X", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MIX(NEWTOY(mix, "c:d:l#r#", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MKDIR(NEWTOY(mkdir, "<1"USE_MKDIR_Z("Z:")"vp(parent)(parents)m:", TOYFLAG_BIN|TOYFLAG_UMASK)) +USE_MKE2FS(NEWTOY(mke2fs, "<1>2g:Fnqm#N#i#b#", TOYFLAG_SBIN)) +USE_MKFIFO(NEWTOY(mkfifo, "<1"USE_MKFIFO_Z("Z:")"m:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MKNOD(NEWTOY(mknod, "<2>4m(mode):"USE_MKNOD_Z("Z:"), TOYFLAG_BIN|TOYFLAG_UMASK)) +USE_MKPASSWD(NEWTOY(mkpasswd, ">2S:m:P#=0<0", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MKSWAP(NEWTOY(mkswap, "<1>1L:", TOYFLAG_SBIN)) +USE_MKTEMP(NEWTOY(mktemp, ">1(tmpdir);:uqd(directory)p:t", TOYFLAG_BIN)) +USE_MODINFO(NEWTOY(modinfo, "<1b:k:F:0", TOYFLAG_SBIN)) +USE_MODPROBE(NEWTOY(modprobe, "alrqvsDbd*", TOYFLAG_SBIN)) +USE_MORE(NEWTOY(more, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_MOUNT(NEWTOY(mount, "?O:afnrvwt:o*[-rw]", TOYFLAG_BIN|TOYFLAG_STAYROOT)) +USE_MOUNTPOINT(NEWTOY(mountpoint, "<1qdx[-dx]", TOYFLAG_BIN)) +USE_MV(NEWTOY(mv, "<2vnF(remove-destination)fiT[-ni]", TOYFLAG_BIN)) +USE_NBD_CLIENT(OLDTOY(nbd-client, nbd_client, TOYFLAG_USR|TOYFLAG_BIN)) +USE_NBD_CLIENT(NEWTOY(nbd_client, "<3>3ns", 0)) +USE_NETSTAT(NEWTOY(netstat, "pWrxwutneal", TOYFLAG_BIN)) +USE_NICE(NEWTOY(nice, "^<1n#", TOYFLAG_BIN)) +USE_NL(NEWTOY(nl, "v#=1l#w#<0=6Eb:n:s:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_NOHUP(NEWTOY(nohup, "<1^", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(125))) +USE_NPROC(NEWTOY(nproc, "(all)", TOYFLAG_USR|TOYFLAG_BIN)) +USE_NSENTER(NEWTOY(nsenter, "<1F(no-fork)t#<1(target)i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user);", TOYFLAG_USR|TOYFLAG_BIN)) +USE_OD(NEWTOY(od, "j#vw#<1=16N#xsodcbA:t*", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ONEIT(NEWTOY(oneit, "^<1nc:p3[!pn]", TOYFLAG_SBIN)) +USE_OPENVT(NEWTOY(openvt, "c#<1>63sw", TOYFLAG_BIN|TOYFLAG_NEEDROOT)) +USE_PARTPROBE(NEWTOY(partprobe, "<1", TOYFLAG_SBIN)) +USE_PASSWD(NEWTOY(passwd, ">1a:dlu", TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN)) +USE_PASTE(NEWTOY(paste, "d:s", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_PATCH(NEWTOY(patch, ">2(no-backup-if-mismatch)(dry-run)"USE_TOYBOX_DEBUG("x")"F#g#fulp#d:i:Rs(quiet)", TOYFLAG_USR|TOYFLAG_BIN)) +USE_PGREP(NEWTOY(pgrep, "?cld:u*U*t*s*P*g*G*fnovxL:[-no]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_PIDOF(NEWTOY(pidof, "<1so:x", TOYFLAG_BIN)) +USE_PING(NEWTOY(ping, "<1>1m#t#<0>255=64c#<0=3s#<0>4088=56i%W#<0=3w#<0qf46I:[-46]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_PING(OLDTOY(ping6, ping, TOYFLAG_USR|TOYFLAG_BIN)) +USE_PIVOT_ROOT(NEWTOY(pivot_root, "<2>2", TOYFLAG_SBIN)) +USE_PKILL(NEWTOY(pkill, "?Vu*U*t*s*P*g*G*fnovxl:[-no]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_PMAP(NEWTOY(pmap, "<1xq", TOYFLAG_USR|TOYFLAG_BIN)) +USE_REBOOT(OLDTOY(poweroff, reboot, TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_PRINTENV(NEWTOY(printenv, "0(null)", TOYFLAG_BIN)) +USE_PRINTF(NEWTOY(printf, "<1?^", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_MAYFORK)) +USE_ULIMIT(OLDTOY(prlimit, ulimit, TOYFLAG_USR|TOYFLAG_BIN)) +USE_PS(NEWTOY(ps, "k(sort)*P(ppid)*aAdeflMno*O*p(pid)*s*t*Tu*U*g*G*wZ[!ol][+Ae][!oO]", TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_PWD(NEWTOY(pwd, ">0LP[-LP]", TOYFLAG_BIN|TOYFLAG_MAYFORK)) +USE_PWDX(NEWTOY(pwdx, "<1a", TOYFLAG_USR|TOYFLAG_BIN)) +USE_READAHEAD(NEWTOY(readahead, NULL, TOYFLAG_BIN)) +USE_READLINK(NEWTOY(readlink, "<1nqmef(canonicalize)[-mef]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_REALPATH(NEWTOY(realpath, "<1", TOYFLAG_USR|TOYFLAG_BIN)) +USE_REBOOT(NEWTOY(reboot, "fn", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_RENICE(NEWTOY(renice, "<1gpun#|", TOYFLAG_USR|TOYFLAG_BIN)) +USE_RESET(NEWTOY(reset, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_RESTORECON(NEWTOY(restorecon, "<1DFnRrv", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_REV(NEWTOY(rev, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_RFKILL(NEWTOY(rfkill, "<1>2", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_RM(NEWTOY(rm, "fiRrv[-fi]", TOYFLAG_BIN)) +USE_RMDIR(NEWTOY(rmdir, "<1(ignore-fail-on-non-empty)p", TOYFLAG_BIN)) +USE_RMMOD(NEWTOY(rmmod, "<1wf", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_ROUTE(NEWTOY(route, "?neA:", TOYFLAG_BIN)) +USE_RUNCON(NEWTOY(runcon, "<2", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_SED(NEWTOY(sed, "(help)(version)e*f*i:;nErz(null-data)[+Er]", TOYFLAG_BIN|TOYFLAG_LOCALE|TOYFLAG_NOHELP)) +USE_SENDEVENT(NEWTOY(sendevent, "<4>4", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_SEQ(NEWTOY(seq, "<1>3?f:s:w[!fw]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SETENFORCE(NEWTOY(setenforce, "<1>1", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_SETFATTR(NEWTOY(setfattr, "hn:|v:x:|[!xv]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SETSID(NEWTOY(setsid, "^<1wcd[!dc]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SH(NEWTOY(sh, "(noediting)(noprofile)(norc)sc:i", TOYFLAG_BIN)) +USE_SHA1SUM(NEWTOY(sha1sum, "bc(check)s(status)[!bc]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TOYBOX_LIBCRYPTO(USE_SHA224SUM(OLDTOY(sha224sum, sha1sum, TOYFLAG_USR|TOYFLAG_BIN))) +USE_TOYBOX_LIBCRYPTO(USE_SHA256SUM(OLDTOY(sha256sum, sha1sum, TOYFLAG_USR|TOYFLAG_BIN))) +USE_TOYBOX_LIBCRYPTO(USE_SHA384SUM(OLDTOY(sha384sum, sha1sum, TOYFLAG_USR|TOYFLAG_BIN))) +USE_TOYBOX_LIBCRYPTO(USE_SHA512SUM(OLDTOY(sha512sum, sha1sum, TOYFLAG_USR|TOYFLAG_BIN))) +USE_SHRED(NEWTOY(shred, "<1zxus#<1n#<1o#<0f", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SKELETON(NEWTOY(skeleton, "(walrus)(blubber):;(also):e@d*c#b:a", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SKELETON_ALIAS(NEWTOY(skeleton_alias, "b#dq", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SLEEP(NEWTOY(sleep, "<1", TOYFLAG_BIN)) +USE_SNTP(NEWTOY(sntp, ">1M :m :Sp:t#<0=1>16asdDqr#<4>17=10[!as]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SORT(NEWTOY(sort, USE_SORT_FLOAT("g")"S:T:m" "o:k*t:" "xVbMcszdfirun", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_SPLIT(NEWTOY(split, ">2a#<1=2>9b#<1l#<1[!bl]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_STAT(NEWTOY(stat, "<1c:(format)fLt", TOYFLAG_BIN)) +USE_STRINGS(NEWTOY(strings, "t:an#=4<1fo", TOYFLAG_USR|TOYFLAG_BIN)) +USE_STTY(NEWTOY(stty, "?aF:g[!ag]", TOYFLAG_BIN)) +USE_SU(NEWTOY(su, "^lmpu:g:c:s:[!lmp]", TOYFLAG_BIN|TOYFLAG_ROOTONLY)) +USE_SULOGIN(NEWTOY(sulogin, "t#<0=0", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_SWAPOFF(NEWTOY(swapoff, "<1>1", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_SWAPON(NEWTOY(swapon, "<1>1p#<0>32767d", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_SWITCH_ROOT(NEWTOY(switch_root, "<2c:h", TOYFLAG_SBIN)) +USE_SYNC(NEWTOY(sync, NULL, TOYFLAG_BIN)) +USE_SYSCTL(NEWTOY(sysctl, "^neNqwpaA[!ap][!aq][!aw][+aA]", TOYFLAG_SBIN)) +USE_SYSLOGD(NEWTOY(syslogd,">0l#<1>8=8R:b#<0>99=1s#<0=200m#<0>71582787=20O:p:f:a:nSKLD", TOYFLAG_SBIN|TOYFLAG_STAYROOT)) +USE_TAC(NEWTOY(tac, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_TAIL(NEWTOY(tail, "?fc-n-[-cn]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TAR(NEWTOY(tar, "&(restrict)(full-time)(no-recursion)(numeric-owner)(no-same-permissions)(overwrite)(exclude)*(mode):(mtime):(group):(owner):(to-command):o(no-same-owner)p(same-permissions)k(keep-old)c(create)|h(dereference)x(extract)|t(list)|v(verbose)J(xz)j(bzip2)z(gzip)S(sparse)O(to-stdout)m(touch)X(exclude-from)*T(files-from)*C(directory):f(file):a[!txc][!jzJa]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TASKSET(NEWTOY(taskset, "<1^pa", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_STAYROOT)) +USE_TCPSVD(NEWTOY(tcpsvd, "^<3c#=30<1C:b#=20<0u:l:hEv", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TEE(NEWTOY(tee, "ia", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TELNET(NEWTOY(telnet, "<1>2", TOYFLAG_BIN)) +USE_TELNETD(NEWTOY(telnetd, "w#<0b:p#<0>65535=23f:l:FSKi[!wi]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TEST(NEWTOY(test, 0, TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_NOHELP|TOYFLAG_MAYFORK)) +USE_TFTP(NEWTOY(tftp, "<1b#<8>65464r:l:g|p|[!gp]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TFTPD(NEWTOY(tftpd, "rcu:l", TOYFLAG_BIN)) +USE_TIME(NEWTOY(time, "<1^pv", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_MAYFORK)) +USE_TIMEOUT(NEWTOY(timeout, "<2^(foreground)(preserve-status)vk:s(signal):", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(125))) +USE_TOP(NEWTOY(top, ">0O*" "Hk*o*p*u*s#<1d%<100=3000m#n#<1bq[!oO]", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_TOUCH(NEWTOY(touch, "<1acd:fmr:t:h[!dtr]", TOYFLAG_BIN)) +USE_SH(OLDTOY(toysh, sh, TOYFLAG_BIN)) +USE_TR(NEWTOY(tr, "^>2<1Ccsd[+cC]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TRACEROUTE(NEWTOY(traceroute, "<1>2i:f#<1>255=1z#<0>86400=0g*w#<0>86400=5t#<0>255=0s:q#<1>255=3p#<1>65535=33434m#<1>255=30rvndlIUF64", TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN)) +USE_TRACEROUTE(OLDTOY(traceroute6,traceroute, TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN)) +USE_TRUE(NEWTOY(true, NULL, TOYFLAG_BIN|TOYFLAG_NOHELP|TOYFLAG_MAYFORK)) +USE_TRUNCATE(NEWTOY(truncate, "<1s:|c", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TTY(NEWTOY(tty, "s", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TUNCTL(NEWTOY(tunctl, "<1>1t|d|u:T[!td]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TCPSVD(OLDTOY(udpsvd, tcpsvd, TOYFLAG_USR|TOYFLAG_BIN)) +USE_ULIMIT(NEWTOY(ulimit, ">1P#<1SHavutsrRqpnmlifedc[-SH][!apvutsrRqnmlifedc]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_UMOUNT(NEWTOY(umount, "cndDflrat*v[!na]", TOYFLAG_BIN|TOYFLAG_STAYROOT)) +USE_UNAME(NEWTOY(uname, "oamvrns[+os]", TOYFLAG_BIN)) +USE_UNIQ(NEWTOY(uniq, "f#s#w#zicdu", TOYFLAG_USR|TOYFLAG_BIN)) +USE_UNIX2DOS(NEWTOY(unix2dos, 0, TOYFLAG_BIN)) +USE_UNLINK(NEWTOY(unlink, "<1>1", TOYFLAG_USR|TOYFLAG_BIN)) +USE_UNSHARE(NEWTOY(unshare, "<1^f(fork);r(map-root-user);i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user);", TOYFLAG_USR|TOYFLAG_BIN)) +USE_UPTIME(NEWTOY(uptime, ">0ps", TOYFLAG_USR|TOYFLAG_BIN)) +USE_USERADD(NEWTOY(useradd, "<1>2u#<0G:s:g:h:SDH", TOYFLAG_NEEDROOT|TOYFLAG_UMASK|TOYFLAG_SBIN)) +USE_USERDEL(NEWTOY(userdel, "<1>1r", TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_USLEEP(NEWTOY(usleep, "<1", TOYFLAG_BIN)) +USE_UUDECODE(NEWTOY(uudecode, ">1o:", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_UMASK)) +USE_UUENCODE(NEWTOY(uuencode, "<1>2m", TOYFLAG_USR|TOYFLAG_BIN)) +USE_UUIDGEN(NEWTOY(uuidgen, ">0r(random)", TOYFLAG_USR|TOYFLAG_BIN)) +USE_VCONFIG(NEWTOY(vconfig, "<2>4", TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_VI(NEWTOY(vi, ">1s:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_VMSTAT(NEWTOY(vmstat, ">2n", TOYFLAG_BIN)) +USE_W(NEWTOY(w, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_WATCH(NEWTOY(watch, "^<1n%<100=2000tebx", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_WC(NEWTOY(wc, "mcwl", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_WGET(NEWTOY(wget, "(no-check-certificate)O:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_WHICH(NEWTOY(which, "<1a", TOYFLAG_USR|TOYFLAG_BIN)) +USE_WHO(NEWTOY(who, "a", TOYFLAG_USR|TOYFLAG_BIN)) +USE_WHOAMI(OLDTOY(whoami, logname, TOYFLAG_USR|TOYFLAG_BIN)) +USE_XARGS(NEWTOY(xargs, "^E:P#optrn#<1(max-args)s#0[!0E]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_XXD(NEWTOY(xxd, ">1c#l#o#g#<1=2iprs#[!rs]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_XZCAT(NEWTOY(xzcat, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_YES(NEWTOY(yes, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_ZCAT(NEWTOY(zcat, "cdfk123456789[-123456789]", TOYFLAG_USR|TOYFLAG_BIN)) diff --git a/aosp/external/toybox/android/device/generated/tags.h b/aosp/external/toybox/android/device/generated/tags.h new file mode 100644 index 0000000000000000000000000000000000000000..e1e4d31485815cf3db91dcd3c8846cdd79e8816b --- /dev/null +++ b/aosp/external/toybox/android/device/generated/tags.h @@ -0,0 +1,140 @@ +#define DD_conv_fsync 0 +#define _DD_conv_fsync (1<<0) +#define DD_conv_noerror 1 +#define _DD_conv_noerror (1<<1) +#define DD_conv_notrunc 2 +#define _DD_conv_notrunc (1<<2) +#define DD_conv_sync 3 +#define _DD_conv_sync (1<<3) +#define DD_iflag_count_bytes 0 +#define _DD_iflag_count_bytes (1<<0) +#define DD_iflag_skip_bytes 1 +#define _DD_iflag_skip_bytes (1<<1) +#define DD_oflag_seek_bytes 0 +#define _DD_oflag_seek_bytes (1<<0) +#define CP_mode 0 +#define _CP_mode (1<<0) +#define CP_ownership 1 +#define _CP_ownership (1<<1) +#define CP_timestamps 2 +#define _CP_timestamps (1<<2) +#define CP_context 3 +#define _CP_context (1<<3) +#define CP_xattr 4 +#define _CP_xattr (1<<4) +#define PS_PID 0 +#define _PS_PID (1<<0) +#define PS_PPID 1 +#define _PS_PPID (1<<1) +#define PS_PRI 2 +#define _PS_PRI (1<<2) +#define PS_NI 3 +#define _PS_NI (1<<3) +#define PS_ADDR 4 +#define _PS_ADDR (1<<4) +#define PS_SZ 5 +#define _PS_SZ (1<<5) +#define PS_RSS 6 +#define _PS_RSS (1<<6) +#define PS_PGID 7 +#define _PS_PGID (1<<7) +#define PS_VSZ 8 +#define _PS_VSZ (1<<8) +#define PS_MAJFL 9 +#define _PS_MAJFL (1<<9) +#define PS_MINFL 10 +#define _PS_MINFL (1<<10) +#define PS_PR 11 +#define _PS_PR (1<<11) +#define PS_PSR 12 +#define _PS_PSR (1<<12) +#define PS_RTPRIO 13 +#define _PS_RTPRIO (1<<13) +#define PS_SCH 14 +#define _PS_SCH (1<<14) +#define PS_CPU 15 +#define _PS_CPU (1<<15) +#define PS_TID 16 +#define _PS_TID (1<<16) +#define PS_TCNT 17 +#define _PS_TCNT (1<<17) +#define PS_BIT 18 +#define _PS_BIT (1<<18) +#define PS_TTY 19 +#define _PS_TTY (1<<19) +#define PS_WCHAN 20 +#define _PS_WCHAN (1<<20) +#define PS_LABEL 21 +#define _PS_LABEL (1<<21) +#define PS_COMM 22 +#define _PS_COMM (1<<22) +#define PS_NAME 23 +#define _PS_NAME (1<<23) +#define PS_COMMAND 24 +#define _PS_COMMAND (1<<24) +#define PS_CMDLINE 25 +#define _PS_CMDLINE (1<<25) +#define PS_ARGS 26 +#define _PS_ARGS (1<<26) +#define PS_CMD 27 +#define _PS_CMD (1<<27) +#define PS_UID 28 +#define _PS_UID (1<<28) +#define PS_USER 29 +#define _PS_USER (1<<29) +#define PS_RUID 30 +#define _PS_RUID (1<<30) +#define PS_RUSER 31 +#define _PS_RUSER (1<<31) +#define PS_GID 32 +#define _PS_GID (1LL<<32) +#define PS_GROUP 33 +#define _PS_GROUP (1LL<<33) +#define PS_RGID 34 +#define _PS_RGID (1LL<<34) +#define PS_RGROUP 35 +#define _PS_RGROUP (1LL<<35) +#define PS_TIME 36 +#define _PS_TIME (1LL<<36) +#define PS_ELAPSED 37 +#define _PS_ELAPSED (1LL<<37) +#define PS_TIME_ 38 +#define _PS_TIME_ (1LL<<38) +#define PS_C 39 +#define _PS_C (1LL<<39) +#define PS__VSZ 40 +#define _PS__VSZ (1LL<<40) +#define PS__MEM 41 +#define _PS__MEM (1LL<<41) +#define PS__CPU 42 +#define _PS__CPU (1LL<<42) +#define PS_VIRT 43 +#define _PS_VIRT (1LL<<43) +#define PS_RES 44 +#define _PS_RES (1LL<<44) +#define PS_SHR 45 +#define _PS_SHR (1LL<<45) +#define PS_READ 46 +#define _PS_READ (1LL<<46) +#define PS_WRITE 47 +#define _PS_WRITE (1LL<<47) +#define PS_IO 48 +#define _PS_IO (1LL<<48) +#define PS_DREAD 49 +#define _PS_DREAD (1LL<<49) +#define PS_DWRITE 50 +#define _PS_DWRITE (1LL<<50) +#define PS_SWAP 51 +#define _PS_SWAP (1LL<<51) +#define PS_DIO 52 +#define _PS_DIO (1LL<<52) +#define PS_STIME 53 +#define _PS_STIME (1LL<<53) +#define PS_F 54 +#define _PS_F (1LL<<54) +#define PS_S 55 +#define _PS_S (1LL<<55) +#define PS_STAT 56 +#define _PS_STAT (1LL<<56) +#define PS_PCY 57 +#define _PS_PCY (1LL<<57) diff --git a/aosp/external/toybox/android/linux/generated/config.h b/aosp/external/toybox/android/linux/generated/config.h new file mode 100644 index 0000000000000000000000000000000000000000..7fdfaeb98466067a9d06e0aa031dc867aee6873d --- /dev/null +++ b/aosp/external/toybox/android/linux/generated/config.h @@ -0,0 +1,650 @@ +#define CFG_TOYBOX_ANDROID_SCHEDPOLICY 0 +#define USE_TOYBOX_ANDROID_SCHEDPOLICY(...) +#define CFG_TOYBOX_CONTAINER 0 +#define USE_TOYBOX_CONTAINER(...) +#define CFG_TOYBOX_DEBUG 0 +#define USE_TOYBOX_DEBUG(...) +#define CFG_TOYBOX_FALLOCATE 0 +#define USE_TOYBOX_FALLOCATE(...) +#define CFG_TOYBOX_FIFREEZE 0 +#define USE_TOYBOX_FIFREEZE(...) +#define CFG_TOYBOX_FLOAT 1 +#define USE_TOYBOX_FLOAT(...) __VA_ARGS__ +#define CFG_TOYBOX_FORK 1 +#define USE_TOYBOX_FORK(...) __VA_ARGS__ +#define CFG_TOYBOX_FREE 0 +#define USE_TOYBOX_FREE(...) +#define CFG_TOYBOX_GETRANDOM 0 +#define USE_TOYBOX_GETRANDOM(...) +#define CFG_TOYBOX_HELP_DASHDASH 1 +#define USE_TOYBOX_HELP_DASHDASH(...) __VA_ARGS__ +#define CFG_TOYBOX_HELP 1 +#define USE_TOYBOX_HELP(...) __VA_ARGS__ +#define CFG_TOYBOX_I18N 1 +#define USE_TOYBOX_I18N(...) __VA_ARGS__ +#define CFG_TOYBOX_ICONV 1 +#define USE_TOYBOX_ICONV(...) __VA_ARGS__ +#define CFG_TOYBOX_LIBCRYPTO 1 +#define USE_TOYBOX_LIBCRYPTO(...) __VA_ARGS__ +#define CFG_TOYBOX_LIBZ 1 +#define USE_TOYBOX_LIBZ(...) __VA_ARGS__ +#define CFG_TOYBOX_LSM_NONE 1 +#define USE_TOYBOX_LSM_NONE(...) __VA_ARGS__ +#define CFG_TOYBOX_MUSL_NOMMU_IS_BROKEN 0 +#define USE_TOYBOX_MUSL_NOMMU_IS_BROKEN(...) +#define CFG_TOYBOX_NORECURSE 0 +#define USE_TOYBOX_NORECURSE(...) +#define CFG_TOYBOX_ON_ANDROID 0 +#define USE_TOYBOX_ON_ANDROID(...) +#define CFG_TOYBOX_PEDANTIC_ARGS 0 +#define USE_TOYBOX_PEDANTIC_ARGS(...) +#define CFG_TOYBOX_PRLIMIT 0 +#define USE_TOYBOX_PRLIMIT(...) +#define CFG_TOYBOX_SELINUX 0 +#define USE_TOYBOX_SELINUX(...) +#define CFG_TOYBOX_SHADOW 0 +#define USE_TOYBOX_SHADOW(...) +#define CFG_TOYBOX_SMACK 0 +#define USE_TOYBOX_SMACK(...) +#define CFG_TOYBOX_SUID 1 +#define USE_TOYBOX_SUID(...) __VA_ARGS__ +#define CFG_TOYBOX_UID_SYS 100 +#define CFG_TOYBOX_UID_USR 500 +#define CFG_TOYBOX_UTMPX 0 +#define USE_TOYBOX_UTMPX(...) +#define CFG_TOYBOX 1 +#define USE_TOYBOX(...) __VA_ARGS__ +#define CFG_ACPI 0 +#define USE_ACPI(...) +#define CFG_ARCH 0 +#define USE_ARCH(...) +#define CFG_ARPING 0 +#define USE_ARPING(...) +#define CFG_ARP 0 +#define USE_ARP(...) +#define CFG_ASCII 0 +#define USE_ASCII(...) +#define CFG_BASE64 0 +#define USE_BASE64(...) +#define CFG_BASENAME 1 +#define USE_BASENAME(...) __VA_ARGS__ +#define CFG_BC 0 +#define USE_BC(...) +#define CFG_BLKID 0 +#define USE_BLKID(...) +#define CFG_BLOCKDEV 0 +#define USE_BLOCKDEV(...) +#define CFG_BOOTCHARTD 0 +#define USE_BOOTCHARTD(...) +#define CFG_BRCTL 0 +#define USE_BRCTL(...) +#define CFG_BUNZIP2 0 +#define USE_BUNZIP2(...) +#define CFG_BZCAT 0 +#define USE_BZCAT(...) +#define CFG_CAL 0 +#define USE_CAL(...) +#define CFG_CATV 0 +#define USE_CATV(...) +#define CFG_CAT_V 1 +#define USE_CAT_V(...) __VA_ARGS__ +#define CFG_CAT 1 +#define USE_CAT(...) __VA_ARGS__ +#define CFG_CD 0 +#define USE_CD(...) +#define CFG_CHATTR 0 +#define USE_CHATTR(...) +#define CFG_CHCON 0 +#define USE_CHCON(...) +#define CFG_CHGRP 0 +#define USE_CHGRP(...) +#define CFG_CHMOD 1 +#define USE_CHMOD(...) __VA_ARGS__ +#define CFG_CHOWN 0 +#define USE_CHOWN(...) +#define CFG_CHROOT 0 +#define USE_CHROOT(...) +#define CFG_CHRT 0 +#define USE_CHRT(...) +#define CFG_CHVT 0 +#define USE_CHVT(...) +#define CFG_CKSUM 0 +#define USE_CKSUM(...) +#define CFG_CLEAR 0 +#define USE_CLEAR(...) +#define CFG_CMP 1 +#define USE_CMP(...) __VA_ARGS__ +#define CFG_COMM 1 +#define USE_COMM(...) __VA_ARGS__ +#define CFG_COUNT 0 +#define USE_COUNT(...) +#define CFG_CPIO 0 +#define USE_CPIO(...) +#define CFG_CP_PRESERVE 1 +#define USE_CP_PRESERVE(...) __VA_ARGS__ +#define CFG_CP 1 +#define USE_CP(...) __VA_ARGS__ +#define CFG_CRC32 0 +#define USE_CRC32(...) +#define CFG_CROND 0 +#define USE_CROND(...) +#define CFG_CRONTAB 0 +#define USE_CRONTAB(...) +#define CFG_CUT 1 +#define USE_CUT(...) __VA_ARGS__ +#define CFG_DATE 1 +#define USE_DATE(...) __VA_ARGS__ +#define CFG_DD 1 +#define USE_DD(...) __VA_ARGS__ +#define CFG_DEALLOCVT 0 +#define USE_DEALLOCVT(...) +#define CFG_DEBUG_DHCP 0 +#define USE_DEBUG_DHCP(...) +#define CFG_DEMO_MANY_OPTIONS 0 +#define USE_DEMO_MANY_OPTIONS(...) +#define CFG_DEMO_NUMBER 0 +#define USE_DEMO_NUMBER(...) +#define CFG_DEMO_SCANKEY 0 +#define USE_DEMO_SCANKEY(...) +#define CFG_DEMO_UTF8TOWC 0 +#define USE_DEMO_UTF8TOWC(...) +#define CFG_DEVMEM 0 +#define USE_DEVMEM(...) +#define CFG_DF 0 +#define USE_DF(...) +#define CFG_DHCP6 0 +#define USE_DHCP6(...) +#define CFG_DHCPD 0 +#define USE_DHCPD(...) +#define CFG_DHCP 0 +#define USE_DHCP(...) +#define CFG_DIFF 1 +#define USE_DIFF(...) __VA_ARGS__ +#define CFG_DIRNAME 1 +#define USE_DIRNAME(...) __VA_ARGS__ +#define CFG_DMESG 0 +#define USE_DMESG(...) +#define CFG_DNSDOMAINNAME 0 +#define USE_DNSDOMAINNAME(...) +#define CFG_DOS2UNIX 1 +#define USE_DOS2UNIX(...) __VA_ARGS__ +#define CFG_DUMPLEASES 0 +#define USE_DUMPLEASES(...) +#define CFG_DU 1 +#define USE_DU(...) __VA_ARGS__ +#define CFG_ECHO 1 +#define USE_ECHO(...) __VA_ARGS__ +#define CFG_EGREP 1 +#define USE_EGREP(...) __VA_ARGS__ +#define CFG_EJECT 0 +#define USE_EJECT(...) +#define CFG_ENV 1 +#define USE_ENV(...) __VA_ARGS__ +#define CFG_EXIT 0 +#define USE_EXIT(...) +#define CFG_EXPAND 0 +#define USE_EXPAND(...) +#define CFG_EXPR 1 +#define USE_EXPR(...) __VA_ARGS__ +#define CFG_FACTOR 0 +#define USE_FACTOR(...) +#define CFG_FALLOCATE 0 +#define USE_FALLOCATE(...) +#define CFG_FALSE 0 +#define USE_FALSE(...) +#define CFG_FDISK 0 +#define USE_FDISK(...) +#define CFG_FGREP 0 +#define USE_FGREP(...) +#define CFG_FILE 0 +#define USE_FILE(...) +#define CFG_FIND 1 +#define USE_FIND(...) __VA_ARGS__ +#define CFG_FLOCK 0 +#define USE_FLOCK(...) +#define CFG_FMT 0 +#define USE_FMT(...) +#define CFG_FOLD 0 +#define USE_FOLD(...) +#define CFG_FREE 0 +#define USE_FREE(...) +#define CFG_FREERAMDISK 0 +#define USE_FREERAMDISK(...) +#define CFG_FSCK 0 +#define USE_FSCK(...) +#define CFG_FSFREEZE 0 +#define USE_FSFREEZE(...) +#define CFG_FSTYPE 0 +#define USE_FSTYPE(...) +#define CFG_FSYNC 0 +#define USE_FSYNC(...) +#define CFG_FTPGET 0 +#define USE_FTPGET(...) +#define CFG_FTPPUT 0 +#define USE_FTPPUT(...) +#define CFG_GETCONF 1 +#define USE_GETCONF(...) __VA_ARGS__ +#define CFG_GETENFORCE 0 +#define USE_GETENFORCE(...) +#define CFG_GETFATTR 0 +#define USE_GETFATTR(...) +#define CFG_GETOPT 1 +#define USE_GETOPT(...) __VA_ARGS__ +#define CFG_GETTY 0 +#define USE_GETTY(...) +#define CFG_GREP 1 +#define USE_GREP(...) __VA_ARGS__ +#define CFG_GROUPADD 0 +#define USE_GROUPADD(...) +#define CFG_GROUPDEL 0 +#define USE_GROUPDEL(...) +#define CFG_GROUPS 0 +#define USE_GROUPS(...) +#define CFG_GUNZIP 0 +#define USE_GUNZIP(...) +#define CFG_GZIP 1 +#define USE_GZIP(...) __VA_ARGS__ +#define CFG_HEAD 1 +#define USE_HEAD(...) __VA_ARGS__ +#define CFG_HELLO 0 +#define USE_HELLO(...) +#define CFG_HELP_EXTRAS 0 +#define USE_HELP_EXTRAS(...) +#define CFG_HELP 0 +#define USE_HELP(...) +#define CFG_HEXEDIT 0 +#define USE_HEXEDIT(...) +#define CFG_HOSTID 0 +#define USE_HOSTID(...) +#define CFG_HOST 0 +#define USE_HOST(...) +#define CFG_HOSTNAME 1 +#define USE_HOSTNAME(...) __VA_ARGS__ +#define CFG_HWCLOCK 0 +#define USE_HWCLOCK(...) +#define CFG_I2CDETECT 0 +#define USE_I2CDETECT(...) +#define CFG_I2CDUMP 0 +#define USE_I2CDUMP(...) +#define CFG_I2CGET 0 +#define USE_I2CGET(...) +#define CFG_I2CSET 0 +#define USE_I2CSET(...) +#define CFG_ICONV 0 +#define USE_ICONV(...) +#define CFG_ID 1 +#define USE_ID(...) __VA_ARGS__ +#define CFG_ID_Z 0 +#define USE_ID_Z(...) +#define CFG_IFCONFIG 0 +#define USE_IFCONFIG(...) +#define CFG_INIT 0 +#define USE_INIT(...) +#define CFG_INOTIFYD 0 +#define USE_INOTIFYD(...) +#define CFG_INSMOD 0 +#define USE_INSMOD(...) +#define CFG_INSTALL 0 +#define USE_INSTALL(...) +#define CFG_IONICE 0 +#define USE_IONICE(...) +#define CFG_IORENICE 0 +#define USE_IORENICE(...) +#define CFG_IOTOP 0 +#define USE_IOTOP(...) +#define CFG_IPCRM 0 +#define USE_IPCRM(...) +#define CFG_IPCS 0 +#define USE_IPCS(...) +#define CFG_IP 0 +#define USE_IP(...) +#define CFG_KILLALL5 0 +#define USE_KILLALL5(...) +#define CFG_KILLALL 0 +#define USE_KILLALL(...) +#define CFG_KILL 0 +#define USE_KILL(...) +#define CFG_KLOGD 0 +#define USE_KLOGD(...) +#define CFG_KLOGD_SOURCE_RING_BUFFER 0 +#define USE_KLOGD_SOURCE_RING_BUFFER(...) +#define CFG_LAST 0 +#define USE_LAST(...) +#define CFG_LINK 0 +#define USE_LINK(...) +#define CFG_LN 1 +#define USE_LN(...) __VA_ARGS__ +#define CFG_LOAD_POLICY 0 +#define USE_LOAD_POLICY(...) +#define CFG_LOGGER 0 +#define USE_LOGGER(...) +#define CFG_LOGIN 0 +#define USE_LOGIN(...) +#define CFG_LOG 0 +#define USE_LOG(...) +#define CFG_LOGNAME 0 +#define USE_LOGNAME(...) +#define CFG_LOGWRAPPER 0 +#define USE_LOGWRAPPER(...) +#define CFG_LOSETUP 0 +#define USE_LOSETUP(...) +#define CFG_LSATTR 0 +#define USE_LSATTR(...) +#define CFG_LSMOD 0 +#define USE_LSMOD(...) +#define CFG_LSOF 0 +#define USE_LSOF(...) +#define CFG_LSPCI 0 +#define USE_LSPCI(...) +#define CFG_LSPCI_TEXT 0 +#define USE_LSPCI_TEXT(...) +#define CFG_LSUSB 0 +#define USE_LSUSB(...) +#define CFG_LS 1 +#define USE_LS(...) __VA_ARGS__ +#define CFG_MAKEDEVS 0 +#define USE_MAKEDEVS(...) +#define CFG_MAN 0 +#define USE_MAN(...) +#define CFG_MCOOKIE 0 +#define USE_MCOOKIE(...) +#define CFG_MD5SUM 1 +#define USE_MD5SUM(...) __VA_ARGS__ +#define CFG_MDEV_CONF 0 +#define USE_MDEV_CONF(...) +#define CFG_MDEV 0 +#define USE_MDEV(...) +#define CFG_MICROCOM 1 +#define USE_MICROCOM(...) __VA_ARGS__ +#define CFG_MIX 0 +#define USE_MIX(...) +#define CFG_MKDIR 1 +#define USE_MKDIR(...) __VA_ARGS__ +#define CFG_MKDIR_Z 0 +#define USE_MKDIR_Z(...) +#define CFG_MKE2FS_EXTENDED 0 +#define USE_MKE2FS_EXTENDED(...) +#define CFG_MKE2FS_GEN 0 +#define USE_MKE2FS_GEN(...) +#define CFG_MKE2FS 0 +#define USE_MKE2FS(...) +#define CFG_MKE2FS_JOURNAL 0 +#define USE_MKE2FS_JOURNAL(...) +#define CFG_MKE2FS_LABEL 0 +#define USE_MKE2FS_LABEL(...) +#define CFG_MKFIFO 0 +#define USE_MKFIFO(...) +#define CFG_MKFIFO_Z 0 +#define USE_MKFIFO_Z(...) +#define CFG_MKNOD 0 +#define USE_MKNOD(...) +#define CFG_MKNOD_Z 0 +#define USE_MKNOD_Z(...) +#define CFG_MKPASSWD 0 +#define USE_MKPASSWD(...) +#define CFG_MKSWAP 0 +#define USE_MKSWAP(...) +#define CFG_MKTEMP 1 +#define USE_MKTEMP(...) __VA_ARGS__ +#define CFG_MODINFO 0 +#define USE_MODINFO(...) +#define CFG_MODPROBE 0 +#define USE_MODPROBE(...) +#define CFG_MORE 0 +#define USE_MORE(...) +#define CFG_MOUNT 0 +#define USE_MOUNT(...) +#define CFG_MOUNTPOINT 0 +#define USE_MOUNTPOINT(...) +#define CFG_MV 1 +#define USE_MV(...) __VA_ARGS__ +#define CFG_NBD_CLIENT 0 +#define USE_NBD_CLIENT(...) +#define CFG_NETCAT 0 +#define USE_NETCAT(...) +#define CFG_NETCAT_LISTEN 0 +#define USE_NETCAT_LISTEN(...) +#define CFG_NETSTAT 0 +#define USE_NETSTAT(...) +#define CFG_NICE 0 +#define USE_NICE(...) +#define CFG_NL 0 +#define USE_NL(...) +#define CFG_NOHUP 0 +#define USE_NOHUP(...) +#define CFG_NPROC 1 +#define USE_NPROC(...) __VA_ARGS__ +#define CFG_NSENTER 0 +#define USE_NSENTER(...) +#define CFG_OD 1 +#define USE_OD(...) __VA_ARGS__ +#define CFG_ONEIT 0 +#define USE_ONEIT(...) +#define CFG_OPENVT 0 +#define USE_OPENVT(...) +#define CFG_PARTPROBE 0 +#define USE_PARTPROBE(...) +#define CFG_PASSWD 0 +#define USE_PASSWD(...) +#define CFG_PASSWD_SAD 0 +#define USE_PASSWD_SAD(...) +#define CFG_PASTE 1 +#define USE_PASTE(...) __VA_ARGS__ +#define CFG_PATCH 1 +#define USE_PATCH(...) __VA_ARGS__ +#define CFG_PGREP 1 +#define USE_PGREP(...) __VA_ARGS__ +#define CFG_PIDOF 0 +#define USE_PIDOF(...) +#define CFG_PING 0 +#define USE_PING(...) +#define CFG_PIVOT_ROOT 0 +#define USE_PIVOT_ROOT(...) +#define CFG_PKILL 1 +#define USE_PKILL(...) __VA_ARGS__ +#define CFG_PMAP 0 +#define USE_PMAP(...) +#define CFG_PRINTENV 0 +#define USE_PRINTENV(...) +#define CFG_PRINTF 0 +#define USE_PRINTF(...) +#define CFG_PS 1 +#define USE_PS(...) __VA_ARGS__ +#define CFG_PWDX 0 +#define USE_PWDX(...) +#define CFG_PWD 1 +#define USE_PWD(...) __VA_ARGS__ +#define CFG_READAHEAD 0 +#define USE_READAHEAD(...) +#define CFG_READELF 0 +#define USE_READELF(...) +#define CFG_READLINK 1 +#define USE_READLINK(...) __VA_ARGS__ +#define CFG_REALPATH 1 +#define USE_REALPATH(...) __VA_ARGS__ +#define CFG_REBOOT 0 +#define USE_REBOOT(...) +#define CFG_RENICE 0 +#define USE_RENICE(...) +#define CFG_RESET 0 +#define USE_RESET(...) +#define CFG_RESTORECON 0 +#define USE_RESTORECON(...) +#define CFG_REV 0 +#define USE_REV(...) +#define CFG_RFKILL 0 +#define USE_RFKILL(...) +#define CFG_RMDIR 1 +#define USE_RMDIR(...) __VA_ARGS__ +#define CFG_RMMOD 0 +#define USE_RMMOD(...) +#define CFG_RM 1 +#define USE_RM(...) __VA_ARGS__ +#define CFG_ROUTE 0 +#define USE_ROUTE(...) +#define CFG_RUNCON 0 +#define USE_RUNCON(...) +#define CFG_SED 1 +#define USE_SED(...) __VA_ARGS__ +#define CFG_SENDEVENT 0 +#define USE_SENDEVENT(...) +#define CFG_SEQ 1 +#define USE_SEQ(...) __VA_ARGS__ +#define CFG_SETENFORCE 0 +#define USE_SETENFORCE(...) +#define CFG_SETFATTR 0 +#define USE_SETFATTR(...) +#define CFG_SETSID 1 +#define USE_SETSID(...) __VA_ARGS__ +#define CFG_SHA1SUM 1 +#define USE_SHA1SUM(...) __VA_ARGS__ +#define CFG_SHA224SUM 0 +#define USE_SHA224SUM(...) +#define CFG_SHA256SUM 1 +#define USE_SHA256SUM(...) __VA_ARGS__ +#define CFG_SHA384SUM 0 +#define USE_SHA384SUM(...) +#define CFG_SHA512SUM 1 +#define USE_SHA512SUM(...) __VA_ARGS__ +#define CFG_SH 0 +#define USE_SH(...) +#define CFG_SHRED 0 +#define USE_SHRED(...) +#define CFG_SKELETON_ALIAS 0 +#define USE_SKELETON_ALIAS(...) +#define CFG_SKELETON 0 +#define USE_SKELETON(...) +#define CFG_SLEEP 1 +#define USE_SLEEP(...) __VA_ARGS__ +#define CFG_SNTP 0 +#define USE_SNTP(...) +#define CFG_SORT_FLOAT 1 +#define USE_SORT_FLOAT(...) __VA_ARGS__ +#define CFG_SORT 1 +#define USE_SORT(...) __VA_ARGS__ +#define CFG_SPLIT 0 +#define USE_SPLIT(...) +#define CFG_STAT 1 +#define USE_STAT(...) __VA_ARGS__ +#define CFG_STRINGS 0 +#define USE_STRINGS(...) +#define CFG_STTY 0 +#define USE_STTY(...) +#define CFG_SU 0 +#define USE_SU(...) +#define CFG_SULOGIN 0 +#define USE_SULOGIN(...) +#define CFG_SWAPOFF 0 +#define USE_SWAPOFF(...) +#define CFG_SWAPON 0 +#define USE_SWAPON(...) +#define CFG_SWITCH_ROOT 0 +#define USE_SWITCH_ROOT(...) +#define CFG_SYNC 0 +#define USE_SYNC(...) +#define CFG_SYSCTL 0 +#define USE_SYSCTL(...) +#define CFG_SYSLOGD 0 +#define USE_SYSLOGD(...) +#define CFG_TAC 0 +#define USE_TAC(...) +#define CFG_TAIL 1 +#define USE_TAIL(...) __VA_ARGS__ +#define CFG_TAR 1 +#define USE_TAR(...) __VA_ARGS__ +#define CFG_TASKSET 0 +#define USE_TASKSET(...) +#define CFG_TCPSVD 0 +#define USE_TCPSVD(...) +#define CFG_TEE 1 +#define USE_TEE(...) __VA_ARGS__ +#define CFG_TELNETD 0 +#define USE_TELNETD(...) +#define CFG_TELNET 0 +#define USE_TELNET(...) +#define CFG_TEST 1 +#define USE_TEST(...) __VA_ARGS__ +#define CFG_TFTPD 0 +#define USE_TFTPD(...) +#define CFG_TFTP 0 +#define USE_TFTP(...) +#define CFG_TIME 0 +#define USE_TIME(...) +#define CFG_TIMEOUT 1 +#define USE_TIMEOUT(...) __VA_ARGS__ +#define CFG_TOP 0 +#define USE_TOP(...) +#define CFG_TOUCH 1 +#define USE_TOUCH(...) __VA_ARGS__ +#define CFG_TRACEROUTE 0 +#define USE_TRACEROUTE(...) +#define CFG_TRUE 1 +#define USE_TRUE(...) __VA_ARGS__ +#define CFG_TRUNCATE 1 +#define USE_TRUNCATE(...) __VA_ARGS__ +#define CFG_TR 1 +#define USE_TR(...) __VA_ARGS__ +#define CFG_TTY 0 +#define USE_TTY(...) +#define CFG_TUNCTL 0 +#define USE_TUNCTL(...) +#define CFG_ULIMIT 0 +#define USE_ULIMIT(...) +#define CFG_UMOUNT 0 +#define USE_UMOUNT(...) +#define CFG_UNAME 1 +#define USE_UNAME(...) __VA_ARGS__ +#define CFG_UNIQ 1 +#define USE_UNIQ(...) __VA_ARGS__ +#define CFG_UNIX2DOS 1 +#define USE_UNIX2DOS(...) __VA_ARGS__ +#define CFG_UNLINK 0 +#define USE_UNLINK(...) +#define CFG_UNSHARE 0 +#define USE_UNSHARE(...) +#define CFG_UPTIME 0 +#define USE_UPTIME(...) +#define CFG_USERADD 0 +#define USE_USERADD(...) +#define CFG_USERDEL 0 +#define USE_USERDEL(...) +#define CFG_USLEEP 0 +#define USE_USLEEP(...) +#define CFG_UUDECODE 0 +#define USE_UUDECODE(...) +#define CFG_UUENCODE 0 +#define USE_UUENCODE(...) +#define CFG_UUIDGEN 0 +#define USE_UUIDGEN(...) +#define CFG_VCONFIG 0 +#define USE_VCONFIG(...) +#define CFG_VI 0 +#define USE_VI(...) +#define CFG_VMSTAT 0 +#define USE_VMSTAT(...) +#define CFG_WATCH 0 +#define USE_WATCH(...) +#define CFG_WC 1 +#define USE_WC(...) __VA_ARGS__ +#define CFG_WGET 0 +#define USE_WGET(...) +#define CFG_WHICH 1 +#define USE_WHICH(...) __VA_ARGS__ +#define CFG_WHOAMI 1 +#define USE_WHOAMI(...) __VA_ARGS__ +#define CFG_WHO 0 +#define USE_WHO(...) +#define CFG_W 0 +#define USE_W(...) +#define CFG_XARGS_PEDANTIC 0 +#define USE_XARGS_PEDANTIC(...) +#define CFG_XARGS 1 +#define USE_XARGS(...) __VA_ARGS__ +#define CFG_XXD 1 +#define USE_XXD(...) __VA_ARGS__ +#define CFG_XZCAT 0 +#define USE_XZCAT(...) +#define CFG_YES 0 +#define USE_YES(...) +#define CFG_ZCAT 1 +#define USE_ZCAT(...) __VA_ARGS__ diff --git a/aosp/external/toybox/android/linux/generated/flags.h b/aosp/external/toybox/android/linux/generated/flags.h new file mode 100644 index 0000000000000000000000000000000000000000..a87b9352ff92ffd3f67b9cfa9263d3bc703c81ca --- /dev/null +++ b/aosp/external/toybox/android/linux/generated/flags.h @@ -0,0 +1,6302 @@ +#undef FORCED_FLAG +#undef FORCED_FLAGLL +#ifdef FORCE_FLAGS +#define FORCED_FLAG 1 +#define FORCED_FLAGLL 1ULL +#else +#define FORCED_FLAG 0 +#define FORCED_FLAGLL 0 +#endif + +// acpi abctV +#undef OPTSTR_acpi +#define OPTSTR_acpi "abctV" +#ifdef CLEANUP_acpi +#undef CLEANUP_acpi +#undef FOR_acpi +#undef FLAG_V +#undef FLAG_t +#undef FLAG_c +#undef FLAG_b +#undef FLAG_a +#endif + +// arch +#undef OPTSTR_arch +#define OPTSTR_arch 0 +#ifdef CLEANUP_arch +#undef CLEANUP_arch +#undef FOR_arch +#endif + +// arp vi:nDsdap:A:H:[+Ap][!sd] +#undef OPTSTR_arp +#define OPTSTR_arp "vi:nDsdap:A:H:[+Ap][!sd]" +#ifdef CLEANUP_arp +#undef CLEANUP_arp +#undef FOR_arp +#undef FLAG_H +#undef FLAG_A +#undef FLAG_p +#undef FLAG_a +#undef FLAG_d +#undef FLAG_s +#undef FLAG_D +#undef FLAG_n +#undef FLAG_i +#undef FLAG_v +#endif + +// arping <1>1s:I:w#<0c#<0AUDbqf[+AU][+Df] +#undef OPTSTR_arping +#define OPTSTR_arping "<1>1s:I:w#<0c#<0AUDbqf[+AU][+Df]" +#ifdef CLEANUP_arping +#undef CLEANUP_arping +#undef FOR_arping +#undef FLAG_f +#undef FLAG_q +#undef FLAG_b +#undef FLAG_D +#undef FLAG_U +#undef FLAG_A +#undef FLAG_c +#undef FLAG_w +#undef FLAG_I +#undef FLAG_s +#endif + +// ascii +#undef OPTSTR_ascii +#define OPTSTR_ascii 0 +#ifdef CLEANUP_ascii +#undef CLEANUP_ascii +#undef FOR_ascii +#endif + +// base64 diw#<0=76[!dw] +#undef OPTSTR_base64 +#define OPTSTR_base64 "diw#<0=76[!dw]" +#ifdef CLEANUP_base64 +#undef CLEANUP_base64 +#undef FOR_base64 +#undef FLAG_w +#undef FLAG_i +#undef FLAG_d +#endif + +// basename ^<1as: ^<1as: +#undef OPTSTR_basename +#define OPTSTR_basename "^<1as:" +#ifdef CLEANUP_basename +#undef CLEANUP_basename +#undef FOR_basename +#undef FLAG_s +#undef FLAG_a +#endif + +// bc i(interactive)l(mathlib)q(quiet)s(standard)w(warn) +#undef OPTSTR_bc +#define OPTSTR_bc "i(interactive)l(mathlib)q(quiet)s(standard)w(warn)" +#ifdef CLEANUP_bc +#undef CLEANUP_bc +#undef FOR_bc +#undef FLAG_w +#undef FLAG_s +#undef FLAG_q +#undef FLAG_l +#undef FLAG_i +#endif + +// blkid ULs*[!LU] +#undef OPTSTR_blkid +#define OPTSTR_blkid "ULs*[!LU]" +#ifdef CLEANUP_blkid +#undef CLEANUP_blkid +#undef FOR_blkid +#undef FLAG_s +#undef FLAG_L +#undef FLAG_U +#endif + +// blockdev <1>1(setro)(setrw)(getro)(getss)(getbsz)(setbsz)#<0(getsz)(getsize)(getsize64)(getra)(setra)#<0(flushbufs)(rereadpt) +#undef OPTSTR_blockdev +#define OPTSTR_blockdev "<1>1(setro)(setrw)(getro)(getss)(getbsz)(setbsz)#<0(getsz)(getsize)(getsize64)(getra)(setra)#<0(flushbufs)(rereadpt)" +#ifdef CLEANUP_blockdev +#undef CLEANUP_blockdev +#undef FOR_blockdev +#undef FLAG_rereadpt +#undef FLAG_flushbufs +#undef FLAG_setra +#undef FLAG_getra +#undef FLAG_getsize64 +#undef FLAG_getsize +#undef FLAG_getsz +#undef FLAG_setbsz +#undef FLAG_getbsz +#undef FLAG_getss +#undef FLAG_getro +#undef FLAG_setrw +#undef FLAG_setro +#endif + +// bootchartd +#undef OPTSTR_bootchartd +#define OPTSTR_bootchartd 0 +#ifdef CLEANUP_bootchartd +#undef CLEANUP_bootchartd +#undef FOR_bootchartd +#endif + +// brctl <1 +#undef OPTSTR_brctl +#define OPTSTR_brctl "<1" +#ifdef CLEANUP_brctl +#undef CLEANUP_brctl +#undef FOR_brctl +#endif + +// bunzip2 cftkv +#undef OPTSTR_bunzip2 +#define OPTSTR_bunzip2 "cftkv" +#ifdef CLEANUP_bunzip2 +#undef CLEANUP_bunzip2 +#undef FOR_bunzip2 +#undef FLAG_v +#undef FLAG_k +#undef FLAG_t +#undef FLAG_f +#undef FLAG_c +#endif + +// bzcat +#undef OPTSTR_bzcat +#define OPTSTR_bzcat 0 +#ifdef CLEANUP_bzcat +#undef CLEANUP_bzcat +#undef FOR_bzcat +#endif + +// cal >2h +#undef OPTSTR_cal +#define OPTSTR_cal ">2h" +#ifdef CLEANUP_cal +#undef CLEANUP_cal +#undef FOR_cal +#undef FLAG_h +#endif + +// cat uvte uvte +#undef OPTSTR_cat +#define OPTSTR_cat "uvte" +#ifdef CLEANUP_cat +#undef CLEANUP_cat +#undef FOR_cat +#undef FLAG_e +#undef FLAG_t +#undef FLAG_v +#undef FLAG_u +#endif + +// catv vte +#undef OPTSTR_catv +#define OPTSTR_catv "vte" +#ifdef CLEANUP_catv +#undef CLEANUP_catv +#undef FOR_catv +#undef FLAG_e +#undef FLAG_t +#undef FLAG_v +#endif + +// cd >1LP[-LP] +#undef OPTSTR_cd +#define OPTSTR_cd ">1LP[-LP]" +#ifdef CLEANUP_cd +#undef CLEANUP_cd +#undef FOR_cd +#undef FLAG_P +#undef FLAG_L +#endif + +// chattr ?p#v#R +#undef OPTSTR_chattr +#define OPTSTR_chattr "?p#v#R" +#ifdef CLEANUP_chattr +#undef CLEANUP_chattr +#undef FOR_chattr +#undef FLAG_R +#undef FLAG_v +#undef FLAG_p +#endif + +// chcon <2hvR +#undef OPTSTR_chcon +#define OPTSTR_chcon "<2hvR" +#ifdef CLEANUP_chcon +#undef CLEANUP_chcon +#undef FOR_chcon +#undef FLAG_R +#undef FLAG_v +#undef FLAG_h +#endif + +// chgrp <2hPLHRfv[-HLP] +#undef OPTSTR_chgrp +#define OPTSTR_chgrp "<2hPLHRfv[-HLP]" +#ifdef CLEANUP_chgrp +#undef CLEANUP_chgrp +#undef FOR_chgrp +#undef FLAG_v +#undef FLAG_f +#undef FLAG_R +#undef FLAG_H +#undef FLAG_L +#undef FLAG_P +#undef FLAG_h +#endif + +// chmod <2?vRf[-vf] <2?vRf[-vf] +#undef OPTSTR_chmod +#define OPTSTR_chmod "<2?vRf[-vf]" +#ifdef CLEANUP_chmod +#undef CLEANUP_chmod +#undef FOR_chmod +#undef FLAG_f +#undef FLAG_R +#undef FLAG_v +#endif + +// chroot ^<1 +#undef OPTSTR_chroot +#define OPTSTR_chroot "^<1" +#ifdef CLEANUP_chroot +#undef CLEANUP_chroot +#undef FOR_chroot +#endif + +// chrt ^mp#<0iRbrfo[!ibrfo] +#undef OPTSTR_chrt +#define OPTSTR_chrt "^mp#<0iRbrfo[!ibrfo]" +#ifdef CLEANUP_chrt +#undef CLEANUP_chrt +#undef FOR_chrt +#undef FLAG_o +#undef FLAG_f +#undef FLAG_r +#undef FLAG_b +#undef FLAG_R +#undef FLAG_i +#undef FLAG_p +#undef FLAG_m +#endif + +// chvt <1 +#undef OPTSTR_chvt +#define OPTSTR_chvt "<1" +#ifdef CLEANUP_chvt +#undef CLEANUP_chvt +#undef FOR_chvt +#endif + +// cksum HIPLN +#undef OPTSTR_cksum +#define OPTSTR_cksum "HIPLN" +#ifdef CLEANUP_cksum +#undef CLEANUP_cksum +#undef FOR_cksum +#undef FLAG_N +#undef FLAG_L +#undef FLAG_P +#undef FLAG_I +#undef FLAG_H +#endif + +// clear +#undef OPTSTR_clear +#define OPTSTR_clear 0 +#ifdef CLEANUP_clear +#undef CLEANUP_clear +#undef FOR_clear +#endif + +// cmp <1>2ls(silent)(quiet)[!ls] <1>2ls(silent)(quiet)[!ls] +#undef OPTSTR_cmp +#define OPTSTR_cmp "<1>2ls(silent)(quiet)[!ls]" +#ifdef CLEANUP_cmp +#undef CLEANUP_cmp +#undef FOR_cmp +#undef FLAG_s +#undef FLAG_l +#endif + +// comm <2>2321 <2>2321 +#undef OPTSTR_comm +#define OPTSTR_comm "<2>2321" +#ifdef CLEANUP_comm +#undef CLEANUP_comm +#undef FOR_comm +#undef FLAG_1 +#undef FLAG_2 +#undef FLAG_3 +#endif + +// count +#undef OPTSTR_count +#define OPTSTR_count 0 +#ifdef CLEANUP_count +#undef CLEANUP_count +#undef FOR_count +#endif + +// cp <2(preserve):;D(parents)RHLPprdaslvnF(remove-destination)fiT[-HLPd][-ni] <2(preserve):;D(parents)RHLPprdaslvnF(remove-destination)fiT[-HLPd][-ni] +#undef OPTSTR_cp +#define OPTSTR_cp "<2(preserve):;D(parents)RHLPprdaslvnF(remove-destination)fiT[-HLPd][-ni]" +#ifdef CLEANUP_cp +#undef CLEANUP_cp +#undef FOR_cp +#undef FLAG_T +#undef FLAG_i +#undef FLAG_f +#undef FLAG_F +#undef FLAG_n +#undef FLAG_v +#undef FLAG_l +#undef FLAG_s +#undef FLAG_a +#undef FLAG_d +#undef FLAG_r +#undef FLAG_p +#undef FLAG_P +#undef FLAG_L +#undef FLAG_H +#undef FLAG_R +#undef FLAG_D +#undef FLAG_preserve +#endif + +// cpio (no-preserve-owner)(trailer)mduH:p:|i|t|F:v(verbose)o|[!pio][!pot][!pF] +#undef OPTSTR_cpio +#define OPTSTR_cpio "(no-preserve-owner)(trailer)mduH:p:|i|t|F:v(verbose)o|[!pio][!pot][!pF]" +#ifdef CLEANUP_cpio +#undef CLEANUP_cpio +#undef FOR_cpio +#undef FLAG_o +#undef FLAG_v +#undef FLAG_F +#undef FLAG_t +#undef FLAG_i +#undef FLAG_p +#undef FLAG_H +#undef FLAG_u +#undef FLAG_d +#undef FLAG_m +#undef FLAG_trailer +#undef FLAG_no_preserve_owner +#endif + +// crc32 +#undef OPTSTR_crc32 +#define OPTSTR_crc32 0 +#ifdef CLEANUP_crc32 +#undef CLEANUP_crc32 +#undef FOR_crc32 +#endif + +// crond fbSl#<0=8d#<0L:c:[-bf][-LS][-ld] +#undef OPTSTR_crond +#define OPTSTR_crond "fbSl#<0=8d#<0L:c:[-bf][-LS][-ld]" +#ifdef CLEANUP_crond +#undef CLEANUP_crond +#undef FOR_crond +#undef FLAG_c +#undef FLAG_L +#undef FLAG_d +#undef FLAG_l +#undef FLAG_S +#undef FLAG_b +#undef FLAG_f +#endif + +// crontab c:u:elr[!elr] +#undef OPTSTR_crontab +#define OPTSTR_crontab "c:u:elr[!elr]" +#ifdef CLEANUP_crontab +#undef CLEANUP_crontab +#undef FOR_crontab +#undef FLAG_r +#undef FLAG_l +#undef FLAG_e +#undef FLAG_u +#undef FLAG_c +#endif + +// cut b*|c*|f*|F*|C*|O(output-delimiter):d:sDn[!cbf] b*|c*|f*|F*|C*|O(output-delimiter):d:sDn[!cbf] +#undef OPTSTR_cut +#define OPTSTR_cut "b*|c*|f*|F*|C*|O(output-delimiter):d:sDn[!cbf]" +#ifdef CLEANUP_cut +#undef CLEANUP_cut +#undef FOR_cut +#undef FLAG_n +#undef FLAG_D +#undef FLAG_s +#undef FLAG_d +#undef FLAG_O +#undef FLAG_C +#undef FLAG_F +#undef FLAG_f +#undef FLAG_c +#undef FLAG_b +#endif + +// date d:D:r:u[!dr] d:D:r:u[!dr] +#undef OPTSTR_date +#define OPTSTR_date "d:D:r:u[!dr]" +#ifdef CLEANUP_date +#undef CLEANUP_date +#undef FOR_date +#undef FLAG_u +#undef FLAG_r +#undef FLAG_D +#undef FLAG_d +#endif + +// dd +#undef OPTSTR_dd +#define OPTSTR_dd 0 +#ifdef CLEANUP_dd +#undef CLEANUP_dd +#undef FOR_dd +#endif + +// deallocvt >1 +#undef OPTSTR_deallocvt +#define OPTSTR_deallocvt ">1" +#ifdef CLEANUP_deallocvt +#undef CLEANUP_deallocvt +#undef FOR_deallocvt +#endif + +// demo_many_options ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba +#undef OPTSTR_demo_many_options +#define OPTSTR_demo_many_options "ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba" +#ifdef CLEANUP_demo_many_options +#undef CLEANUP_demo_many_options +#undef FOR_demo_many_options +#undef FLAG_a +#undef FLAG_b +#undef FLAG_c +#undef FLAG_d +#undef FLAG_e +#undef FLAG_f +#undef FLAG_g +#undef FLAG_h +#undef FLAG_i +#undef FLAG_j +#undef FLAG_k +#undef FLAG_l +#undef FLAG_m +#undef FLAG_n +#undef FLAG_o +#undef FLAG_p +#undef FLAG_q +#undef FLAG_r +#undef FLAG_s +#undef FLAG_t +#undef FLAG_u +#undef FLAG_v +#undef FLAG_w +#undef FLAG_x +#undef FLAG_y +#undef FLAG_z +#undef FLAG_A +#undef FLAG_B +#undef FLAG_C +#undef FLAG_D +#undef FLAG_E +#undef FLAG_F +#undef FLAG_G +#undef FLAG_H +#undef FLAG_I +#undef FLAG_J +#undef FLAG_K +#undef FLAG_L +#undef FLAG_M +#undef FLAG_N +#undef FLAG_O +#undef FLAG_P +#undef FLAG_Q +#undef FLAG_R +#undef FLAG_S +#undef FLAG_T +#undef FLAG_U +#undef FLAG_V +#undef FLAG_W +#undef FLAG_X +#undef FLAG_Y +#undef FLAG_Z +#endif + +// demo_number D#=3<3hdbs +#undef OPTSTR_demo_number +#define OPTSTR_demo_number "D#=3<3hdbs" +#ifdef CLEANUP_demo_number +#undef CLEANUP_demo_number +#undef FOR_demo_number +#undef FLAG_s +#undef FLAG_b +#undef FLAG_d +#undef FLAG_h +#undef FLAG_D +#endif + +// demo_scankey +#undef OPTSTR_demo_scankey +#define OPTSTR_demo_scankey 0 +#ifdef CLEANUP_demo_scankey +#undef CLEANUP_demo_scankey +#undef FOR_demo_scankey +#endif + +// demo_utf8towc +#undef OPTSTR_demo_utf8towc +#define OPTSTR_demo_utf8towc 0 +#ifdef CLEANUP_demo_utf8towc +#undef CLEANUP_demo_utf8towc +#undef FOR_demo_utf8towc +#endif + +// devmem <1>3 +#undef OPTSTR_devmem +#define OPTSTR_devmem "<1>3" +#ifdef CLEANUP_devmem +#undef CLEANUP_devmem +#undef FOR_devmem +#endif + +// df HPkhit*a[-HPkh] +#undef OPTSTR_df +#define OPTSTR_df "HPkhit*a[-HPkh]" +#ifdef CLEANUP_df +#undef CLEANUP_df +#undef FOR_df +#undef FLAG_a +#undef FLAG_t +#undef FLAG_i +#undef FLAG_h +#undef FLAG_k +#undef FLAG_P +#undef FLAG_H +#endif + +// dhcp V:H:F:x*r:O*A#<0=20T#<0=3t#<0=3s:p:i:SBRCaovqnbf +#undef OPTSTR_dhcp +#define OPTSTR_dhcp "V:H:F:x*r:O*A#<0=20T#<0=3t#<0=3s:p:i:SBRCaovqnbf" +#ifdef CLEANUP_dhcp +#undef CLEANUP_dhcp +#undef FOR_dhcp +#undef FLAG_f +#undef FLAG_b +#undef FLAG_n +#undef FLAG_q +#undef FLAG_v +#undef FLAG_o +#undef FLAG_a +#undef FLAG_C +#undef FLAG_R +#undef FLAG_B +#undef FLAG_S +#undef FLAG_i +#undef FLAG_p +#undef FLAG_s +#undef FLAG_t +#undef FLAG_T +#undef FLAG_A +#undef FLAG_O +#undef FLAG_r +#undef FLAG_x +#undef FLAG_F +#undef FLAG_H +#undef FLAG_V +#endif + +// dhcp6 r:A#<0T#<0t#<0s:p:i:SRvqnbf +#undef OPTSTR_dhcp6 +#define OPTSTR_dhcp6 "r:A#<0T#<0t#<0s:p:i:SRvqnbf" +#ifdef CLEANUP_dhcp6 +#undef CLEANUP_dhcp6 +#undef FOR_dhcp6 +#undef FLAG_f +#undef FLAG_b +#undef FLAG_n +#undef FLAG_q +#undef FLAG_v +#undef FLAG_R +#undef FLAG_S +#undef FLAG_i +#undef FLAG_p +#undef FLAG_s +#undef FLAG_t +#undef FLAG_T +#undef FLAG_A +#undef FLAG_r +#endif + +// dhcpd >1P#<0>65535fi:S46[!46] +#undef OPTSTR_dhcpd +#define OPTSTR_dhcpd ">1P#<0>65535fi:S46[!46]" +#ifdef CLEANUP_dhcpd +#undef CLEANUP_dhcpd +#undef FOR_dhcpd +#undef FLAG_6 +#undef FLAG_4 +#undef FLAG_S +#undef FLAG_i +#undef FLAG_f +#undef FLAG_P +#endif + +// diff <2>2(color)(strip-trailing-cr)B(ignore-blank-lines)d(minimal)b(ignore-space-change)ut(expand-tabs)w(ignore-all-space)i(ignore-case)T(initial-tab)s(report-identical-files)q(brief)a(text)L(label)*S(starting-file):N(new-file)r(recursive)U(unified)#<0=3 <2>2(color)(strip-trailing-cr)B(ignore-blank-lines)d(minimal)b(ignore-space-change)ut(expand-tabs)w(ignore-all-space)i(ignore-case)T(initial-tab)s(report-identical-files)q(brief)a(text)L(label)*S(starting-file):N(new-file)r(recursive)U(unified)#<0=3 +#undef OPTSTR_diff +#define OPTSTR_diff "<2>2(color)(strip-trailing-cr)B(ignore-blank-lines)d(minimal)b(ignore-space-change)ut(expand-tabs)w(ignore-all-space)i(ignore-case)T(initial-tab)s(report-identical-files)q(brief)a(text)L(label)*S(starting-file):N(new-file)r(recursive)U(unified)#<0=3" +#ifdef CLEANUP_diff +#undef CLEANUP_diff +#undef FOR_diff +#undef FLAG_U +#undef FLAG_r +#undef FLAG_N +#undef FLAG_S +#undef FLAG_L +#undef FLAG_a +#undef FLAG_q +#undef FLAG_s +#undef FLAG_T +#undef FLAG_i +#undef FLAG_w +#undef FLAG_t +#undef FLAG_u +#undef FLAG_b +#undef FLAG_d +#undef FLAG_B +#undef FLAG_strip_trailing_cr +#undef FLAG_color +#endif + +// dirname <1 <1 +#undef OPTSTR_dirname +#define OPTSTR_dirname "<1" +#ifdef CLEANUP_dirname +#undef CLEANUP_dirname +#undef FOR_dirname +#endif + +// dmesg w(follow)CSTtrs#<1n#c[!Ttr][!Cc][!Sw] +#undef OPTSTR_dmesg +#define OPTSTR_dmesg "w(follow)CSTtrs#<1n#c[!Ttr][!Cc][!Sw]" +#ifdef CLEANUP_dmesg +#undef CLEANUP_dmesg +#undef FOR_dmesg +#undef FLAG_c +#undef FLAG_n +#undef FLAG_s +#undef FLAG_r +#undef FLAG_t +#undef FLAG_T +#undef FLAG_S +#undef FLAG_C +#undef FLAG_w +#endif + +// dnsdomainname >0 +#undef OPTSTR_dnsdomainname +#define OPTSTR_dnsdomainname ">0" +#ifdef CLEANUP_dnsdomainname +#undef CLEANUP_dnsdomainname +#undef FOR_dnsdomainname +#endif + +// dos2unix +#undef OPTSTR_dos2unix +#define OPTSTR_dos2unix 0 +#ifdef CLEANUP_dos2unix +#undef CLEANUP_dos2unix +#undef FOR_dos2unix +#endif + +// du d#<0=-1hmlcaHkKLsx[-HL][-kKmh] d#<0=-1hmlcaHkKLsx[-HL][-kKmh] +#undef OPTSTR_du +#define OPTSTR_du "d#<0=-1hmlcaHkKLsx[-HL][-kKmh]" +#ifdef CLEANUP_du +#undef CLEANUP_du +#undef FOR_du +#undef FLAG_x +#undef FLAG_s +#undef FLAG_L +#undef FLAG_K +#undef FLAG_k +#undef FLAG_H +#undef FLAG_a +#undef FLAG_c +#undef FLAG_l +#undef FLAG_m +#undef FLAG_h +#undef FLAG_d +#endif + +// dumpleases >0arf:[!ar] +#undef OPTSTR_dumpleases +#define OPTSTR_dumpleases ">0arf:[!ar]" +#ifdef CLEANUP_dumpleases +#undef CLEANUP_dumpleases +#undef FOR_dumpleases +#undef FLAG_f +#undef FLAG_r +#undef FLAG_a +#endif + +// echo ^?Een[-eE] ^?Een[-eE] +#undef OPTSTR_echo +#define OPTSTR_echo "^?Een[-eE]" +#ifdef CLEANUP_echo +#undef CLEANUP_echo +#undef FOR_echo +#undef FLAG_n +#undef FLAG_e +#undef FLAG_E +#endif + +// eject >1stT[!tT] +#undef OPTSTR_eject +#define OPTSTR_eject ">1stT[!tT]" +#ifdef CLEANUP_eject +#undef CLEANUP_eject +#undef FOR_eject +#undef FLAG_T +#undef FLAG_t +#undef FLAG_s +#endif + +// env ^0iu* ^0iu* +#undef OPTSTR_env +#define OPTSTR_env "^0iu*" +#ifdef CLEANUP_env +#undef CLEANUP_env +#undef FOR_env +#undef FLAG_u +#undef FLAG_i +#undef FLAG_0 +#endif + +// exit +#undef OPTSTR_exit +#define OPTSTR_exit 0 +#ifdef CLEANUP_exit +#undef CLEANUP_exit +#undef FOR_exit +#endif + +// expand t* +#undef OPTSTR_expand +#define OPTSTR_expand "t*" +#ifdef CLEANUP_expand +#undef CLEANUP_expand +#undef FOR_expand +#undef FLAG_t +#endif + +// expr +#undef OPTSTR_expr +#define OPTSTR_expr 0 +#ifdef CLEANUP_expr +#undef CLEANUP_expr +#undef FOR_expr +#endif + +// factor +#undef OPTSTR_factor +#define OPTSTR_factor 0 +#ifdef CLEANUP_factor +#undef CLEANUP_factor +#undef FOR_factor +#endif + +// fallocate >1l#|o# +#undef OPTSTR_fallocate +#define OPTSTR_fallocate ">1l#|o#" +#ifdef CLEANUP_fallocate +#undef CLEANUP_fallocate +#undef FOR_fallocate +#undef FLAG_o +#undef FLAG_l +#endif + +// false +#undef OPTSTR_false +#define OPTSTR_false 0 +#ifdef CLEANUP_false +#undef CLEANUP_false +#undef FOR_false +#endif + +// fdisk C#<0H#<0S#<0b#<512ul +#undef OPTSTR_fdisk +#define OPTSTR_fdisk "C#<0H#<0S#<0b#<512ul" +#ifdef CLEANUP_fdisk +#undef CLEANUP_fdisk +#undef FOR_fdisk +#undef FLAG_l +#undef FLAG_u +#undef FLAG_b +#undef FLAG_S +#undef FLAG_H +#undef FLAG_C +#endif + +// file <1bhLs[!hL] +#undef OPTSTR_file +#define OPTSTR_file "<1bhLs[!hL]" +#ifdef CLEANUP_file +#undef CLEANUP_file +#undef FOR_file +#undef FLAG_s +#undef FLAG_L +#undef FLAG_h +#undef FLAG_b +#endif + +// find ?^HL[-HL] ?^HL[-HL] +#undef OPTSTR_find +#define OPTSTR_find "?^HL[-HL]" +#ifdef CLEANUP_find +#undef CLEANUP_find +#undef FOR_find +#undef FLAG_L +#undef FLAG_H +#endif + +// flock <1>1nsux[-sux] +#undef OPTSTR_flock +#define OPTSTR_flock "<1>1nsux[-sux]" +#ifdef CLEANUP_flock +#undef CLEANUP_flock +#undef FOR_flock +#undef FLAG_x +#undef FLAG_u +#undef FLAG_s +#undef FLAG_n +#endif + +// fmt w#<0=75 +#undef OPTSTR_fmt +#define OPTSTR_fmt "w#<0=75" +#ifdef CLEANUP_fmt +#undef CLEANUP_fmt +#undef FOR_fmt +#undef FLAG_w +#endif + +// fold bsuw#<1 +#undef OPTSTR_fold +#define OPTSTR_fold "bsuw#<1" +#ifdef CLEANUP_fold +#undef CLEANUP_fold +#undef FOR_fold +#undef FLAG_w +#undef FLAG_u +#undef FLAG_s +#undef FLAG_b +#endif + +// free htgmkb[!htgmkb] +#undef OPTSTR_free +#define OPTSTR_free "htgmkb[!htgmkb]" +#ifdef CLEANUP_free +#undef CLEANUP_free +#undef FOR_free +#undef FLAG_b +#undef FLAG_k +#undef FLAG_m +#undef FLAG_g +#undef FLAG_t +#undef FLAG_h +#endif + +// freeramdisk <1>1 +#undef OPTSTR_freeramdisk +#define OPTSTR_freeramdisk "<1>1" +#ifdef CLEANUP_freeramdisk +#undef CLEANUP_freeramdisk +#undef FOR_freeramdisk +#endif + +// fsck ?t:ANPRTVsC# +#undef OPTSTR_fsck +#define OPTSTR_fsck "?t:ANPRTVsC#" +#ifdef CLEANUP_fsck +#undef CLEANUP_fsck +#undef FOR_fsck +#undef FLAG_C +#undef FLAG_s +#undef FLAG_V +#undef FLAG_T +#undef FLAG_R +#undef FLAG_P +#undef FLAG_N +#undef FLAG_A +#undef FLAG_t +#endif + +// fsfreeze <1>1f|u|[!fu] +#undef OPTSTR_fsfreeze +#define OPTSTR_fsfreeze "<1>1f|u|[!fu]" +#ifdef CLEANUP_fsfreeze +#undef CLEANUP_fsfreeze +#undef FOR_fsfreeze +#undef FLAG_u +#undef FLAG_f +#endif + +// fstype <1 +#undef OPTSTR_fstype +#define OPTSTR_fstype "<1" +#ifdef CLEANUP_fstype +#undef CLEANUP_fstype +#undef FOR_fstype +#endif + +// fsync <1d +#undef OPTSTR_fsync +#define OPTSTR_fsync "<1d" +#ifdef CLEANUP_fsync +#undef CLEANUP_fsync +#undef FOR_fsync +#undef FLAG_d +#endif + +// ftpget <2>3P:cp:u:vgslLmMdD[-gs][!gslLmMdD][!clL] +#undef OPTSTR_ftpget +#define OPTSTR_ftpget "<2>3P:cp:u:vgslLmMdD[-gs][!gslLmMdD][!clL]" +#ifdef CLEANUP_ftpget +#undef CLEANUP_ftpget +#undef FOR_ftpget +#undef FLAG_D +#undef FLAG_d +#undef FLAG_M +#undef FLAG_m +#undef FLAG_L +#undef FLAG_l +#undef FLAG_s +#undef FLAG_g +#undef FLAG_v +#undef FLAG_u +#undef FLAG_p +#undef FLAG_c +#undef FLAG_P +#endif + +// getconf >2al >2al +#undef OPTSTR_getconf +#define OPTSTR_getconf ">2al" +#ifdef CLEANUP_getconf +#undef CLEANUP_getconf +#undef FOR_getconf +#undef FLAG_l +#undef FLAG_a +#endif + +// getenforce >0 +#undef OPTSTR_getenforce +#define OPTSTR_getenforce ">0" +#ifdef CLEANUP_getenforce +#undef CLEANUP_getenforce +#undef FOR_getenforce +#endif + +// getfattr (only-values)dhn: +#undef OPTSTR_getfattr +#define OPTSTR_getfattr "(only-values)dhn:" +#ifdef CLEANUP_getfattr +#undef CLEANUP_getfattr +#undef FOR_getfattr +#undef FLAG_n +#undef FLAG_h +#undef FLAG_d +#undef FLAG_only_values +#endif + +// getopt ^a(alternative)n:(name)o:(options)l*(long)(longoptions)Tu ^a(alternative)n:(name)o:(options)l*(long)(longoptions)Tu +#undef OPTSTR_getopt +#define OPTSTR_getopt "^a(alternative)n:(name)o:(options)l*(long)(longoptions)Tu" +#ifdef CLEANUP_getopt +#undef CLEANUP_getopt +#undef FOR_getopt +#undef FLAG_u +#undef FLAG_T +#undef FLAG_l +#undef FLAG_o +#undef FLAG_n +#undef FLAG_a +#endif + +// getty <2t#<0H:I:l:f:iwnmLh +#undef OPTSTR_getty +#define OPTSTR_getty "<2t#<0H:I:l:f:iwnmLh" +#ifdef CLEANUP_getty +#undef CLEANUP_getty +#undef FOR_getty +#undef FLAG_h +#undef FLAG_L +#undef FLAG_m +#undef FLAG_n +#undef FLAG_w +#undef FLAG_i +#undef FLAG_f +#undef FLAG_l +#undef FLAG_I +#undef FLAG_H +#undef FLAG_t +#endif + +// grep (line-buffered)(color):;(exclude-dir)*S(exclude)*M(include)*ZzEFHIab(byte-offset)h(no-filename)ino(only-matching)rRsvwcl(files-with-matches)q(quiet)(silent)e*f*C#B#A#m#x[!wx][!EFw] (line-buffered)(color):;(exclude-dir)*S(exclude)*M(include)*ZzEFHIab(byte-offset)h(no-filename)ino(only-matching)rRsvwcl(files-with-matches)q(quiet)(silent)e*f*C#B#A#m#x[!wx][!EFw] +#undef OPTSTR_grep +#define OPTSTR_grep "(line-buffered)(color):;(exclude-dir)*S(exclude)*M(include)*ZzEFHIab(byte-offset)h(no-filename)ino(only-matching)rRsvwcl(files-with-matches)q(quiet)(silent)e*f*C#B#A#m#x[!wx][!EFw]" +#ifdef CLEANUP_grep +#undef CLEANUP_grep +#undef FOR_grep +#undef FLAG_x +#undef FLAG_m +#undef FLAG_A +#undef FLAG_B +#undef FLAG_C +#undef FLAG_f +#undef FLAG_e +#undef FLAG_q +#undef FLAG_l +#undef FLAG_c +#undef FLAG_w +#undef FLAG_v +#undef FLAG_s +#undef FLAG_R +#undef FLAG_r +#undef FLAG_o +#undef FLAG_n +#undef FLAG_i +#undef FLAG_h +#undef FLAG_b +#undef FLAG_a +#undef FLAG_I +#undef FLAG_H +#undef FLAG_F +#undef FLAG_E +#undef FLAG_z +#undef FLAG_Z +#undef FLAG_M +#undef FLAG_S +#undef FLAG_exclude_dir +#undef FLAG_color +#undef FLAG_line_buffered +#endif + +// groupadd <1>2g#<0S +#undef OPTSTR_groupadd +#define OPTSTR_groupadd "<1>2g#<0S" +#ifdef CLEANUP_groupadd +#undef CLEANUP_groupadd +#undef FOR_groupadd +#undef FLAG_S +#undef FLAG_g +#endif + +// groupdel <1>2 +#undef OPTSTR_groupdel +#define OPTSTR_groupdel "<1>2" +#ifdef CLEANUP_groupdel +#undef CLEANUP_groupdel +#undef FOR_groupdel +#endif + +// groups +#undef OPTSTR_groups +#define OPTSTR_groups 0 +#ifdef CLEANUP_groups +#undef CLEANUP_groups +#undef FOR_groups +#endif + +// gunzip cdfk123456789[-123456789] +#undef OPTSTR_gunzip +#define OPTSTR_gunzip "cdfk123456789[-123456789]" +#ifdef CLEANUP_gunzip +#undef CLEANUP_gunzip +#undef FOR_gunzip +#undef FLAG_9 +#undef FLAG_8 +#undef FLAG_7 +#undef FLAG_6 +#undef FLAG_5 +#undef FLAG_4 +#undef FLAG_3 +#undef FLAG_2 +#undef FLAG_1 +#undef FLAG_k +#undef FLAG_f +#undef FLAG_d +#undef FLAG_c +#endif + +// gzip ncdfk123456789[-123456789] ncdfk123456789[-123456789] +#undef OPTSTR_gzip +#define OPTSTR_gzip "ncdfk123456789[-123456789]" +#ifdef CLEANUP_gzip +#undef CLEANUP_gzip +#undef FOR_gzip +#undef FLAG_9 +#undef FLAG_8 +#undef FLAG_7 +#undef FLAG_6 +#undef FLAG_5 +#undef FLAG_4 +#undef FLAG_3 +#undef FLAG_2 +#undef FLAG_1 +#undef FLAG_k +#undef FLAG_f +#undef FLAG_d +#undef FLAG_c +#undef FLAG_n +#endif + +// head ?n(lines)#<0=10c(bytes)#<0qv[-nc] ?n(lines)#<0=10c(bytes)#<0qv[-nc] +#undef OPTSTR_head +#define OPTSTR_head "?n(lines)#<0=10c(bytes)#<0qv[-nc]" +#ifdef CLEANUP_head +#undef CLEANUP_head +#undef FOR_head +#undef FLAG_v +#undef FLAG_q +#undef FLAG_c +#undef FLAG_n +#endif + +// hello +#undef OPTSTR_hello +#define OPTSTR_hello 0 +#ifdef CLEANUP_hello +#undef CLEANUP_hello +#undef FOR_hello +#endif + +// help ahu +#undef OPTSTR_help +#define OPTSTR_help "ahu" +#ifdef CLEANUP_help +#undef CLEANUP_help +#undef FOR_help +#undef FLAG_u +#undef FLAG_h +#undef FLAG_a +#endif + +// hexedit <1>1r +#undef OPTSTR_hexedit +#define OPTSTR_hexedit "<1>1r" +#ifdef CLEANUP_hexedit +#undef CLEANUP_hexedit +#undef FOR_hexedit +#undef FLAG_r +#endif + +// host <1>2avt: +#undef OPTSTR_host +#define OPTSTR_host "<1>2avt:" +#ifdef CLEANUP_host +#undef CLEANUP_host +#undef FOR_host +#undef FLAG_t +#undef FLAG_v +#undef FLAG_a +#endif + +// hostid >0 +#undef OPTSTR_hostid +#define OPTSTR_hostid ">0" +#ifdef CLEANUP_hostid +#undef CLEANUP_hostid +#undef FOR_hostid +#endif + +// hostname >1bdsfF:[!bdsf] >1bdsfF:[!bdsf] +#undef OPTSTR_hostname +#define OPTSTR_hostname ">1bdsfF:[!bdsf]" +#ifdef CLEANUP_hostname +#undef CLEANUP_hostname +#undef FOR_hostname +#undef FLAG_F +#undef FLAG_f +#undef FLAG_s +#undef FLAG_d +#undef FLAG_b +#endif + +// hwclock >0(fast)f(rtc):u(utc)l(localtime)t(systz)s(hctosys)r(show)w(systohc)[-ul][!rtsw] +#undef OPTSTR_hwclock +#define OPTSTR_hwclock ">0(fast)f(rtc):u(utc)l(localtime)t(systz)s(hctosys)r(show)w(systohc)[-ul][!rtsw]" +#ifdef CLEANUP_hwclock +#undef CLEANUP_hwclock +#undef FOR_hwclock +#undef FLAG_w +#undef FLAG_r +#undef FLAG_s +#undef FLAG_t +#undef FLAG_l +#undef FLAG_u +#undef FLAG_f +#undef FLAG_fast +#endif + +// i2cdetect >3aFly +#undef OPTSTR_i2cdetect +#define OPTSTR_i2cdetect ">3aFly" +#ifdef CLEANUP_i2cdetect +#undef CLEANUP_i2cdetect +#undef FOR_i2cdetect +#undef FLAG_y +#undef FLAG_l +#undef FLAG_F +#undef FLAG_a +#endif + +// i2cdump <2>2fy +#undef OPTSTR_i2cdump +#define OPTSTR_i2cdump "<2>2fy" +#ifdef CLEANUP_i2cdump +#undef CLEANUP_i2cdump +#undef FOR_i2cdump +#undef FLAG_y +#undef FLAG_f +#endif + +// i2cget <3>3fy +#undef OPTSTR_i2cget +#define OPTSTR_i2cget "<3>3fy" +#ifdef CLEANUP_i2cget +#undef CLEANUP_i2cget +#undef FOR_i2cget +#undef FLAG_y +#undef FLAG_f +#endif + +// i2cset <4fy +#undef OPTSTR_i2cset +#define OPTSTR_i2cset "<4fy" +#ifdef CLEANUP_i2cset +#undef CLEANUP_i2cset +#undef FOR_i2cset +#undef FLAG_y +#undef FLAG_f +#endif + +// iconv cst:f: +#undef OPTSTR_iconv +#define OPTSTR_iconv "cst:f:" +#ifdef CLEANUP_iconv +#undef CLEANUP_iconv +#undef FOR_iconv +#undef FLAG_f +#undef FLAG_t +#undef FLAG_s +#undef FLAG_c +#endif + +// id >1nGgru[!Ggu] >1ZnGgru[!ZGgu] +#undef OPTSTR_id +#define OPTSTR_id ">1nGgru[!Ggu]" +#ifdef CLEANUP_id +#undef CLEANUP_id +#undef FOR_id +#undef FLAG_u +#undef FLAG_r +#undef FLAG_g +#undef FLAG_G +#undef FLAG_n +#undef FLAG_Z +#endif + +// ifconfig ^?aS +#undef OPTSTR_ifconfig +#define OPTSTR_ifconfig "^?aS" +#ifdef CLEANUP_ifconfig +#undef CLEANUP_ifconfig +#undef FOR_ifconfig +#undef FLAG_S +#undef FLAG_a +#endif + +// init +#undef OPTSTR_init +#define OPTSTR_init 0 +#ifdef CLEANUP_init +#undef CLEANUP_init +#undef FOR_init +#endif + +// inotifyd <2 +#undef OPTSTR_inotifyd +#define OPTSTR_inotifyd "<2" +#ifdef CLEANUP_inotifyd +#undef CLEANUP_inotifyd +#undef FOR_inotifyd +#endif + +// insmod <1 +#undef OPTSTR_insmod +#define OPTSTR_insmod "<1" +#ifdef CLEANUP_insmod +#undef CLEANUP_insmod +#undef FOR_insmod +#endif + +// install <1cdDpsvm:o:g: +#undef OPTSTR_install +#define OPTSTR_install "<1cdDpsvm:o:g:" +#ifdef CLEANUP_install +#undef CLEANUP_install +#undef FOR_install +#undef FLAG_g +#undef FLAG_o +#undef FLAG_m +#undef FLAG_v +#undef FLAG_s +#undef FLAG_p +#undef FLAG_D +#undef FLAG_d +#undef FLAG_c +#endif + +// ionice ^tc#<0>3=2n#<0>7=5p# +#undef OPTSTR_ionice +#define OPTSTR_ionice "^tc#<0>3=2n#<0>7=5p#" +#ifdef CLEANUP_ionice +#undef CLEANUP_ionice +#undef FOR_ionice +#undef FLAG_p +#undef FLAG_n +#undef FLAG_c +#undef FLAG_t +#endif + +// iorenice ?<1>3 +#undef OPTSTR_iorenice +#define OPTSTR_iorenice "?<1>3" +#ifdef CLEANUP_iorenice +#undef CLEANUP_iorenice +#undef FOR_iorenice +#endif + +// iotop >0AaKOHk*o*p*u*s#<1=7d%<100=3000m#n#<1bq +#undef OPTSTR_iotop +#define OPTSTR_iotop ">0AaKOHk*o*p*u*s#<1=7d%<100=3000m#n#<1bq" +#ifdef CLEANUP_iotop +#undef CLEANUP_iotop +#undef FOR_iotop +#undef FLAG_q +#undef FLAG_b +#undef FLAG_n +#undef FLAG_m +#undef FLAG_d +#undef FLAG_s +#undef FLAG_u +#undef FLAG_p +#undef FLAG_o +#undef FLAG_k +#undef FLAG_H +#undef FLAG_O +#undef FLAG_K +#undef FLAG_a +#undef FLAG_A +#endif + +// ip +#undef OPTSTR_ip +#define OPTSTR_ip 0 +#ifdef CLEANUP_ip +#undef CLEANUP_ip +#undef FOR_ip +#endif + +// ipcrm m*M*s*S*q*Q* +#undef OPTSTR_ipcrm +#define OPTSTR_ipcrm "m*M*s*S*q*Q*" +#ifdef CLEANUP_ipcrm +#undef CLEANUP_ipcrm +#undef FOR_ipcrm +#undef FLAG_Q +#undef FLAG_q +#undef FLAG_S +#undef FLAG_s +#undef FLAG_M +#undef FLAG_m +#endif + +// ipcs acptulsqmi# +#undef OPTSTR_ipcs +#define OPTSTR_ipcs "acptulsqmi#" +#ifdef CLEANUP_ipcs +#undef CLEANUP_ipcs +#undef FOR_ipcs +#undef FLAG_i +#undef FLAG_m +#undef FLAG_q +#undef FLAG_s +#undef FLAG_l +#undef FLAG_u +#undef FLAG_t +#undef FLAG_p +#undef FLAG_c +#undef FLAG_a +#endif + +// kill ?ls: +#undef OPTSTR_kill +#define OPTSTR_kill "?ls: " +#ifdef CLEANUP_kill +#undef CLEANUP_kill +#undef FOR_kill +#undef FLAG_s +#undef FLAG_l +#endif + +// killall ?s:ilqvw +#undef OPTSTR_killall +#define OPTSTR_killall "?s:ilqvw" +#ifdef CLEANUP_killall +#undef CLEANUP_killall +#undef FOR_killall +#undef FLAG_w +#undef FLAG_v +#undef FLAG_q +#undef FLAG_l +#undef FLAG_i +#undef FLAG_s +#endif + +// killall5 ?o*ls: [!lo][!ls] +#undef OPTSTR_killall5 +#define OPTSTR_killall5 "?o*ls: [!lo][!ls]" +#ifdef CLEANUP_killall5 +#undef CLEANUP_killall5 +#undef FOR_killall5 +#undef FLAG_s +#undef FLAG_l +#undef FLAG_o +#endif + +// klogd c#<1>8n +#undef OPTSTR_klogd +#define OPTSTR_klogd "c#<1>8n" +#ifdef CLEANUP_klogd +#undef CLEANUP_klogd +#undef FOR_klogd +#undef FLAG_n +#undef FLAG_c +#endif + +// last f:W +#undef OPTSTR_last +#define OPTSTR_last "f:W" +#ifdef CLEANUP_last +#undef CLEANUP_last +#undef FOR_last +#undef FLAG_W +#undef FLAG_f +#endif + +// link <2>2 +#undef OPTSTR_link +#define OPTSTR_link "<2>2" +#ifdef CLEANUP_link +#undef CLEANUP_link +#undef FOR_link +#endif + +// ln <1rt:Tvnfs <1rt:Tvnfs +#undef OPTSTR_ln +#define OPTSTR_ln "<1rt:Tvnfs" +#ifdef CLEANUP_ln +#undef CLEANUP_ln +#undef FOR_ln +#undef FLAG_s +#undef FLAG_f +#undef FLAG_n +#undef FLAG_v +#undef FLAG_T +#undef FLAG_t +#undef FLAG_r +#endif + +// load_policy <1>1 +#undef OPTSTR_load_policy +#define OPTSTR_load_policy "<1>1" +#ifdef CLEANUP_load_policy +#undef CLEANUP_load_policy +#undef FOR_load_policy +#endif + +// log <1p:t: +#undef OPTSTR_log +#define OPTSTR_log "<1p:t:" +#ifdef CLEANUP_log +#undef CLEANUP_log +#undef FOR_log +#undef FLAG_t +#undef FLAG_p +#endif + +// logger st:p: +#undef OPTSTR_logger +#define OPTSTR_logger "st:p:" +#ifdef CLEANUP_logger +#undef CLEANUP_logger +#undef FOR_logger +#undef FLAG_p +#undef FLAG_t +#undef FLAG_s +#endif + +// login >1f:ph: +#undef OPTSTR_login +#define OPTSTR_login ">1f:ph:" +#ifdef CLEANUP_login +#undef CLEANUP_login +#undef FOR_login +#undef FLAG_h +#undef FLAG_p +#undef FLAG_f +#endif + +// logname >0 +#undef OPTSTR_logname +#define OPTSTR_logname ">0" +#ifdef CLEANUP_logname +#undef CLEANUP_logname +#undef FOR_logname +#endif + +// logwrapper +#undef OPTSTR_logwrapper +#define OPTSTR_logwrapper 0 +#ifdef CLEANUP_logwrapper +#undef CLEANUP_logwrapper +#undef FOR_logwrapper +#endif + +// losetup >2S(sizelimit)#s(show)ro#j:fdcaD[!afj] +#undef OPTSTR_losetup +#define OPTSTR_losetup ">2S(sizelimit)#s(show)ro#j:fdcaD[!afj]" +#ifdef CLEANUP_losetup +#undef CLEANUP_losetup +#undef FOR_losetup +#undef FLAG_D +#undef FLAG_a +#undef FLAG_c +#undef FLAG_d +#undef FLAG_f +#undef FLAG_j +#undef FLAG_o +#undef FLAG_r +#undef FLAG_s +#undef FLAG_S +#endif + +// ls (color):;(full-time)(show-control-chars)ZgoACFHLRSabcdfhikl@mnpqrstuw#=80<0x1[-Cxm1][-Cxml][-Cxmo][-Cxmg][-cu][-ftS][-HL][!qb] (color):;(full-time)(show-control-chars)ZgoACFHLRSabcdfhikl@mnpqrstuw#=80<0x1[-Cxm1][-Cxml][-Cxmo][-Cxmg][-cu][-ftS][-HL][!qb] +#undef OPTSTR_ls +#define OPTSTR_ls "(color):;(full-time)(show-control-chars)ZgoACFHLRSabcdfhikl@mnpqrstuw#=80<0x1[-Cxm1][-Cxml][-Cxmo][-Cxmg][-cu][-ftS][-HL][!qb]" +#ifdef CLEANUP_ls +#undef CLEANUP_ls +#undef FOR_ls +#undef FLAG_1 +#undef FLAG_x +#undef FLAG_w +#undef FLAG_u +#undef FLAG_t +#undef FLAG_s +#undef FLAG_r +#undef FLAG_q +#undef FLAG_p +#undef FLAG_n +#undef FLAG_m +#undef FLAG_l +#undef FLAG_k +#undef FLAG_i +#undef FLAG_h +#undef FLAG_f +#undef FLAG_d +#undef FLAG_c +#undef FLAG_b +#undef FLAG_a +#undef FLAG_S +#undef FLAG_R +#undef FLAG_L +#undef FLAG_H +#undef FLAG_F +#undef FLAG_C +#undef FLAG_A +#undef FLAG_o +#undef FLAG_g +#undef FLAG_Z +#undef FLAG_show_control_chars +#undef FLAG_full_time +#undef FLAG_color +#endif + +// lsattr ldapvR +#undef OPTSTR_lsattr +#define OPTSTR_lsattr "ldapvR" +#ifdef CLEANUP_lsattr +#undef CLEANUP_lsattr +#undef FOR_lsattr +#undef FLAG_R +#undef FLAG_v +#undef FLAG_p +#undef FLAG_a +#undef FLAG_d +#undef FLAG_l +#endif + +// lsmod +#undef OPTSTR_lsmod +#define OPTSTR_lsmod 0 +#ifdef CLEANUP_lsmod +#undef CLEANUP_lsmod +#undef FOR_lsmod +#endif + +// lsof lp*t +#undef OPTSTR_lsof +#define OPTSTR_lsof "lp*t" +#ifdef CLEANUP_lsof +#undef CLEANUP_lsof +#undef FOR_lsof +#undef FLAG_t +#undef FLAG_p +#undef FLAG_l +#endif + +// lspci emkn@i: +#undef OPTSTR_lspci +#define OPTSTR_lspci "emkn@i:" +#ifdef CLEANUP_lspci +#undef CLEANUP_lspci +#undef FOR_lspci +#undef FLAG_i +#undef FLAG_n +#undef FLAG_k +#undef FLAG_m +#undef FLAG_e +#endif + +// lsusb +#undef OPTSTR_lsusb +#define OPTSTR_lsusb 0 +#ifdef CLEANUP_lsusb +#undef CLEANUP_lsusb +#undef FOR_lsusb +#endif + +// makedevs <1>1d: +#undef OPTSTR_makedevs +#define OPTSTR_makedevs "<1>1d:" +#ifdef CLEANUP_makedevs +#undef CLEANUP_makedevs +#undef FOR_makedevs +#undef FLAG_d +#endif + +// man k:M: +#undef OPTSTR_man +#define OPTSTR_man "k:M:" +#ifdef CLEANUP_man +#undef CLEANUP_man +#undef FOR_man +#undef FLAG_M +#undef FLAG_k +#endif + +// mcookie v(verbose)V(version) +#undef OPTSTR_mcookie +#define OPTSTR_mcookie "v(verbose)V(version)" +#ifdef CLEANUP_mcookie +#undef CLEANUP_mcookie +#undef FOR_mcookie +#undef FLAG_V +#undef FLAG_v +#endif + +// md5sum bc(check)s(status)[!bc] bc(check)s(status)[!bc] +#undef OPTSTR_md5sum +#define OPTSTR_md5sum "bc(check)s(status)[!bc]" +#ifdef CLEANUP_md5sum +#undef CLEANUP_md5sum +#undef FOR_md5sum +#undef FLAG_s +#undef FLAG_c +#undef FLAG_b +#endif + +// mdev s +#undef OPTSTR_mdev +#define OPTSTR_mdev "s" +#ifdef CLEANUP_mdev +#undef CLEANUP_mdev +#undef FOR_mdev +#undef FLAG_s +#endif + +// microcom <1>1s:X <1>1s:X +#undef OPTSTR_microcom +#define OPTSTR_microcom "<1>1s:X" +#ifdef CLEANUP_microcom +#undef CLEANUP_microcom +#undef FOR_microcom +#undef FLAG_X +#undef FLAG_s +#endif + +// mix c:d:l#r# +#undef OPTSTR_mix +#define OPTSTR_mix "c:d:l#r#" +#ifdef CLEANUP_mix +#undef CLEANUP_mix +#undef FOR_mix +#undef FLAG_r +#undef FLAG_l +#undef FLAG_d +#undef FLAG_c +#endif + +// mkdir <1vp(parent)(parents)m: <1Z:vp(parent)(parents)m: +#undef OPTSTR_mkdir +#define OPTSTR_mkdir "<1vp(parent)(parents)m:" +#ifdef CLEANUP_mkdir +#undef CLEANUP_mkdir +#undef FOR_mkdir +#undef FLAG_m +#undef FLAG_p +#undef FLAG_v +#undef FLAG_Z +#endif + +// mke2fs <1>2g:Fnqm#N#i#b# +#undef OPTSTR_mke2fs +#define OPTSTR_mke2fs "<1>2g:Fnqm#N#i#b#" +#ifdef CLEANUP_mke2fs +#undef CLEANUP_mke2fs +#undef FOR_mke2fs +#undef FLAG_b +#undef FLAG_i +#undef FLAG_N +#undef FLAG_m +#undef FLAG_q +#undef FLAG_n +#undef FLAG_F +#undef FLAG_g +#endif + +// mkfifo <1Z:m: +#undef OPTSTR_mkfifo +#define OPTSTR_mkfifo "<1Z:m:" +#ifdef CLEANUP_mkfifo +#undef CLEANUP_mkfifo +#undef FOR_mkfifo +#undef FLAG_m +#undef FLAG_Z +#endif + +// mknod <2>4m(mode):Z: +#undef OPTSTR_mknod +#define OPTSTR_mknod "<2>4m(mode):Z:" +#ifdef CLEANUP_mknod +#undef CLEANUP_mknod +#undef FOR_mknod +#undef FLAG_Z +#undef FLAG_m +#endif + +// mkpasswd >2S:m:P#=0<0 +#undef OPTSTR_mkpasswd +#define OPTSTR_mkpasswd ">2S:m:P#=0<0" +#ifdef CLEANUP_mkpasswd +#undef CLEANUP_mkpasswd +#undef FOR_mkpasswd +#undef FLAG_P +#undef FLAG_m +#undef FLAG_S +#endif + +// mkswap <1>1L: +#undef OPTSTR_mkswap +#define OPTSTR_mkswap "<1>1L:" +#ifdef CLEANUP_mkswap +#undef CLEANUP_mkswap +#undef FOR_mkswap +#undef FLAG_L +#endif + +// mktemp >1(tmpdir);:uqd(directory)p:t >1(tmpdir);:uqd(directory)p:t +#undef OPTSTR_mktemp +#define OPTSTR_mktemp ">1(tmpdir);:uqd(directory)p:t" +#ifdef CLEANUP_mktemp +#undef CLEANUP_mktemp +#undef FOR_mktemp +#undef FLAG_t +#undef FLAG_p +#undef FLAG_d +#undef FLAG_q +#undef FLAG_u +#undef FLAG_tmpdir +#endif + +// modinfo <1b:k:F:0 +#undef OPTSTR_modinfo +#define OPTSTR_modinfo "<1b:k:F:0" +#ifdef CLEANUP_modinfo +#undef CLEANUP_modinfo +#undef FOR_modinfo +#undef FLAG_0 +#undef FLAG_F +#undef FLAG_k +#undef FLAG_b +#endif + +// modprobe alrqvsDbd* +#undef OPTSTR_modprobe +#define OPTSTR_modprobe "alrqvsDbd*" +#ifdef CLEANUP_modprobe +#undef CLEANUP_modprobe +#undef FOR_modprobe +#undef FLAG_d +#undef FLAG_b +#undef FLAG_D +#undef FLAG_s +#undef FLAG_v +#undef FLAG_q +#undef FLAG_r +#undef FLAG_l +#undef FLAG_a +#endif + +// more +#undef OPTSTR_more +#define OPTSTR_more 0 +#ifdef CLEANUP_more +#undef CLEANUP_more +#undef FOR_more +#endif + +// mount ?O:afnrvwt:o*[-rw] +#undef OPTSTR_mount +#define OPTSTR_mount "?O:afnrvwt:o*[-rw]" +#ifdef CLEANUP_mount +#undef CLEANUP_mount +#undef FOR_mount +#undef FLAG_o +#undef FLAG_t +#undef FLAG_w +#undef FLAG_v +#undef FLAG_r +#undef FLAG_n +#undef FLAG_f +#undef FLAG_a +#undef FLAG_O +#endif + +// mountpoint <1qdx[-dx] +#undef OPTSTR_mountpoint +#define OPTSTR_mountpoint "<1qdx[-dx]" +#ifdef CLEANUP_mountpoint +#undef CLEANUP_mountpoint +#undef FOR_mountpoint +#undef FLAG_x +#undef FLAG_d +#undef FLAG_q +#endif + +// mv <2vnF(remove-destination)fiT[-ni] <2vnF(remove-destination)fiT[-ni] +#undef OPTSTR_mv +#define OPTSTR_mv "<2vnF(remove-destination)fiT[-ni]" +#ifdef CLEANUP_mv +#undef CLEANUP_mv +#undef FOR_mv +#undef FLAG_T +#undef FLAG_i +#undef FLAG_f +#undef FLAG_F +#undef FLAG_n +#undef FLAG_v +#endif + +// nbd_client <3>3ns +#undef OPTSTR_nbd_client +#define OPTSTR_nbd_client "<3>3ns" +#ifdef CLEANUP_nbd_client +#undef CLEANUP_nbd_client +#undef FOR_nbd_client +#undef FLAG_s +#undef FLAG_n +#endif + +// netcat ^tlLw#<1W#<1p#<1>65535q#<1s:f:46uU[!tlL][!Lw][!46U] +#undef OPTSTR_netcat +#define OPTSTR_netcat "^tlLw#<1W#<1p#<1>65535q#<1s:f:46uU[!tlL][!Lw][!46U]" +#ifdef CLEANUP_netcat +#undef CLEANUP_netcat +#undef FOR_netcat +#undef FLAG_U +#undef FLAG_u +#undef FLAG_6 +#undef FLAG_4 +#undef FLAG_f +#undef FLAG_s +#undef FLAG_q +#undef FLAG_p +#undef FLAG_W +#undef FLAG_w +#undef FLAG_L +#undef FLAG_l +#undef FLAG_t +#endif + +// netstat pWrxwutneal +#undef OPTSTR_netstat +#define OPTSTR_netstat "pWrxwutneal" +#ifdef CLEANUP_netstat +#undef CLEANUP_netstat +#undef FOR_netstat +#undef FLAG_l +#undef FLAG_a +#undef FLAG_e +#undef FLAG_n +#undef FLAG_t +#undef FLAG_u +#undef FLAG_w +#undef FLAG_x +#undef FLAG_r +#undef FLAG_W +#undef FLAG_p +#endif + +// nice ^<1n# +#undef OPTSTR_nice +#define OPTSTR_nice "^<1n#" +#ifdef CLEANUP_nice +#undef CLEANUP_nice +#undef FOR_nice +#undef FLAG_n +#endif + +// nl v#=1l#w#<0=6Eb:n:s: +#undef OPTSTR_nl +#define OPTSTR_nl "v#=1l#w#<0=6Eb:n:s:" +#ifdef CLEANUP_nl +#undef CLEANUP_nl +#undef FOR_nl +#undef FLAG_s +#undef FLAG_n +#undef FLAG_b +#undef FLAG_E +#undef FLAG_w +#undef FLAG_l +#undef FLAG_v +#endif + +// nohup <1^ +#undef OPTSTR_nohup +#define OPTSTR_nohup "<1^" +#ifdef CLEANUP_nohup +#undef CLEANUP_nohup +#undef FOR_nohup +#endif + +// nproc (all) (all) +#undef OPTSTR_nproc +#define OPTSTR_nproc "(all)" +#ifdef CLEANUP_nproc +#undef CLEANUP_nproc +#undef FOR_nproc +#undef FLAG_all +#endif + +// nsenter <1F(no-fork)t#<1(target)i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user); +#undef OPTSTR_nsenter +#define OPTSTR_nsenter "<1F(no-fork)t#<1(target)i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user);" +#ifdef CLEANUP_nsenter +#undef CLEANUP_nsenter +#undef FOR_nsenter +#undef FLAG_U +#undef FLAG_u +#undef FLAG_p +#undef FLAG_n +#undef FLAG_m +#undef FLAG_i +#undef FLAG_t +#undef FLAG_F +#endif + +// od j#vw#<1=16N#xsodcbA:t* j#vw#<1=16N#xsodcbA:t* +#undef OPTSTR_od +#define OPTSTR_od "j#vw#<1=16N#xsodcbA:t*" +#ifdef CLEANUP_od +#undef CLEANUP_od +#undef FOR_od +#undef FLAG_t +#undef FLAG_A +#undef FLAG_b +#undef FLAG_c +#undef FLAG_d +#undef FLAG_o +#undef FLAG_s +#undef FLAG_x +#undef FLAG_N +#undef FLAG_w +#undef FLAG_v +#undef FLAG_j +#endif + +// oneit ^<1nc:p3[!pn] +#undef OPTSTR_oneit +#define OPTSTR_oneit "^<1nc:p3[!pn]" +#ifdef CLEANUP_oneit +#undef CLEANUP_oneit +#undef FOR_oneit +#undef FLAG_3 +#undef FLAG_p +#undef FLAG_c +#undef FLAG_n +#endif + +// openvt c#<1>63sw +#undef OPTSTR_openvt +#define OPTSTR_openvt "c#<1>63sw" +#ifdef CLEANUP_openvt +#undef CLEANUP_openvt +#undef FOR_openvt +#undef FLAG_w +#undef FLAG_s +#undef FLAG_c +#endif + +// partprobe <1 +#undef OPTSTR_partprobe +#define OPTSTR_partprobe "<1" +#ifdef CLEANUP_partprobe +#undef CLEANUP_partprobe +#undef FOR_partprobe +#endif + +// passwd >1a:dlu +#undef OPTSTR_passwd +#define OPTSTR_passwd ">1a:dlu" +#ifdef CLEANUP_passwd +#undef CLEANUP_passwd +#undef FOR_passwd +#undef FLAG_u +#undef FLAG_l +#undef FLAG_d +#undef FLAG_a +#endif + +// paste d:s d:s +#undef OPTSTR_paste +#define OPTSTR_paste "d:s" +#ifdef CLEANUP_paste +#undef CLEANUP_paste +#undef FOR_paste +#undef FLAG_s +#undef FLAG_d +#endif + +// patch >2(no-backup-if-mismatch)(dry-run)F#g#fulp#d:i:Rs(quiet) >2(no-backup-if-mismatch)(dry-run)xF#g#fulp#d:i:Rs(quiet) +#undef OPTSTR_patch +#define OPTSTR_patch ">2(no-backup-if-mismatch)(dry-run)F#g#fulp#d:i:Rs(quiet)" +#ifdef CLEANUP_patch +#undef CLEANUP_patch +#undef FOR_patch +#undef FLAG_s +#undef FLAG_R +#undef FLAG_i +#undef FLAG_d +#undef FLAG_p +#undef FLAG_l +#undef FLAG_u +#undef FLAG_f +#undef FLAG_g +#undef FLAG_F +#undef FLAG_x +#undef FLAG_dry_run +#undef FLAG_no_backup_if_mismatch +#endif + +// pgrep ?cld:u*U*t*s*P*g*G*fnovxL:[-no] ?cld:u*U*t*s*P*g*G*fnovxL:[-no] +#undef OPTSTR_pgrep +#define OPTSTR_pgrep "?cld:u*U*t*s*P*g*G*fnovxL:[-no]" +#ifdef CLEANUP_pgrep +#undef CLEANUP_pgrep +#undef FOR_pgrep +#undef FLAG_L +#undef FLAG_x +#undef FLAG_v +#undef FLAG_o +#undef FLAG_n +#undef FLAG_f +#undef FLAG_G +#undef FLAG_g +#undef FLAG_P +#undef FLAG_s +#undef FLAG_t +#undef FLAG_U +#undef FLAG_u +#undef FLAG_d +#undef FLAG_l +#undef FLAG_c +#endif + +// pidof <1so:x +#undef OPTSTR_pidof +#define OPTSTR_pidof "<1so:x" +#ifdef CLEANUP_pidof +#undef CLEANUP_pidof +#undef FOR_pidof +#undef FLAG_x +#undef FLAG_o +#undef FLAG_s +#endif + +// ping <1>1m#t#<0>255=64c#<0=3s#<0>4088=56i%W#<0=3w#<0qf46I:[-46] +#undef OPTSTR_ping +#define OPTSTR_ping "<1>1m#t#<0>255=64c#<0=3s#<0>4088=56i%W#<0=3w#<0qf46I:[-46]" +#ifdef CLEANUP_ping +#undef CLEANUP_ping +#undef FOR_ping +#undef FLAG_I +#undef FLAG_6 +#undef FLAG_4 +#undef FLAG_f +#undef FLAG_q +#undef FLAG_w +#undef FLAG_W +#undef FLAG_i +#undef FLAG_s +#undef FLAG_c +#undef FLAG_t +#undef FLAG_m +#endif + +// pivot_root <2>2 +#undef OPTSTR_pivot_root +#define OPTSTR_pivot_root "<2>2" +#ifdef CLEANUP_pivot_root +#undef CLEANUP_pivot_root +#undef FOR_pivot_root +#endif + +// pkill ?Vu*U*t*s*P*g*G*fnovxl:[-no] ?Vu*U*t*s*P*g*G*fnovxl:[-no] +#undef OPTSTR_pkill +#define OPTSTR_pkill "?Vu*U*t*s*P*g*G*fnovxl:[-no]" +#ifdef CLEANUP_pkill +#undef CLEANUP_pkill +#undef FOR_pkill +#undef FLAG_l +#undef FLAG_x +#undef FLAG_v +#undef FLAG_o +#undef FLAG_n +#undef FLAG_f +#undef FLAG_G +#undef FLAG_g +#undef FLAG_P +#undef FLAG_s +#undef FLAG_t +#undef FLAG_U +#undef FLAG_u +#undef FLAG_V +#endif + +// pmap <1xq +#undef OPTSTR_pmap +#define OPTSTR_pmap "<1xq" +#ifdef CLEANUP_pmap +#undef CLEANUP_pmap +#undef FOR_pmap +#undef FLAG_q +#undef FLAG_x +#endif + +// printenv 0(null) +#undef OPTSTR_printenv +#define OPTSTR_printenv "0(null)" +#ifdef CLEANUP_printenv +#undef CLEANUP_printenv +#undef FOR_printenv +#undef FLAG_0 +#endif + +// printf <1?^ +#undef OPTSTR_printf +#define OPTSTR_printf "<1?^" +#ifdef CLEANUP_printf +#undef CLEANUP_printf +#undef FOR_printf +#endif + +// ps k(sort)*P(ppid)*aAdeflMno*O*p(pid)*s*t*Tu*U*g*G*wZ[!ol][+Ae][!oO] k(sort)*P(ppid)*aAdeflMno*O*p(pid)*s*t*Tu*U*g*G*wZ[!ol][+Ae][!oO] +#undef OPTSTR_ps +#define OPTSTR_ps "k(sort)*P(ppid)*aAdeflMno*O*p(pid)*s*t*Tu*U*g*G*wZ[!ol][+Ae][!oO]" +#ifdef CLEANUP_ps +#undef CLEANUP_ps +#undef FOR_ps +#undef FLAG_Z +#undef FLAG_w +#undef FLAG_G +#undef FLAG_g +#undef FLAG_U +#undef FLAG_u +#undef FLAG_T +#undef FLAG_t +#undef FLAG_s +#undef FLAG_p +#undef FLAG_O +#undef FLAG_o +#undef FLAG_n +#undef FLAG_M +#undef FLAG_l +#undef FLAG_f +#undef FLAG_e +#undef FLAG_d +#undef FLAG_A +#undef FLAG_a +#undef FLAG_P +#undef FLAG_k +#endif + +// pwd >0LP[-LP] >0LP[-LP] +#undef OPTSTR_pwd +#define OPTSTR_pwd ">0LP[-LP]" +#ifdef CLEANUP_pwd +#undef CLEANUP_pwd +#undef FOR_pwd +#undef FLAG_P +#undef FLAG_L +#endif + +// pwdx <1a +#undef OPTSTR_pwdx +#define OPTSTR_pwdx "<1a" +#ifdef CLEANUP_pwdx +#undef CLEANUP_pwdx +#undef FOR_pwdx +#undef FLAG_a +#endif + +// readahead +#undef OPTSTR_readahead +#define OPTSTR_readahead 0 +#ifdef CLEANUP_readahead +#undef CLEANUP_readahead +#undef FOR_readahead +#endif + +// readelf <1(dyn-syms)adhlnp:SsWx: +#undef OPTSTR_readelf +#define OPTSTR_readelf "<1(dyn-syms)adhlnp:SsWx:" +#ifdef CLEANUP_readelf +#undef CLEANUP_readelf +#undef FOR_readelf +#undef FLAG_x +#undef FLAG_W +#undef FLAG_s +#undef FLAG_S +#undef FLAG_p +#undef FLAG_n +#undef FLAG_l +#undef FLAG_h +#undef FLAG_d +#undef FLAG_a +#undef FLAG_dyn_syms +#endif + +// readlink <1nqmef(canonicalize)[-mef] <1nqmef(canonicalize)[-mef] +#undef OPTSTR_readlink +#define OPTSTR_readlink "<1nqmef(canonicalize)[-mef]" +#ifdef CLEANUP_readlink +#undef CLEANUP_readlink +#undef FOR_readlink +#undef FLAG_f +#undef FLAG_e +#undef FLAG_m +#undef FLAG_q +#undef FLAG_n +#endif + +// realpath <1 <1 +#undef OPTSTR_realpath +#define OPTSTR_realpath "<1" +#ifdef CLEANUP_realpath +#undef CLEANUP_realpath +#undef FOR_realpath +#endif + +// reboot fn +#undef OPTSTR_reboot +#define OPTSTR_reboot "fn" +#ifdef CLEANUP_reboot +#undef CLEANUP_reboot +#undef FOR_reboot +#undef FLAG_n +#undef FLAG_f +#endif + +// renice <1gpun#| +#undef OPTSTR_renice +#define OPTSTR_renice "<1gpun#|" +#ifdef CLEANUP_renice +#undef CLEANUP_renice +#undef FOR_renice +#undef FLAG_n +#undef FLAG_u +#undef FLAG_p +#undef FLAG_g +#endif + +// reset +#undef OPTSTR_reset +#define OPTSTR_reset 0 +#ifdef CLEANUP_reset +#undef CLEANUP_reset +#undef FOR_reset +#endif + +// restorecon <1DFnRrv +#undef OPTSTR_restorecon +#define OPTSTR_restorecon "<1DFnRrv" +#ifdef CLEANUP_restorecon +#undef CLEANUP_restorecon +#undef FOR_restorecon +#undef FLAG_v +#undef FLAG_r +#undef FLAG_R +#undef FLAG_n +#undef FLAG_F +#undef FLAG_D +#endif + +// rev +#undef OPTSTR_rev +#define OPTSTR_rev 0 +#ifdef CLEANUP_rev +#undef CLEANUP_rev +#undef FOR_rev +#endif + +// rfkill <1>2 +#undef OPTSTR_rfkill +#define OPTSTR_rfkill "<1>2" +#ifdef CLEANUP_rfkill +#undef CLEANUP_rfkill +#undef FOR_rfkill +#endif + +// rm fiRrv[-fi] fiRrv[-fi] +#undef OPTSTR_rm +#define OPTSTR_rm "fiRrv[-fi]" +#ifdef CLEANUP_rm +#undef CLEANUP_rm +#undef FOR_rm +#undef FLAG_v +#undef FLAG_r +#undef FLAG_R +#undef FLAG_i +#undef FLAG_f +#endif + +// rmdir <1(ignore-fail-on-non-empty)p <1(ignore-fail-on-non-empty)p +#undef OPTSTR_rmdir +#define OPTSTR_rmdir "<1(ignore-fail-on-non-empty)p" +#ifdef CLEANUP_rmdir +#undef CLEANUP_rmdir +#undef FOR_rmdir +#undef FLAG_p +#undef FLAG_ignore_fail_on_non_empty +#endif + +// rmmod <1wf +#undef OPTSTR_rmmod +#define OPTSTR_rmmod "<1wf" +#ifdef CLEANUP_rmmod +#undef CLEANUP_rmmod +#undef FOR_rmmod +#undef FLAG_f +#undef FLAG_w +#endif + +// route ?neA: +#undef OPTSTR_route +#define OPTSTR_route "?neA:" +#ifdef CLEANUP_route +#undef CLEANUP_route +#undef FOR_route +#undef FLAG_A +#undef FLAG_e +#undef FLAG_n +#endif + +// runcon <2 +#undef OPTSTR_runcon +#define OPTSTR_runcon "<2" +#ifdef CLEANUP_runcon +#undef CLEANUP_runcon +#undef FOR_runcon +#endif + +// sed (help)(version)e*f*i:;nErz(null-data)[+Er] (help)(version)e*f*i:;nErz(null-data)[+Er] +#undef OPTSTR_sed +#define OPTSTR_sed "(help)(version)e*f*i:;nErz(null-data)[+Er]" +#ifdef CLEANUP_sed +#undef CLEANUP_sed +#undef FOR_sed +#undef FLAG_z +#undef FLAG_r +#undef FLAG_E +#undef FLAG_n +#undef FLAG_i +#undef FLAG_f +#undef FLAG_e +#undef FLAG_version +#undef FLAG_help +#endif + +// sendevent <4>4 +#undef OPTSTR_sendevent +#define OPTSTR_sendevent "<4>4" +#ifdef CLEANUP_sendevent +#undef CLEANUP_sendevent +#undef FOR_sendevent +#endif + +// seq <1>3?f:s:w[!fw] <1>3?f:s:w[!fw] +#undef OPTSTR_seq +#define OPTSTR_seq "<1>3?f:s:w[!fw]" +#ifdef CLEANUP_seq +#undef CLEANUP_seq +#undef FOR_seq +#undef FLAG_w +#undef FLAG_s +#undef FLAG_f +#endif + +// setenforce <1>1 +#undef OPTSTR_setenforce +#define OPTSTR_setenforce "<1>1" +#ifdef CLEANUP_setenforce +#undef CLEANUP_setenforce +#undef FOR_setenforce +#endif + +// setfattr hn:|v:x:|[!xv] +#undef OPTSTR_setfattr +#define OPTSTR_setfattr "hn:|v:x:|[!xv]" +#ifdef CLEANUP_setfattr +#undef CLEANUP_setfattr +#undef FOR_setfattr +#undef FLAG_x +#undef FLAG_v +#undef FLAG_n +#undef FLAG_h +#endif + +// setsid ^<1wcd[!dc] ^<1wcd[!dc] +#undef OPTSTR_setsid +#define OPTSTR_setsid "^<1wcd[!dc]" +#ifdef CLEANUP_setsid +#undef CLEANUP_setsid +#undef FOR_setsid +#undef FLAG_d +#undef FLAG_c +#undef FLAG_w +#endif + +// sh (noediting)(noprofile)(norc)sc:i +#undef OPTSTR_sh +#define OPTSTR_sh "(noediting)(noprofile)(norc)sc:i" +#ifdef CLEANUP_sh +#undef CLEANUP_sh +#undef FOR_sh +#undef FLAG_i +#undef FLAG_c +#undef FLAG_s +#undef FLAG_norc +#undef FLAG_noprofile +#undef FLAG_noediting +#endif + +// sha1sum bc(check)s(status)[!bc] bc(check)s(status)[!bc] +#undef OPTSTR_sha1sum +#define OPTSTR_sha1sum "bc(check)s(status)[!bc]" +#ifdef CLEANUP_sha1sum +#undef CLEANUP_sha1sum +#undef FOR_sha1sum +#undef FLAG_s +#undef FLAG_c +#undef FLAG_b +#endif + +// shred <1zxus#<1n#<1o#<0f +#undef OPTSTR_shred +#define OPTSTR_shred "<1zxus#<1n#<1o#<0f" +#ifdef CLEANUP_shred +#undef CLEANUP_shred +#undef FOR_shred +#undef FLAG_f +#undef FLAG_o +#undef FLAG_n +#undef FLAG_s +#undef FLAG_u +#undef FLAG_x +#undef FLAG_z +#endif + +// skeleton (walrus)(blubber):;(also):e@d*c#b:a +#undef OPTSTR_skeleton +#define OPTSTR_skeleton "(walrus)(blubber):;(also):e@d*c#b:a" +#ifdef CLEANUP_skeleton +#undef CLEANUP_skeleton +#undef FOR_skeleton +#undef FLAG_a +#undef FLAG_b +#undef FLAG_c +#undef FLAG_d +#undef FLAG_e +#undef FLAG_also +#undef FLAG_blubber +#undef FLAG_walrus +#endif + +// skeleton_alias b#dq +#undef OPTSTR_skeleton_alias +#define OPTSTR_skeleton_alias "b#dq" +#ifdef CLEANUP_skeleton_alias +#undef CLEANUP_skeleton_alias +#undef FOR_skeleton_alias +#undef FLAG_q +#undef FLAG_d +#undef FLAG_b +#endif + +// sleep <1 <1 +#undef OPTSTR_sleep +#define OPTSTR_sleep "<1" +#ifdef CLEANUP_sleep +#undef CLEANUP_sleep +#undef FOR_sleep +#endif + +// sntp >1M :m :Sp:t#<0=1>16asdDqr#<4>17=10[!as] +#undef OPTSTR_sntp +#define OPTSTR_sntp ">1M :m :Sp:t#<0=1>16asdDqr#<4>17=10[!as]" +#ifdef CLEANUP_sntp +#undef CLEANUP_sntp +#undef FOR_sntp +#undef FLAG_r +#undef FLAG_q +#undef FLAG_D +#undef FLAG_d +#undef FLAG_s +#undef FLAG_a +#undef FLAG_t +#undef FLAG_p +#undef FLAG_S +#undef FLAG_m +#undef FLAG_M +#endif + +// sort gS:T:mo:k*t:xVbMcszdfirun gS:T:mo:k*t:xVbMcszdfirun +#undef OPTSTR_sort +#define OPTSTR_sort "gS:T:mo:k*t:xVbMcszdfirun" +#ifdef CLEANUP_sort +#undef CLEANUP_sort +#undef FOR_sort +#undef FLAG_n +#undef FLAG_u +#undef FLAG_r +#undef FLAG_i +#undef FLAG_f +#undef FLAG_d +#undef FLAG_z +#undef FLAG_s +#undef FLAG_c +#undef FLAG_M +#undef FLAG_b +#undef FLAG_V +#undef FLAG_x +#undef FLAG_t +#undef FLAG_k +#undef FLAG_o +#undef FLAG_m +#undef FLAG_T +#undef FLAG_S +#undef FLAG_g +#endif + +// split >2a#<1=2>9b#<1l#<1[!bl] +#undef OPTSTR_split +#define OPTSTR_split ">2a#<1=2>9b#<1l#<1[!bl]" +#ifdef CLEANUP_split +#undef CLEANUP_split +#undef FOR_split +#undef FLAG_l +#undef FLAG_b +#undef FLAG_a +#endif + +// stat <1c:(format)fLt <1c:(format)fLt +#undef OPTSTR_stat +#define OPTSTR_stat "<1c:(format)fLt" +#ifdef CLEANUP_stat +#undef CLEANUP_stat +#undef FOR_stat +#undef FLAG_t +#undef FLAG_L +#undef FLAG_f +#undef FLAG_c +#endif + +// strings t:an#=4<1fo +#undef OPTSTR_strings +#define OPTSTR_strings "t:an#=4<1fo" +#ifdef CLEANUP_strings +#undef CLEANUP_strings +#undef FOR_strings +#undef FLAG_o +#undef FLAG_f +#undef FLAG_n +#undef FLAG_a +#undef FLAG_t +#endif + +// stty ?aF:g[!ag] +#undef OPTSTR_stty +#define OPTSTR_stty "?aF:g[!ag]" +#ifdef CLEANUP_stty +#undef CLEANUP_stty +#undef FOR_stty +#undef FLAG_g +#undef FLAG_F +#undef FLAG_a +#endif + +// su ^lmpu:g:c:s:[!lmp] +#undef OPTSTR_su +#define OPTSTR_su "^lmpu:g:c:s:[!lmp]" +#ifdef CLEANUP_su +#undef CLEANUP_su +#undef FOR_su +#undef FLAG_s +#undef FLAG_c +#undef FLAG_g +#undef FLAG_u +#undef FLAG_p +#undef FLAG_m +#undef FLAG_l +#endif + +// sulogin t#<0=0 +#undef OPTSTR_sulogin +#define OPTSTR_sulogin "t#<0=0" +#ifdef CLEANUP_sulogin +#undef CLEANUP_sulogin +#undef FOR_sulogin +#undef FLAG_t +#endif + +// swapoff <1>1 +#undef OPTSTR_swapoff +#define OPTSTR_swapoff "<1>1" +#ifdef CLEANUP_swapoff +#undef CLEANUP_swapoff +#undef FOR_swapoff +#endif + +// swapon <1>1p#<0>32767d +#undef OPTSTR_swapon +#define OPTSTR_swapon "<1>1p#<0>32767d" +#ifdef CLEANUP_swapon +#undef CLEANUP_swapon +#undef FOR_swapon +#undef FLAG_d +#undef FLAG_p +#endif + +// switch_root <2c:h +#undef OPTSTR_switch_root +#define OPTSTR_switch_root "<2c:h" +#ifdef CLEANUP_switch_root +#undef CLEANUP_switch_root +#undef FOR_switch_root +#undef FLAG_h +#undef FLAG_c +#endif + +// sync +#undef OPTSTR_sync +#define OPTSTR_sync 0 +#ifdef CLEANUP_sync +#undef CLEANUP_sync +#undef FOR_sync +#endif + +// sysctl ^neNqwpaA[!ap][!aq][!aw][+aA] +#undef OPTSTR_sysctl +#define OPTSTR_sysctl "^neNqwpaA[!ap][!aq][!aw][+aA]" +#ifdef CLEANUP_sysctl +#undef CLEANUP_sysctl +#undef FOR_sysctl +#undef FLAG_A +#undef FLAG_a +#undef FLAG_p +#undef FLAG_w +#undef FLAG_q +#undef FLAG_N +#undef FLAG_e +#undef FLAG_n +#endif + +// syslogd >0l#<1>8=8R:b#<0>99=1s#<0=200m#<0>71582787=20O:p:f:a:nSKLD +#undef OPTSTR_syslogd +#define OPTSTR_syslogd ">0l#<1>8=8R:b#<0>99=1s#<0=200m#<0>71582787=20O:p:f:a:nSKLD" +#ifdef CLEANUP_syslogd +#undef CLEANUP_syslogd +#undef FOR_syslogd +#undef FLAG_D +#undef FLAG_L +#undef FLAG_K +#undef FLAG_S +#undef FLAG_n +#undef FLAG_a +#undef FLAG_f +#undef FLAG_p +#undef FLAG_O +#undef FLAG_m +#undef FLAG_s +#undef FLAG_b +#undef FLAG_R +#undef FLAG_l +#endif + +// tac +#undef OPTSTR_tac +#define OPTSTR_tac 0 +#ifdef CLEANUP_tac +#undef CLEANUP_tac +#undef FOR_tac +#endif + +// tail ?fc-n-[-cn] ?fc-n-[-cn] +#undef OPTSTR_tail +#define OPTSTR_tail "?fc-n-[-cn]" +#ifdef CLEANUP_tail +#undef CLEANUP_tail +#undef FOR_tail +#undef FLAG_n +#undef FLAG_c +#undef FLAG_f +#endif + +// tar &(restrict)(full-time)(no-recursion)(numeric-owner)(no-same-permissions)(overwrite)(exclude)*(mode):(mtime):(group):(owner):(to-command):o(no-same-owner)p(same-permissions)k(keep-old)c(create)|h(dereference)x(extract)|t(list)|v(verbose)J(xz)j(bzip2)z(gzip)S(sparse)O(to-stdout)m(touch)X(exclude-from)*T(files-from)*C(directory):f(file):a[!txc][!jzJa] &(restrict)(full-time)(no-recursion)(numeric-owner)(no-same-permissions)(overwrite)(exclude)*(mode):(mtime):(group):(owner):(to-command):o(no-same-owner)p(same-permissions)k(keep-old)c(create)|h(dereference)x(extract)|t(list)|v(verbose)J(xz)j(bzip2)z(gzip)S(sparse)O(to-stdout)m(touch)X(exclude-from)*T(files-from)*C(directory):f(file):a[!txc][!jzJa] +#undef OPTSTR_tar +#define OPTSTR_tar "&(restrict)(full-time)(no-recursion)(numeric-owner)(no-same-permissions)(overwrite)(exclude)*(mode):(mtime):(group):(owner):(to-command):o(no-same-owner)p(same-permissions)k(keep-old)c(create)|h(dereference)x(extract)|t(list)|v(verbose)J(xz)j(bzip2)z(gzip)S(sparse)O(to-stdout)m(touch)X(exclude-from)*T(files-from)*C(directory):f(file):a[!txc][!jzJa]" +#ifdef CLEANUP_tar +#undef CLEANUP_tar +#undef FOR_tar +#undef FLAG_a +#undef FLAG_f +#undef FLAG_C +#undef FLAG_T +#undef FLAG_X +#undef FLAG_m +#undef FLAG_O +#undef FLAG_S +#undef FLAG_z +#undef FLAG_j +#undef FLAG_J +#undef FLAG_v +#undef FLAG_t +#undef FLAG_x +#undef FLAG_h +#undef FLAG_c +#undef FLAG_k +#undef FLAG_p +#undef FLAG_o +#undef FLAG_to_command +#undef FLAG_owner +#undef FLAG_group +#undef FLAG_mtime +#undef FLAG_mode +#undef FLAG_exclude +#undef FLAG_overwrite +#undef FLAG_no_same_permissions +#undef FLAG_numeric_owner +#undef FLAG_no_recursion +#undef FLAG_full_time +#undef FLAG_restrict +#endif + +// taskset <1^pa +#undef OPTSTR_taskset +#define OPTSTR_taskset "<1^pa" +#ifdef CLEANUP_taskset +#undef CLEANUP_taskset +#undef FOR_taskset +#undef FLAG_a +#undef FLAG_p +#endif + +// tcpsvd ^<3c#=30<1C:b#=20<0u:l:hEv +#undef OPTSTR_tcpsvd +#define OPTSTR_tcpsvd "^<3c#=30<1C:b#=20<0u:l:hEv" +#ifdef CLEANUP_tcpsvd +#undef CLEANUP_tcpsvd +#undef FOR_tcpsvd +#undef FLAG_v +#undef FLAG_E +#undef FLAG_h +#undef FLAG_l +#undef FLAG_u +#undef FLAG_b +#undef FLAG_C +#undef FLAG_c +#endif + +// tee ia ia +#undef OPTSTR_tee +#define OPTSTR_tee "ia" +#ifdef CLEANUP_tee +#undef CLEANUP_tee +#undef FOR_tee +#undef FLAG_a +#undef FLAG_i +#endif + +// telnet <1>2 +#undef OPTSTR_telnet +#define OPTSTR_telnet "<1>2" +#ifdef CLEANUP_telnet +#undef CLEANUP_telnet +#undef FOR_telnet +#endif + +// telnetd w#<0b:p#<0>65535=23f:l:FSKi[!wi] +#undef OPTSTR_telnetd +#define OPTSTR_telnetd "w#<0b:p#<0>65535=23f:l:FSKi[!wi]" +#ifdef CLEANUP_telnetd +#undef CLEANUP_telnetd +#undef FOR_telnetd +#undef FLAG_i +#undef FLAG_K +#undef FLAG_S +#undef FLAG_F +#undef FLAG_l +#undef FLAG_f +#undef FLAG_p +#undef FLAG_b +#undef FLAG_w +#endif + +// test +#undef OPTSTR_test +#define OPTSTR_test 0 +#ifdef CLEANUP_test +#undef CLEANUP_test +#undef FOR_test +#endif + +// tftp <1b#<8>65464r:l:g|p|[!gp] +#undef OPTSTR_tftp +#define OPTSTR_tftp "<1b#<8>65464r:l:g|p|[!gp]" +#ifdef CLEANUP_tftp +#undef CLEANUP_tftp +#undef FOR_tftp +#undef FLAG_p +#undef FLAG_g +#undef FLAG_l +#undef FLAG_r +#undef FLAG_b +#endif + +// tftpd rcu:l +#undef OPTSTR_tftpd +#define OPTSTR_tftpd "rcu:l" +#ifdef CLEANUP_tftpd +#undef CLEANUP_tftpd +#undef FOR_tftpd +#undef FLAG_l +#undef FLAG_u +#undef FLAG_c +#undef FLAG_r +#endif + +// time <1^pv +#undef OPTSTR_time +#define OPTSTR_time "<1^pv" +#ifdef CLEANUP_time +#undef CLEANUP_time +#undef FOR_time +#undef FLAG_v +#undef FLAG_p +#endif + +// timeout <2^(foreground)(preserve-status)vk:s(signal): <2^(foreground)(preserve-status)vk:s(signal): +#undef OPTSTR_timeout +#define OPTSTR_timeout "<2^(foreground)(preserve-status)vk:s(signal):" +#ifdef CLEANUP_timeout +#undef CLEANUP_timeout +#undef FOR_timeout +#undef FLAG_s +#undef FLAG_k +#undef FLAG_v +#undef FLAG_preserve_status +#undef FLAG_foreground +#endif + +// top >0O*Hk*o*p*u*s#<1d%<100=3000m#n#<1bq[!oO] +#undef OPTSTR_top +#define OPTSTR_top ">0O*Hk*o*p*u*s#<1d%<100=3000m#n#<1bq[!oO]" +#ifdef CLEANUP_top +#undef CLEANUP_top +#undef FOR_top +#undef FLAG_q +#undef FLAG_b +#undef FLAG_n +#undef FLAG_m +#undef FLAG_d +#undef FLAG_s +#undef FLAG_u +#undef FLAG_p +#undef FLAG_o +#undef FLAG_k +#undef FLAG_H +#undef FLAG_O +#endif + +// touch <1acd:fmr:t:h[!dtr] <1acd:fmr:t:h[!dtr] +#undef OPTSTR_touch +#define OPTSTR_touch "<1acd:fmr:t:h[!dtr]" +#ifdef CLEANUP_touch +#undef CLEANUP_touch +#undef FOR_touch +#undef FLAG_h +#undef FLAG_t +#undef FLAG_r +#undef FLAG_m +#undef FLAG_f +#undef FLAG_d +#undef FLAG_c +#undef FLAG_a +#endif + +// toybox +#undef OPTSTR_toybox +#define OPTSTR_toybox 0 +#ifdef CLEANUP_toybox +#undef CLEANUP_toybox +#undef FOR_toybox +#endif + +// tr ^>2<1Ccsd[+cC] ^>2<1Ccsd[+cC] +#undef OPTSTR_tr +#define OPTSTR_tr "^>2<1Ccsd[+cC]" +#ifdef CLEANUP_tr +#undef CLEANUP_tr +#undef FOR_tr +#undef FLAG_d +#undef FLAG_s +#undef FLAG_c +#undef FLAG_C +#endif + +// traceroute <1>2i:f#<1>255=1z#<0>86400=0g*w#<0>86400=5t#<0>255=0s:q#<1>255=3p#<1>65535=33434m#<1>255=30rvndlIUF64 +#undef OPTSTR_traceroute +#define OPTSTR_traceroute "<1>2i:f#<1>255=1z#<0>86400=0g*w#<0>86400=5t#<0>255=0s:q#<1>255=3p#<1>65535=33434m#<1>255=30rvndlIUF64" +#ifdef CLEANUP_traceroute +#undef CLEANUP_traceroute +#undef FOR_traceroute +#undef FLAG_4 +#undef FLAG_6 +#undef FLAG_F +#undef FLAG_U +#undef FLAG_I +#undef FLAG_l +#undef FLAG_d +#undef FLAG_n +#undef FLAG_v +#undef FLAG_r +#undef FLAG_m +#undef FLAG_p +#undef FLAG_q +#undef FLAG_s +#undef FLAG_t +#undef FLAG_w +#undef FLAG_g +#undef FLAG_z +#undef FLAG_f +#undef FLAG_i +#endif + +// true +#undef OPTSTR_true +#define OPTSTR_true 0 +#ifdef CLEANUP_true +#undef CLEANUP_true +#undef FOR_true +#endif + +// truncate <1s:|c <1s:|c +#undef OPTSTR_truncate +#define OPTSTR_truncate "<1s:|c" +#ifdef CLEANUP_truncate +#undef CLEANUP_truncate +#undef FOR_truncate +#undef FLAG_c +#undef FLAG_s +#endif + +// tty s +#undef OPTSTR_tty +#define OPTSTR_tty "s" +#ifdef CLEANUP_tty +#undef CLEANUP_tty +#undef FOR_tty +#undef FLAG_s +#endif + +// tunctl <1>1t|d|u:T[!td] +#undef OPTSTR_tunctl +#define OPTSTR_tunctl "<1>1t|d|u:T[!td]" +#ifdef CLEANUP_tunctl +#undef CLEANUP_tunctl +#undef FOR_tunctl +#undef FLAG_T +#undef FLAG_u +#undef FLAG_d +#undef FLAG_t +#endif + +// ulimit >1P#<1SHavutsrRqpnmlifedc[-SH][!apvutsrRqnmlifedc] +#undef OPTSTR_ulimit +#define OPTSTR_ulimit ">1P#<1SHavutsrRqpnmlifedc[-SH][!apvutsrRqnmlifedc]" +#ifdef CLEANUP_ulimit +#undef CLEANUP_ulimit +#undef FOR_ulimit +#undef FLAG_c +#undef FLAG_d +#undef FLAG_e +#undef FLAG_f +#undef FLAG_i +#undef FLAG_l +#undef FLAG_m +#undef FLAG_n +#undef FLAG_p +#undef FLAG_q +#undef FLAG_R +#undef FLAG_r +#undef FLAG_s +#undef FLAG_t +#undef FLAG_u +#undef FLAG_v +#undef FLAG_a +#undef FLAG_H +#undef FLAG_S +#undef FLAG_P +#endif + +// umount cndDflrat*v[!na] +#undef OPTSTR_umount +#define OPTSTR_umount "cndDflrat*v[!na]" +#ifdef CLEANUP_umount +#undef CLEANUP_umount +#undef FOR_umount +#undef FLAG_v +#undef FLAG_t +#undef FLAG_a +#undef FLAG_r +#undef FLAG_l +#undef FLAG_f +#undef FLAG_D +#undef FLAG_d +#undef FLAG_n +#undef FLAG_c +#endif + +// uname oamvrns[+os] oamvrns[+os] +#undef OPTSTR_uname +#define OPTSTR_uname "oamvrns[+os]" +#ifdef CLEANUP_uname +#undef CLEANUP_uname +#undef FOR_uname +#undef FLAG_s +#undef FLAG_n +#undef FLAG_r +#undef FLAG_v +#undef FLAG_m +#undef FLAG_a +#undef FLAG_o +#endif + +// uniq f#s#w#zicdu f#s#w#zicdu +#undef OPTSTR_uniq +#define OPTSTR_uniq "f#s#w#zicdu" +#ifdef CLEANUP_uniq +#undef CLEANUP_uniq +#undef FOR_uniq +#undef FLAG_u +#undef FLAG_d +#undef FLAG_c +#undef FLAG_i +#undef FLAG_z +#undef FLAG_w +#undef FLAG_s +#undef FLAG_f +#endif + +// unix2dos +#undef OPTSTR_unix2dos +#define OPTSTR_unix2dos 0 +#ifdef CLEANUP_unix2dos +#undef CLEANUP_unix2dos +#undef FOR_unix2dos +#endif + +// unlink <1>1 +#undef OPTSTR_unlink +#define OPTSTR_unlink "<1>1" +#ifdef CLEANUP_unlink +#undef CLEANUP_unlink +#undef FOR_unlink +#endif + +// unshare <1^f(fork);r(map-root-user);i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user); +#undef OPTSTR_unshare +#define OPTSTR_unshare "<1^f(fork);r(map-root-user);i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user);" +#ifdef CLEANUP_unshare +#undef CLEANUP_unshare +#undef FOR_unshare +#undef FLAG_U +#undef FLAG_u +#undef FLAG_p +#undef FLAG_n +#undef FLAG_m +#undef FLAG_i +#undef FLAG_r +#undef FLAG_f +#endif + +// uptime >0ps +#undef OPTSTR_uptime +#define OPTSTR_uptime ">0ps" +#ifdef CLEANUP_uptime +#undef CLEANUP_uptime +#undef FOR_uptime +#undef FLAG_s +#undef FLAG_p +#endif + +// useradd <1>2u#<0G:s:g:h:SDH +#undef OPTSTR_useradd +#define OPTSTR_useradd "<1>2u#<0G:s:g:h:SDH" +#ifdef CLEANUP_useradd +#undef CLEANUP_useradd +#undef FOR_useradd +#undef FLAG_H +#undef FLAG_D +#undef FLAG_S +#undef FLAG_h +#undef FLAG_g +#undef FLAG_s +#undef FLAG_G +#undef FLAG_u +#endif + +// userdel <1>1r +#undef OPTSTR_userdel +#define OPTSTR_userdel "<1>1r" +#ifdef CLEANUP_userdel +#undef CLEANUP_userdel +#undef FOR_userdel +#undef FLAG_r +#endif + +// usleep <1 +#undef OPTSTR_usleep +#define OPTSTR_usleep "<1" +#ifdef CLEANUP_usleep +#undef CLEANUP_usleep +#undef FOR_usleep +#endif + +// uudecode >1o: +#undef OPTSTR_uudecode +#define OPTSTR_uudecode ">1o:" +#ifdef CLEANUP_uudecode +#undef CLEANUP_uudecode +#undef FOR_uudecode +#undef FLAG_o +#endif + +// uuencode <1>2m +#undef OPTSTR_uuencode +#define OPTSTR_uuencode "<1>2m" +#ifdef CLEANUP_uuencode +#undef CLEANUP_uuencode +#undef FOR_uuencode +#undef FLAG_m +#endif + +// uuidgen >0r(random) +#undef OPTSTR_uuidgen +#define OPTSTR_uuidgen ">0r(random)" +#ifdef CLEANUP_uuidgen +#undef CLEANUP_uuidgen +#undef FOR_uuidgen +#undef FLAG_r +#endif + +// vconfig <2>4 +#undef OPTSTR_vconfig +#define OPTSTR_vconfig "<2>4" +#ifdef CLEANUP_vconfig +#undef CLEANUP_vconfig +#undef FOR_vconfig +#endif + +// vi >1s: +#undef OPTSTR_vi +#define OPTSTR_vi ">1s:" +#ifdef CLEANUP_vi +#undef CLEANUP_vi +#undef FOR_vi +#undef FLAG_s +#endif + +// vmstat >2n +#undef OPTSTR_vmstat +#define OPTSTR_vmstat ">2n" +#ifdef CLEANUP_vmstat +#undef CLEANUP_vmstat +#undef FOR_vmstat +#undef FLAG_n +#endif + +// w +#undef OPTSTR_w +#define OPTSTR_w 0 +#ifdef CLEANUP_w +#undef CLEANUP_w +#undef FOR_w +#endif + +// watch ^<1n%<100=2000tebx +#undef OPTSTR_watch +#define OPTSTR_watch "^<1n%<100=2000tebx" +#ifdef CLEANUP_watch +#undef CLEANUP_watch +#undef FOR_watch +#undef FLAG_x +#undef FLAG_b +#undef FLAG_e +#undef FLAG_t +#undef FLAG_n +#endif + +// wc mcwl mcwl +#undef OPTSTR_wc +#define OPTSTR_wc "mcwl" +#ifdef CLEANUP_wc +#undef CLEANUP_wc +#undef FOR_wc +#undef FLAG_l +#undef FLAG_w +#undef FLAG_c +#undef FLAG_m +#endif + +// wget (no-check-certificate)O: +#undef OPTSTR_wget +#define OPTSTR_wget "(no-check-certificate)O:" +#ifdef CLEANUP_wget +#undef CLEANUP_wget +#undef FOR_wget +#undef FLAG_O +#undef FLAG_no_check_certificate +#endif + +// which <1a <1a +#undef OPTSTR_which +#define OPTSTR_which "<1a" +#ifdef CLEANUP_which +#undef CLEANUP_which +#undef FOR_which +#undef FLAG_a +#endif + +// who a +#undef OPTSTR_who +#define OPTSTR_who "a" +#ifdef CLEANUP_who +#undef CLEANUP_who +#undef FOR_who +#undef FLAG_a +#endif + +// xargs ^E:P#optrn#<1(max-args)s#0[!0E] ^E:P#optrn#<1(max-args)s#0[!0E] +#undef OPTSTR_xargs +#define OPTSTR_xargs "^E:P#optrn#<1(max-args)s#0[!0E]" +#ifdef CLEANUP_xargs +#undef CLEANUP_xargs +#undef FOR_xargs +#undef FLAG_0 +#undef FLAG_s +#undef FLAG_n +#undef FLAG_r +#undef FLAG_t +#undef FLAG_p +#undef FLAG_o +#undef FLAG_P +#undef FLAG_E +#endif + +// xxd >1c#l#o#g#<1=2iprs#[!rs] >1c#l#o#g#<1=2iprs#[!rs] +#undef OPTSTR_xxd +#define OPTSTR_xxd ">1c#l#o#g#<1=2iprs#[!rs]" +#ifdef CLEANUP_xxd +#undef CLEANUP_xxd +#undef FOR_xxd +#undef FLAG_s +#undef FLAG_r +#undef FLAG_p +#undef FLAG_i +#undef FLAG_g +#undef FLAG_o +#undef FLAG_l +#undef FLAG_c +#endif + +// xzcat +#undef OPTSTR_xzcat +#define OPTSTR_xzcat 0 +#ifdef CLEANUP_xzcat +#undef CLEANUP_xzcat +#undef FOR_xzcat +#endif + +// yes +#undef OPTSTR_yes +#define OPTSTR_yes 0 +#ifdef CLEANUP_yes +#undef CLEANUP_yes +#undef FOR_yes +#endif + +// zcat cdfk123456789[-123456789] cdfk123456789[-123456789] +#undef OPTSTR_zcat +#define OPTSTR_zcat "cdfk123456789[-123456789]" +#ifdef CLEANUP_zcat +#undef CLEANUP_zcat +#undef FOR_zcat +#undef FLAG_9 +#undef FLAG_8 +#undef FLAG_7 +#undef FLAG_6 +#undef FLAG_5 +#undef FLAG_4 +#undef FLAG_3 +#undef FLAG_2 +#undef FLAG_1 +#undef FLAG_k +#undef FLAG_f +#undef FLAG_d +#undef FLAG_c +#endif + +#ifdef FOR_acpi +#ifndef TT +#define TT this.acpi +#endif +#define FLAG_V (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#define FLAG_b (FORCED_FLAG<<3) +#define FLAG_a (FORCED_FLAG<<4) +#endif + +#ifdef FOR_arch +#ifndef TT +#define TT this.arch +#endif +#endif + +#ifdef FOR_arp +#ifndef TT +#define TT this.arp +#endif +#define FLAG_H (FORCED_FLAG<<0) +#define FLAG_A (FORCED_FLAG<<1) +#define FLAG_p (FORCED_FLAG<<2) +#define FLAG_a (FORCED_FLAG<<3) +#define FLAG_d (FORCED_FLAG<<4) +#define FLAG_s (FORCED_FLAG<<5) +#define FLAG_D (FORCED_FLAG<<6) +#define FLAG_n (FORCED_FLAG<<7) +#define FLAG_i (FORCED_FLAG<<8) +#define FLAG_v (FORCED_FLAG<<9) +#endif + +#ifdef FOR_arping +#ifndef TT +#define TT this.arping +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_q (FORCED_FLAG<<1) +#define FLAG_b (FORCED_FLAG<<2) +#define FLAG_D (FORCED_FLAG<<3) +#define FLAG_U (FORCED_FLAG<<4) +#define FLAG_A (FORCED_FLAG<<5) +#define FLAG_c (FORCED_FLAG<<6) +#define FLAG_w (FORCED_FLAG<<7) +#define FLAG_I (FORCED_FLAG<<8) +#define FLAG_s (FORCED_FLAG<<9) +#endif + +#ifdef FOR_ascii +#ifndef TT +#define TT this.ascii +#endif +#endif + +#ifdef FOR_base64 +#ifndef TT +#define TT this.base64 +#endif +#define FLAG_w (FORCED_FLAG<<0) +#define FLAG_i (FORCED_FLAG<<1) +#define FLAG_d (FORCED_FLAG<<2) +#endif + +#ifdef FOR_basename +#ifndef TT +#define TT this.basename +#endif +#define FLAG_s (1<<0) +#define FLAG_a (1<<1) +#endif + +#ifdef FOR_bc +#ifndef TT +#define TT this.bc +#endif +#define FLAG_w (FORCED_FLAG<<0) +#define FLAG_s (FORCED_FLAG<<1) +#define FLAG_q (FORCED_FLAG<<2) +#define FLAG_l (FORCED_FLAG<<3) +#define FLAG_i (FORCED_FLAG<<4) +#endif + +#ifdef FOR_blkid +#ifndef TT +#define TT this.blkid +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_L (FORCED_FLAG<<1) +#define FLAG_U (FORCED_FLAG<<2) +#endif + +#ifdef FOR_blockdev +#ifndef TT +#define TT this.blockdev +#endif +#define FLAG_rereadpt (FORCED_FLAG<<0) +#define FLAG_flushbufs (FORCED_FLAG<<1) +#define FLAG_setra (FORCED_FLAG<<2) +#define FLAG_getra (FORCED_FLAG<<3) +#define FLAG_getsize64 (FORCED_FLAG<<4) +#define FLAG_getsize (FORCED_FLAG<<5) +#define FLAG_getsz (FORCED_FLAG<<6) +#define FLAG_setbsz (FORCED_FLAG<<7) +#define FLAG_getbsz (FORCED_FLAG<<8) +#define FLAG_getss (FORCED_FLAG<<9) +#define FLAG_getro (FORCED_FLAG<<10) +#define FLAG_setrw (FORCED_FLAG<<11) +#define FLAG_setro (FORCED_FLAG<<12) +#endif + +#ifdef FOR_bootchartd +#ifndef TT +#define TT this.bootchartd +#endif +#endif + +#ifdef FOR_brctl +#ifndef TT +#define TT this.brctl +#endif +#endif + +#ifdef FOR_bunzip2 +#ifndef TT +#define TT this.bunzip2 +#endif +#define FLAG_v (FORCED_FLAG<<0) +#define FLAG_k (FORCED_FLAG<<1) +#define FLAG_t (FORCED_FLAG<<2) +#define FLAG_f (FORCED_FLAG<<3) +#define FLAG_c (FORCED_FLAG<<4) +#endif + +#ifdef FOR_bzcat +#ifndef TT +#define TT this.bzcat +#endif +#endif + +#ifdef FOR_cal +#ifndef TT +#define TT this.cal +#endif +#define FLAG_h (FORCED_FLAG<<0) +#endif + +#ifdef FOR_cat +#ifndef TT +#define TT this.cat +#endif +#define FLAG_e (1<<0) +#define FLAG_t (1<<1) +#define FLAG_v (1<<2) +#define FLAG_u (1<<3) +#endif + +#ifdef FOR_catv +#ifndef TT +#define TT this.catv +#endif +#define FLAG_e (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_v (FORCED_FLAG<<2) +#endif + +#ifdef FOR_cd +#ifndef TT +#define TT this.cd +#endif +#define FLAG_P (FORCED_FLAG<<0) +#define FLAG_L (FORCED_FLAG<<1) +#endif + +#ifdef FOR_chattr +#ifndef TT +#define TT this.chattr +#endif +#define FLAG_R (FORCED_FLAG<<0) +#define FLAG_v (FORCED_FLAG<<1) +#define FLAG_p (FORCED_FLAG<<2) +#endif + +#ifdef FOR_chcon +#ifndef TT +#define TT this.chcon +#endif +#define FLAG_R (FORCED_FLAG<<0) +#define FLAG_v (FORCED_FLAG<<1) +#define FLAG_h (FORCED_FLAG<<2) +#endif + +#ifdef FOR_chgrp +#ifndef TT +#define TT this.chgrp +#endif +#define FLAG_v (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#define FLAG_R (FORCED_FLAG<<2) +#define FLAG_H (FORCED_FLAG<<3) +#define FLAG_L (FORCED_FLAG<<4) +#define FLAG_P (FORCED_FLAG<<5) +#define FLAG_h (FORCED_FLAG<<6) +#endif + +#ifdef FOR_chmod +#ifndef TT +#define TT this.chmod +#endif +#define FLAG_f (1<<0) +#define FLAG_R (1<<1) +#define FLAG_v (1<<2) +#endif + +#ifdef FOR_chroot +#ifndef TT +#define TT this.chroot +#endif +#endif + +#ifdef FOR_chrt +#ifndef TT +#define TT this.chrt +#endif +#define FLAG_o (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#define FLAG_r (FORCED_FLAG<<2) +#define FLAG_b (FORCED_FLAG<<3) +#define FLAG_R (FORCED_FLAG<<4) +#define FLAG_i (FORCED_FLAG<<5) +#define FLAG_p (FORCED_FLAG<<6) +#define FLAG_m (FORCED_FLAG<<7) +#endif + +#ifdef FOR_chvt +#ifndef TT +#define TT this.chvt +#endif +#endif + +#ifdef FOR_cksum +#ifndef TT +#define TT this.cksum +#endif +#define FLAG_N (FORCED_FLAG<<0) +#define FLAG_L (FORCED_FLAG<<1) +#define FLAG_P (FORCED_FLAG<<2) +#define FLAG_I (FORCED_FLAG<<3) +#define FLAG_H (FORCED_FLAG<<4) +#endif + +#ifdef FOR_clear +#ifndef TT +#define TT this.clear +#endif +#endif + +#ifdef FOR_cmp +#ifndef TT +#define TT this.cmp +#endif +#define FLAG_s (1<<0) +#define FLAG_l (1<<1) +#endif + +#ifdef FOR_comm +#ifndef TT +#define TT this.comm +#endif +#define FLAG_1 (1<<0) +#define FLAG_2 (1<<1) +#define FLAG_3 (1<<2) +#endif + +#ifdef FOR_count +#ifndef TT +#define TT this.count +#endif +#endif + +#ifdef FOR_cp +#ifndef TT +#define TT this.cp +#endif +#define FLAG_T (1<<0) +#define FLAG_i (1<<1) +#define FLAG_f (1<<2) +#define FLAG_F (1<<3) +#define FLAG_n (1<<4) +#define FLAG_v (1<<5) +#define FLAG_l (1<<6) +#define FLAG_s (1<<7) +#define FLAG_a (1<<8) +#define FLAG_d (1<<9) +#define FLAG_r (1<<10) +#define FLAG_p (1<<11) +#define FLAG_P (1<<12) +#define FLAG_L (1<<13) +#define FLAG_H (1<<14) +#define FLAG_R (1<<15) +#define FLAG_D (1<<16) +#define FLAG_preserve (1<<17) +#endif + +#ifdef FOR_cpio +#ifndef TT +#define TT this.cpio +#endif +#define FLAG_o (FORCED_FLAG<<0) +#define FLAG_v (FORCED_FLAG<<1) +#define FLAG_F (FORCED_FLAG<<2) +#define FLAG_t (FORCED_FLAG<<3) +#define FLAG_i (FORCED_FLAG<<4) +#define FLAG_p (FORCED_FLAG<<5) +#define FLAG_H (FORCED_FLAG<<6) +#define FLAG_u (FORCED_FLAG<<7) +#define FLAG_d (FORCED_FLAG<<8) +#define FLAG_m (FORCED_FLAG<<9) +#define FLAG_trailer (FORCED_FLAG<<10) +#define FLAG_no_preserve_owner (FORCED_FLAG<<11) +#endif + +#ifdef FOR_crc32 +#ifndef TT +#define TT this.crc32 +#endif +#endif + +#ifdef FOR_crond +#ifndef TT +#define TT this.crond +#endif +#define FLAG_c (FORCED_FLAG<<0) +#define FLAG_L (FORCED_FLAG<<1) +#define FLAG_d (FORCED_FLAG<<2) +#define FLAG_l (FORCED_FLAG<<3) +#define FLAG_S (FORCED_FLAG<<4) +#define FLAG_b (FORCED_FLAG<<5) +#define FLAG_f (FORCED_FLAG<<6) +#endif + +#ifdef FOR_crontab +#ifndef TT +#define TT this.crontab +#endif +#define FLAG_r (FORCED_FLAG<<0) +#define FLAG_l (FORCED_FLAG<<1) +#define FLAG_e (FORCED_FLAG<<2) +#define FLAG_u (FORCED_FLAG<<3) +#define FLAG_c (FORCED_FLAG<<4) +#endif + +#ifdef FOR_cut +#ifndef TT +#define TT this.cut +#endif +#define FLAG_n (1<<0) +#define FLAG_D (1<<1) +#define FLAG_s (1<<2) +#define FLAG_d (1<<3) +#define FLAG_O (1<<4) +#define FLAG_C (1<<5) +#define FLAG_F (1<<6) +#define FLAG_f (1<<7) +#define FLAG_c (1<<8) +#define FLAG_b (1<<9) +#endif + +#ifdef FOR_date +#ifndef TT +#define TT this.date +#endif +#define FLAG_u (1<<0) +#define FLAG_r (1<<1) +#define FLAG_D (1<<2) +#define FLAG_d (1<<3) +#endif + +#ifdef FOR_dd +#ifndef TT +#define TT this.dd +#endif +#endif + +#ifdef FOR_deallocvt +#ifndef TT +#define TT this.deallocvt +#endif +#endif + +#ifdef FOR_demo_many_options +#ifndef TT +#define TT this.demo_many_options +#endif +#define FLAG_a (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#define FLAG_d (FORCED_FLAG<<3) +#define FLAG_e (FORCED_FLAG<<4) +#define FLAG_f (FORCED_FLAG<<5) +#define FLAG_g (FORCED_FLAG<<6) +#define FLAG_h (FORCED_FLAG<<7) +#define FLAG_i (FORCED_FLAG<<8) +#define FLAG_j (FORCED_FLAG<<9) +#define FLAG_k (FORCED_FLAG<<10) +#define FLAG_l (FORCED_FLAG<<11) +#define FLAG_m (FORCED_FLAG<<12) +#define FLAG_n (FORCED_FLAG<<13) +#define FLAG_o (FORCED_FLAG<<14) +#define FLAG_p (FORCED_FLAG<<15) +#define FLAG_q (FORCED_FLAG<<16) +#define FLAG_r (FORCED_FLAG<<17) +#define FLAG_s (FORCED_FLAG<<18) +#define FLAG_t (FORCED_FLAG<<19) +#define FLAG_u (FORCED_FLAG<<20) +#define FLAG_v (FORCED_FLAG<<21) +#define FLAG_w (FORCED_FLAG<<22) +#define FLAG_x (FORCED_FLAG<<23) +#define FLAG_y (FORCED_FLAG<<24) +#define FLAG_z (FORCED_FLAG<<25) +#define FLAG_A (FORCED_FLAG<<26) +#define FLAG_B (FORCED_FLAG<<27) +#define FLAG_C (FORCED_FLAG<<28) +#define FLAG_D (FORCED_FLAG<<29) +#define FLAG_E (FORCED_FLAG<<30) +#define FLAG_F (FORCED_FLAGLL<<31) +#define FLAG_G (FORCED_FLAGLL<<32) +#define FLAG_H (FORCED_FLAGLL<<33) +#define FLAG_I (FORCED_FLAGLL<<34) +#define FLAG_J (FORCED_FLAGLL<<35) +#define FLAG_K (FORCED_FLAGLL<<36) +#define FLAG_L (FORCED_FLAGLL<<37) +#define FLAG_M (FORCED_FLAGLL<<38) +#define FLAG_N (FORCED_FLAGLL<<39) +#define FLAG_O (FORCED_FLAGLL<<40) +#define FLAG_P (FORCED_FLAGLL<<41) +#define FLAG_Q (FORCED_FLAGLL<<42) +#define FLAG_R (FORCED_FLAGLL<<43) +#define FLAG_S (FORCED_FLAGLL<<44) +#define FLAG_T (FORCED_FLAGLL<<45) +#define FLAG_U (FORCED_FLAGLL<<46) +#define FLAG_V (FORCED_FLAGLL<<47) +#define FLAG_W (FORCED_FLAGLL<<48) +#define FLAG_X (FORCED_FLAGLL<<49) +#define FLAG_Y (FORCED_FLAGLL<<50) +#define FLAG_Z (FORCED_FLAGLL<<51) +#endif + +#ifdef FOR_demo_number +#ifndef TT +#define TT this.demo_number +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_d (FORCED_FLAG<<2) +#define FLAG_h (FORCED_FLAG<<3) +#define FLAG_D (FORCED_FLAG<<4) +#endif + +#ifdef FOR_demo_scankey +#ifndef TT +#define TT this.demo_scankey +#endif +#endif + +#ifdef FOR_demo_utf8towc +#ifndef TT +#define TT this.demo_utf8towc +#endif +#endif + +#ifdef FOR_devmem +#ifndef TT +#define TT this.devmem +#endif +#endif + +#ifdef FOR_df +#ifndef TT +#define TT this.df +#endif +#define FLAG_a (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_i (FORCED_FLAG<<2) +#define FLAG_h (FORCED_FLAG<<3) +#define FLAG_k (FORCED_FLAG<<4) +#define FLAG_P (FORCED_FLAG<<5) +#define FLAG_H (FORCED_FLAG<<6) +#endif + +#ifdef FOR_dhcp +#ifndef TT +#define TT this.dhcp +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#define FLAG_q (FORCED_FLAG<<3) +#define FLAG_v (FORCED_FLAG<<4) +#define FLAG_o (FORCED_FLAG<<5) +#define FLAG_a (FORCED_FLAG<<6) +#define FLAG_C (FORCED_FLAG<<7) +#define FLAG_R (FORCED_FLAG<<8) +#define FLAG_B (FORCED_FLAG<<9) +#define FLAG_S (FORCED_FLAG<<10) +#define FLAG_i (FORCED_FLAG<<11) +#define FLAG_p (FORCED_FLAG<<12) +#define FLAG_s (FORCED_FLAG<<13) +#define FLAG_t (FORCED_FLAG<<14) +#define FLAG_T (FORCED_FLAG<<15) +#define FLAG_A (FORCED_FLAG<<16) +#define FLAG_O (FORCED_FLAG<<17) +#define FLAG_r (FORCED_FLAG<<18) +#define FLAG_x (FORCED_FLAG<<19) +#define FLAG_F (FORCED_FLAG<<20) +#define FLAG_H (FORCED_FLAG<<21) +#define FLAG_V (FORCED_FLAG<<22) +#endif + +#ifdef FOR_dhcp6 +#ifndef TT +#define TT this.dhcp6 +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#define FLAG_q (FORCED_FLAG<<3) +#define FLAG_v (FORCED_FLAG<<4) +#define FLAG_R (FORCED_FLAG<<5) +#define FLAG_S (FORCED_FLAG<<6) +#define FLAG_i (FORCED_FLAG<<7) +#define FLAG_p (FORCED_FLAG<<8) +#define FLAG_s (FORCED_FLAG<<9) +#define FLAG_t (FORCED_FLAG<<10) +#define FLAG_T (FORCED_FLAG<<11) +#define FLAG_A (FORCED_FLAG<<12) +#define FLAG_r (FORCED_FLAG<<13) +#endif + +#ifdef FOR_dhcpd +#ifndef TT +#define TT this.dhcpd +#endif +#define FLAG_6 (FORCED_FLAG<<0) +#define FLAG_4 (FORCED_FLAG<<1) +#define FLAG_S (FORCED_FLAG<<2) +#define FLAG_i (FORCED_FLAG<<3) +#define FLAG_f (FORCED_FLAG<<4) +#define FLAG_P (FORCED_FLAG<<5) +#endif + +#ifdef FOR_diff +#ifndef TT +#define TT this.diff +#endif +#define FLAG_U (1<<0) +#define FLAG_r (1<<1) +#define FLAG_N (1<<2) +#define FLAG_S (1<<3) +#define FLAG_L (1<<4) +#define FLAG_a (1<<5) +#define FLAG_q (1<<6) +#define FLAG_s (1<<7) +#define FLAG_T (1<<8) +#define FLAG_i (1<<9) +#define FLAG_w (1<<10) +#define FLAG_t (1<<11) +#define FLAG_u (1<<12) +#define FLAG_b (1<<13) +#define FLAG_d (1<<14) +#define FLAG_B (1<<15) +#define FLAG_strip_trailing_cr (1<<16) +#define FLAG_color (1<<17) +#endif + +#ifdef FOR_dirname +#ifndef TT +#define TT this.dirname +#endif +#endif + +#ifdef FOR_dmesg +#ifndef TT +#define TT this.dmesg +#endif +#define FLAG_c (FORCED_FLAG<<0) +#define FLAG_n (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#define FLAG_r (FORCED_FLAG<<3) +#define FLAG_t (FORCED_FLAG<<4) +#define FLAG_T (FORCED_FLAG<<5) +#define FLAG_S (FORCED_FLAG<<6) +#define FLAG_C (FORCED_FLAG<<7) +#define FLAG_w (FORCED_FLAG<<8) +#endif + +#ifdef FOR_dnsdomainname +#ifndef TT +#define TT this.dnsdomainname +#endif +#endif + +#ifdef FOR_dos2unix +#ifndef TT +#define TT this.dos2unix +#endif +#endif + +#ifdef FOR_du +#ifndef TT +#define TT this.du +#endif +#define FLAG_x (1<<0) +#define FLAG_s (1<<1) +#define FLAG_L (1<<2) +#define FLAG_K (1<<3) +#define FLAG_k (1<<4) +#define FLAG_H (1<<5) +#define FLAG_a (1<<6) +#define FLAG_c (1<<7) +#define FLAG_l (1<<8) +#define FLAG_m (1<<9) +#define FLAG_h (1<<10) +#define FLAG_d (1<<11) +#endif + +#ifdef FOR_dumpleases +#ifndef TT +#define TT this.dumpleases +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_r (FORCED_FLAG<<1) +#define FLAG_a (FORCED_FLAG<<2) +#endif + +#ifdef FOR_echo +#ifndef TT +#define TT this.echo +#endif +#define FLAG_n (1<<0) +#define FLAG_e (1<<1) +#define FLAG_E (1<<2) +#endif + +#ifdef FOR_eject +#ifndef TT +#define TT this.eject +#endif +#define FLAG_T (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#endif + +#ifdef FOR_env +#ifndef TT +#define TT this.env +#endif +#define FLAG_u (1<<0) +#define FLAG_i (1<<1) +#define FLAG_0 (1<<2) +#endif + +#ifdef FOR_exit +#ifndef TT +#define TT this.exit +#endif +#endif + +#ifdef FOR_expand +#ifndef TT +#define TT this.expand +#endif +#define FLAG_t (FORCED_FLAG<<0) +#endif + +#ifdef FOR_expr +#ifndef TT +#define TT this.expr +#endif +#endif + +#ifdef FOR_factor +#ifndef TT +#define TT this.factor +#endif +#endif + +#ifdef FOR_fallocate +#ifndef TT +#define TT this.fallocate +#endif +#define FLAG_o (FORCED_FLAG<<0) +#define FLAG_l (FORCED_FLAG<<1) +#endif + +#ifdef FOR_false +#ifndef TT +#define TT this.false +#endif +#endif + +#ifdef FOR_fdisk +#ifndef TT +#define TT this.fdisk +#endif +#define FLAG_l (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_b (FORCED_FLAG<<2) +#define FLAG_S (FORCED_FLAG<<3) +#define FLAG_H (FORCED_FLAG<<4) +#define FLAG_C (FORCED_FLAG<<5) +#endif + +#ifdef FOR_file +#ifndef TT +#define TT this.file +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_L (FORCED_FLAG<<1) +#define FLAG_h (FORCED_FLAG<<2) +#define FLAG_b (FORCED_FLAG<<3) +#endif + +#ifdef FOR_find +#ifndef TT +#define TT this.find +#endif +#define FLAG_L (1<<0) +#define FLAG_H (1<<1) +#endif + +#ifdef FOR_flock +#ifndef TT +#define TT this.flock +#endif +#define FLAG_x (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#define FLAG_n (FORCED_FLAG<<3) +#endif + +#ifdef FOR_fmt +#ifndef TT +#define TT this.fmt +#endif +#define FLAG_w (FORCED_FLAG<<0) +#endif + +#ifdef FOR_fold +#ifndef TT +#define TT this.fold +#endif +#define FLAG_w (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#define FLAG_b (FORCED_FLAG<<3) +#endif + +#ifdef FOR_free +#ifndef TT +#define TT this.free +#endif +#define FLAG_b (FORCED_FLAG<<0) +#define FLAG_k (FORCED_FLAG<<1) +#define FLAG_m (FORCED_FLAG<<2) +#define FLAG_g (FORCED_FLAG<<3) +#define FLAG_t (FORCED_FLAG<<4) +#define FLAG_h (FORCED_FLAG<<5) +#endif + +#ifdef FOR_freeramdisk +#ifndef TT +#define TT this.freeramdisk +#endif +#endif + +#ifdef FOR_fsck +#ifndef TT +#define TT this.fsck +#endif +#define FLAG_C (FORCED_FLAG<<0) +#define FLAG_s (FORCED_FLAG<<1) +#define FLAG_V (FORCED_FLAG<<2) +#define FLAG_T (FORCED_FLAG<<3) +#define FLAG_R (FORCED_FLAG<<4) +#define FLAG_P (FORCED_FLAG<<5) +#define FLAG_N (FORCED_FLAG<<6) +#define FLAG_A (FORCED_FLAG<<7) +#define FLAG_t (FORCED_FLAG<<8) +#endif + +#ifdef FOR_fsfreeze +#ifndef TT +#define TT this.fsfreeze +#endif +#define FLAG_u (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#endif + +#ifdef FOR_fstype +#ifndef TT +#define TT this.fstype +#endif +#endif + +#ifdef FOR_fsync +#ifndef TT +#define TT this.fsync +#endif +#define FLAG_d (FORCED_FLAG<<0) +#endif + +#ifdef FOR_ftpget +#ifndef TT +#define TT this.ftpget +#endif +#define FLAG_D (FORCED_FLAG<<0) +#define FLAG_d (FORCED_FLAG<<1) +#define FLAG_M (FORCED_FLAG<<2) +#define FLAG_m (FORCED_FLAG<<3) +#define FLAG_L (FORCED_FLAG<<4) +#define FLAG_l (FORCED_FLAG<<5) +#define FLAG_s (FORCED_FLAG<<6) +#define FLAG_g (FORCED_FLAG<<7) +#define FLAG_v (FORCED_FLAG<<8) +#define FLAG_u (FORCED_FLAG<<9) +#define FLAG_p (FORCED_FLAG<<10) +#define FLAG_c (FORCED_FLAG<<11) +#define FLAG_P (FORCED_FLAG<<12) +#endif + +#ifdef FOR_getconf +#ifndef TT +#define TT this.getconf +#endif +#define FLAG_l (1<<0) +#define FLAG_a (1<<1) +#endif + +#ifdef FOR_getenforce +#ifndef TT +#define TT this.getenforce +#endif +#endif + +#ifdef FOR_getfattr +#ifndef TT +#define TT this.getfattr +#endif +#define FLAG_n (FORCED_FLAG<<0) +#define FLAG_h (FORCED_FLAG<<1) +#define FLAG_d (FORCED_FLAG<<2) +#define FLAG_only_values (FORCED_FLAG<<3) +#endif + +#ifdef FOR_getopt +#ifndef TT +#define TT this.getopt +#endif +#define FLAG_u (1<<0) +#define FLAG_T (1<<1) +#define FLAG_l (1<<2) +#define FLAG_o (1<<3) +#define FLAG_n (1<<4) +#define FLAG_a (1<<5) +#endif + +#ifdef FOR_getty +#ifndef TT +#define TT this.getty +#endif +#define FLAG_h (FORCED_FLAG<<0) +#define FLAG_L (FORCED_FLAG<<1) +#define FLAG_m (FORCED_FLAG<<2) +#define FLAG_n (FORCED_FLAG<<3) +#define FLAG_w (FORCED_FLAG<<4) +#define FLAG_i (FORCED_FLAG<<5) +#define FLAG_f (FORCED_FLAG<<6) +#define FLAG_l (FORCED_FLAG<<7) +#define FLAG_I (FORCED_FLAG<<8) +#define FLAG_H (FORCED_FLAG<<9) +#define FLAG_t (FORCED_FLAG<<10) +#endif + +#ifdef FOR_grep +#ifndef TT +#define TT this.grep +#endif +#define FLAG_x (1<<0) +#define FLAG_m (1<<1) +#define FLAG_A (1<<2) +#define FLAG_B (1<<3) +#define FLAG_C (1<<4) +#define FLAG_f (1<<5) +#define FLAG_e (1<<6) +#define FLAG_q (1<<7) +#define FLAG_l (1<<8) +#define FLAG_c (1<<9) +#define FLAG_w (1<<10) +#define FLAG_v (1<<11) +#define FLAG_s (1<<12) +#define FLAG_R (1<<13) +#define FLAG_r (1<<14) +#define FLAG_o (1<<15) +#define FLAG_n (1<<16) +#define FLAG_i (1<<17) +#define FLAG_h (1<<18) +#define FLAG_b (1<<19) +#define FLAG_a (1<<20) +#define FLAG_I (1<<21) +#define FLAG_H (1<<22) +#define FLAG_F (1<<23) +#define FLAG_E (1<<24) +#define FLAG_z (1<<25) +#define FLAG_Z (1<<26) +#define FLAG_M (1<<27) +#define FLAG_S (1<<28) +#define FLAG_exclude_dir (1<<29) +#define FLAG_color (1<<30) +#define FLAG_line_buffered (1LL<<31) +#endif + +#ifdef FOR_groupadd +#ifndef TT +#define TT this.groupadd +#endif +#define FLAG_S (FORCED_FLAG<<0) +#define FLAG_g (FORCED_FLAG<<1) +#endif + +#ifdef FOR_groupdel +#ifndef TT +#define TT this.groupdel +#endif +#endif + +#ifdef FOR_groups +#ifndef TT +#define TT this.groups +#endif +#endif + +#ifdef FOR_gunzip +#ifndef TT +#define TT this.gunzip +#endif +#define FLAG_9 (FORCED_FLAG<<0) +#define FLAG_8 (FORCED_FLAG<<1) +#define FLAG_7 (FORCED_FLAG<<2) +#define FLAG_6 (FORCED_FLAG<<3) +#define FLAG_5 (FORCED_FLAG<<4) +#define FLAG_4 (FORCED_FLAG<<5) +#define FLAG_3 (FORCED_FLAG<<6) +#define FLAG_2 (FORCED_FLAG<<7) +#define FLAG_1 (FORCED_FLAG<<8) +#define FLAG_k (FORCED_FLAG<<9) +#define FLAG_f (FORCED_FLAG<<10) +#define FLAG_d (FORCED_FLAG<<11) +#define FLAG_c (FORCED_FLAG<<12) +#endif + +#ifdef FOR_gzip +#ifndef TT +#define TT this.gzip +#endif +#define FLAG_9 (1<<0) +#define FLAG_8 (1<<1) +#define FLAG_7 (1<<2) +#define FLAG_6 (1<<3) +#define FLAG_5 (1<<4) +#define FLAG_4 (1<<5) +#define FLAG_3 (1<<6) +#define FLAG_2 (1<<7) +#define FLAG_1 (1<<8) +#define FLAG_k (1<<9) +#define FLAG_f (1<<10) +#define FLAG_d (1<<11) +#define FLAG_c (1<<12) +#define FLAG_n (1<<13) +#endif + +#ifdef FOR_head +#ifndef TT +#define TT this.head +#endif +#define FLAG_v (1<<0) +#define FLAG_q (1<<1) +#define FLAG_c (1<<2) +#define FLAG_n (1<<3) +#endif + +#ifdef FOR_hello +#ifndef TT +#define TT this.hello +#endif +#endif + +#ifdef FOR_help +#ifndef TT +#define TT this.help +#endif +#define FLAG_u (FORCED_FLAG<<0) +#define FLAG_h (FORCED_FLAG<<1) +#define FLAG_a (FORCED_FLAG<<2) +#endif + +#ifdef FOR_hexedit +#ifndef TT +#define TT this.hexedit +#endif +#define FLAG_r (FORCED_FLAG<<0) +#endif + +#ifdef FOR_host +#ifndef TT +#define TT this.host +#endif +#define FLAG_t (FORCED_FLAG<<0) +#define FLAG_v (FORCED_FLAG<<1) +#define FLAG_a (FORCED_FLAG<<2) +#endif + +#ifdef FOR_hostid +#ifndef TT +#define TT this.hostid +#endif +#endif + +#ifdef FOR_hostname +#ifndef TT +#define TT this.hostname +#endif +#define FLAG_F (1<<0) +#define FLAG_f (1<<1) +#define FLAG_s (1<<2) +#define FLAG_d (1<<3) +#define FLAG_b (1<<4) +#endif + +#ifdef FOR_hwclock +#ifndef TT +#define TT this.hwclock +#endif +#define FLAG_w (FORCED_FLAG<<0) +#define FLAG_r (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#define FLAG_t (FORCED_FLAG<<3) +#define FLAG_l (FORCED_FLAG<<4) +#define FLAG_u (FORCED_FLAG<<5) +#define FLAG_f (FORCED_FLAG<<6) +#define FLAG_fast (FORCED_FLAG<<7) +#endif + +#ifdef FOR_i2cdetect +#ifndef TT +#define TT this.i2cdetect +#endif +#define FLAG_y (FORCED_FLAG<<0) +#define FLAG_l (FORCED_FLAG<<1) +#define FLAG_F (FORCED_FLAG<<2) +#define FLAG_a (FORCED_FLAG<<3) +#endif + +#ifdef FOR_i2cdump +#ifndef TT +#define TT this.i2cdump +#endif +#define FLAG_y (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#endif + +#ifdef FOR_i2cget +#ifndef TT +#define TT this.i2cget +#endif +#define FLAG_y (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#endif + +#ifdef FOR_i2cset +#ifndef TT +#define TT this.i2cset +#endif +#define FLAG_y (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#endif + +#ifdef FOR_iconv +#ifndef TT +#define TT this.iconv +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#define FLAG_c (FORCED_FLAG<<3) +#endif + +#ifdef FOR_id +#ifndef TT +#define TT this.id +#endif +#define FLAG_u (1<<0) +#define FLAG_r (1<<1) +#define FLAG_g (1<<2) +#define FLAG_G (1<<3) +#define FLAG_n (1<<4) +#define FLAG_Z (FORCED_FLAG<<5) +#endif + +#ifdef FOR_ifconfig +#ifndef TT +#define TT this.ifconfig +#endif +#define FLAG_S (FORCED_FLAG<<0) +#define FLAG_a (FORCED_FLAG<<1) +#endif + +#ifdef FOR_init +#ifndef TT +#define TT this.init +#endif +#endif + +#ifdef FOR_inotifyd +#ifndef TT +#define TT this.inotifyd +#endif +#endif + +#ifdef FOR_insmod +#ifndef TT +#define TT this.insmod +#endif +#endif + +#ifdef FOR_install +#ifndef TT +#define TT this.install +#endif +#define FLAG_g (FORCED_FLAG<<0) +#define FLAG_o (FORCED_FLAG<<1) +#define FLAG_m (FORCED_FLAG<<2) +#define FLAG_v (FORCED_FLAG<<3) +#define FLAG_s (FORCED_FLAG<<4) +#define FLAG_p (FORCED_FLAG<<5) +#define FLAG_D (FORCED_FLAG<<6) +#define FLAG_d (FORCED_FLAG<<7) +#define FLAG_c (FORCED_FLAG<<8) +#endif + +#ifdef FOR_ionice +#ifndef TT +#define TT this.ionice +#endif +#define FLAG_p (FORCED_FLAG<<0) +#define FLAG_n (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#define FLAG_t (FORCED_FLAG<<3) +#endif + +#ifdef FOR_iorenice +#ifndef TT +#define TT this.iorenice +#endif +#endif + +#ifdef FOR_iotop +#ifndef TT +#define TT this.iotop +#endif +#define FLAG_q (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#define FLAG_m (FORCED_FLAG<<3) +#define FLAG_d (FORCED_FLAG<<4) +#define FLAG_s (FORCED_FLAG<<5) +#define FLAG_u (FORCED_FLAG<<6) +#define FLAG_p (FORCED_FLAG<<7) +#define FLAG_o (FORCED_FLAG<<8) +#define FLAG_k (FORCED_FLAG<<9) +#define FLAG_H (FORCED_FLAG<<10) +#define FLAG_O (FORCED_FLAG<<11) +#define FLAG_K (FORCED_FLAG<<12) +#define FLAG_a (FORCED_FLAG<<13) +#define FLAG_A (FORCED_FLAG<<14) +#endif + +#ifdef FOR_ip +#ifndef TT +#define TT this.ip +#endif +#endif + +#ifdef FOR_ipcrm +#ifndef TT +#define TT this.ipcrm +#endif +#define FLAG_Q (FORCED_FLAG<<0) +#define FLAG_q (FORCED_FLAG<<1) +#define FLAG_S (FORCED_FLAG<<2) +#define FLAG_s (FORCED_FLAG<<3) +#define FLAG_M (FORCED_FLAG<<4) +#define FLAG_m (FORCED_FLAG<<5) +#endif + +#ifdef FOR_ipcs +#ifndef TT +#define TT this.ipcs +#endif +#define FLAG_i (FORCED_FLAG<<0) +#define FLAG_m (FORCED_FLAG<<1) +#define FLAG_q (FORCED_FLAG<<2) +#define FLAG_s (FORCED_FLAG<<3) +#define FLAG_l (FORCED_FLAG<<4) +#define FLAG_u (FORCED_FLAG<<5) +#define FLAG_t (FORCED_FLAG<<6) +#define FLAG_p (FORCED_FLAG<<7) +#define FLAG_c (FORCED_FLAG<<8) +#define FLAG_a (FORCED_FLAG<<9) +#endif + +#ifdef FOR_kill +#ifndef TT +#define TT this.kill +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_l (FORCED_FLAG<<1) +#endif + +#ifdef FOR_killall +#ifndef TT +#define TT this.killall +#endif +#define FLAG_w (FORCED_FLAG<<0) +#define FLAG_v (FORCED_FLAG<<1) +#define FLAG_q (FORCED_FLAG<<2) +#define FLAG_l (FORCED_FLAG<<3) +#define FLAG_i (FORCED_FLAG<<4) +#define FLAG_s (FORCED_FLAG<<5) +#endif + +#ifdef FOR_killall5 +#ifndef TT +#define TT this.killall5 +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_l (FORCED_FLAG<<1) +#define FLAG_o (FORCED_FLAG<<2) +#endif + +#ifdef FOR_klogd +#ifndef TT +#define TT this.klogd +#endif +#define FLAG_n (FORCED_FLAG<<0) +#define FLAG_c (FORCED_FLAG<<1) +#endif + +#ifdef FOR_last +#ifndef TT +#define TT this.last +#endif +#define FLAG_W (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#endif + +#ifdef FOR_link +#ifndef TT +#define TT this.link +#endif +#endif + +#ifdef FOR_ln +#ifndef TT +#define TT this.ln +#endif +#define FLAG_s (1<<0) +#define FLAG_f (1<<1) +#define FLAG_n (1<<2) +#define FLAG_v (1<<3) +#define FLAG_T (1<<4) +#define FLAG_t (1<<5) +#define FLAG_r (1<<6) +#endif + +#ifdef FOR_load_policy +#ifndef TT +#define TT this.load_policy +#endif +#endif + +#ifdef FOR_log +#ifndef TT +#define TT this.log +#endif +#define FLAG_t (FORCED_FLAG<<0) +#define FLAG_p (FORCED_FLAG<<1) +#endif + +#ifdef FOR_logger +#ifndef TT +#define TT this.logger +#endif +#define FLAG_p (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#endif + +#ifdef FOR_login +#ifndef TT +#define TT this.login +#endif +#define FLAG_h (FORCED_FLAG<<0) +#define FLAG_p (FORCED_FLAG<<1) +#define FLAG_f (FORCED_FLAG<<2) +#endif + +#ifdef FOR_logname +#ifndef TT +#define TT this.logname +#endif +#endif + +#ifdef FOR_logwrapper +#ifndef TT +#define TT this.logwrapper +#endif +#endif + +#ifdef FOR_losetup +#ifndef TT +#define TT this.losetup +#endif +#define FLAG_D (FORCED_FLAG<<0) +#define FLAG_a (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#define FLAG_d (FORCED_FLAG<<3) +#define FLAG_f (FORCED_FLAG<<4) +#define FLAG_j (FORCED_FLAG<<5) +#define FLAG_o (FORCED_FLAG<<6) +#define FLAG_r (FORCED_FLAG<<7) +#define FLAG_s (FORCED_FLAG<<8) +#define FLAG_S (FORCED_FLAG<<9) +#endif + +#ifdef FOR_ls +#ifndef TT +#define TT this.ls +#endif +#define FLAG_1 (1<<0) +#define FLAG_x (1<<1) +#define FLAG_w (1<<2) +#define FLAG_u (1<<3) +#define FLAG_t (1<<4) +#define FLAG_s (1<<5) +#define FLAG_r (1<<6) +#define FLAG_q (1<<7) +#define FLAG_p (1<<8) +#define FLAG_n (1<<9) +#define FLAG_m (1<<10) +#define FLAG_l (1<<11) +#define FLAG_k (1<<12) +#define FLAG_i (1<<13) +#define FLAG_h (1<<14) +#define FLAG_f (1<<15) +#define FLAG_d (1<<16) +#define FLAG_c (1<<17) +#define FLAG_b (1<<18) +#define FLAG_a (1<<19) +#define FLAG_S (1<<20) +#define FLAG_R (1<<21) +#define FLAG_L (1<<22) +#define FLAG_H (1<<23) +#define FLAG_F (1<<24) +#define FLAG_C (1<<25) +#define FLAG_A (1<<26) +#define FLAG_o (1<<27) +#define FLAG_g (1<<28) +#define FLAG_Z (1<<29) +#define FLAG_show_control_chars (1<<30) +#define FLAG_full_time (1LL<<31) +#define FLAG_color (1LL<<32) +#endif + +#ifdef FOR_lsattr +#ifndef TT +#define TT this.lsattr +#endif +#define FLAG_R (FORCED_FLAG<<0) +#define FLAG_v (FORCED_FLAG<<1) +#define FLAG_p (FORCED_FLAG<<2) +#define FLAG_a (FORCED_FLAG<<3) +#define FLAG_d (FORCED_FLAG<<4) +#define FLAG_l (FORCED_FLAG<<5) +#endif + +#ifdef FOR_lsmod +#ifndef TT +#define TT this.lsmod +#endif +#endif + +#ifdef FOR_lsof +#ifndef TT +#define TT this.lsof +#endif +#define FLAG_t (FORCED_FLAG<<0) +#define FLAG_p (FORCED_FLAG<<1) +#define FLAG_l (FORCED_FLAG<<2) +#endif + +#ifdef FOR_lspci +#ifndef TT +#define TT this.lspci +#endif +#define FLAG_i (FORCED_FLAG<<0) +#define FLAG_n (FORCED_FLAG<<1) +#define FLAG_k (FORCED_FLAG<<2) +#define FLAG_m (FORCED_FLAG<<3) +#define FLAG_e (FORCED_FLAG<<4) +#endif + +#ifdef FOR_lsusb +#ifndef TT +#define TT this.lsusb +#endif +#endif + +#ifdef FOR_makedevs +#ifndef TT +#define TT this.makedevs +#endif +#define FLAG_d (FORCED_FLAG<<0) +#endif + +#ifdef FOR_man +#ifndef TT +#define TT this.man +#endif +#define FLAG_M (FORCED_FLAG<<0) +#define FLAG_k (FORCED_FLAG<<1) +#endif + +#ifdef FOR_mcookie +#ifndef TT +#define TT this.mcookie +#endif +#define FLAG_V (FORCED_FLAG<<0) +#define FLAG_v (FORCED_FLAG<<1) +#endif + +#ifdef FOR_md5sum +#ifndef TT +#define TT this.md5sum +#endif +#define FLAG_s (1<<0) +#define FLAG_c (1<<1) +#define FLAG_b (1<<2) +#endif + +#ifdef FOR_mdev +#ifndef TT +#define TT this.mdev +#endif +#define FLAG_s (FORCED_FLAG<<0) +#endif + +#ifdef FOR_microcom +#ifndef TT +#define TT this.microcom +#endif +#define FLAG_X (1<<0) +#define FLAG_s (1<<1) +#endif + +#ifdef FOR_mix +#ifndef TT +#define TT this.mix +#endif +#define FLAG_r (FORCED_FLAG<<0) +#define FLAG_l (FORCED_FLAG<<1) +#define FLAG_d (FORCED_FLAG<<2) +#define FLAG_c (FORCED_FLAG<<3) +#endif + +#ifdef FOR_mkdir +#ifndef TT +#define TT this.mkdir +#endif +#define FLAG_m (1<<0) +#define FLAG_p (1<<1) +#define FLAG_v (1<<2) +#define FLAG_Z (FORCED_FLAG<<3) +#endif + +#ifdef FOR_mke2fs +#ifndef TT +#define TT this.mke2fs +#endif +#define FLAG_b (FORCED_FLAG<<0) +#define FLAG_i (FORCED_FLAG<<1) +#define FLAG_N (FORCED_FLAG<<2) +#define FLAG_m (FORCED_FLAG<<3) +#define FLAG_q (FORCED_FLAG<<4) +#define FLAG_n (FORCED_FLAG<<5) +#define FLAG_F (FORCED_FLAG<<6) +#define FLAG_g (FORCED_FLAG<<7) +#endif + +#ifdef FOR_mkfifo +#ifndef TT +#define TT this.mkfifo +#endif +#define FLAG_m (FORCED_FLAG<<0) +#define FLAG_Z (FORCED_FLAG<<1) +#endif + +#ifdef FOR_mknod +#ifndef TT +#define TT this.mknod +#endif +#define FLAG_Z (FORCED_FLAG<<0) +#define FLAG_m (FORCED_FLAG<<1) +#endif + +#ifdef FOR_mkpasswd +#ifndef TT +#define TT this.mkpasswd +#endif +#define FLAG_P (FORCED_FLAG<<0) +#define FLAG_m (FORCED_FLAG<<1) +#define FLAG_S (FORCED_FLAG<<2) +#endif + +#ifdef FOR_mkswap +#ifndef TT +#define TT this.mkswap +#endif +#define FLAG_L (FORCED_FLAG<<0) +#endif + +#ifdef FOR_mktemp +#ifndef TT +#define TT this.mktemp +#endif +#define FLAG_t (1<<0) +#define FLAG_p (1<<1) +#define FLAG_d (1<<2) +#define FLAG_q (1<<3) +#define FLAG_u (1<<4) +#define FLAG_tmpdir (1<<5) +#endif + +#ifdef FOR_modinfo +#ifndef TT +#define TT this.modinfo +#endif +#define FLAG_0 (FORCED_FLAG<<0) +#define FLAG_F (FORCED_FLAG<<1) +#define FLAG_k (FORCED_FLAG<<2) +#define FLAG_b (FORCED_FLAG<<3) +#endif + +#ifdef FOR_modprobe +#ifndef TT +#define TT this.modprobe +#endif +#define FLAG_d (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_D (FORCED_FLAG<<2) +#define FLAG_s (FORCED_FLAG<<3) +#define FLAG_v (FORCED_FLAG<<4) +#define FLAG_q (FORCED_FLAG<<5) +#define FLAG_r (FORCED_FLAG<<6) +#define FLAG_l (FORCED_FLAG<<7) +#define FLAG_a (FORCED_FLAG<<8) +#endif + +#ifdef FOR_more +#ifndef TT +#define TT this.more +#endif +#endif + +#ifdef FOR_mount +#ifndef TT +#define TT this.mount +#endif +#define FLAG_o (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_w (FORCED_FLAG<<2) +#define FLAG_v (FORCED_FLAG<<3) +#define FLAG_r (FORCED_FLAG<<4) +#define FLAG_n (FORCED_FLAG<<5) +#define FLAG_f (FORCED_FLAG<<6) +#define FLAG_a (FORCED_FLAG<<7) +#define FLAG_O (FORCED_FLAG<<8) +#endif + +#ifdef FOR_mountpoint +#ifndef TT +#define TT this.mountpoint +#endif +#define FLAG_x (FORCED_FLAG<<0) +#define FLAG_d (FORCED_FLAG<<1) +#define FLAG_q (FORCED_FLAG<<2) +#endif + +#ifdef FOR_mv +#ifndef TT +#define TT this.mv +#endif +#define FLAG_T (1<<0) +#define FLAG_i (1<<1) +#define FLAG_f (1<<2) +#define FLAG_F (1<<3) +#define FLAG_n (1<<4) +#define FLAG_v (1<<5) +#endif + +#ifdef FOR_nbd_client +#ifndef TT +#define TT this.nbd_client +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_n (FORCED_FLAG<<1) +#endif + +#ifdef FOR_netcat +#ifndef TT +#define TT this.netcat +#endif +#define FLAG_U (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_6 (FORCED_FLAG<<2) +#define FLAG_4 (FORCED_FLAG<<3) +#define FLAG_f (FORCED_FLAG<<4) +#define FLAG_s (FORCED_FLAG<<5) +#define FLAG_q (FORCED_FLAG<<6) +#define FLAG_p (FORCED_FLAG<<7) +#define FLAG_W (FORCED_FLAG<<8) +#define FLAG_w (FORCED_FLAG<<9) +#define FLAG_L (FORCED_FLAG<<10) +#define FLAG_l (FORCED_FLAG<<11) +#define FLAG_t (FORCED_FLAG<<12) +#endif + +#ifdef FOR_netstat +#ifndef TT +#define TT this.netstat +#endif +#define FLAG_l (FORCED_FLAG<<0) +#define FLAG_a (FORCED_FLAG<<1) +#define FLAG_e (FORCED_FLAG<<2) +#define FLAG_n (FORCED_FLAG<<3) +#define FLAG_t (FORCED_FLAG<<4) +#define FLAG_u (FORCED_FLAG<<5) +#define FLAG_w (FORCED_FLAG<<6) +#define FLAG_x (FORCED_FLAG<<7) +#define FLAG_r (FORCED_FLAG<<8) +#define FLAG_W (FORCED_FLAG<<9) +#define FLAG_p (FORCED_FLAG<<10) +#endif + +#ifdef FOR_nice +#ifndef TT +#define TT this.nice +#endif +#define FLAG_n (FORCED_FLAG<<0) +#endif + +#ifdef FOR_nl +#ifndef TT +#define TT this.nl +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_n (FORCED_FLAG<<1) +#define FLAG_b (FORCED_FLAG<<2) +#define FLAG_E (FORCED_FLAG<<3) +#define FLAG_w (FORCED_FLAG<<4) +#define FLAG_l (FORCED_FLAG<<5) +#define FLAG_v (FORCED_FLAG<<6) +#endif + +#ifdef FOR_nohup +#ifndef TT +#define TT this.nohup +#endif +#endif + +#ifdef FOR_nproc +#ifndef TT +#define TT this.nproc +#endif +#define FLAG_all (1<<0) +#endif + +#ifdef FOR_nsenter +#ifndef TT +#define TT this.nsenter +#endif +#define FLAG_U (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_p (FORCED_FLAG<<2) +#define FLAG_n (FORCED_FLAG<<3) +#define FLAG_m (FORCED_FLAG<<4) +#define FLAG_i (FORCED_FLAG<<5) +#define FLAG_t (FORCED_FLAG<<6) +#define FLAG_F (FORCED_FLAG<<7) +#endif + +#ifdef FOR_od +#ifndef TT +#define TT this.od +#endif +#define FLAG_t (1<<0) +#define FLAG_A (1<<1) +#define FLAG_b (1<<2) +#define FLAG_c (1<<3) +#define FLAG_d (1<<4) +#define FLAG_o (1<<5) +#define FLAG_s (1<<6) +#define FLAG_x (1<<7) +#define FLAG_N (1<<8) +#define FLAG_w (1<<9) +#define FLAG_v (1<<10) +#define FLAG_j (1<<11) +#endif + +#ifdef FOR_oneit +#ifndef TT +#define TT this.oneit +#endif +#define FLAG_3 (FORCED_FLAG<<0) +#define FLAG_p (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#define FLAG_n (FORCED_FLAG<<3) +#endif + +#ifdef FOR_openvt +#ifndef TT +#define TT this.openvt +#endif +#define FLAG_w (FORCED_FLAG<<0) +#define FLAG_s (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#endif + +#ifdef FOR_partprobe +#ifndef TT +#define TT this.partprobe +#endif +#endif + +#ifdef FOR_passwd +#ifndef TT +#define TT this.passwd +#endif +#define FLAG_u (FORCED_FLAG<<0) +#define FLAG_l (FORCED_FLAG<<1) +#define FLAG_d (FORCED_FLAG<<2) +#define FLAG_a (FORCED_FLAG<<3) +#endif + +#ifdef FOR_paste +#ifndef TT +#define TT this.paste +#endif +#define FLAG_s (1<<0) +#define FLAG_d (1<<1) +#endif + +#ifdef FOR_patch +#ifndef TT +#define TT this.patch +#endif +#define FLAG_s (1<<0) +#define FLAG_R (1<<1) +#define FLAG_i (1<<2) +#define FLAG_d (1<<3) +#define FLAG_p (1<<4) +#define FLAG_l (1<<5) +#define FLAG_u (1<<6) +#define FLAG_f (1<<7) +#define FLAG_g (1<<8) +#define FLAG_F (1<<9) +#define FLAG_x (FORCED_FLAG<<10) +#define FLAG_dry_run (1<<11) +#define FLAG_no_backup_if_mismatch (1<<12) +#endif + +#ifdef FOR_pgrep +#ifndef TT +#define TT this.pgrep +#endif +#define FLAG_L (1<<0) +#define FLAG_x (1<<1) +#define FLAG_v (1<<2) +#define FLAG_o (1<<3) +#define FLAG_n (1<<4) +#define FLAG_f (1<<5) +#define FLAG_G (1<<6) +#define FLAG_g (1<<7) +#define FLAG_P (1<<8) +#define FLAG_s (1<<9) +#define FLAG_t (1<<10) +#define FLAG_U (1<<11) +#define FLAG_u (1<<12) +#define FLAG_d (1<<13) +#define FLAG_l (1<<14) +#define FLAG_c (1<<15) +#endif + +#ifdef FOR_pidof +#ifndef TT +#define TT this.pidof +#endif +#define FLAG_x (FORCED_FLAG<<0) +#define FLAG_o (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#endif + +#ifdef FOR_ping +#ifndef TT +#define TT this.ping +#endif +#define FLAG_I (FORCED_FLAG<<0) +#define FLAG_6 (FORCED_FLAG<<1) +#define FLAG_4 (FORCED_FLAG<<2) +#define FLAG_f (FORCED_FLAG<<3) +#define FLAG_q (FORCED_FLAG<<4) +#define FLAG_w (FORCED_FLAG<<5) +#define FLAG_W (FORCED_FLAG<<6) +#define FLAG_i (FORCED_FLAG<<7) +#define FLAG_s (FORCED_FLAG<<8) +#define FLAG_c (FORCED_FLAG<<9) +#define FLAG_t (FORCED_FLAG<<10) +#define FLAG_m (FORCED_FLAG<<11) +#endif + +#ifdef FOR_pivot_root +#ifndef TT +#define TT this.pivot_root +#endif +#endif + +#ifdef FOR_pkill +#ifndef TT +#define TT this.pkill +#endif +#define FLAG_l (1<<0) +#define FLAG_x (1<<1) +#define FLAG_v (1<<2) +#define FLAG_o (1<<3) +#define FLAG_n (1<<4) +#define FLAG_f (1<<5) +#define FLAG_G (1<<6) +#define FLAG_g (1<<7) +#define FLAG_P (1<<8) +#define FLAG_s (1<<9) +#define FLAG_t (1<<10) +#define FLAG_U (1<<11) +#define FLAG_u (1<<12) +#define FLAG_V (1<<13) +#endif + +#ifdef FOR_pmap +#ifndef TT +#define TT this.pmap +#endif +#define FLAG_q (FORCED_FLAG<<0) +#define FLAG_x (FORCED_FLAG<<1) +#endif + +#ifdef FOR_printenv +#ifndef TT +#define TT this.printenv +#endif +#define FLAG_0 (FORCED_FLAG<<0) +#endif + +#ifdef FOR_printf +#ifndef TT +#define TT this.printf +#endif +#endif + +#ifdef FOR_ps +#ifndef TT +#define TT this.ps +#endif +#define FLAG_Z (1<<0) +#define FLAG_w (1<<1) +#define FLAG_G (1<<2) +#define FLAG_g (1<<3) +#define FLAG_U (1<<4) +#define FLAG_u (1<<5) +#define FLAG_T (1<<6) +#define FLAG_t (1<<7) +#define FLAG_s (1<<8) +#define FLAG_p (1<<9) +#define FLAG_O (1<<10) +#define FLAG_o (1<<11) +#define FLAG_n (1<<12) +#define FLAG_M (1<<13) +#define FLAG_l (1<<14) +#define FLAG_f (1<<15) +#define FLAG_e (1<<16) +#define FLAG_d (1<<17) +#define FLAG_A (1<<18) +#define FLAG_a (1<<19) +#define FLAG_P (1<<20) +#define FLAG_k (1<<21) +#endif + +#ifdef FOR_pwd +#ifndef TT +#define TT this.pwd +#endif +#define FLAG_P (1<<0) +#define FLAG_L (1<<1) +#endif + +#ifdef FOR_pwdx +#ifndef TT +#define TT this.pwdx +#endif +#define FLAG_a (FORCED_FLAG<<0) +#endif + +#ifdef FOR_readahead +#ifndef TT +#define TT this.readahead +#endif +#endif + +#ifdef FOR_readelf +#ifndef TT +#define TT this.readelf +#endif +#define FLAG_x (FORCED_FLAG<<0) +#define FLAG_W (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#define FLAG_S (FORCED_FLAG<<3) +#define FLAG_p (FORCED_FLAG<<4) +#define FLAG_n (FORCED_FLAG<<5) +#define FLAG_l (FORCED_FLAG<<6) +#define FLAG_h (FORCED_FLAG<<7) +#define FLAG_d (FORCED_FLAG<<8) +#define FLAG_a (FORCED_FLAG<<9) +#define FLAG_dyn_syms (FORCED_FLAG<<10) +#endif + +#ifdef FOR_readlink +#ifndef TT +#define TT this.readlink +#endif +#define FLAG_f (1<<0) +#define FLAG_e (1<<1) +#define FLAG_m (1<<2) +#define FLAG_q (1<<3) +#define FLAG_n (1<<4) +#endif + +#ifdef FOR_realpath +#ifndef TT +#define TT this.realpath +#endif +#endif + +#ifdef FOR_reboot +#ifndef TT +#define TT this.reboot +#endif +#define FLAG_n (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#endif + +#ifdef FOR_renice +#ifndef TT +#define TT this.renice +#endif +#define FLAG_n (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_p (FORCED_FLAG<<2) +#define FLAG_g (FORCED_FLAG<<3) +#endif + +#ifdef FOR_reset +#ifndef TT +#define TT this.reset +#endif +#endif + +#ifdef FOR_restorecon +#ifndef TT +#define TT this.restorecon +#endif +#define FLAG_v (FORCED_FLAG<<0) +#define FLAG_r (FORCED_FLAG<<1) +#define FLAG_R (FORCED_FLAG<<2) +#define FLAG_n (FORCED_FLAG<<3) +#define FLAG_F (FORCED_FLAG<<4) +#define FLAG_D (FORCED_FLAG<<5) +#endif + +#ifdef FOR_rev +#ifndef TT +#define TT this.rev +#endif +#endif + +#ifdef FOR_rfkill +#ifndef TT +#define TT this.rfkill +#endif +#endif + +#ifdef FOR_rm +#ifndef TT +#define TT this.rm +#endif +#define FLAG_v (1<<0) +#define FLAG_r (1<<1) +#define FLAG_R (1<<2) +#define FLAG_i (1<<3) +#define FLAG_f (1<<4) +#endif + +#ifdef FOR_rmdir +#ifndef TT +#define TT this.rmdir +#endif +#define FLAG_p (1<<0) +#define FLAG_ignore_fail_on_non_empty (1<<1) +#endif + +#ifdef FOR_rmmod +#ifndef TT +#define TT this.rmmod +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_w (FORCED_FLAG<<1) +#endif + +#ifdef FOR_route +#ifndef TT +#define TT this.route +#endif +#define FLAG_A (FORCED_FLAG<<0) +#define FLAG_e (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#endif + +#ifdef FOR_runcon +#ifndef TT +#define TT this.runcon +#endif +#endif + +#ifdef FOR_sed +#ifndef TT +#define TT this.sed +#endif +#define FLAG_z (1<<0) +#define FLAG_r (1<<1) +#define FLAG_E (1<<2) +#define FLAG_n (1<<3) +#define FLAG_i (1<<4) +#define FLAG_f (1<<5) +#define FLAG_e (1<<6) +#define FLAG_version (1<<7) +#define FLAG_help (1<<8) +#endif + +#ifdef FOR_sendevent +#ifndef TT +#define TT this.sendevent +#endif +#endif + +#ifdef FOR_seq +#ifndef TT +#define TT this.seq +#endif +#define FLAG_w (1<<0) +#define FLAG_s (1<<1) +#define FLAG_f (1<<2) +#endif + +#ifdef FOR_setenforce +#ifndef TT +#define TT this.setenforce +#endif +#endif + +#ifdef FOR_setfattr +#ifndef TT +#define TT this.setfattr +#endif +#define FLAG_x (FORCED_FLAG<<0) +#define FLAG_v (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#define FLAG_h (FORCED_FLAG<<3) +#endif + +#ifdef FOR_setsid +#ifndef TT +#define TT this.setsid +#endif +#define FLAG_d (1<<0) +#define FLAG_c (1<<1) +#define FLAG_w (1<<2) +#endif + +#ifdef FOR_sh +#ifndef TT +#define TT this.sh +#endif +#define FLAG_i (FORCED_FLAG<<0) +#define FLAG_c (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#define FLAG_norc (FORCED_FLAG<<3) +#define FLAG_noprofile (FORCED_FLAG<<4) +#define FLAG_noediting (FORCED_FLAG<<5) +#endif + +#ifdef FOR_sha1sum +#ifndef TT +#define TT this.sha1sum +#endif +#define FLAG_s (1<<0) +#define FLAG_c (1<<1) +#define FLAG_b (1<<2) +#endif + +#ifdef FOR_shred +#ifndef TT +#define TT this.shred +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_o (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#define FLAG_s (FORCED_FLAG<<3) +#define FLAG_u (FORCED_FLAG<<4) +#define FLAG_x (FORCED_FLAG<<5) +#define FLAG_z (FORCED_FLAG<<6) +#endif + +#ifdef FOR_skeleton +#ifndef TT +#define TT this.skeleton +#endif +#define FLAG_a (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#define FLAG_d (FORCED_FLAG<<3) +#define FLAG_e (FORCED_FLAG<<4) +#define FLAG_also (FORCED_FLAG<<5) +#define FLAG_blubber (FORCED_FLAG<<6) +#define FLAG_walrus (FORCED_FLAG<<7) +#endif + +#ifdef FOR_skeleton_alias +#ifndef TT +#define TT this.skeleton_alias +#endif +#define FLAG_q (FORCED_FLAG<<0) +#define FLAG_d (FORCED_FLAG<<1) +#define FLAG_b (FORCED_FLAG<<2) +#endif + +#ifdef FOR_sleep +#ifndef TT +#define TT this.sleep +#endif +#endif + +#ifdef FOR_sntp +#ifndef TT +#define TT this.sntp +#endif +#define FLAG_r (FORCED_FLAG<<0) +#define FLAG_q (FORCED_FLAG<<1) +#define FLAG_D (FORCED_FLAG<<2) +#define FLAG_d (FORCED_FLAG<<3) +#define FLAG_s (FORCED_FLAG<<4) +#define FLAG_a (FORCED_FLAG<<5) +#define FLAG_t (FORCED_FLAG<<6) +#define FLAG_p (FORCED_FLAG<<7) +#define FLAG_S (FORCED_FLAG<<8) +#define FLAG_m (FORCED_FLAG<<9) +#define FLAG_M (FORCED_FLAG<<10) +#endif + +#ifdef FOR_sort +#ifndef TT +#define TT this.sort +#endif +#define FLAG_n (1<<0) +#define FLAG_u (1<<1) +#define FLAG_r (1<<2) +#define FLAG_i (1<<3) +#define FLAG_f (1<<4) +#define FLAG_d (1<<5) +#define FLAG_z (1<<6) +#define FLAG_s (1<<7) +#define FLAG_c (1<<8) +#define FLAG_M (1<<9) +#define FLAG_b (1<<10) +#define FLAG_V (1<<11) +#define FLAG_x (1<<12) +#define FLAG_t (1<<13) +#define FLAG_k (1<<14) +#define FLAG_o (1<<15) +#define FLAG_m (1<<16) +#define FLAG_T (1<<17) +#define FLAG_S (1<<18) +#define FLAG_g (1<<19) +#endif + +#ifdef FOR_split +#ifndef TT +#define TT this.split +#endif +#define FLAG_l (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_a (FORCED_FLAG<<2) +#endif + +#ifdef FOR_stat +#ifndef TT +#define TT this.stat +#endif +#define FLAG_t (1<<0) +#define FLAG_L (1<<1) +#define FLAG_f (1<<2) +#define FLAG_c (1<<3) +#endif + +#ifdef FOR_strings +#ifndef TT +#define TT this.strings +#endif +#define FLAG_o (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#define FLAG_a (FORCED_FLAG<<3) +#define FLAG_t (FORCED_FLAG<<4) +#endif + +#ifdef FOR_stty +#ifndef TT +#define TT this.stty +#endif +#define FLAG_g (FORCED_FLAG<<0) +#define FLAG_F (FORCED_FLAG<<1) +#define FLAG_a (FORCED_FLAG<<2) +#endif + +#ifdef FOR_su +#ifndef TT +#define TT this.su +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_c (FORCED_FLAG<<1) +#define FLAG_g (FORCED_FLAG<<2) +#define FLAG_u (FORCED_FLAG<<3) +#define FLAG_p (FORCED_FLAG<<4) +#define FLAG_m (FORCED_FLAG<<5) +#define FLAG_l (FORCED_FLAG<<6) +#endif + +#ifdef FOR_sulogin +#ifndef TT +#define TT this.sulogin +#endif +#define FLAG_t (FORCED_FLAG<<0) +#endif + +#ifdef FOR_swapoff +#ifndef TT +#define TT this.swapoff +#endif +#endif + +#ifdef FOR_swapon +#ifndef TT +#define TT this.swapon +#endif +#define FLAG_d (FORCED_FLAG<<0) +#define FLAG_p (FORCED_FLAG<<1) +#endif + +#ifdef FOR_switch_root +#ifndef TT +#define TT this.switch_root +#endif +#define FLAG_h (FORCED_FLAG<<0) +#define FLAG_c (FORCED_FLAG<<1) +#endif + +#ifdef FOR_sync +#ifndef TT +#define TT this.sync +#endif +#endif + +#ifdef FOR_sysctl +#ifndef TT +#define TT this.sysctl +#endif +#define FLAG_A (FORCED_FLAG<<0) +#define FLAG_a (FORCED_FLAG<<1) +#define FLAG_p (FORCED_FLAG<<2) +#define FLAG_w (FORCED_FLAG<<3) +#define FLAG_q (FORCED_FLAG<<4) +#define FLAG_N (FORCED_FLAG<<5) +#define FLAG_e (FORCED_FLAG<<6) +#define FLAG_n (FORCED_FLAG<<7) +#endif + +#ifdef FOR_syslogd +#ifndef TT +#define TT this.syslogd +#endif +#define FLAG_D (FORCED_FLAG<<0) +#define FLAG_L (FORCED_FLAG<<1) +#define FLAG_K (FORCED_FLAG<<2) +#define FLAG_S (FORCED_FLAG<<3) +#define FLAG_n (FORCED_FLAG<<4) +#define FLAG_a (FORCED_FLAG<<5) +#define FLAG_f (FORCED_FLAG<<6) +#define FLAG_p (FORCED_FLAG<<7) +#define FLAG_O (FORCED_FLAG<<8) +#define FLAG_m (FORCED_FLAG<<9) +#define FLAG_s (FORCED_FLAG<<10) +#define FLAG_b (FORCED_FLAG<<11) +#define FLAG_R (FORCED_FLAG<<12) +#define FLAG_l (FORCED_FLAG<<13) +#endif + +#ifdef FOR_tac +#ifndef TT +#define TT this.tac +#endif +#endif + +#ifdef FOR_tail +#ifndef TT +#define TT this.tail +#endif +#define FLAG_n (1<<0) +#define FLAG_c (1<<1) +#define FLAG_f (1<<2) +#endif + +#ifdef FOR_tar +#ifndef TT +#define TT this.tar +#endif +#define FLAG_a (1<<0) +#define FLAG_f (1<<1) +#define FLAG_C (1<<2) +#define FLAG_T (1<<3) +#define FLAG_X (1<<4) +#define FLAG_m (1<<5) +#define FLAG_O (1<<6) +#define FLAG_S (1<<7) +#define FLAG_z (1<<8) +#define FLAG_j (1<<9) +#define FLAG_J (1<<10) +#define FLAG_v (1<<11) +#define FLAG_t (1<<12) +#define FLAG_x (1<<13) +#define FLAG_h (1<<14) +#define FLAG_c (1<<15) +#define FLAG_k (1<<16) +#define FLAG_p (1<<17) +#define FLAG_o (1<<18) +#define FLAG_to_command (1<<19) +#define FLAG_owner (1<<20) +#define FLAG_group (1<<21) +#define FLAG_mtime (1<<22) +#define FLAG_mode (1<<23) +#define FLAG_exclude (1<<24) +#define FLAG_overwrite (1<<25) +#define FLAG_no_same_permissions (1<<26) +#define FLAG_numeric_owner (1<<27) +#define FLAG_no_recursion (1<<28) +#define FLAG_full_time (1<<29) +#define FLAG_restrict (1<<30) +#endif + +#ifdef FOR_taskset +#ifndef TT +#define TT this.taskset +#endif +#define FLAG_a (FORCED_FLAG<<0) +#define FLAG_p (FORCED_FLAG<<1) +#endif + +#ifdef FOR_tcpsvd +#ifndef TT +#define TT this.tcpsvd +#endif +#define FLAG_v (FORCED_FLAG<<0) +#define FLAG_E (FORCED_FLAG<<1) +#define FLAG_h (FORCED_FLAG<<2) +#define FLAG_l (FORCED_FLAG<<3) +#define FLAG_u (FORCED_FLAG<<4) +#define FLAG_b (FORCED_FLAG<<5) +#define FLAG_C (FORCED_FLAG<<6) +#define FLAG_c (FORCED_FLAG<<7) +#endif + +#ifdef FOR_tee +#ifndef TT +#define TT this.tee +#endif +#define FLAG_a (1<<0) +#define FLAG_i (1<<1) +#endif + +#ifdef FOR_telnet +#ifndef TT +#define TT this.telnet +#endif +#endif + +#ifdef FOR_telnetd +#ifndef TT +#define TT this.telnetd +#endif +#define FLAG_i (FORCED_FLAG<<0) +#define FLAG_K (FORCED_FLAG<<1) +#define FLAG_S (FORCED_FLAG<<2) +#define FLAG_F (FORCED_FLAG<<3) +#define FLAG_l (FORCED_FLAG<<4) +#define FLAG_f (FORCED_FLAG<<5) +#define FLAG_p (FORCED_FLAG<<6) +#define FLAG_b (FORCED_FLAG<<7) +#define FLAG_w (FORCED_FLAG<<8) +#endif + +#ifdef FOR_test +#ifndef TT +#define TT this.test +#endif +#endif + +#ifdef FOR_tftp +#ifndef TT +#define TT this.tftp +#endif +#define FLAG_p (FORCED_FLAG<<0) +#define FLAG_g (FORCED_FLAG<<1) +#define FLAG_l (FORCED_FLAG<<2) +#define FLAG_r (FORCED_FLAG<<3) +#define FLAG_b (FORCED_FLAG<<4) +#endif + +#ifdef FOR_tftpd +#ifndef TT +#define TT this.tftpd +#endif +#define FLAG_l (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#define FLAG_r (FORCED_FLAG<<3) +#endif + +#ifdef FOR_time +#ifndef TT +#define TT this.time +#endif +#define FLAG_v (FORCED_FLAG<<0) +#define FLAG_p (FORCED_FLAG<<1) +#endif + +#ifdef FOR_timeout +#ifndef TT +#define TT this.timeout +#endif +#define FLAG_s (1<<0) +#define FLAG_k (1<<1) +#define FLAG_v (1<<2) +#define FLAG_preserve_status (1<<3) +#define FLAG_foreground (1<<4) +#endif + +#ifdef FOR_top +#ifndef TT +#define TT this.top +#endif +#define FLAG_q (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#define FLAG_m (FORCED_FLAG<<3) +#define FLAG_d (FORCED_FLAG<<4) +#define FLAG_s (FORCED_FLAG<<5) +#define FLAG_u (FORCED_FLAG<<6) +#define FLAG_p (FORCED_FLAG<<7) +#define FLAG_o (FORCED_FLAG<<8) +#define FLAG_k (FORCED_FLAG<<9) +#define FLAG_H (FORCED_FLAG<<10) +#define FLAG_O (FORCED_FLAG<<11) +#endif + +#ifdef FOR_touch +#ifndef TT +#define TT this.touch +#endif +#define FLAG_h (1<<0) +#define FLAG_t (1<<1) +#define FLAG_r (1<<2) +#define FLAG_m (1<<3) +#define FLAG_f (1<<4) +#define FLAG_d (1<<5) +#define FLAG_c (1<<6) +#define FLAG_a (1<<7) +#endif + +#ifdef FOR_toybox +#ifndef TT +#define TT this.toybox +#endif +#endif + +#ifdef FOR_tr +#ifndef TT +#define TT this.tr +#endif +#define FLAG_d (1<<0) +#define FLAG_s (1<<1) +#define FLAG_c (1<<2) +#define FLAG_C (1<<3) +#endif + +#ifdef FOR_traceroute +#ifndef TT +#define TT this.traceroute +#endif +#define FLAG_4 (FORCED_FLAG<<0) +#define FLAG_6 (FORCED_FLAG<<1) +#define FLAG_F (FORCED_FLAG<<2) +#define FLAG_U (FORCED_FLAG<<3) +#define FLAG_I (FORCED_FLAG<<4) +#define FLAG_l (FORCED_FLAG<<5) +#define FLAG_d (FORCED_FLAG<<6) +#define FLAG_n (FORCED_FLAG<<7) +#define FLAG_v (FORCED_FLAG<<8) +#define FLAG_r (FORCED_FLAG<<9) +#define FLAG_m (FORCED_FLAG<<10) +#define FLAG_p (FORCED_FLAG<<11) +#define FLAG_q (FORCED_FLAG<<12) +#define FLAG_s (FORCED_FLAG<<13) +#define FLAG_t (FORCED_FLAG<<14) +#define FLAG_w (FORCED_FLAG<<15) +#define FLAG_g (FORCED_FLAG<<16) +#define FLAG_z (FORCED_FLAG<<17) +#define FLAG_f (FORCED_FLAG<<18) +#define FLAG_i (FORCED_FLAG<<19) +#endif + +#ifdef FOR_true +#ifndef TT +#define TT this.true +#endif +#endif + +#ifdef FOR_truncate +#ifndef TT +#define TT this.truncate +#endif +#define FLAG_c (1<<0) +#define FLAG_s (1<<1) +#endif + +#ifdef FOR_tty +#ifndef TT +#define TT this.tty +#endif +#define FLAG_s (FORCED_FLAG<<0) +#endif + +#ifdef FOR_tunctl +#ifndef TT +#define TT this.tunctl +#endif +#define FLAG_T (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_d (FORCED_FLAG<<2) +#define FLAG_t (FORCED_FLAG<<3) +#endif + +#ifdef FOR_ulimit +#ifndef TT +#define TT this.ulimit +#endif +#define FLAG_c (FORCED_FLAG<<0) +#define FLAG_d (FORCED_FLAG<<1) +#define FLAG_e (FORCED_FLAG<<2) +#define FLAG_f (FORCED_FLAG<<3) +#define FLAG_i (FORCED_FLAG<<4) +#define FLAG_l (FORCED_FLAG<<5) +#define FLAG_m (FORCED_FLAG<<6) +#define FLAG_n (FORCED_FLAG<<7) +#define FLAG_p (FORCED_FLAG<<8) +#define FLAG_q (FORCED_FLAG<<9) +#define FLAG_R (FORCED_FLAG<<10) +#define FLAG_r (FORCED_FLAG<<11) +#define FLAG_s (FORCED_FLAG<<12) +#define FLAG_t (FORCED_FLAG<<13) +#define FLAG_u (FORCED_FLAG<<14) +#define FLAG_v (FORCED_FLAG<<15) +#define FLAG_a (FORCED_FLAG<<16) +#define FLAG_H (FORCED_FLAG<<17) +#define FLAG_S (FORCED_FLAG<<18) +#define FLAG_P (FORCED_FLAG<<19) +#endif + +#ifdef FOR_umount +#ifndef TT +#define TT this.umount +#endif +#define FLAG_v (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_a (FORCED_FLAG<<2) +#define FLAG_r (FORCED_FLAG<<3) +#define FLAG_l (FORCED_FLAG<<4) +#define FLAG_f (FORCED_FLAG<<5) +#define FLAG_D (FORCED_FLAG<<6) +#define FLAG_d (FORCED_FLAG<<7) +#define FLAG_n (FORCED_FLAG<<8) +#define FLAG_c (FORCED_FLAG<<9) +#endif + +#ifdef FOR_uname +#ifndef TT +#define TT this.uname +#endif +#define FLAG_s (1<<0) +#define FLAG_n (1<<1) +#define FLAG_r (1<<2) +#define FLAG_v (1<<3) +#define FLAG_m (1<<4) +#define FLAG_a (1<<5) +#define FLAG_o (1<<6) +#endif + +#ifdef FOR_uniq +#ifndef TT +#define TT this.uniq +#endif +#define FLAG_u (1<<0) +#define FLAG_d (1<<1) +#define FLAG_c (1<<2) +#define FLAG_i (1<<3) +#define FLAG_z (1<<4) +#define FLAG_w (1<<5) +#define FLAG_s (1<<6) +#define FLAG_f (1<<7) +#endif + +#ifdef FOR_unix2dos +#ifndef TT +#define TT this.unix2dos +#endif +#endif + +#ifdef FOR_unlink +#ifndef TT +#define TT this.unlink +#endif +#endif + +#ifdef FOR_unshare +#ifndef TT +#define TT this.unshare +#endif +#define FLAG_U (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_p (FORCED_FLAG<<2) +#define FLAG_n (FORCED_FLAG<<3) +#define FLAG_m (FORCED_FLAG<<4) +#define FLAG_i (FORCED_FLAG<<5) +#define FLAG_r (FORCED_FLAG<<6) +#define FLAG_f (FORCED_FLAG<<7) +#endif + +#ifdef FOR_uptime +#ifndef TT +#define TT this.uptime +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_p (FORCED_FLAG<<1) +#endif + +#ifdef FOR_useradd +#ifndef TT +#define TT this.useradd +#endif +#define FLAG_H (FORCED_FLAG<<0) +#define FLAG_D (FORCED_FLAG<<1) +#define FLAG_S (FORCED_FLAG<<2) +#define FLAG_h (FORCED_FLAG<<3) +#define FLAG_g (FORCED_FLAG<<4) +#define FLAG_s (FORCED_FLAG<<5) +#define FLAG_G (FORCED_FLAG<<6) +#define FLAG_u (FORCED_FLAG<<7) +#endif + +#ifdef FOR_userdel +#ifndef TT +#define TT this.userdel +#endif +#define FLAG_r (FORCED_FLAG<<0) +#endif + +#ifdef FOR_usleep +#ifndef TT +#define TT this.usleep +#endif +#endif + +#ifdef FOR_uudecode +#ifndef TT +#define TT this.uudecode +#endif +#define FLAG_o (FORCED_FLAG<<0) +#endif + +#ifdef FOR_uuencode +#ifndef TT +#define TT this.uuencode +#endif +#define FLAG_m (FORCED_FLAG<<0) +#endif + +#ifdef FOR_uuidgen +#ifndef TT +#define TT this.uuidgen +#endif +#define FLAG_r (FORCED_FLAG<<0) +#endif + +#ifdef FOR_vconfig +#ifndef TT +#define TT this.vconfig +#endif +#endif + +#ifdef FOR_vi +#ifndef TT +#define TT this.vi +#endif +#define FLAG_s (FORCED_FLAG<<0) +#endif + +#ifdef FOR_vmstat +#ifndef TT +#define TT this.vmstat +#endif +#define FLAG_n (FORCED_FLAG<<0) +#endif + +#ifdef FOR_w +#ifndef TT +#define TT this.w +#endif +#endif + +#ifdef FOR_watch +#ifndef TT +#define TT this.watch +#endif +#define FLAG_x (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_e (FORCED_FLAG<<2) +#define FLAG_t (FORCED_FLAG<<3) +#define FLAG_n (FORCED_FLAG<<4) +#endif + +#ifdef FOR_wc +#ifndef TT +#define TT this.wc +#endif +#define FLAG_l (1<<0) +#define FLAG_w (1<<1) +#define FLAG_c (1<<2) +#define FLAG_m (1<<3) +#endif + +#ifdef FOR_wget +#ifndef TT +#define TT this.wget +#endif +#define FLAG_O (FORCED_FLAG<<0) +#define FLAG_no_check_certificate (FORCED_FLAG<<1) +#endif + +#ifdef FOR_which +#ifndef TT +#define TT this.which +#endif +#define FLAG_a (1<<0) +#endif + +#ifdef FOR_who +#ifndef TT +#define TT this.who +#endif +#define FLAG_a (FORCED_FLAG<<0) +#endif + +#ifdef FOR_xargs +#ifndef TT +#define TT this.xargs +#endif +#define FLAG_0 (1<<0) +#define FLAG_s (1<<1) +#define FLAG_n (1<<2) +#define FLAG_r (1<<3) +#define FLAG_t (1<<4) +#define FLAG_p (1<<5) +#define FLAG_o (1<<6) +#define FLAG_P (1<<7) +#define FLAG_E (1<<8) +#endif + +#ifdef FOR_xxd +#ifndef TT +#define TT this.xxd +#endif +#define FLAG_s (1<<0) +#define FLAG_r (1<<1) +#define FLAG_p (1<<2) +#define FLAG_i (1<<3) +#define FLAG_g (1<<4) +#define FLAG_o (1<<5) +#define FLAG_l (1<<6) +#define FLAG_c (1<<7) +#endif + +#ifdef FOR_xzcat +#ifndef TT +#define TT this.xzcat +#endif +#endif + +#ifdef FOR_yes +#ifndef TT +#define TT this.yes +#endif +#endif + +#ifdef FOR_zcat +#ifndef TT +#define TT this.zcat +#endif +#define FLAG_9 (1<<0) +#define FLAG_8 (1<<1) +#define FLAG_7 (1<<2) +#define FLAG_6 (1<<3) +#define FLAG_5 (1<<4) +#define FLAG_4 (1<<5) +#define FLAG_3 (1<<6) +#define FLAG_2 (1<<7) +#define FLAG_1 (1<<8) +#define FLAG_k (1<<9) +#define FLAG_f (1<<10) +#define FLAG_d (1<<11) +#define FLAG_c (1<<12) +#endif + diff --git a/aosp/external/toybox/android/linux/generated/globals.h b/aosp/external/toybox/android/linux/generated/globals.h new file mode 100644 index 0000000000000000000000000000000000000000..4a201bf0354b587fc3eae3f1e7a353d2aaf7dbe1 --- /dev/null +++ b/aosp/external/toybox/android/linux/generated/globals.h @@ -0,0 +1,1664 @@ +// toys/android/log.c + +struct log_data { + char *t, *p; +}; + +// toys/example/demo_number.c + +struct demo_number_data { + long D; +}; + +// toys/example/hello.c + +struct hello_data { + int unused; +}; + +// toys/example/skeleton.c + +struct skeleton_data { + union { + struct { + char *b; + long c; + struct arg_list *d; + long e; + char *also, *blubber; + } s; + struct { + long b; + } a; + }; + + int more_globals; +}; + +// toys/lsb/dmesg.c + +struct dmesg_data { + long n, s; + + int use_color; + time_t tea; +}; + +// toys/lsb/gzip.c + +struct gzip_data { + int level; +}; + +// toys/lsb/hostname.c + +struct hostname_data { + char *F; +}; + +// toys/lsb/killall.c + +struct killall_data { + char *s; + + int signum; + pid_t cur_pid; + char **names; + short *err; + struct int_list { struct int_list *next; int val; } *pids; +}; + +// toys/lsb/md5sum.c + +struct md5sum_data { + int sawline; + + // Crypto variables blanked after summing + unsigned state[5]; + unsigned oldstate[5]; + uint64_t count; + union { + char c[64]; + unsigned i[16]; + } buffer; +}; + +// toys/lsb/mknod.c + +struct mknod_data { + char *Z, *m; +}; + +// toys/lsb/mktemp.c + +struct mktemp_data { + char *p, *tmpdir; +}; + +// toys/lsb/mount.c + +struct mount_data { + struct arg_list *optlist; + char *type; + char *bigO; + + unsigned long flags; + char *opts; + int okuser; +}; + +// toys/lsb/passwd.c + +struct passwd_data { + char *a; +}; + +// toys/lsb/pidof.c + +struct pidof_data { + char *omit; +}; + +// toys/lsb/seq.c + +struct seq_data { + char *s, *f; + + int precision; +}; + +// toys/lsb/su.c + +struct su_data { + char *s; + char *c; +}; + +// toys/lsb/umount.c + +struct umount_data { + struct arg_list *t; + + char *types; +}; + +// toys/net/ftpget.c + +struct ftpget_data { + char *u, *p, *P; + + int fd; +}; + +// toys/net/ifconfig.c + +struct ifconfig_data { + int sockfd; +}; + +// toys/net/microcom.c + +struct microcom_data { + char *s; + + int fd; + struct termios original_stdin_state, original_fd_state; +}; + +// toys/net/netcat.c + +struct netcat_data { + char *f, *s; + long q, p, W, w; +}; + +// toys/net/netstat.c + +struct netstat_data { + struct num_cache *inodes; + int wpad; +};; + +// toys/net/ping.c + +struct ping_data { + char *I; + long w, W, i, s, c, t, m; + + struct sockaddr *sa; + int sock; + unsigned long sent, recv, fugit, min, max; +}; + +// toys/net/sntp.c + +struct sntp_data { + long r, t; + char *p, *m, *M; +}; + +// toys/net/tunctl.c + +struct tunctl_data { + char *u; +}; + +// toys/other/acpi.c + +struct acpi_data { + int ac, bat, therm, cool; + char *cpath; +}; + +// toys/other/base64.c + +struct base64_data { + long w; + + unsigned total; +}; + +// toys/other/blkid.c + +struct blkid_data { + struct arg_list *s; +}; + +// toys/other/blockdev.c + +struct blockdev_data { + long setbsz, setra; +}; + +// toys/other/chrt.c + +struct chrt_data { + long p; +}; + +// toys/other/dos2unix.c + +struct dos2unix_data { + char *tempfile; +}; + +// toys/other/fallocate.c + +struct fallocate_data { + long o, l; +}; + +// toys/other/fmt.c + +struct fmt_data { + int width; + + int level, pos; +}; + +// toys/other/free.c + +struct free_data { + unsigned bits; + unsigned long long units; + char *buf; +}; + +// toys/other/hexedit.c + +struct hexedit_data { + char *data; + long long len, base; + int numlen, undo, undolen; + unsigned height; +}; + +// toys/other/hwclock.c + +struct hwclock_data { + char *f; + + int utc; +}; + +// toys/other/ionice.c + +struct ionice_data { + long p, n, c; +}; + +// toys/other/login.c + +struct login_data { + char *h, *f; + + int login_timeout, login_fail_timeout; +}; + +// toys/other/losetup.c + +struct losetup_data { + char *j; + long o, S; + + int openflags; + dev_t jdev; + ino_t jino; + char *dir; +}; + +// toys/other/lsattr.c + +struct lsattr_data { + long v; + long p; + + long add, rm, set; + // !add and !rm tell us whether they were used, but `chattr =` is meaningful. + int have_set; +}; + +// toys/other/lspci.c + +struct lspci_data { + char *i; + long n; + + FILE *db; +}; + +// toys/other/makedevs.c + +struct makedevs_data { + char *d; +}; + +// toys/other/mix.c + +struct mix_data { + long r, l; + char *d, *c; +}; + +// toys/other/mkpasswd.c + +struct mkpasswd_data { + long P; + char *m, *S; +}; + +// toys/other/mkswap.c + +struct mkswap_data { + char *L; +}; + +// toys/other/modinfo.c + +struct modinfo_data { + char *F, *k, *b; + + long mod; + int count; +}; + +// toys/other/nsenter.c + +struct nsenter_data { + char *Uupnmi[6]; + long t; +}; + +// toys/other/oneit.c + +struct oneit_data { + char *c; +}; + +// toys/other/setfattr.c + +struct setfattr_data { + char *x, *v, *n; +}; + +// toys/other/shred.c + +struct shred_data { + long o, n, s; +}; + +// toys/other/stat.c + +struct stat_data { + char *c; + + union { + struct stat st; + struct statfs sf; + } stat; + char *file, *pattern; + int patlen; +}; + +// toys/other/swapon.c + +struct swapon_data { + long p; +}; + +// toys/other/switch_root.c + +struct switch_root_data { + char *c; + + dev_t rootdev; +}; + +// toys/other/tac.c + +struct tac_data { + struct double_list *dl; +}; + +// toys/other/timeout.c + +struct timeout_data { + char *s, *k; + + int nextsig; + pid_t pid; + struct timeval ktv; + struct itimerval itv; +}; + +// toys/other/truncate.c + +struct truncate_data { + char *s; + + long size; + int type; +}; + +// toys/other/watch.c + +struct watch_data { + int n; + + pid_t pid, oldpid; +}; + +// toys/other/xxd.c + +struct xxd_data { + long s, g, o, l, c; +}; + +// toys/pending/arp.c + +struct arp_data { + char *hw_type; + char *af_type_A; + char *af_type_p; + char *interface; + + int sockfd; + char *device; +}; + +// toys/pending/arping.c + +struct arping_data { + long count; + unsigned long time_out; + char *iface; + char *src_ip; + + int sockfd; + unsigned long start, end; + unsigned sent_at, sent_nr, rcvd_nr, brd_sent, rcvd_req, brd_rcv, + unicast_flag; +}; + +// toys/pending/bc.c + +struct bc_data { + // This actually needs to be a BcVm*, but the toybox build + // system complains if I make it so. Instead, we'll just cast. + char *vm; + + size_t nchars; + char *file, sig, max_ibase; + uint16_t line_len; +}; + +// toys/pending/bootchartd.c + +struct bootchartd_data { + char buf[32]; + long smpl_period_usec; + int proc_accounting; + int is_login; + + pid_t cur_pid; +}; + +// toys/pending/brctl.c + +struct brctl_data { + int sockfd; +}; + +// toys/pending/crond.c + +struct crond_data { + char *crontabs_dir; + char *logfile; + int loglevel_d; + int loglevel; + + time_t crontabs_dir_mtime; + uint8_t flagd; +}; + +// toys/pending/crontab.c + +struct crontab_data { + char *user; + char *cdir; +}; + +// toys/pending/dd.c + +struct dd_data { + int show_xfer, show_records; + unsigned long long bytes, c_count, in_full, in_part, out_full, out_part; + struct timeval start; + struct { + char *name; + int fd; + unsigned char *buff, *bp; + long sz, count; + unsigned long long offset; + } in, out; + unsigned conv, iflag, oflag; +};; + +// toys/pending/dhcp.c + +struct dhcp_data { + char *iface; + char *pidfile; + char *script; + long retries; + long timeout; + long tryagain; + struct arg_list *req_opt; + char *req_ip; + struct arg_list *pkt_opt; + char *fdn_name; + char *hostname; + char *vendor_cls; +}; + +// toys/pending/dhcp6.c + +struct dhcp6_data { + char *interface_name, *pidfile, *script; + long retry, timeout, errortimeout; + char *req_ip; + int length, state, request_length, sock, sock1, status, retval, retries; + struct timeval tv; + uint8_t transction_id[3]; + struct sockaddr_in6 input_socket6; +}; + +// toys/pending/dhcpd.c + +struct dhcpd_data { + char *iface; + long port; +};; + +// toys/pending/diff.c + +struct diff_data { + long ct; + char *start; + struct arg_list *L_list; + + int dir_num, size, is_binary, status, change, len[2]; + int *offset[2]; + struct stat st[2]; +}; + +// toys/pending/dumpleases.c + +struct dumpleases_data { + char *file; +}; + +// toys/pending/expr.c + +struct expr_data { + char **tok; // current token, not on the stack since recursive calls mutate it + + char *refree; +}; + +// toys/pending/fdisk.c + +struct fdisk_data { + long sect_sz; + long sectors; + long heads; + long cylinders; +}; + +// toys/pending/fold.c + +struct fold_data { + int width; +}; + +// toys/pending/fsck.c + +struct fsck_data { + int fd_num; + char *t_list; + + struct double_list *devices; + char *arr_flag; + char **arr_type; + int negate; + int sum_status; + int nr_run; + int sig_num; + long max_nr_run; +}; + +// toys/pending/getfattr.c + +struct getfattr_data { + char *n; +}; + +// toys/pending/getopt.c + +struct getopt_data { + struct arg_list *l; + char *o, *n; +}; + +// toys/pending/getty.c + +struct getty_data { + char *issue_str; + char *login_str; + char *init_str; + char *host_str; + long timeout; + + char *tty_name; + int speeds[20]; + int sc; + struct termios termios; + char buff[128]; +}; + +// toys/pending/groupadd.c + +struct groupadd_data { + long gid; +}; + +// toys/pending/host.c + +struct host_data { + char *type_str; +}; + +// toys/pending/ip.c + +struct ip_data { + char stats, singleline, flush, *filter_dev, gbuf[8192]; + int sockfd, connected, from_ok, route_cmd; + int8_t addressfamily, is_addr; +}; + +// toys/pending/ipcrm.c + +struct ipcrm_data { + struct arg_list *qkey; + struct arg_list *qid; + struct arg_list *skey; + struct arg_list *sid; + struct arg_list *mkey; + struct arg_list *mid; +}; + +// toys/pending/ipcs.c + +struct ipcs_data { + int id; +}; + +// toys/pending/klogd.c + +struct klogd_data { + long level; + + int fd; +}; + +// toys/pending/last.c + +struct last_data { + char *file; + + struct arg_list *list; +}; + +// toys/pending/lsof.c + +struct lsof_data { + struct arg_list *p; + + struct stat *sought_files; + struct double_list *all_sockets, *files; + int last_shown_pid, shown_header; +}; + +// toys/pending/man.c + +struct man_data { + char *M, *k; + + char any, cell, ex, *f, k_done, *line, *m, **sct, **scts, **sufs; + regex_t reg; +}; + +// toys/pending/mke2fs.c + +struct mke2fs_data { + // Command line arguments. + long blocksize; + long bytes_per_inode; + long inodes; // Total inodes in filesystem. + long reserved_percent; // Integer precent of space to reserve for root. + char *gendir; // Where to read dirtree from. + + // Internal data. + struct dirtree *dt; // Tree of files to copy into the new filesystem. + unsigned treeblocks; // Blocks used by dt + unsigned treeinodes; // Inodes used by dt + + unsigned blocks; // Total blocks in the filesystem. + unsigned freeblocks; // Free blocks in the filesystem. + unsigned inodespg; // Inodes per group + unsigned groups; // Total number of block groups. + unsigned blockbits; // Bits per block. (Also blocks per group.) + + // For gene2fs + unsigned nextblock; // Next data block to allocate + unsigned nextgroup; // Next group we'll be allocating from + int fsfd; // File descriptor of filesystem (to output to). +}; + +// toys/pending/modprobe.c + +struct modprobe_data { + struct arg_list *dirs; + + struct arg_list *probes; + struct arg_list *dbase[256]; + char *cmdopts; + int nudeps; + uint8_t symreq; +}; + +// toys/pending/more.c + +struct more_data { + struct termios inf; + int cin_fd; +}; + +// toys/pending/openvt.c + +struct openvt_data { + unsigned long vt_num; +}; + +// toys/pending/readelf.c + +struct readelf_data { + char *x, *p; + + char *elf, *shstrtab, *f; + long long shoff, phoff, size; + int bits, shnum, shentsize, phentsize; + int64_t (*elf_int)(void *ptr, unsigned size); +}; + +// toys/pending/route.c + +struct route_data { + char *family; +}; + +// toys/pending/sh.c + +struct sh_data { + char *c; + + long lineno; + char **locals, *subshell_env; + struct double_list functions; + unsigned options, jobcnt, loc_ro, loc_magic; + int hfd; // next high filehandle (>= 10) + + // Running jobs. + struct sh_job { + struct sh_job *next, *prev; + unsigned jobno; + + // Every pipeline has at least one set of arguments or it's Not A Thing + struct sh_arg { + char **v; + int c; + } pipeline; + + // null terminated array of running processes in pipeline + struct sh_process { + struct sh_process *next, *prev; + struct arg_list *delete; // expanded strings + int *urd, envlen, pid, exit; // undo redirects, child PID, exit status + struct sh_arg arg; + } *procs, *proc; + } *jobs, *job; +}; + +// toys/pending/stty.c + +struct stty_data { + char *device; + + int fd, col; + unsigned output_cols; +}; + +// toys/pending/sulogin.c + +struct sulogin_data { + long timeout; + struct termios crntio; +}; + +// toys/pending/syslogd.c + +struct syslogd_data { + char *socket; + char *config_file; + char *unix_socket; + char *logfile; + long interval; + long rot_size; + long rot_count; + char *remote_log; + long log_prio; + + struct unsocks *lsocks; // list of listen sockets + struct logfile *lfiles; // list of write logfiles + int sigfd[2]; +}; + +// toys/pending/tcpsvd.c + +struct tcpsvd_data { + char *name; + char *user; + long bn; + char *nmsg; + long cn; + + int maxc; + int count_all; + int udp; +}; + +// toys/pending/telnet.c + +struct telnet_data { + int port; + int sfd; + char buff[128]; + int pbuff; + char iac[256]; + int piac; + char *ttype; + struct termios def_term; + struct termios raw_term; + uint8_t term_ok; + uint8_t term_mode; + uint8_t flags; + unsigned win_width; + unsigned win_height; +}; + +// toys/pending/telnetd.c + +struct telnetd_data { + char *login_path; + char *issue_path; + int port; + char *host_addr; + long w_sec; + + int gmax_fd; + pid_t fork_pid; +}; + +// toys/pending/tftp.c + +struct tftp_data { + char *local_file; + char *remote_file; + long block_size; + + struct sockaddr_storage inaddr; + int af; +}; + +// toys/pending/tftpd.c + +struct tftpd_data { + char *user; + + long sfd; + struct passwd *pw; +}; + +// toys/pending/tr.c + +struct tr_data { + short map[256]; //map of chars + int len1, len2; +}; + +// toys/pending/traceroute.c + +struct traceroute_data { + long max_ttl; + long port; + long ttl_probes; + char *src_ip; + long tos; + long wait_time; + struct arg_list *loose_source; + long pause_time; + long first_ttl; + char *iface; + + uint32_t gw_list[9]; + int recv_sock; + int snd_sock; + unsigned msg_len; + char *packet; + uint32_t ident; + int istraceroute6; +}; + +// toys/pending/useradd.c + +struct useradd_data { + char *dir; + char *gecos; + char *shell; + char *u_grp; + long uid; + + long gid; +}; + +// toys/pending/vi.c + +struct vi_data { + char *s; + int cur_col; + int cur_row; + int scr_row; + int drawn_row; + int drawn_col; + unsigned screen_height; + unsigned screen_width; + int vi_mode; + int count0; + int count1; + int vi_mov_flag; + int modified; + char vi_reg; + char *last_search; + int tabstop; + int list; + struct str_line { + int alloc; + int len; + char *data; + } *il; + size_t screen; //offset in slices must be higher than cursor + size_t cursor; //offset in slices + //yank buffer + struct yank_buf { + char reg; + int alloc; + char* data; + } yank; + +// mem_block contains RO data that is either original file as mmap +// or heap allocated inserted data +// +// +// + struct block_list { + struct block_list *next, *prev; + struct mem_block { + size_t size; + size_t len; + enum alloc_flag { + MMAP, //can be munmap() before exit() + HEAP, //can be free() before exit() + STACK, //global or stack perhaps toybuf + } alloc; + const char *data; + } *node; + } *text; + +// slices do not contain actual allocated data but slices of data in mem_block +// when file is first opened it has only one slice. +// after inserting data into middle new mem_block is allocated for insert data +// and 3 slices are created, where first and last slice are pointing to original +// mem_block with offsets, and middle slice is pointing to newly allocated block +// When deleting, data is not freed but mem_blocks are sliced more such way that +// deleted data left between 2 slices + struct slice_list { + struct slice_list *next, *prev; + struct slice { + size_t len; + const char *data; + } *node; + } *slices; + + size_t filesize; + int fd; //file_handle + +}; + +// toys/pending/wget.c + +struct wget_data { + char *filename; +}; + +// toys/posix/basename.c + +struct basename_data { + char *s; +}; + +// toys/posix/cal.c + +struct cal_data { + struct tm *now; +}; + +// toys/posix/chgrp.c + +struct chgrp_data { + uid_t owner; + gid_t group; + char *owner_name, *group_name; + int symfollow; +}; + +// toys/posix/chmod.c + +struct chmod_data { + char *mode; +}; + +// toys/posix/cksum.c + +struct cksum_data { + unsigned crc_table[256]; +}; + +// toys/posix/cmp.c + +struct cmp_data { + int fd; + char *name; +}; + +// toys/posix/cp.c + +struct cp_data { + union { + // install's options + struct { + char *g, *o, *m; + } i; + // cp's options + struct { + char *preserve; + } c; + }; + + char *destname; + struct stat top; + int (*callback)(struct dirtree *try); + uid_t uid; + gid_t gid; + int pflags; +}; + +// toys/posix/cpio.c + +struct cpio_data { + char *F, *p, *H; +}; + +// toys/posix/cut.c + +struct cut_data { + char *d, *O; + struct arg_list *select[5]; // we treat them the same, so loop through + + int pairs; + regex_t reg; +}; + +// toys/posix/date.c + +struct date_data { + char *r, *D, *d; + + unsigned nano; +}; + +// toys/posix/df.c + +struct df_data { + struct arg_list *t; + + long units; + int column_widths[5]; + int header_shown; +}; + +// toys/posix/du.c + +struct du_data { + long d; + + unsigned long depth, total; + dev_t st_dev; + void *inodes; +}; + +// toys/posix/env.c + +struct env_data { + struct arg_list *u; +};; + +// toys/posix/expand.c + +struct expand_data { + struct arg_list *t; + + unsigned tabcount, *tab; +}; + +// toys/posix/file.c + +struct file_data { + int max_name_len; + + off_t len; +}; + +// toys/posix/find.c + +struct find_data { + char **filter; + struct double_list *argdata; + int topdir, xdev, depth; + time_t now; + long max_bytes; + char *start; +}; + +// toys/posix/grep.c + +struct grep_data { + long m, A, B, C; + struct arg_list *f, *e, *M, *S, *exclude_dir; + char *color; + + char *purple, *cyan, *red, *green, *grey; + struct double_list *reg; + char indelim, outdelim; + int found, tried; +}; + +// toys/posix/head.c + +struct head_data { + long c, n; + + int file_no; +}; + +// toys/posix/iconv.c + +struct iconv_data { + char *f, *t; + + void *ic; +}; + +// toys/posix/id.c + +struct id_data { + int is_groups; +}; + +// toys/posix/kill.c + +struct kill_data { + char *s; + struct arg_list *o; +}; + +// toys/posix/ln.c + +struct ln_data { + char *t; +}; + +// toys/posix/logger.c + +struct logger_data { + char *p, *t; +}; + +// toys/posix/ls.c + +struct ls_data { + long w; + long l; + char *color; + + struct dirtree *files, *singledir; + unsigned screen_width; + int nl_title; + char *escmore; +}; + +// toys/posix/mkdir.c + +struct mkdir_data { + char *m, *Z; +}; + +// toys/posix/mkfifo.c + +struct mkfifo_data { + char *m; + char *Z; + + mode_t mode; +}; + +// toys/posix/nice.c + +struct nice_data { + long n; +}; + +// toys/posix/nl.c + +struct nl_data { + char *s, *n, *b; + long w, l, v; + + // Count of consecutive blank lines for -l has to persist between files + long lcount; + long slen; +}; + +// toys/posix/od.c + +struct od_data { + struct arg_list *t; + char *A; + long N, w, j; + + int address_idx; + unsigned types, leftover, star; + char *buf; // Points to buffers[0] or buffers[1]. + char *bufs[2]; // Used to detect duplicate lines. + off_t pos; +}; + +// toys/posix/paste.c + +struct paste_data { + char *d; + + int files; +}; + +// toys/posix/patch.c + +struct patch_data { + char *i, *d; + long p, g, F; + + void *current_hunk; + long oldline, oldlen, newline, newlen, linenum, outnum; + int context, state, filein, fileout, filepatch, hunknum; + char *tempname; +}; + +// toys/posix/ps.c + +struct ps_data { + union { + struct { + struct arg_list *G, *g, *U, *u, *t, *s, *p, *O, *o, *P, *k; + } ps; + struct { + long n, m, d, s; + struct arg_list *u, *p, *o, *k, *O; + } top; + struct { + char *L; + struct arg_list *G, *g, *P, *s, *t, *U, *u; + char *d; + + void *regexes, *snapshot; + int signal; + pid_t self, match; + } pgrep; + }; + + struct ptr_len gg, GG, pp, PP, ss, tt, uu, UU; + struct dirtree *threadparent; + unsigned width, height; + dev_t tty; + void *fields, *kfields; + long long ticks, bits, time; + int kcount, forcek, sortpos; + int (*match_process)(long long *slot); + void (*show_process)(void *tb); +}; + +// toys/posix/renice.c + +struct renice_data { + long n; +}; + +// toys/posix/sed.c + +struct sed_data { + char *i; + struct arg_list *f, *e; + + // processed pattern list + struct double_list *pattern; + + char *nextline, *remember; + void *restart, *lastregex; + long nextlen, rememberlen, count; + int fdout, noeol; + unsigned xx; + char delim; +}; + +// toys/posix/sort.c + +struct sort_data { + char *t; + struct arg_list *k; + char *o, *T, S; + + void *key_list; + int linecount; + char **lines, *name; +}; + +// toys/posix/split.c + +struct split_data { + long l, b, a; + + char *outfile; +}; + +// toys/posix/strings.c + +struct strings_data { + long n; + char *t; +}; + +// toys/posix/tail.c + +struct tail_data { + long n, c; + + int file_no, last_fd; + struct xnotify *not; +}; + +// toys/posix/tar.c + +struct tar_data { + char *f, *C; + struct arg_list *T, *X; + char *to_command, *owner, *group, *mtime, *mode; + struct arg_list *exclude; + + struct double_list *incl, *excl, *seen; + struct string_list *dirs; + char *cwd; + int fd, ouid, ggid, hlc, warn, adev, aino, sparselen; + long long *sparse; + time_t mtt; + + // hardlinks seen so far (hlc many) + struct { + char *arg; + ino_t ino; + dev_t dev; + } *hlx; + + // Parsed information about a tar header. + struct tar_header { + char *name, *link_target, *uname, *gname; + long long size, ssize; + uid_t uid; + gid_t gid; + mode_t mode; + time_t mtime; + dev_t device; + } hdr; +}; + +// toys/posix/tee.c + +struct tee_data { + void *outputs; +}; + +// toys/posix/touch.c + +struct touch_data { + char *t, *r, *d; +}; + +// toys/posix/ulimit.c + +struct ulimit_data { + long P; +}; + +// toys/posix/uniq.c + +struct uniq_data { + long w, s, f; + + long repeats; +}; + +// toys/posix/uudecode.c + +struct uudecode_data { + char *o; +}; + +// toys/posix/wc.c + +struct wc_data { + unsigned long totals[4]; +}; + +// toys/posix/xargs.c + +struct xargs_data { + long s, n, P; + char *E; + + long entries, bytes; + char delim; + FILE *tty; +}; + +extern union global_union { + struct log_data log; + struct demo_number_data demo_number; + struct hello_data hello; + struct skeleton_data skeleton; + struct dmesg_data dmesg; + struct gzip_data gzip; + struct hostname_data hostname; + struct killall_data killall; + struct md5sum_data md5sum; + struct mknod_data mknod; + struct mktemp_data mktemp; + struct mount_data mount; + struct passwd_data passwd; + struct pidof_data pidof; + struct seq_data seq; + struct su_data su; + struct umount_data umount; + struct ftpget_data ftpget; + struct ifconfig_data ifconfig; + struct microcom_data microcom; + struct netcat_data netcat; + struct netstat_data netstat; + struct ping_data ping; + struct sntp_data sntp; + struct tunctl_data tunctl; + struct acpi_data acpi; + struct base64_data base64; + struct blkid_data blkid; + struct blockdev_data blockdev; + struct chrt_data chrt; + struct dos2unix_data dos2unix; + struct fallocate_data fallocate; + struct fmt_data fmt; + struct free_data free; + struct hexedit_data hexedit; + struct hwclock_data hwclock; + struct ionice_data ionice; + struct login_data login; + struct losetup_data losetup; + struct lsattr_data lsattr; + struct lspci_data lspci; + struct makedevs_data makedevs; + struct mix_data mix; + struct mkpasswd_data mkpasswd; + struct mkswap_data mkswap; + struct modinfo_data modinfo; + struct nsenter_data nsenter; + struct oneit_data oneit; + struct setfattr_data setfattr; + struct shred_data shred; + struct stat_data stat; + struct swapon_data swapon; + struct switch_root_data switch_root; + struct tac_data tac; + struct timeout_data timeout; + struct truncate_data truncate; + struct watch_data watch; + struct xxd_data xxd; + struct arp_data arp; + struct arping_data arping; + struct bc_data bc; + struct bootchartd_data bootchartd; + struct brctl_data brctl; + struct crond_data crond; + struct crontab_data crontab; + struct dd_data dd; + struct dhcp_data dhcp; + struct dhcp6_data dhcp6; + struct dhcpd_data dhcpd; + struct diff_data diff; + struct dumpleases_data dumpleases; + struct expr_data expr; + struct fdisk_data fdisk; + struct fold_data fold; + struct fsck_data fsck; + struct getfattr_data getfattr; + struct getopt_data getopt; + struct getty_data getty; + struct groupadd_data groupadd; + struct host_data host; + struct ip_data ip; + struct ipcrm_data ipcrm; + struct ipcs_data ipcs; + struct klogd_data klogd; + struct last_data last; + struct lsof_data lsof; + struct man_data man; + struct mke2fs_data mke2fs; + struct modprobe_data modprobe; + struct more_data more; + struct openvt_data openvt; + struct readelf_data readelf; + struct route_data route; + struct sh_data sh; + struct stty_data stty; + struct sulogin_data sulogin; + struct syslogd_data syslogd; + struct tcpsvd_data tcpsvd; + struct telnet_data telnet; + struct telnetd_data telnetd; + struct tftp_data tftp; + struct tftpd_data tftpd; + struct tr_data tr; + struct traceroute_data traceroute; + struct useradd_data useradd; + struct vi_data vi; + struct wget_data wget; + struct basename_data basename; + struct cal_data cal; + struct chgrp_data chgrp; + struct chmod_data chmod; + struct cksum_data cksum; + struct cmp_data cmp; + struct cp_data cp; + struct cpio_data cpio; + struct cut_data cut; + struct date_data date; + struct df_data df; + struct du_data du; + struct env_data env; + struct expand_data expand; + struct file_data file; + struct find_data find; + struct grep_data grep; + struct head_data head; + struct iconv_data iconv; + struct id_data id; + struct kill_data kill; + struct ln_data ln; + struct logger_data logger; + struct ls_data ls; + struct mkdir_data mkdir; + struct mkfifo_data mkfifo; + struct nice_data nice; + struct nl_data nl; + struct od_data od; + struct paste_data paste; + struct patch_data patch; + struct ps_data ps; + struct renice_data renice; + struct sed_data sed; + struct sort_data sort; + struct split_data split; + struct strings_data strings; + struct tail_data tail; + struct tar_data tar; + struct tee_data tee; + struct touch_data touch; + struct ulimit_data ulimit; + struct uniq_data uniq; + struct uudecode_data uudecode; + struct wc_data wc; + struct xargs_data xargs; +} this; diff --git a/aosp/external/toybox/android/linux/generated/help.h b/aosp/external/toybox/android/linux/generated/help.h new file mode 100644 index 0000000000000000000000000000000000000000..6621ed1cf814c8b0b039347dd5ad12987e2fb21c --- /dev/null +++ b/aosp/external/toybox/android/linux/generated/help.h @@ -0,0 +1,614 @@ +#define HELP_toybox_force_nommu "When using musl-libc on a nommu system, you'll need to say \"y\" here\nunless you used the patch in the mcm-buildall.sh script. You can also\nsay \"y\" here to test the nommu codepaths on an mmu system.\n\nA nommu system can't use fork(), it can only vfork() which suspends\nthe parent until the child calls exec() or exits. When a program\nneeds a second instance of itself to run specific code at the same\ntime as the parent, it must use a more complicated approach (such as\nexec(\"/proc/self/exe\") then pass data to the new child through a pipe)\nwhich is larger and slower, especially for things like toysh subshells\nthat need to duplicate a lot of internal state in the child process\nfork() gives you for free.\n\nLibraries like uclibc omit fork() on nommu systems, allowing\ncompile-time probes to select which codepath to use. But musl\nintentionally includes a broken version of fork() that always returns\n-ENOSYS on nommu systems, and goes out of its way to prevent any\ncross-compile compatible compile-time probes for a nommu system.\n(It doesn't even #define __MUSL__ in features.h.) Musl does this\ndespite the fact that a nommu system can't even run standard ELF\nbinaries (requiring specially packaged executables) because it wants\nto force every program to either include all nommu code in every\ninstance ever built, or drop nommu support altogether.\n\nBuilding a toolchain scripts/mcm-buildall.sh patches musl to fix this." + +#define HELP_toybox_uid_usr "When commands like useradd/groupadd allocate user IDs, start here." + +#define HELP_toybox_uid_sys "When commands like useradd/groupadd allocate system IDs, start here." + +#define HELP_toybox_pedantic_args "Check arguments for commands that have no arguments." + +#define HELP_toybox_debug "Enable extra checks for debugging purposes. All of them catch\nthings that can only go wrong at development time, not runtime." + +#define HELP_toybox_norecurse "When one toybox command calls another, usually it just calls the new\ncommand's main() function rather than searching the $PATH and calling\nexec on another file (which is much slower).\n\nThis disables that optimization, so toybox will run external commands\n even when it has a built-in version of that command. This requires\n toybox symlinks to be installed in the $PATH, or re-invoking the\n \"toybox\" multiplexer command by name." + +#define HELP_toybox_free "When a program exits, the operating system will clean up after it\n(free memory, close files, etc). To save size, toybox usually relies\non this behavior. If you're running toybox under a debugger or\nwithout a real OS (ala newlib+libgloss), enable this to make toybox\nclean up after itself." + +#define HELP_toybox_i18n "Support for UTF-8 character sets, and some locale support." + +#define HELP_toybox_help_dashdash "Support --help argument in all commands, even ones with a NULL\noptstring. (Use TOYFLAG_NOHELP to disable.) Produces the same output\nas \"help command\". --version shows toybox version." + +#define HELP_toybox_help "Include help text for each command." + +#define HELP_toybox_float "Include floating point support infrastructure and commands that\nrequire it." + +#define HELP_toybox_libz "Use libz for gz support." + +#define HELP_toybox_libcrypto "Use faster hash functions out of external -lcrypto library." + +#define HELP_toybox_smack "Include SMACK options in commands like ls for systems like Tizen." + +#define HELP_toybox_selinux "Include SELinux options in commands such as ls, and add\nSELinux-specific commands such as chcon to the Android menu." + +#define HELP_toybox_lsm_none "Don't try to achieve \"watertight\" by plugging the holes in a\ncollander, instead use conventional unix security (and possibly\nLinux Containers) for a simple straightforward system." + +#define HELP_toybox_suid "Support for the Set User ID bit, to install toybox suid root and drop\npermissions for commands which do not require root access. To use\nthis change ownership of the file to the root user and set the suid\nbit in the file permissions:\n\nchown root:root toybox; chmod +s toybox\n\nprompt \"Security Blanket\"\ndefault TOYBOX_LSM_NONE\nhelp\nSelect a Linux Security Module to complicate your system\nuntil you can't find holes in it." + +#define HELP_toybox "usage: toybox [--long | --help | --version | [command] [arguments...]]\n\nWith no arguments, shows available commands. First argument is\nname of a command to run, followed by any arguments to that command.\n\n--long Show path to each command\n\nTo install command symlinks with paths, try:\n for i in $(/bin/toybox --long); do ln -s /bin/toybox $i; done\nor all in one directory:\n for i in $(./toybox); do ln -s toybox $i; done; PATH=$PWD:$PATH\n\nMost toybox commands also understand the following arguments:\n\n--help Show command help (only)\n--version Show toybox version (only)\n\nThe filename \"-\" means stdin/stdout, and \"--\" stops argument parsing.\n\nNumerical arguments accept a single letter suffix for\nkilo, mega, giga, tera, peta, and exabytes, plus an additional\n\"d\" to indicate decimal 1000's instead of 1024.\n\nDurations can be decimal fractions and accept minute (\"m\"), hour (\"h\"),\nor day (\"d\") suffixes (so 0.1m = 6s)." + +#define HELP_setenforce "usage: setenforce [enforcing|permissive|1|0]\n\nSets whether SELinux is enforcing (1) or permissive (0)." + +#define HELP_sendevent "usage: sendevent DEVICE TYPE CODE VALUE\n\nSends a Linux input event." + +#define HELP_runcon "usage: runcon CONTEXT COMMAND [ARGS...]\n\nRun a command in a specified security context." + +#define HELP_restorecon "usage: restorecon [-D] [-F] [-R] [-n] [-v] FILE...\n\nRestores the default security contexts for the given files.\n\n-D Apply to /data/data too\n-F Force reset\n-R Recurse into directories\n-n Don't make any changes; useful with -v to see what would change\n-v Verbose" + +#define HELP_log "usage: log [-p PRI] [-t TAG] MESSAGE...\n\nLogs message to logcat.\n\n-p Use the given priority instead of INFO:\n d: DEBUG e: ERROR f: FATAL i: INFO v: VERBOSE w: WARN s: SILENT\n-t Use the given tag instead of \"log\"" + +#define HELP_load_policy "usage: load_policy FILE\n\nLoad the specified SELinux policy file." + +#define HELP_getenforce "usage: getenforce\n\nShows whether SELinux is disabled, enforcing, or permissive." + +#define HELP_skeleton_alias "usage: skeleton_alias [-dq] [-b NUMBER]\n\nExample of a second command with different arguments in the same source\nfile as the first. This allows shared infrastructure not added to lib/." + +#define HELP_skeleton "usage: skeleton [-a] [-b STRING] [-c NUMBER] [-d LIST] [-e COUNT] [...]\n\nTemplate for new commands. You don't need this.\n\nWhen creating a new command, copy this file and delete the parts you\ndon't need. Be sure to replace all instances of \"skeleton\" (upper and lower\ncase) with your new command name.\n\nFor simple commands, \"hello.c\" is probably a better starting point." + +#define HELP_logwrapper "usage: logwrapper ...\n\nAppend command line to $WRAPLOG, then call second instance\nof command in $PATH." + +#define HELP_hostid "usage: hostid\n\nPrint the numeric identifier for the current host." + +#define HELP_hello "usage: hello\n\nA hello world program.\n\nMostly used as a simple template for adding new commands.\nOccasionally nice to smoketest kernel booting via \"init=/usr/bin/hello\"." + +#define HELP_demo_utf8towc "usage: demo_utf8towc\n\nPrint differences between toybox's utf8 conversion routines vs libc du jour." + +#define HELP_demo_scankey "usage: demo_scankey\n\nMove a letter around the screen. Hit ESC to exit." + +#define HELP_demo_number "usage: demo_number [-hsbi] NUMBER...\n\n-b Use \"B\" for single byte units (HR_B)\n-d Decimal units\n-h Human readable\n-s Space between number and units (HR_SPACE)" + +#define HELP_demo_many_options "usage: demo_many_options -[a-zA-Z]\n\nPrint the optflags value of the command arguments, in hex." + +#define HELP_umount "usage: umount [-a [-t TYPE[,TYPE...]]] [-vrfD] [DIR...]\n\nUnmount the listed filesystems.\n\n-a Unmount all mounts in /proc/mounts instead of command line list\n-D Don't free loopback device(s)\n-f Force unmount\n-l Lazy unmount (detach from filesystem now, close when last user does)\n-n Don't use /proc/mounts\n-r Remount read only if unmounting fails\n-t Restrict \"all\" to mounts of TYPE (or use \"noTYPE\" to skip)\n-v Verbose" + +#define HELP_sync "usage: sync\n\nWrite pending cached data to disk (synchronize), blocking until done." + +#define HELP_su "usage: su [-lp] [-u UID] [-g GID,...] [-s SHELL] [-c CMD] [USER [COMMAND...]]\n\nSwitch user, prompting for password of new user when not run as root.\n\nWith one argument, switch to USER and run user's shell from /etc/passwd.\nWith no arguments, USER is root. If COMMAND line provided after USER,\nexec() it as new USER (bypasing shell). If -u or -g specified, first\nargument (if any) isn't USER (it's COMMAND).\n\nfirst argument is USER name to switch to (which must exist).\nNon-root users are prompted for new user's password.\n\n-s Shell to use (default is user's shell from /etc/passwd)\n-c Command line to pass to -s shell (ala sh -c \"CMD\")\n-l Reset environment as if new login.\n-u Switch to UID instead of USER\n-g Switch to GID (only root allowed, can be comma separated list)\n-p Preserve environment (except for $PATH and $IFS)" + +#define HELP_seq "usage: seq [-w|-f fmt_str] [-s sep_str] [first] [increment] last\n\nCount from first to last, by increment. Omitted arguments default\nto 1. Two arguments are used as first and last. Arguments can be\nnegative or floating point.\n\n-f Use fmt_str as a printf-style floating point format string\n-s Use sep_str as separator, default is a newline character\n-w Pad to equal width with leading zeroes" + +#define HELP_pidof "usage: pidof [-s] [-o omitpid[,omitpid...]] [NAME]...\n\nPrint the PIDs of all processes with the given names.\n\n-s Single shot, only return one pid\n-o Omit PID(s)\n-x Match shell scripts too" + +#define HELP_passwd_sad "Password changes are checked to make sure they're at least 6 chars long,\ndon't include the entire username (but not a subset of it), or the entire\nprevious password (but changing password1, password2, password3 is fine).\nThis heuristic accepts \"aaaaaa\" and \"123456\"." + +#define HELP_passwd "usage: passwd [-a ALGO] [-dlu] [USER]\n\nUpdate user's authentication tokens. Defaults to current user.\n\n-a ALGO Encryption method (des, md5, sha256, sha512) default: des\n-d Set password to ''\n-l Lock (disable) account\n-u Unlock (enable) account" + +#define HELP_mount "usage: mount [-afFrsvw] [-t TYPE] [-o OPTION,] [[DEVICE] DIR]\n\nMount new filesystem(s) on directories. With no arguments, display existing\nmounts.\n\n-a Mount all entries in /etc/fstab (with -t, only entries of that TYPE)\n-O Only mount -a entries that have this option\n-f Fake it (don't actually mount)\n-r Read only (same as -o ro)\n-w Read/write (default, same as -o rw)\n-t Specify filesystem type\n-v Verbose\n\nOPTIONS is a comma separated list of options, which can also be supplied\nas --longopts.\n\nAutodetects loopback mounts (a file on a directory) and bind mounts (file\non file, directory on directory), so you don't need to say --bind or --loop.\nYou can also \"mount -a /path\" to mount everything in /etc/fstab under /path,\neven if it's noauto. DEVICE starting with UUID= is identified by blkid -U." + +#define HELP_mktemp "usage: mktemp [-dqu] [-p DIR] [TEMPLATE]\n\nSafely create a new file \"DIR/TEMPLATE\" and print its name.\n\n-d Create directory instead of file (--directory)\n-p Put new file in DIR (--tmpdir)\n-q Quiet, no error messages\n-t Prefer $TMPDIR > DIR > /tmp (default DIR > $TMPDIR > /tmp)\n-u Don't create anything, just print what would be created\n\nEach X in TEMPLATE is replaced with a random printable character. The\ndefault TEMPLATE is tmp.XXXXXXXXXX." + +#define HELP_mknod_z "usage: mknod [-Z CONTEXT] ...\n\n-Z Set security context to created file" + +#define HELP_mknod "usage: mknod [-m MODE] NAME TYPE [MAJOR MINOR]\n\nCreate a special file NAME with a given type. TYPE is b for block device,\nc or u for character device, p for named pipe (which ignores MAJOR/MINOR).\n\n-m Mode (file permissions) of new device, in octal or u+x format" + +#define HELP_sha512sum "See sha1sum" + +#define HELP_sha384sum "See sha1sum" + +#define HELP_sha256sum "See sha1sum" + +#define HELP_sha224sum "See sha1sum" + +#define HELP_sha1sum "usage: sha?sum [-bcs] [FILE]...\n\nCalculate sha hash for each input file, reading from stdin if none. Output\none hash (40 hex digits for sha1, 56 for sha224, 64 for sha256, 96 for sha384,\nand 128 for sha512) for each input file, followed by filename.\n\n-b Brief (hash only, no filename)\n-c Check each line of each FILE is the same hash+filename we'd output\n-s No output, exit status 0 if all hashes match, 1 otherwise" + +#define HELP_md5sum "usage: md5sum [-bcs] [FILE]...\n\nCalculate md5 hash for each input file, reading from stdin if none.\nOutput one hash (32 hex digits) for each input file, followed by filename.\n\n-b Brief (hash only, no filename)\n-c Check each line of each FILE is the same hash+filename we'd output\n-s No output, exit status 0 if all hashes match, 1 otherwise" + +#define HELP_killall "usage: killall [-l] [-iqv] [-SIGNAL|-s SIGNAL] PROCESS_NAME...\n\nSend a signal (default: TERM) to all processes with the given names.\n\n-i Ask for confirmation before killing\n-l Print list of all available signals\n-q Don't print any warnings or error messages\n-s Send SIGNAL instead of SIGTERM\n-v Report if the signal was successfully sent\n-w Wait until all signaled processes are dead" + +#define HELP_dnsdomainname "usage: dnsdomainname\n\nShow domain this system belongs to (same as hostname -d)." + +#define HELP_hostname "usage: hostname [-bdsf] [-F FILENAME] [newname]\n\nGet/set the current hostname.\n\n-b Set hostname to 'localhost' if otherwise unset\n-d Show DNS domain name (no host)\n-f Show fully-qualified name (host+domain, FQDN)\n-F Set hostname to contents of FILENAME\n-s Show short host name (no domain)" + +#define HELP_zcat "usage: zcat [FILE...]\n\nDecompress files to stdout. Like `gzip -dc`.\n\n-f Force: allow read from tty" + +#define HELP_gunzip "usage: gunzip [-cfk] [FILE...]\n\nDecompress files. With no files, decompresses stdin to stdout.\nOn success, the input files are removed and replaced by new\nfiles without the .gz suffix.\n\n-c Output to stdout (act as zcat)\n-f Force: allow read from tty\n-k Keep input files (default is to remove)" + +#define HELP_gzip "usage: gzip [-19cdfk] [FILE...]\n\nCompress files. With no files, compresses stdin to stdout.\nOn success, the input files are removed and replaced by new\nfiles with the .gz suffix.\n\n-c Output to stdout\n-d Decompress (act as gunzip)\n-f Force: allow overwrite of output file\n-k Keep input files (default is to remove)\n-# Compression level 1-9 (1:fastest, 6:default, 9:best)" + +#define HELP_dmesg "usage: dmesg [-Cc] [-r|-t|-T] [-n LEVEL] [-s SIZE] [-w]\n\nPrint or control the kernel ring buffer.\n\n-C Clear ring buffer without printing\n-c Clear ring buffer after printing\n-n Set kernel logging LEVEL (1-9)\n-r Raw output (with )\n-S Use syslog(2) rather than /dev/kmsg\n-s Show the last SIZE many bytes\n-T Human readable timestamps\n-t Don't print timestamps\n-w Keep waiting for more output (aka --follow)" + +#define HELP_tunctl "usage: tunctl [-dtT] [-u USER] NAME\n\nCreate and delete tun/tap virtual ethernet devices.\n\n-T Use tap (ethernet frames) instead of tun (ip packets)\n-d Delete tun/tap device\n-t Create tun/tap device\n-u Set owner (user who can read/write device without root access)" + +#define HELP_sntp "usage: sntp [-saSdDq] [-r SHIFT] [-mM[ADDRESS]] [-p PORT] [SERVER]\n\nSimple Network Time Protocol client. Query SERVER and display time.\n\n-p Use PORT (default 123)\n-s Set system clock suddenly\n-a Adjust system clock gradually\n-S Serve time instead of querying (bind to SERVER address if specified)\n-m Wait for updates from multicast ADDRESS (RFC 4330 default 224.0.1.1)\n-M Multicast server on ADDRESS (deault 224.0.0.1)\n-t TTL (multicast only, default 1)\n-d Daemonize (run in background re-querying )\n-D Daemonize but stay in foreground: re-query time every 1000 seconds\n-r Retry shift (every 1< expand to,\n / multiple rounding down, % multiple rounding up\nSIZE suffix: k=1024, m=1024^2, g=1024^3, t=1024^4, p=1024^5, e=1024^6" + +#define HELP_timeout "usage: timeout [-k DURATION] [-s SIGNAL] DURATION COMMAND...\n\nRun command line as a child process, sending child a signal if the\ncommand doesn't exit soon enough.\n\nDURATION can be a decimal fraction. An optional suffix can be \"m\"\n(minutes), \"h\" (hours), \"d\" (days), or \"s\" (seconds, the default).\n\n-s Send specified signal (default TERM)\n-k Send KILL signal if child still running this long after first signal\n-v Verbose\n--foreground Don't create new process group\n--preserve-status Exit with the child's exit status" + +#define HELP_taskset "usage: taskset [-ap] [mask] [PID | cmd [args...]]\n\nLaunch a new task which may only run on certain processors, or change\nthe processor affinity of an existing PID.\n\nMask is a hex string where each bit represents a processor the process\nis allowed to run on. PID without a mask displays existing affinity.\n\n-p Set/get the affinity of given PID instead of a new command\n-a Set/get the affinity of all threads of the PID" + +#define HELP_nproc "usage: nproc [--all]\n\nPrint number of processors.\n\n--all Show all processors, not just ones this task can run on" + +#define HELP_tac "usage: tac [FILE...]\n\nOutput lines in reverse order." + +#define HELP_sysctl "usage: sysctl [-aAeNnqw] [-p [FILE] | KEY[=VALUE]...]\n\nRead/write system control data (under /proc/sys).\n\n-a,A Show all values\n-e Don't warn about unknown keys\n-N Don't print key values\n-n Don't print key names\n-p Read values from FILE (default /etc/sysctl.conf)\n-q Don't show value after write\n-w Only write values (object to reading)" + +#define HELP_switch_root "usage: switch_root [-c /dev/console] NEW_ROOT NEW_INIT...\n\nUse from PID 1 under initramfs to free initramfs, chroot to NEW_ROOT,\nand exec NEW_INIT.\n\n-c Redirect console to device in NEW_ROOT\n-h Hang instead of exiting on failure (avoids kernel panic)" + +#define HELP_swapon "usage: swapon [-d] [-p priority] filename\n\nEnable swapping on a given device/file.\n\n-d Discard freed SSD pages\n-p Priority (highest priority areas allocated first)" + +#define HELP_swapoff "usage: swapoff swapregion\n\nDisable swapping on a given swapregion." + +#define HELP_stat "usage: stat [-tfL] [-c FORMAT] FILE...\n\nDisplay status of files or filesystems.\n\n-c Output specified FORMAT string instead of default\n-f Display filesystem status instead of file status\n-L Follow symlinks\n-t terse (-c \"%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %o\")\n (with -f = -c \"%n %i %l %t %s %S %b %f %a %c %d\")\n\nThe valid format escape sequences for files:\n%a Access bits (octal) |%A Access bits (flags)|%b Size/512\n%B Bytes per %b (512) |%C Security context |%d Device ID (dec)\n%D Device ID (hex) |%f All mode bits (hex)|%F File type\n%g Group ID |%G Group name |%h Hard links\n%i Inode |%m Mount point |%n Filename\n%N Long filename |%o I/O block size |%s Size (bytes)\n%t Devtype major (hex) |%T Devtype minor (hex)|%u User ID\n%U User name |%x Access time |%X Access unix time\n%y Modification time |%Y Mod unix time |%z Creation time\n%Z Creation unix time\n\nThe valid format escape sequences for filesystems:\n%a Available blocks |%b Total blocks |%c Total inodes\n%d Free inodes |%f Free blocks |%i File system ID\n%l Max filename length |%n File name |%s Fragment size\n%S Best transfer size |%t FS type (hex) |%T FS type (driver name)" + +#define HELP_shred "usage: shred [-fuz] [-n COUNT] [-s SIZE] FILE...\n\nSecurely delete a file by overwriting its contents with random data.\n\n-f Force (chmod if necessary)\n-n COUNT Random overwrite iterations (default 1)\n-o OFFSET Start at OFFSET\n-s SIZE Use SIZE instead of detecting file size\n-u Unlink (actually delete file when done)\n-x Use exact size (default without -s rounds up to next 4k)\n-z Zero at end\n\nNote: data journaling filesystems render this command useless, you must\noverwrite all free space (fill up disk) to erase old data on those." + +#define HELP_setsid "usage: setsid [-cdw] command [args...]\n\nRun process in a new session.\n\n-d Detach from tty\n-c Control tty (become foreground process & receive keyboard signals)\n-w Wait for child (and exit with its status)" + +#define HELP_setfattr "usage: setfattr [-h] [-x|-n NAME] [-v VALUE] FILE...\n\nWrite POSIX extended attributes.\n\n-h Do not dereference symlink\n-n Set given attribute\n-x Remove given attribute\n-v Set value for attribute -n (default is empty)" + +#define HELP_rmmod "usage: rmmod [-wf] [MODULE]\n\nUnload the module named MODULE from the Linux kernel.\n-f Force unload of a module\n-w Wait until the module is no longer used" + +#define HELP_rev "usage: rev [FILE...]\n\nOutput each line reversed, when no files are given stdin is used." + +#define HELP_reset "usage: reset\n\nReset the terminal." + +#define HELP_reboot "usage: reboot/halt/poweroff [-fn]\n\nRestart, halt or powerdown the system.\n\n-f Don't signal init\n-n Don't sync before stopping the system" + +#define HELP_realpath "usage: realpath FILE...\n\nDisplay the canonical absolute pathname" + +#define HELP_readlink "usage: readlink FILE...\n\nWith no options, show what symlink points to, return error if not symlink.\n\nOptions for producing canonical paths (all symlinks/./.. resolved):\n\n-e Canonical path to existing entry (fail if missing)\n-f Full path (fail if directory missing)\n-m Ignore missing entries, show where it would be\n-n No trailing newline\n-q Quiet (no output, just error code)" + +#define HELP_readahead "usage: readahead FILE...\n\nPreload files into disk cache." + +#define HELP_pwdx "usage: pwdx PID...\n\nPrint working directory of processes listed on command line." + +#define HELP_printenv "usage: printenv [-0] [env_var...]\n\nPrint environment variables.\n\n-0 Use \\0 as delimiter instead of \\n" + +#define HELP_pmap "usage: pmap [-xq] [pids...]\n\nReport the memory map of a process or processes.\n\n-x Show the extended format\n-q Do not display some header/footer lines" + +#define HELP_pivot_root "usage: pivot_root OLD NEW\n\nSwap OLD and NEW filesystems (as if by simultaneous mount --move), and\nmove all processes with chdir or chroot under OLD into NEW (including\nkernel threads) so OLD may be unmounted.\n\nThe directory NEW must exist under OLD. This doesn't work on initramfs,\nwhich can't be moved (about the same way PID 1 can't be killed; see\nswitch_root instead)." + +#define HELP_partprobe "usage: partprobe DEVICE...\n\nTell the kernel about partition table changes\n\nAsk the kernel to re-read the partition table on the specified devices." + +#define HELP_oneit "usage: oneit [-p] [-c /dev/tty0] command [...]\n\nSimple init program that runs a single supplied command line with a\ncontrolling tty (so CTRL-C can kill it).\n\n-c Which console device to use (/dev/console doesn't do CTRL-C, etc)\n-p Power off instead of rebooting when command exits\n-r Restart child when it exits\n-3 Write 32 bit PID of each exiting reparented process to fd 3 of child\n (Blocking writes, child must read to avoid eventual deadlock.)\n\nSpawns a single child process (because PID 1 has signals blocked)\nin its own session, reaps zombies until the child exits, then\nreboots the system (or powers off with -p, or restarts the child with -r).\n\nResponds to SIGUSR1 by halting the system, SIGUSR2 by powering off,\nand SIGTERM or SIGINT reboot." + +#define HELP_nsenter "usage: nsenter [-t pid] [-F] [-i] [-m] [-n] [-p] [-u] [-U] COMMAND...\n\nRun COMMAND in an existing (set of) namespace(s).\n\n-t PID to take namespaces from (--target)\n-F don't fork, even if -p is used (--no-fork)\n\nThe namespaces to switch are:\n\n-i SysV IPC: message queues, semaphores, shared memory (--ipc)\n-m Mount/unmount tree (--mount)\n-n Network address, sockets, routing, iptables (--net)\n-p Process IDs and init, will fork unless -F is used (--pid)\n-u Host and domain names (--uts)\n-U UIDs, GIDs, capabilities (--user)\n\nIf -t isn't specified, each namespace argument must provide a path\nto a namespace file, ala \"-i=/proc/$PID/ns/ipc\"" + +#define HELP_unshare "usage: unshare [-imnpuUr] COMMAND...\n\nCreate new container namespace(s) for this process and its children, so\nsome attribute is not shared with the parent process.\n\n-f Fork command in the background (--fork)\n-i SysV IPC (message queues, semaphores, shared memory) (--ipc)\n-m Mount/unmount tree (--mount)\n-n Network address, sockets, routing, iptables (--net)\n-p Process IDs and init (--pid)\n-r Become root (map current euid/egid to 0/0, implies -U) (--map-root-user)\n-u Host and domain names (--uts)\n-U UIDs, GIDs, capabilities (--user)\n\nA namespace allows a set of processes to have a different view of the\nsystem than other sets of processes." + +#define HELP_nbd_client "usage: nbd-client [-ns] HOST PORT DEVICE\n\n-n Do not fork into background\n-s nbd swap support (lock server into memory)" + +#define HELP_mountpoint "usage: mountpoint [-qd] DIR\n mountpoint [-qx] DEVICE\n\nCheck whether the directory or device is a mountpoint.\n\n-q Be quiet, return zero if directory is a mountpoint\n-d Print major/minor device number of the directory\n-x Print major/minor device number of the block device" + +#define HELP_modinfo "usage: modinfo [-0] [-b basedir] [-k kernel] [-F field] [module|file...]\n\nDisplay module fields for modules specified by name or .ko path.\n\n-F Only show the given field\n-0 Separate fields with NUL rather than newline\n-b Use as root for /lib/modules/\n-k Look in given directory under /lib/modules/" + +#define HELP_mkswap "usage: mkswap [-L LABEL] DEVICE\n\nSet up a Linux swap area on a device or file." + +#define HELP_mkpasswd "usage: mkpasswd [-P FD] [-m TYPE] [-S SALT] [PASSWORD] [SALT]\n\nCrypt PASSWORD using crypt(3)\n\n-P FD Read password from file descriptor FD\n-m TYPE Encryption method (des, md5, sha256, or sha512; default is des)\n-S SALT" + +#define HELP_mix "usage: mix [-d DEV] [-c CHANNEL] [-l VOL] [-r RIGHT]\n\nList OSS sound channels (module snd-mixer-oss), or set volume(s).\n\n-c CHANNEL Set/show volume of CHANNEL (default first channel found)\n-d DEV Device node (default /dev/mixer)\n-l VOL Volume level\n-r RIGHT Volume of right stereo channel (with -r, -l sets left volume)" + +#define HELP_mcookie "usage: mcookie [-vV]\n\nGenerate a 128-bit strong random number.\n\n-v show entropy source (verbose)\n-V show version" + +#define HELP_makedevs "usage: makedevs [-d device_table] rootdir\n\nCreate a range of special files as specified in a device table.\n\n-d File containing device table (default reads from stdin)\n\nEach line of the device table has the fields:\n \nWhere name is the file name, and type is one of the following:\n\nb Block device\nc Character device\nd Directory\nf Regular file\np Named pipe (fifo)\n\nOther fields specify permissions, user and group id owning the file,\nand additional fields for device special files. Use '-' for blank entries,\nunspecified fields are treated as '-'." + +#define HELP_lsusb "usage: lsusb\n\nList USB hosts/devices." + +#define HELP_lspci_text "usage: lspci [-n] [-i FILE ]\n\n-n Numeric output (repeat for readable and numeric)\n-i PCI ID database (default /usr/share/misc/pci.ids)" + +#define HELP_lspci "usage: lspci [-ekm]\n\nList PCI devices.\n\n-e Print all 6 digits in class\n-k Print kernel driver\n-m Machine parseable format" + +#define HELP_lsmod "usage: lsmod\n\nDisplay the currently loaded modules, their sizes and their dependencies." + +#define HELP_chattr "usage: chattr [-R] [-+=AacDdijsStTu] [-p PROJID] [-v VERSION] [FILE...]\n\nChange file attributes on a Linux file system.\n\n-R Recurse\n-p Set the file's project number\n-v Set the file's version/generation number\n\nOperators:\n '-' Remove attributes\n '+' Add attributes\n '=' Set attributes\n\nAttributes:\n A No atime a Append only\n C No COW c Compression\n D Synchronous dir updates d No dump\n E Encrypted e Extents\n F Case-insensitive (casefold)\n I Indexed directory i Immutable\n j Journal data\n N Inline data in inode\n P Project hierarchy\n S Synchronous file updates s Secure delete\n T Top of dir hierarchy t No tail-merging\n u Allow undelete\n V Verity" + +#define HELP_lsattr "usage: lsattr [-Radlpv] [FILE...]\n\nList file attributes on a Linux file system.\nFlag letters are defined in chattr help.\n\n-R Recursively list attributes of directories and their contents\n-a List all files in directories, including files that start with '.'\n-d List directories like other files, rather than listing their contents\n-l List long flag names\n-p List the file's project number\n-v List the file's version/generation number" + +#define HELP_losetup "usage: losetup [-cdrs] [-o OFFSET] [-S SIZE] {-d DEVICE...|-j FILE|-af|{DEVICE FILE}}\n\nAssociate a loopback device with a file, or show current file (if any)\nassociated with a loop device.\n\nInstead of a device:\n-a Iterate through all loopback devices\n-f Find first unused loop device (may create one)\n-j FILE Iterate through all loopback devices associated with FILE\n\nexisting:\n-c Check capacity (file size changed)\n-d DEV Detach loopback device\n-D Detach all loopback devices\n\nnew:\n-s Show device name (alias --show)\n-o OFF Start association at offset OFF into FILE\n-r Read only\n-S SIZE Limit SIZE of loopback association (alias --sizelimit)" + +#define HELP_login "usage: login [-p] [-h host] [-f USERNAME] [USERNAME]\n\nLog in as a user, prompting for username and password if necessary.\n\n-p Preserve environment\n-h The name of the remote host for this login\n-f login as USERNAME without authentication" + +#define HELP_iorenice "usage: iorenice PID [CLASS] [PRIORITY]\n\nDisplay or change I/O priority of existing process. CLASS can be\n\"rt\" for realtime, \"be\" for best effort, \"idle\" for only when idle, or\n\"none\" to leave it alone. PRIORITY can be 0-7 (0 is highest, default 4)." + +#define HELP_ionice "usage: ionice [-t] [-c CLASS] [-n LEVEL] [COMMAND...|-p PID]\n\nChange the I/O scheduling priority of a process. With no arguments\n(or just -p), display process' existing I/O class/priority.\n\n-c CLASS = 1-3: 1(realtime), 2(best-effort, default), 3(when-idle)\n-n LEVEL = 0-7: (0 is highest priority, default = 5)\n-p Affect existing PID instead of spawning new child\n-t Ignore failure to set I/O priority\n\nSystem default iopriority is generally -c 2 -n 4." + +#define HELP_insmod "usage: insmod MODULE [MODULE_OPTIONS]\n\nLoad the module named MODULE passing options if given." + +#define HELP_inotifyd "usage: inotifyd PROG FILE[:MASK] ...\n\nWhen a filesystem event matching MASK occurs to a FILE, run PROG as:\n\n PROG EVENTS FILE [DIRFILE]\n\nIf PROG is \"-\" events are sent to stdout.\n\nThis file is:\n a accessed c modified e metadata change w closed (writable)\n r opened D deleted M moved 0 closed (unwritable)\n u unmounted o overflow x unwatchable\n\nA file in this directory is:\n m moved in y moved out n created d deleted\n\nWhen x event happens for all FILEs, inotifyd exits (after waiting for PROG)." + +#define HELP_i2cset "usage: i2cset [-fy] BUS CHIP ADDR VALUE... MODE\n\nWrite an i2c register. MODE is b for byte, w for 16-bit word, i for I2C block.\n\n-f Force access to busy devices\n-y Answer \"yes\" to confirmation prompts (for script use)" + +#define HELP_i2cget "usage: i2cget [-fy] BUS CHIP ADDR\n\nRead an i2c register.\n\n-f Force access to busy devices\n-y Answer \"yes\" to confirmation prompts (for script use)" + +#define HELP_i2cdump "usage: i2cdump [-fy] BUS CHIP\n\nDump i2c registers.\n\n-f Force access to busy devices\n-y Answer \"yes\" to confirmation prompts (for script use)" + +#define HELP_i2cdetect "usage: i2cdetect [-ary] BUS [FIRST LAST]\nusage: i2cdetect -F BUS\nusage: i2cdetect -l\n\nDetect i2c devices.\n\n-a All addresses (0x00-0x7f rather than 0x03-0x77)\n-F Show functionality\n-l List all buses\n-r Probe with SMBus Read Byte\n-y Answer \"yes\" to confirmation prompts (for script use)" + +#define HELP_hwclock "usage: hwclock [-rswtluf]\n\nGet/set the hardware clock.\n\n-f FILE Use specified device file instead of /dev/rtc (--rtc)\n-l Hardware clock uses localtime (--localtime)\n-r Show hardware clock time (--show)\n-s Set system time from hardware clock (--hctosys)\n-t Set the system time based on the current timezone (--systz)\n-u Hardware clock uses UTC (--utc)\n-w Set hardware clock from system time (--systohc)" + +#define HELP_hexedit "usage: hexedit FILENAME\n\nHexadecimal file editor. All changes are written to disk immediately.\n\n-r Read only (display but don't edit)\n\nKeys:\nArrows Move left/right/up/down by one line/column\nPg Up/Pg Dn Move up/down by one page\n0-9, a-f Change current half-byte to hexadecimal value\nu Undo\nq/^c/^d/ Quit" + +#define HELP_help "usage: help [-ahu] [COMMAND]\n\n-a All commands\n-u Usage only\n-h HTML output\n\nShow usage information for toybox commands.\nRun \"toybox\" with no arguments for a list of available commands." + +#define HELP_fsync "usage: fsync [-d] [FILE...]\n\nSynchronize a file's in-core state with storage device.\n\n-d Avoid syncing metadata" + +#define HELP_fsfreeze "usage: fsfreeze {-f | -u} MOUNTPOINT\n\nFreeze or unfreeze a filesystem.\n\n-f Freeze\n-u Unfreeze" + +#define HELP_freeramdisk "usage: freeramdisk [RAM device]\n\nFree all memory allocated to specified ramdisk" + +#define HELP_free "usage: free [-bkmgt]\n\nDisplay the total, free and used amount of physical memory and swap space.\n\n-bkmgt Output units (default is bytes)\n-h Human readable (K=1024)" + +#define HELP_fmt "usage: fmt [-w WIDTH] [FILE...]\n\nReformat input to wordwrap at a given line length, preserving existing\nindentation level, writing to stdout.\n\n-w WIDTH Maximum characters per line (default 75)" + +#define HELP_flock "usage: flock [-sxun] fd\n\nManage advisory file locks.\n\n-s Shared lock\n-x Exclusive lock (default)\n-u Unlock\n-n Non-blocking: fail rather than wait for the lock" + +#define HELP_fallocate "usage: fallocate [-l size] [-o offset] file\n\nTell the filesystem to allocate space for a file." + +#define HELP_factor "usage: factor NUMBER...\n\nFactor integers." + +#define HELP_eject "usage: eject [-stT] [DEVICE]\n\nEject DEVICE or default /dev/cdrom\n\n-s SCSI device\n-t Close tray\n-T Open/close tray (toggle)" + +#define HELP_unix2dos "usage: unix2dos [FILE...]\n\nConvert newline format from unix \"\\n\" to dos \"\\r\\n\".\nIf no files listed copy from stdin, \"-\" is a synonym for stdin." + +#define HELP_dos2unix "usage: dos2unix [FILE...]\n\nConvert newline format from dos \"\\r\\n\" to unix \"\\n\".\nIf no files listed copy from stdin, \"-\" is a synonym for stdin." + +#define HELP_devmem "usage: devmem ADDR [WIDTH [DATA]]\n\nRead/write physical address via /dev/mem.\n\nWIDTH is 1, 2, 4, or 8 bytes (default 4)." + +#define HELP_count "usage: count\n\nCopy stdin to stdout, displaying simple progress indicator to stderr." + +#define HELP_clear "Clear the screen." + +#define HELP_chvt "usage: chvt N\n\nChange to virtual terminal number N. (This only works in text mode.)\n\nVirtual terminals are the Linux VGA text mode displays, ordinarily\nswitched between via alt-F1, alt-F2, etc. Use ctrl-alt-F1 to switch\nfrom X to a virtual terminal, and alt-F6 (or F7, or F8) to get back." + +#define HELP_chrt "usage: chrt [-Rmofrbi] {-p PID [PRIORITY] | [PRIORITY COMMAND...]}\n\nGet/set a process' real-time scheduling policy and priority.\n\n-p Set/query given pid (instead of running COMMAND)\n-R Set SCHED_RESET_ON_FORK\n-m Show min/max priorities available\n\nSet policy (default -r):\n\n -o SCHED_OTHER -f SCHED_FIFO -r SCHED_RR\n -b SCHED_BATCH -i SCHED_IDLE" + +#define HELP_chroot "usage: chroot NEWROOT [COMMAND [ARG...]]\n\nRun command within a new root directory. If no command, run /bin/sh." + +#define HELP_chcon "usage: chcon [-hRv] CONTEXT FILE...\n\nChange the SELinux security context of listed file[s].\n\n-h Change symlinks instead of what they point to\n-R Recurse into subdirectories\n-v Verbose" + +#define HELP_bzcat "usage: bzcat [FILE...]\n\nDecompress listed files to stdout. Use stdin if no files listed." + +#define HELP_bunzip2 "usage: bunzip2 [-cftkv] [FILE...]\n\nDecompress listed files (file.bz becomes file) deleting archive file(s).\nRead from stdin if no files listed.\n\n-c Force output to stdout\n-f Force decompression (if FILE doesn't end in .bz, replace original)\n-k Keep input files (-c and -t imply this)\n-t Test integrity\n-v Verbose" + +#define HELP_blockdev "usage: blockdev --OPTION... BLOCKDEV...\n\nCall ioctl(s) on each listed block device\n\n--setro Set read only\n--setrw Set read write\n--getro Get read only\n--getss Get sector size\n--getbsz Get block size\n--setbsz BYTES Set block size\n--getsz Get device size in 512-byte sectors\n--getsize Get device size in sectors (deprecated)\n--getsize64 Get device size in bytes\n--getra Get readahead in 512-byte sectors\n--setra SECTORS Set readahead\n--flushbufs Flush buffers\n--rereadpt Reread partition table" + +#define HELP_fstype "usage: fstype DEV...\n\nPrint type of filesystem on a block device or image." + +#define HELP_blkid "usage: blkid [-s TAG] [-UL] DEV...\n\nPrint type, label and UUID of filesystem on a block device or image.\n\n-U Show UUID only (or device with that UUID)\n-L Show LABEL only (or device with that LABEL)\n-s TAG Only show matching tags (default all)" + +#define HELP_base64 "usage: base64 [-di] [-w COLUMNS] [FILE...]\n\nEncode or decode in base64.\n\n-d Decode\n-i Ignore non-alphabetic characters\n-w Wrap output at COLUMNS (default 76 or 0 for no wrap)" + +#define HELP_ascii "usage: ascii\n\nDisplay ascii character set." + +#define HELP_acpi "usage: acpi [-abctV]\n\nShow status of power sources and thermal devices.\n\n-a Show power adapters\n-b Show batteries\n-c Show cooling device state\n-t Show temperatures\n-V Show everything" + +#define HELP_xzcat "usage: xzcat [filename...]\n\nDecompress listed files to stdout. Use stdin if no files listed." + +#define HELP_wget "usage: wget -O filename URL\n-O filename: specify output filename\nURL: uniform resource location, FTP/HTTP only, not HTTPS\n\nexamples:\n wget -O index.html http://www.example.com\n wget -O sample.jpg ftp://ftp.example.com:21/sample.jpg" + +#define HELP_vi "usage: vi [-s script] FILE\n-s script: run script file\nVisual text editor. Predates the existence of standardized cursor keys,\nso the controls are weird and historical." + +#define HELP_userdel "usage: userdel [-r] USER\nusage: deluser [-r] USER\n\nDelete USER from the SYSTEM\n\n-r remove home directory" + +#define HELP_useradd "usage: useradd [-SDH] [-h DIR] [-s SHELL] [-G GRP] [-g NAME] [-u UID] USER [GROUP]\n\nCreate new user, or add USER to GROUP\n\n-D Don't assign a password\n-g NAME Real name\n-G GRP Add user to existing group\n-h DIR Home directory\n-H Don't create home directory\n-s SHELL Login shell\n-S Create a system user\n-u UID User id" + +#define HELP_traceroute "usage: traceroute [-46FUIldnvr] [-f 1ST_TTL] [-m MAXTTL] [-p PORT] [-q PROBES]\n[-s SRC_IP] [-t TOS] [-w WAIT_SEC] [-g GATEWAY] [-i IFACE] [-z PAUSE_MSEC] HOST [BYTES]\n\ntraceroute6 [-dnrv] [-m MAXTTL] [-p PORT] [-q PROBES][-s SRC_IP] [-t TOS] [-w WAIT_SEC]\n [-i IFACE] HOST [BYTES]\n\nTrace the route to HOST\n\n-4,-6 Force IP or IPv6 name resolution\n-F Set the don't fragment bit (supports IPV4 only)\n-U Use UDP datagrams instead of ICMP ECHO (supports IPV4 only)\n-I Use ICMP ECHO instead of UDP datagrams (supports IPV4 only)\n-l Display the TTL value of the returned packet (supports IPV4 only)\n-d Set SO_DEBUG options to socket\n-n Print numeric addresses\n-v verbose\n-r Bypass routing tables, send directly to HOST\n-m Max time-to-live (max number of hops)(RANGE 1 to 255)\n-p Base UDP port number used in probes(default 33434)(RANGE 1 to 65535)\n-q Number of probes per TTL (default 3)(RANGE 1 to 255)\n-s IP address to use as the source address\n-t Type-of-service in probe packets (default 0)(RANGE 0 to 255)\n-w Time in seconds to wait for a response (default 3)(RANGE 0 to 86400)\n-g Loose source route gateway (8 max) (supports IPV4 only)\n-z Pause Time in ms (default 0)(RANGE 0 to 86400) (supports IPV4 only)\n-f Start from the 1ST_TTL hop (instead from 1)(RANGE 1 to 255) (supports IPV4 only)\n-i Specify a network interface to operate with" + +#define HELP_tr "usage: tr [-cds] SET1 [SET2]\n\nTranslate, squeeze, or delete characters from stdin, writing to stdout\n\n-c/-C Take complement of SET1\n-d Delete input characters coded SET1\n-s Squeeze multiple output characters of SET2 into one character" + +#define HELP_tftpd "usage: tftpd [-cr] [-u USER] [DIR]\n\nTransfer file from/to tftp server.\n\n-r read only\n-c Allow file creation via upload\n-u run as USER\n-l Log to syslog (inetd mode requires this)" + +#define HELP_tftp "usage: tftp [OPTIONS] HOST [PORT]\n\nTransfer file from/to tftp server.\n\n-l FILE Local FILE\n-r FILE Remote FILE\n-g Get file\n-p Put file\n-b SIZE Transfer blocks of SIZE octets(8 <= SIZE <= 65464)" + +#define HELP_telnetd "Handle incoming telnet connections\n\n-l LOGIN Exec LOGIN on connect\n-f ISSUE_FILE Display ISSUE_FILE instead of /etc/issue\n-K Close connection as soon as login exits\n-p PORT Port to listen on\n-b ADDR[:PORT] Address to bind to\n-F Run in foreground\n-i Inetd mode\n-w SEC Inetd 'wait' mode, linger time SEC\n-S Log to syslog (implied by -i or without -F and -w)" + +#define HELP_telnet "usage: telnet HOST [PORT]\n\nConnect to telnet server" + +#define HELP_tcpsvd "usage: tcpsvd [-hEv] [-c N] [-C N[:MSG]] [-b N] [-u User] [-l Name] IP Port Prog\nusage: udpsvd [-hEv] [-c N] [-u User] [-l Name] IP Port Prog\n\nCreate TCP/UDP socket, bind to IP:PORT and listen for incoming connection.\nRun PROG for each connection.\n\nIP IP to listen on, 0 = all\nPORT Port to listen on\nPROG ARGS Program to run\n-l NAME Local hostname (else looks up local hostname in DNS)\n-u USER[:GRP] Change to user/group after bind\n-c N Handle up to N (> 0) connections simultaneously\n-b N (TCP Only) Allow a backlog of approximately N TCP SYNs\n-C N[:MSG] (TCP Only) Allow only up to N (> 0) connections from the same IP\n New connections from this IP address are closed\n immediately. MSG is written to the peer before close\n-h Look up peer's hostname\n-E Don't set up environment variables\n-v Verbose" + +#define HELP_syslogd "usage: syslogd [-a socket] [-O logfile] [-f config file] [-m interval]\n [-p socket] [-s SIZE] [-b N] [-R HOST] [-l N] [-nSLKD]\n\nSystem logging utility\n\n-a Extra unix socket for listen\n-O FILE Default log file \n-f FILE Config file \n-p Alternative unix domain socket \n-n Avoid auto-backgrounding\n-S Smaller output\n-m MARK interval (RANGE: 0 to 71582787)\n-R HOST Log to IP or hostname on PORT (default PORT=514/UDP)\"\n-L Log locally and via network (default is network only if -R)\"\n-s SIZE Max size (KB) before rotation (default:200KB, 0=off)\n-b N rotated logs to keep (default:1, max=99, 0=purge)\n-K Log to kernel printk buffer (use dmesg to read it)\n-l N Log only messages more urgent than prio(default:8 max:8 min:1)\n-D Drop duplicates" + +#define HELP_sulogin "usage: sulogin [-t time] [tty]\n\nSingle User Login.\n-t Default Time for Single User Login" + +#define HELP_stty "usage: stty [-ag] [-F device] SETTING...\n\nGet/set terminal configuration.\n\n-F Open device instead of stdin\n-a Show all current settings (default differences from \"sane\")\n-g Show all current settings usable as input to stty\n\nSpecial characters (syntax ^c or undef): intr quit erase kill eof eol eol2\nswtch start stop susp rprnt werase lnext discard\n\nControl/input/output/local settings as shown by -a, '-' prefix to disable\n\nCombo settings: cooked/raw, evenp/oddp/parity, nl, ek, sane\n\nN set input and output speed (ispeed N or ospeed N for just one)\ncols N set number of columns\nrows N set number of rows\nline N set line discipline\nmin N set minimum chars per read\ntime N set read timeout\nspeed show speed only\nsize show size only" + +#define HELP_exit "usage: exit [status]\n\nExit shell. If no return value supplied on command line, use value\nof most recent command, or 0 if none." + +#define HELP_cd "usage: cd [-PL] [path]\n\nChange current directory. With no arguments, go $HOME.\n\n-P Physical path: resolve symlinks in path\n-L Local path: .. trims directories off $PWD (default)" + +#define HELP_sh "usage: sh [-c command] [script]\n\nCommand shell. Runs a shell script, or reads input interactively\nand responds to it.\n\n-c command line to execute\n-i interactive mode (default when STDIN is a tty)" + +#define HELP_route "usage: route [-ne] [-A [46]] [add|del TARGET [OPTIONS]]\n\nDisplay, add or delete network routes in the \"Forwarding Information Base\".\n\n-n Show numerical addresses (no DNS lookups)\n-e display netstat fields\n\nRouting means sending packets out a network interface to an address.\nThe kernel can tell where to send packets one hop away by examining each\ninterface's address and netmask, so the most common use of this command\nis to identify a \"gateway\" that forwards other traffic.\n\nAssigning an address to an interface automatically creates an appropriate\nnetwork route (\"ifconfig eth0 10.0.2.15/8\" does \"route add 10.0.0.0/8 eth0\"\nfor you), although some devices (such as loopback) won't show it in the\ntable. For machines more than one hop away, you need to specify a gateway\n(ala \"route add default gw 10.0.2.2\").\n\nThe address \"default\" is a wildcard address (0.0.0.0/0) matching all\npackets without a more specific route.\n\nAvailable OPTIONS include:\nreject - blocking route (force match failure)\ndev NAME - force packets out this interface (ala \"eth0\")\nnetmask - old way of saying things like ADDR/24\ngw ADDR - forward packets to gateway ADDR" + +#define HELP_readelf "usage: readelf [-adhlnSsW] [-p SECTION] [-x SECTION] [file...]\n\nDisplays information about ELF files.\n\n-a Equivalent to -dhlnSs\n-d Show dynamic section\n-h Show ELF header\n-l Show program headers\n-n Show notes\n-p S Dump strings found in named/numbered section\n-S Show section headers\n-s Show symbol tables (.dynsym and .symtab)\n-W Don't truncate fields (default in toybox)\n-x S Hex dump of named/numbered section\n\n--dyn-syms Show just .dynsym symbol table" + +#define HELP_deallocvt "usage: deallocvt [N]\n\nDeallocate unused virtual terminal /dev/ttyN, or all unused consoles." + +#define HELP_openvt "usage: openvt [-c N] [-sw] [command [command_options]]\n\nstart a program on a new virtual terminal (VT)\n\n-c N Use VT N\n-s Switch to new VT\n-w Wait for command to exit\n\nif -sw used together, switch back to originating VT when command completes" + +#define HELP_more "usage: more [FILE...]\n\nView FILE(s) (or stdin) one screenfull at a time." + +#define HELP_modprobe "usage: modprobe [-alrqvsDb] [-d DIR] MODULE [symbol=value][...]\n\nmodprobe utility - inserts modules and dependencies.\n\n-a Load multiple MODULEs\n-d Load modules from DIR, option may be used multiple times\n-l List (MODULE is a pattern)\n-r Remove MODULE (stacks) or do autoclean\n-q Quiet\n-v Verbose\n-s Log to syslog\n-D Show dependencies\n-b Apply blacklist to module names too" + +#define HELP_mke2fs_extended "usage: mke2fs [-E stride=###] [-O option[,option]]\n\n-E stride= Set RAID stripe size (in blocks)\n-O [opts] Specify fewer ext2 option flags (for old kernels)\n All of these are on by default (as appropriate)\n none Clear default options (all but journaling)\n dir_index Use htree indexes for large directories\n filetype Store file type info in directory entry\n has_journal Set by -j\n journal_dev Set by -J device=XXX\n sparse_super Don't allocate huge numbers of redundant superblocks" + +#define HELP_mke2fs_label "usage: mke2fs [-L label] [-M path] [-o string]\n\n-L Volume label\n-M Path to mount point\n-o Created by" + +#define HELP_mke2fs_gen "usage: gene2fs [options] device filename\n\nThe [options] are the same as mke2fs." + +#define HELP_mke2fs_journal "usage: mke2fs [-j] [-J size=###,device=XXX]\n\n-j Create journal (ext3)\n-J Journal options\n size: Number of blocks (1024-102400)\n device: Specify an external journal" + +#define HELP_mke2fs "usage: mke2fs [-Fnq] [-b ###] [-N|i ###] [-m ###] device\n\nCreate an ext2 filesystem on a block device or filesystem image.\n\n-F Force to run on a mounted device\n-n Don't write to device\n-q Quiet (no output)\n-b size Block size (1024, 2048, or 4096)\n-N inodes Allocate this many inodes\n-i bytes Allocate one inode for every XXX bytes of device\n-m percent Reserve this percent of filesystem space for root user" + +#define HELP_mdev_conf "The mdev config file (/etc/mdev.conf) contains lines that look like:\nhd[a-z][0-9]* 0:3 660\n(sd[a-z]) root:disk 660 =usb_storage\n\nEach line must contain three whitespace separated fields. The first\nfield is a regular expression matching one or more device names,\nthe second and third fields are uid:gid and file permissions for\nmatching devices. Fourth field is optional. It could be used to change\ndevice name (prefix '='), path (prefix '=' and postfix '/') or create a\nsymlink (prefix '>')." + +#define HELP_mdev "usage: mdev [-s]\n\nCreate devices in /dev using information from /sys.\n\n-s Scan all entries in /sys to populate /dev" + +#define HELP_man "usage: man [-M PATH] [-k STRING] | [SECTION] COMMAND\n\nRead manual page for system command.\n\n-k List pages with STRING in their short description\n-M Override $MANPATH\n\nMan pages are divided into 8 sections:\n1 commands 2 system calls 3 library functions 4 /dev files\n5 file formats 6 games 7 miscellaneous 8 system management\n\nSections are searched in the order 1 8 3 2 5 4 6 7 unless you specify a\nsection. Each section has a page called \"intro\", and there's a global\nintroduction under \"man-pages\"." + +#define HELP_lsof "usage: lsof [-lt] [-p PID1,PID2,...] [FILE...]\n\nList all open files belonging to all active processes, or processes using\nlisted FILE(s).\n\n-l list uids numerically\n-p for given comma-separated pids only (default all pids)\n-t terse (pid only) output" + +#define HELP_last "usage: last [-W] [-f FILE]\n\nShow listing of last logged in users.\n\n-W Display the information without host-column truncation\n-f FILE Read from file FILE instead of /var/log/wtmp" + +#define HELP_klogd "usage: klogd [-n] [-c N]\n\n-c N Print to console messages more urgent than prio N (1-8)\"\n-n Run in foreground" + +#define HELP_ipcs "usage: ipcs [[-smq] -i shmid] | [[-asmq] [-tcplu]]\n\n-i Show specific resource\nResource specification:\n-a All (default)\n-m Shared memory segments\n-q Message queues\n-s Semaphore arrays\nOutput format:\n-c Creator\n-l Limits\n-p Pid\n-t Time\n-u Summary" + +#define HELP_ipcrm "usage: ipcrm [ [-q msqid] [-m shmid] [-s semid]\n [-Q msgkey] [-M shmkey] [-S semkey] ... ]\n\n-mM Remove memory segment after last detach\n-qQ Remove message queue\n-sS Remove semaphore" + +#define HELP_ip "usage: ip [ OPTIONS ] OBJECT { COMMAND }\n\nShow / manipulate routing, devices, policy routing and tunnels.\n\nwhere OBJECT := {address | link | route | rule | tunnel}\nOPTIONS := { -f[amily] { inet | inet6 | link } | -o[neline] }" + +#define HELP_init "usage: init\n\nSystem V style init.\n\nFirst program to run (as PID 1) when the system comes up, reading\n/etc/inittab to determine actions." + +#define HELP_host "usage: host [-av] [-t TYPE] NAME [SERVER]\n\nPerform DNS lookup on NAME, which can be a domain name to lookup,\nor an IPv4 dotted or IPv6 colon-separated address to reverse lookup.\nSERVER (if present) is the DNS server to use.\n\n-a -v -t ANY\n-t TYPE query records of type TYPE\n-v verbose" + +#define HELP_groupdel "usage: groupdel [USER] GROUP\n\nDelete a group or remove a user from a group" + +#define HELP_groupadd "usage: groupadd [-S] [-g GID] [USER] GROUP\n\nAdd a group or add a user to a group\n\n -g GID Group id\n -S Create a system group" + +#define HELP_getty "usage: getty [OPTIONS] BAUD_RATE[,BAUD_RATE]... TTY [TERMTYPE]\n\n-h Enable hardware RTS/CTS flow control\n-L Set CLOCAL (ignore Carrier Detect state)\n-m Get baud rate from modem's CONNECT status message\n-n Don't prompt for login name\n-w Wait for CR or LF before sending /etc/issue\n-i Don't display /etc/issue\n-f ISSUE_FILE Display ISSUE_FILE instead of /etc/issue\n-l LOGIN Invoke LOGIN instead of /bin/login\n-t SEC Terminate after SEC if no login name is read\n-I INITSTR Send INITSTR before anything else\n-H HOST Log HOST into the utmp file as the hostname" + +#define HELP_getopt "usage: getopt [OPTIONS] [--] ARG...\n\nParse command-line options for use in shell scripts.\n\n-a Allow long options starting with a single -.\n-l OPTS Specify long options.\n-n NAME Command name for error messages.\n-o OPTS Specify short options.\n-T Test whether this is a modern getopt.\n-u Output options unquoted." + +#define HELP_getfattr "usage: getfattr [-d] [-h] [-n NAME] FILE...\n\nRead POSIX extended attributes.\n\n-d Show values as well as names\n-h Do not dereference symbolic links\n-n Show only attributes with the given name\n--only-values Don't show names" + +#define HELP_fsck "usage: fsck [-ANPRTV] [-C FD] [-t FSTYPE] [FS_OPTS] [BLOCKDEV]...\n\nCheck and repair filesystems\n\n-A Walk /etc/fstab and check all filesystems\n-N Don't execute, just show what would be done\n-P With -A, check filesystems in parallel\n-R With -A, skip the root filesystem\n-T Don't show title on startup\n-V Verbose\n-C n Write status information to specified file descriptor\n-t TYPE List of filesystem types to check" + +#define HELP_fold "usage: fold [-bsu] [-w WIDTH] [FILE...]\n\nFolds (wraps) or unfolds ascii text by adding or removing newlines.\nDefault line width is 80 columns for folding and infinite for unfolding.\n\n-b Fold based on bytes instead of columns\n-s Fold/unfold at whitespace boundaries if possible\n-u Unfold text (and refold if -w is given)\n-w Set lines to WIDTH columns or bytes" + +#define HELP_fdisk "usage: fdisk [-lu] [-C CYLINDERS] [-H HEADS] [-S SECTORS] [-b SECTSZ] DISK\n\nChange partition table\n\n-u Start and End are in sectors (instead of cylinders)\n-l Show partition table for each DISK, then exit\n-b size sector size (512, 1024, 2048 or 4096)\n-C CYLINDERS Set number of cylinders/heads/sectors\n-H HEADS\n-S SECTORS" + +#define HELP_expr "usage: expr ARG1 OPERATOR ARG2...\n\nEvaluate expression and print result. For example, \"expr 1 + 2\".\n\nThe supported operators are (grouped from highest to lowest priority):\n\n ( ) : * / % + - != <= < >= > = & |\n\nEach constant and operator must be a separate command line argument.\nAll operators are infix, meaning they expect a constant (or expression\nthat resolves to a constant) on each side of the operator. Operators of\nthe same priority (within each group above) are evaluated left to right.\nParentheses may be used (as separate arguments) to elevate the priority\nof expressions.\n\nCalling expr from a command shell requires a lot of \\( or '*' escaping\nto avoid interpreting shell control characters.\n\nThe & and | operators are logical (not bitwise) and may operate on\nstrings (a blank string is \"false\"). Comparison operators may also\noperate on strings (alphabetical sort).\n\nConstants may be strings or integers. Comparison, logical, and regex\noperators may operate on strings (a blank string is \"false\"), other\noperators require integers." + +#define HELP_dumpleases "usage: dumpleases [-r|-a] [-f LEASEFILE]\n\nDisplay DHCP leases granted by udhcpd\n-f FILE, Lease file\n-r Show remaining time\n-a Show expiration time" + +#define HELP_diff "usage: diff [-abBdiNqrTstw] [-L LABEL] [-S FILE] [-U LINES] FILE1 FILE2\n\n-a Treat all files as text\n-b Ignore changes in the amount of whitespace\n-B Ignore changes whose lines are all blank\n-d Try hard to find a smaller set of changes\n-i Ignore case differences\n-L Use LABEL instead of the filename in the unified header\n-N Treat absent files as empty\n-q Output only whether files differ\n-r Recurse\n-S Start with FILE when comparing directories\n-T Make tabs line up by prefixing a tab when necessary\n-s Report when two files are the same\n-t Expand tabs to spaces in output\n-u Unified diff\n-U Output LINES lines of context\n-w Ignore all whitespace\n\n--color Colored output\n--strip-trailing-cr Strip trailing '\\r's from input lines" + +#define HELP_dhcpd "usage: dhcpd [-46fS] [-i IFACE] [-P N] [CONFFILE]\n\n -f Run in foreground\n -i Interface to use\n -S Log to syslog too\n -P N Use port N (default ipv4 67, ipv6 547)\n -4, -6 Run as a DHCPv4 or DHCPv6 server" + +#define HELP_dhcp6 "usage: dhcp6 [-fbnqvR] [-i IFACE] [-r IP] [-s PROG] [-p PIDFILE]\n\n Configure network dynamically using DHCP.\n\n -i Interface to use (default eth0)\n -p Create pidfile\n -s Run PROG at DHCP events\n -t Send up to N Solicit packets\n -T Pause between packets (default 3 seconds)\n -A Wait N seconds after failure (default 20)\n -f Run in foreground\n -b Background if lease is not obtained\n -n Exit if lease is not obtained\n -q Exit after obtaining lease\n -R Release IP on exit\n -S Log to syslog too\n -r Request this IP address\n -v Verbose\n\n Signals:\n USR1 Renew current lease\n USR2 Release current lease" + +#define HELP_dhcp "usage: dhcp [-fbnqvoCRB] [-i IFACE] [-r IP] [-s PROG] [-p PIDFILE]\n [-H HOSTNAME] [-V VENDOR] [-x OPT:VAL] [-O OPT]\n\n Configure network dynamically using DHCP.\n\n -i Interface to use (default eth0)\n -p Create pidfile\n -s Run PROG at DHCP events (default /usr/share/dhcp/default.script)\n -B Request broadcast replies\n -t Send up to N discover packets\n -T Pause between packets (default 3 seconds)\n -A Wait N seconds after failure (default 20)\n -f Run in foreground\n -b Background if lease is not obtained\n -n Exit if lease is not obtained\n -q Exit after obtaining lease\n -R Release IP on exit\n -S Log to syslog too\n -a Use arping to validate offered address\n -O Request option OPT from server (cumulative)\n -o Don't request any options (unless -O is given)\n -r Request this IP address\n -x OPT:VAL Include option OPT in sent packets (cumulative)\n -F Ask server to update DNS mapping for NAME\n -H Send NAME as client hostname (default none)\n -V VENDOR Vendor identifier (default 'toybox VERSION')\n -C Don't send MAC as client identifier\n -v Verbose\n\n Signals:\n USR1 Renew current lease\n USR2 Release current lease" + +#define HELP_dd "usage: dd [if=FILE] [of=FILE] [ibs=N] [obs=N] [iflag=FLAGS] [oflag=FLAGS]\n [bs=N] [count=N] [seek=N] [skip=N]\n [conv=notrunc|noerror|sync|fsync] [status=noxfer|none]\n\nCopy/convert files.\n\nif=FILE Read from FILE instead of stdin\nof=FILE Write to FILE instead of stdout\nbs=N Read and write N bytes at a time\nibs=N Input block size\nobs=N Output block size\ncount=N Copy only N input blocks\nskip=N Skip N input blocks\nseek=N Skip N output blocks\niflag=FLAGS Set input flags\noflag=FLAGS Set output flags\nconv=notrunc Don't truncate output file\nconv=noerror Continue after read errors\nconv=sync Pad blocks with zeros\nconv=fsync Physically write data out before finishing\nstatus=noxfer Don't show transfer rate\nstatus=none Don't show transfer rate or records in/out\n\nFLAGS is a comma-separated list of:\n\ncount_bytes (iflag) interpret count=N in bytes, not blocks\nseek_bytes (oflag) interpret seek=N in bytes, not blocks\nskip_bytes (iflag) interpret skip=N in bytes, not blocks\n\nNumbers may be suffixed by c (*1), w (*2), b (*512), kD (*1000), k (*1024),\nMD (*1000*1000), M (*1024*1024), GD (*1000*1000*1000) or G (*1024*1024*1024)." + +#define HELP_crontab "usage: crontab [-u user] FILE\n [-u user] [-e | -l | -r]\n [-c dir]\n\nFiles used to schedule the execution of programs.\n\n-c crontab dir\n-e edit user's crontab\n-l list user's crontab\n-r delete user's crontab\n-u user\nFILE Replace crontab by FILE ('-': stdin)" + +#define HELP_crond "usage: crond [-fbS] [-l N] [-d N] [-L LOGFILE] [-c DIR]\n\nA daemon to execute scheduled commands.\n\n-b Background (default)\n-c crontab dir\n-d Set log level, log to stderr\n-f Foreground\n-l Set log level. 0 is the most verbose, default 8\n-S Log to syslog (default)\n-L Log to file" + +#define HELP_brctl "usage: brctl COMMAND [BRIDGE [INTERFACE]]\n\nManage ethernet bridges\n\nCommands:\nshow Show a list of bridges\naddbr BRIDGE Create BRIDGE\ndelbr BRIDGE Delete BRIDGE\naddif BRIDGE IFACE Add IFACE to BRIDGE\ndelif BRIDGE IFACE Delete IFACE from BRIDGE\nsetageing BRIDGE TIME Set ageing time\nsetfd BRIDGE TIME Set bridge forward delay\nsethello BRIDGE TIME Set hello time\nsetmaxage BRIDGE TIME Set max message age\nsetpathcost BRIDGE PORT COST Set path cost\nsetportprio BRIDGE PORT PRIO Set port priority\nsetbridgeprio BRIDGE PRIO Set bridge priority\nstp BRIDGE [1/yes/on|0/no/off] STP on/off" + +#define HELP_bootchartd "usage: bootchartd {start [PROG ARGS]}|stop|init\n\nCreate /var/log/bootlog.tgz with boot chart data\n\nstart: start background logging; with PROG, run PROG,\n then kill logging with USR1\nstop: send USR1 to all bootchartd processes\ninit: start background logging; stop when getty/xdm is seen\n (for init scripts)\n\nUnder PID 1: as init, then exec $bootchart_init, /init, /sbin/init" + +#define HELP_bc "usage: bc [-ilqsw] [file ...]\n\nbc is a command-line calculator with a Turing-complete language.\n\noptions:\n\n -i --interactive force interactive mode\n -l --mathlib use predefined math routines:\n\n s(expr) = sine of expr in radians\n c(expr) = cosine of expr in radians\n a(expr) = arctangent of expr, returning radians\n l(expr) = natural log of expr\n e(expr) = raises e to the power of expr\n j(n, x) = Bessel function of integer order n of x\n\n -q --quiet don't print version and copyright\n -s --standard error if any non-POSIX extensions are used\n -w --warn warn if any non-POSIX extensions are used" + +#define HELP_arping "usage: arping [-fqbDUA] [-c CNT] [-w TIMEOUT] [-I IFACE] [-s SRC_IP] DST_IP\n\nSend ARP requests/replies\n\n-f Quit on first ARP reply\n-q Quiet\n-b Keep broadcasting, don't go unicast\n-D Duplicated address detection mode\n-U Unsolicited ARP mode, update your neighbors\n-A ARP answer mode, update your neighbors\n-c N Stop after sending N ARP requests\n-w TIMEOUT Time to wait for ARP reply, seconds\n-I IFACE Interface to use (default eth0)\n-s SRC_IP Sender IP address\nDST_IP Target IP address" + +#define HELP_arp "usage: arp\n[-vn] [-H HWTYPE] [-i IF] -a [HOSTNAME]\n[-v] [-i IF] -d HOSTNAME [pub]\n[-v] [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [temp]\n[-v] [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [netmask MASK] pub\n[-v] [-H HWTYPE] [-i IF] -Ds HOSTNAME IFACE [netmask MASK] pub\n\nManipulate ARP cache\n\n-a Display (all) hosts\n-s Set new ARP entry\n-d Delete a specified entry\n-v Verbose\n-n Don't resolve names\n-i IF Network interface\n-D Read from given device\n-A,-p AF Protocol family\n-H HWTYPE Hardware address type" + +#define HELP_xargs "usage: xargs [-0prt] [-s NUM] [-n NUM] [-E STR] COMMAND...\n\nRun command line one or more times, appending arguments from stdin.\n\nIf COMMAND exits with 255, don't launch another even if arguments remain.\n\n-0 Each argument is NULL terminated, no whitespace or quote processing\n-E Stop at line matching string\n-n Max number of arguments per command\n-o Open tty for COMMAND's stdin (default /dev/null)\n-p Prompt for y/n from tty before running each command\n-r Don't run command with empty input (otherwise always run command once)\n-s Size in bytes per command line\n-t Trace, print command line to stderr" + +#define HELP_who "usage: who\n\nPrint information about logged in users." + +#define HELP_wc "usage: wc -lwcm [FILE...]\n\nCount lines, words, and characters in input.\n\n-l Show lines\n-w Show words\n-c Show bytes\n-m Show characters\n\nBy default outputs lines, words, bytes, and filename for each\nargument (or from stdin if none). Displays only either bytes\nor characters." + +#define HELP_uuencode "usage: uuencode [-m] [INFILE] ENCODE_FILENAME\n\nUuencode stdin (or INFILE) to stdout, with ENCODE_FILENAME in the output.\n\n-m Base64" + +#define HELP_uudecode "usage: uudecode [-o OUTFILE] [INFILE]\n\nDecode file from stdin (or INFILE).\n\n-o Write to OUTFILE instead of filename in header" + +#define HELP_unlink "usage: unlink FILE\n\nDelete one file." + +#define HELP_uniq "usage: uniq [-cduiz] [-w MAXCHARS] [-f FIELDS] [-s CHAR] [INFILE [OUTFILE]]\n\nReport or filter out repeated lines in a file\n\n-c Show counts before each line\n-d Show only lines that are repeated\n-u Show only lines that are unique\n-i Ignore case when comparing lines\n-z Lines end with \\0 not \\n\n-w Compare maximum X chars per line\n-f Ignore first X fields\n-s Ignore first X chars" + +#define HELP_uname "usage: uname [-asnrvm]\n\nPrint system information.\n\n-s System name\n-n Network (domain) name\n-r Kernel Release number\n-v Kernel Version\n-m Machine (hardware) name\n-a All of the above" + +#define HELP_arch "usage: arch\n\nPrint machine (hardware) name, same as uname -m." + +#define HELP_ulimit "usage: ulimit [-P PID] [-SHRacdefilmnpqrstuv] [LIMIT]\n\nPrint or set resource limits for process number PID. If no LIMIT specified\n(or read-only -ap selected) display current value (sizes in bytes).\nDefault is ulimit -P $PPID -Sf\" (show soft filesize of your shell).\n\n-S Set/show soft limit -H Set/show hard (maximum) limit\n-a Show all limits -c Core file size\n-d Process data segment -e Max scheduling priority\n-f Output file size -i Pending signal count\n-l Locked memory -m Resident Set Size\n-n Number of open files -p Pipe buffer\n-q Posix message queue -r Max Real-time priority\n-R Realtime latency (usec) -s Stack size\n-t Total CPU time (in seconds) -u Maximum processes (under this UID)\n-v Virtual memory size -P PID to affect (default $PPID)" + +#define HELP_tty "usage: tty [-s]\n\nShow filename of terminal connected to stdin.\n\nPrints \"not a tty\" and exits with nonzero status if no terminal\nis connected to stdin.\n\n-s Silent, exit code only" + +#define HELP_true "usage: true\n\nReturn zero." + +#define HELP_touch "usage: touch [-amch] [-d DATE] [-t TIME] [-r FILE] FILE...\n\nUpdate the access and modification times of each FILE to the current time.\n\n-a Change access time\n-m Change modification time\n-c Don't create file\n-h Change symlink\n-d Set time to DATE (in YYYY-MM-DDThh:mm:SS[.frac][tz] format)\n-t Set time to TIME (in [[CC]YY]MMDDhhmm[.ss][frac] format)\n-r Set time same as reference FILE" + +#define HELP_time "usage: time [-pv] COMMAND...\n\nRun command line and report real, user, and system time elapsed in seconds.\n(real = clock on the wall, user = cpu used by command's code,\nsystem = cpu used by OS on behalf of command.)\n\n-p POSIX format output (default)\n-v Verbose" + +#define HELP_test "usage: test [-bcdefghLPrSsuwx PATH] [-nz STRING] [-t FD] [X ?? Y]\n\nReturn true or false by performing tests. (With no arguments return false.)\n\n--- Tests with a single argument (after the option):\nPATH is/has:\n -b block device -f regular file -p fifo -u setuid bit\n -c char device -g setgid -r read bit -w write bit\n -d directory -h symlink -S socket -x execute bit\n -e exists -L symlink -s nonzero size\nSTRING is:\n -n nonzero size -z zero size (STRING by itself implies -n)\nFD (integer file descriptor) is:\n -t a TTY\n\n--- Tests with one argument on each side of an operator:\nTwo strings:\n = are identical != differ\nTwo integers:\n -eq equal -gt first > second -lt first < second\n -ne not equal -ge first >= second -le first <= second\n\n--- Modify or combine tests:\n ! EXPR not (swap true/false) EXPR -a EXPR and (are both true)\n ( EXPR ) evaluate this first EXPR -o EXPR or (is either true)" + +#define HELP_tee "usage: tee [-ai] [FILE...]\n\nCopy stdin to each listed file, and also to stdout.\nFilename \"-\" is a synonym for stdout.\n\n-a Append to files\n-i Ignore SIGINT" + +#define HELP_tar "usage: tar [-cxt] [-fvohmjkOS] [-XTCf NAME] [FILE...]\n\nCreate, extract, or list files in a .tar (or compressed t?z) file.\n\nOptions:\nc Create x Extract t Test (list)\nf tar FILE (default -) C Change to DIR first v Verbose display\no Ignore owner h Follow symlinks m Ignore mtime\nJ xz compression j bzip2 compression z gzip compression\nO Extract to stdout X exclude names in FILE T include names in FILE\n\n--exclude FILENAME to exclude --full-time Show seconds with -tv\n--mode MODE Adjust modes --mtime TIME Override timestamps\n--owner NAME Set file owner to NAME --group NAME Set file group to NAME\n--sparse Record sparse files\n--restrict All archive contents must extract under one subdirctory\n--numeric-owner Save/use/display uid and gid, not user/group name\n--no-recursion Don't store directory contents" + +#define HELP_tail "usage: tail [-n|c NUMBER] [-f] [FILE...]\n\nCopy last lines from files to stdout. If no files listed, copy from\nstdin. Filename \"-\" is a synonym for stdin.\n\n-n Output the last NUMBER lines (default 10), +X counts from start\n-c Output the last NUMBER bytes, +NUMBER counts from start\n-f Follow FILE(s), waiting for more data to be appended" + +#define HELP_strings "usage: strings [-fo] [-t oxd] [-n LEN] [FILE...]\n\nDisplay printable strings in a binary file\n\n-f Show filename\n-n At least LEN characters form a string (default 4)\n-o Show offset (ala -t d)\n-t Show offset type (o=octal, d=decimal, x=hexadecimal)" + +#define HELP_split "usage: split [-a SUFFIX_LEN] [-b BYTES] [-l LINES] [INPUT [OUTPUT]]\n\nCopy INPUT (or stdin) data to a series of OUTPUT (or \"x\") files with\nalphabetically increasing suffix (aa, ab, ac... az, ba, bb...).\n\n-a Suffix length (default 2)\n-b BYTES/file (10, 10k, 10m, 10g...)\n-l LINES/file (default 1000)" + +#define HELP_sort "usage: sort [-Mbcdfginrsuz] [FILE...] [-k#[,#[x]] [-t X]] [-o FILE]\n\nSort all lines of text from input files (or stdin) to stdout.\n-M Month sort (jan, feb, etc)\n-V Version numbers (name-1.234-rc6.5b.tgz)\n-b Ignore leading blanks (or trailing blanks in second part of key)\n-c Check whether input is sorted\n-d Dictionary order (use alphanumeric and whitespace chars only)\n-f Force uppercase (case insensitive sort)\n-g General numeric sort (double precision with nan and inf)\n-i Ignore nonprinting characters\n-k Sort by \"key\" (see below)\n-n Numeric order (instead of alphabetical)\n-o Output to FILE instead of stdout\n-r Reverse\n-s Skip fallback sort (only sort with keys)\n-t Use a key separator other than whitespace\n-u Unique lines only\n-x Hexadecimal numerical sort\n-z Zero (null) terminated lines\n\nSorting by key looks at a subset of the words on each line. -k2 uses the\nsecond word to the end of the line, -k2,2 looks at only the second word,\n-k2,4 looks from the start of the second to the end of the fourth word.\n-k2.4,5 starts from the fourth character of the second word, to the end\nof the fifth word. Specifying multiple keys uses the later keys as tie\nbreakers, in order. A type specifier appended to a sort key (such as -2,2n)\napplies only to sorting that key." + +#define HELP_sleep "usage: sleep DURATION\n\nWait before exiting.\n\nDURATION can be a decimal fraction. An optional suffix can be \"m\"\n(minutes), \"h\" (hours), \"d\" (days), or \"s\" (seconds, the default)." + +#define HELP_sed "usage: sed [-inrzE] [-e SCRIPT]...|SCRIPT [-f SCRIPT_FILE]... [FILE...]\n\nStream editor. Apply one or more editing SCRIPTs to each line of input\n(from FILE or stdin) producing output (by default to stdout).\n\n-e Add SCRIPT to list\n-f Add contents of SCRIPT_FILE to list\n-i Edit each file in place (-iEXT keeps backup file with extension EXT)\n-n No default output (use the p command to output matched lines)\n-r Use extended regular expression syntax\n-E POSIX alias for -r\n-s Treat input files separately (implied by -i)\n-z Use \\0 rather than \\n as the input line separator\n\nA SCRIPT is a series of one or more COMMANDs separated by newlines or\nsemicolons. All -e SCRIPTs are concatenated together as if separated\nby newlines, followed by all lines from -f SCRIPT_FILEs, in order.\nIf no -e or -f SCRIPTs are specified, the first argument is the SCRIPT.\n\nEach COMMAND may be preceded by an address which limits the command to\napply only to the specified line(s). Commands without an address apply to\nevery line. Addresses are of the form:\n\n [ADDRESS[,ADDRESS]][!]COMMAND\n\nThe ADDRESS may be a decimal line number (starting at 1), a /regular\nexpression/ within a pair of forward slashes, or the character \"$\" which\nmatches the last line of input. (In -s or -i mode this matches the last\nline of each file, otherwise just the last line of the last file.) A single\naddress matches one line, a pair of comma separated addresses match\neverything from the first address to the second address (inclusive). If\nboth addresses are regular expressions, more than one range of lines in\neach file can match. The second address can be +N to end N lines later.\n\nREGULAR EXPRESSIONS in sed are started and ended by the same character\n(traditionally / but anything except a backslash or a newline works).\nBackslashes may be used to escape the delimiter if it occurs in the\nregex, and for the usual printf escapes (\\abcefnrtv and octal, hex,\nand unicode). An empty regex repeats the previous one. ADDRESS regexes\n(above) require the first delimiter to be escaped with a backslash when\nit isn't a forward slash (to distinguish it from the COMMANDs below).\n\nSed mostly operates on individual lines one at a time. It reads each line,\nprocesses it, and either writes it to the output or discards it before\nreading the next line. Sed can remember one additional line in a separate\nbuffer (using the h, H, g, G, and x commands), and can read the next line\nof input early (using the n and N command), but other than that command\nscripts operate on individual lines of text.\n\nEach COMMAND starts with a single character. The following commands take\nno arguments:\n\n ! Run this command when the test _didn't_ match.\n\n { Start a new command block, continuing until a corresponding \"}\".\n Command blocks may nest. If the block has an address, commands within\n the block are only run for lines within the block's address range.\n\n } End command block (this command cannot have an address)\n\n d Delete this line and move on to the next one\n (ignores remaining COMMANDs)\n\n D Delete one line of input and restart command SCRIPT (same as \"d\"\n unless you've glued lines together with \"N\" or similar)\n\n g Get remembered line (overwriting current line)\n\n G Get remembered line (appending to current line)\n\n h Remember this line (overwriting remembered line)\n\n H Remember this line (appending to remembered line, if any)\n\n l Print line, escaping \\abfrtv (but not newline), octal escaping other\n nonprintable characters, wrapping lines to terminal width with a\n backslash, and appending $ to actual end of line.\n\n n Print default output and read next line, replacing current line\n (If no next line available, quit processing script)\n\n N Append next line of input to this line, separated by a newline\n (This advances the line counter for address matching and \"=\", if no\n next line available quit processing script without default output)\n\n p Print this line\n\n P Print this line up to first newline (from \"N\")\n\n q Quit (print default output, no more commands processed or lines read)\n\n x Exchange this line with remembered line (overwrite in both directions)\n\n = Print the current line number (followed by a newline)\n\nThe following commands (may) take an argument. The \"text\" arguments (to\nthe \"a\", \"b\", and \"c\" commands) may end with an unescaped \"\\\" to append\nthe next line (for which leading whitespace is not skipped), and also\ntreat \";\" as a literal character (use \"\\;\" instead).\n\n a [text] Append text to output before attempting to read next line\n\n b [label] Branch, jumps to :label (or with no label, to end of SCRIPT)\n\n c [text] Delete line, output text at end of matching address range\n (ignores remaining COMMANDs)\n\n i [text] Print text\n\n r [file] Append contents of file to output before attempting to read\n next line.\n\n s/S/R/F Search for regex S, replace matched text with R using flags F.\n The first character after the \"s\" (anything but newline or\n backslash) is the delimiter, escape with \\ to use normally.\n\n The replacement text may contain \"&\" to substitute the matched\n text (escape it with backslash for a literal &), or \\1 through\n \\9 to substitute a parenthetical subexpression in the regex.\n You can also use the normal backslash escapes such as \\n and\n a backslash at the end of the line appends the next line.\n\n The flags are:\n\n [0-9] A number, substitute only that occurrence of pattern\n g Global, substitute all occurrences of pattern\n i Ignore case when matching\n p Print the line if match was found and replaced\n w [file] Write (append) line to file if match replaced\n\n t [label] Test, jump to :label only if an \"s\" command found a match in\n this line since last test (replacing with same text counts)\n\n T [label] Test false, jump only if \"s\" hasn't found a match.\n\n w [file] Write (append) line to file\n\n y/old/new/ Change each character in 'old' to corresponding character\n in 'new' (with standard backslash escapes, delimiter can be\n any repeated character except \\ or \\n)\n\n : [label] Labeled target for jump commands\n\n # Comment, ignore rest of this line of SCRIPT\n\nDeviations from POSIX: allow extended regular expressions with -r,\nediting in place with -i, separate with -s, NUL-separated input with -z,\nprintf escapes in text, line continuations, semicolons after all commands,\n2-address anywhere an address is allowed, \"T\" command, multiline\ncontinuations for [abc], \\; to end [abc] argument before end of line." + +#define HELP_rmdir "usage: rmdir [-p] [DIR...]\n\nRemove one or more directories.\n\n-p Remove path\n--ignore-fail-on-non-empty Ignore failures caused by non-empty directories" + +#define HELP_rm "usage: rm [-fiRrv] FILE...\n\nRemove each argument from the filesystem.\n\n-f Force: remove without confirmation, no error if it doesn't exist\n-i Interactive: prompt for confirmation\n-rR Recursive: remove directory contents\n-v Verbose" + +#define HELP_renice "usage: renice [-gpu] -n INCREMENT ID..." + +#define HELP_pwd "usage: pwd [-L|-P]\n\nPrint working (current) directory.\n\n-L Use shell's path from $PWD (when applicable)\n-P Print canonical absolute path" + +#define HELP_pkill "usage: pkill [-fnovx] [-SIGNAL|-l SIGNAL] [PATTERN] [-G GID,] [-g PGRP,] [-P PPID,] [-s SID,] [-t TERM,] [-U UID,] [-u EUID,]\n\n-l Send SIGNAL (default SIGTERM)\n-V Verbose\n-f Check full command line for PATTERN\n-G Match real Group ID(s)\n-g Match Process Group(s) (0 is current user)\n-n Newest match only\n-o Oldest match only\n-P Match Parent Process ID(s)\n-s Match Session ID(s) (0 for current)\n-t Match Terminal(s)\n-U Match real User ID(s)\n-u Match effective User ID(s)\n-v Negate the match\n-x Match whole command (not substring)" + +#define HELP_pgrep "usage: pgrep [-clfnovx] [-d DELIM] [-L SIGNAL] [PATTERN] [-G GID,] [-g PGRP,] [-P PPID,] [-s SID,] [-t TERM,] [-U UID,] [-u EUID,]\n\nSearch for process(es). PATTERN is an extended regular expression checked\nagainst command names.\n\n-c Show only count of matches\n-d Use DELIM instead of newline\n-L Send SIGNAL instead of printing name\n-l Show command name\n-f Check full command line for PATTERN\n-G Match real Group ID(s)\n-g Match Process Group(s) (0 is current user)\n-n Newest match only\n-o Oldest match only\n-P Match Parent Process ID(s)\n-s Match Session ID(s) (0 for current)\n-t Match Terminal(s)\n-U Match real User ID(s)\n-u Match effective User ID(s)\n-v Negate the match\n-x Match whole command (not substring)" + +#define HELP_iotop "usage: iotop [-AaKObq] [-n NUMBER] [-d SECONDS] [-p PID,] [-u USER,]\n\nRank processes by I/O.\n\n-A All I/O, not just disk\n-a Accumulated I/O (not percentage)\n-H Show threads\n-K Kilobytes\n-k Fallback sort FIELDS (default -[D]IO,-ETIME,-PID)\n-m Maximum number of tasks to show\n-O Only show processes doing I/O\n-o Show FIELDS (default PID,PR,USER,[D]READ,[D]WRITE,SWAP,[D]IO,COMM)\n-s Sort by field number (0-X, default 6)\n-b Batch mode (no tty)\n-d Delay SECONDS between each cycle (default 3)\n-n Exit after NUMBER iterations\n-p Show these PIDs\n-u Show these USERs\n-q Quiet (no header lines)\n\nCursor LEFT/RIGHT to change sort, UP/DOWN move list, space to force\nupdate, R to reverse sort, Q to exit." + +#define HELP_top "usage: top [-Hbq] [-k FIELD,] [-o FIELD,] [-s SORT] [-n NUMBER] [-m LINES] [-d SECONDS] [-p PID,] [-u USER,]\n\nShow process activity in real time.\n\n-H Show threads\n-k Fallback sort FIELDS (default -S,-%CPU,-ETIME,-PID)\n-o Show FIELDS (def PID,USER,PR,NI,VIRT,RES,SHR,S,%CPU,%MEM,TIME+,CMDLINE)\n-O Add FIELDS (replacing PR,NI,VIRT,RES,SHR,S from default)\n-s Sort by field number (1-X, default 9)\n-b Batch mode (no tty)\n-d Delay SECONDS between each cycle (default 3)\n-m Maximum number of tasks to show\n-n Exit after NUMBER iterations\n-p Show these PIDs\n-u Show these USERs\n-q Quiet (no header lines)\n\nCursor LEFT/RIGHT to change sort, UP/DOWN move list, space to force\nupdate, R to reverse sort, Q to exit." + +#define HELP_ps "usage: ps [-AadefLlnwZ] [-gG GROUP,] [-k FIELD,] [-o FIELD,] [-p PID,] [-t TTY,] [-uU USER,]\n\nList processes.\n\nWhich processes to show (-gGuUpPt selections may be comma separated lists):\n\n-A All -a Has terminal not session leader\n-d All but session leaders -e Synonym for -A\n-g In GROUPs -G In real GROUPs (before sgid)\n-p PIDs (--pid) -P Parent PIDs (--ppid)\n-s In session IDs -t Attached to selected TTYs\n-T Show threads also -u Owned by selected USERs\n-U Real USERs (before suid)\n\nOutput modifiers:\n\n-k Sort FIELDs (-FIELD to reverse) -M Measure/pad future field widths\n-n Show numeric USER and GROUP -w Wide output (don't truncate fields)\n\nWhich FIELDs to show. (-o HELP for list, default = -o PID,TTY,TIME,CMD)\n\n-f Full listing (-o USER:12=UID,PID,PPID,C,STIME,TTY,TIME,ARGS=CMD)\n-l Long listing (-o F,S,UID,PID,PPID,C,PRI,NI,ADDR,SZ,WCHAN,TTY,TIME,CMD)\n-o Output FIELDs instead of defaults, each with optional :size and =title\n-O Add FIELDS to defaults\n-Z Include LABEL" + +#define HELP_printf "usage: printf FORMAT [ARGUMENT...]\n\nFormat and print ARGUMENT(s) according to FORMAT, using C printf syntax\n(% escapes for cdeEfgGiosuxX, \\ escapes for abefnrtv0 or \\OCTAL or \\xHEX)." + +#define HELP_patch "usage: patch [-d DIR] [-i PATCH] [-p DEPTH] [-F FUZZ] [-Rlsu] [--dry-run] [FILE [PATCH]]\n\nApply a unified diff to one or more files.\n\n-d Modify files in DIR\n-i Input patch file (default=stdin)\n-l Loose match (ignore whitespace)\n-p Number of '/' to strip from start of file paths (default=all)\n-R Reverse patch\n-s Silent except for errors\n-u Ignored (only handles \"unified\" diffs)\n--dry-run Don't change files, just confirm patch applies\n\nThis version of patch only handles unified diffs, and only modifies\na file when all hunks to that file apply. Patch prints failed hunks\nto stderr, and exits with nonzero status if any hunks fail.\n\nA file compared against /dev/null (or with a date <= the epoch) is\ncreated/deleted as appropriate." + +#define HELP_paste "usage: paste [-s] [-d DELIMITERS] [FILE...]\n\nMerge corresponding lines from each input file.\n\n-d List of delimiter characters to separate fields with (default is \\t)\n-s Sequential mode: turn each input file into one line of output" + +#define HELP_od "usage: od [-bcdosxv] [-j #] [-N #] [-w #] [-A doxn] [-t acdfoux[#]]\n\nDump data in octal/hex.\n\n-A Address base (decimal, octal, hexadecimal, none)\n-j Skip this many bytes of input\n-N Stop dumping after this many bytes\n-t Output type a(scii) c(har) d(ecimal) f(loat) o(ctal) u(nsigned) (he)x\n plus optional size in bytes\n aliases: -b=-t o1, -c=-t c, -d=-t u2, -o=-t o2, -s=-t d2, -x=-t x2\n-v Don't collapse repeated lines together\n-w Total line width in bytes (default 16)" + +#define HELP_nohup "usage: nohup COMMAND...\n\nRun a command that survives the end of its terminal.\n\nRedirect tty on stdin to /dev/null, tty on stdout to \"nohup.out\"." + +#define HELP_nl "usage: nl [-E] [-l #] [-b MODE] [-n STYLE] [-s SEPARATOR] [-v #] [-w WIDTH] [FILE...]\n\nNumber lines of input.\n\n-E Use extended regex syntax (when doing -b pREGEX)\n-b Which lines to number: a (all) t (non-empty, default) pREGEX (pattern)\n-l Only count last of this many consecutive blank lines\n-n Number STYLE: ln (left justified) rn (right justified) rz (zero pad)\n-s Separator to use between number and line (instead of TAB)\n-v Starting line number for each section (default 1)\n-w Width of line numbers (default 6)" + +#define HELP_nice "usage: nice [-n PRIORITY] COMMAND...\n\nRun a command line at an increased or decreased scheduling priority.\n\nHigher numbers make a program yield more CPU time, from -20 (highest\npriority) to 19 (lowest). By default processes inherit their parent's\nniceness (usually 0). By default this command adds 10 to the parent's\npriority. Only root can set a negative niceness level." + +#define HELP_mkfifo_z "usage: mkfifo [-Z CONTEXT]\n\n-Z Security context" + +#define HELP_mkfifo "usage: mkfifo [NAME...]\n\nCreate FIFOs (named pipes)." + +#define HELP_mkdir_z "usage: [-Z context]\n\n-Z Set security context" + +#define HELP_mkdir "usage: mkdir [-vp] [-m MODE] [DIR...]\n\nCreate one or more directories.\n\n-m Set permissions of directory to mode\n-p Make parent directories as needed\n-v Verbose" + +#define HELP_ls "usage: ls [-ACFHLRSZacdfhiklmnpqrstuwx1] [--color[=auto]] [FILE...]\n\nList files.\n\nwhat to show:\n-a all files including .hidden -b escape nongraphic chars\n-c use ctime for timestamps -d directory, not contents\n-i inode number -p put a '/' after dir names\n-q unprintable chars as '?' -s storage used (1024 byte units)\n-u use access time for timestamps -A list all files but . and ..\n-H follow command line symlinks -L follow symlinks\n-R recursively list in subdirs -F append /dir *exe @sym |FIFO\n-Z security context\n\noutput formats:\n-1 list one file per line -C columns (sorted vertically)\n-g like -l but no owner -h human readable sizes\n-l long (show full details) -m comma separated\n-n like -l but numeric uid/gid -o like -l but no group\n-w set column width -x columns (horizontal sort)\n-ll long with nanoseconds (--full-time)\n--color device=yellow symlink=turquoise/red dir=blue socket=purple\n files: exe=green suid=red suidfile=redback stickydir=greenback\n =auto means detect if output is a tty.\n\nsorting (default is alphabetical):\n-f unsorted -r reverse -t timestamp -S size" + +#define HELP_logger "usage: logger [-s] [-t TAG] [-p [FACILITY.]PRIORITY] [MESSAGE...]\n\nLog message (or stdin) to syslog.\n\n-s Also write message to stderr\n-t Use TAG instead of username to identify message source\n-p Specify PRIORITY with optional FACILITY. Default is \"user.notice\"" + +#define HELP_ln "usage: ln [-sfnv] [-t DIR] [FROM...] TO\n\nCreate a link between FROM and TO.\nOne/two/many arguments work like \"mv\" or \"cp\".\n\n-s Create a symbolic link\n-f Force the creation of the link, even if TO already exists\n-n Symlink at TO treated as file\n-r Create relative symlink from -> to\n-t Create links in DIR\n-T TO always treated as file, max 2 arguments\n-v Verbose" + +#define HELP_link "usage: link FILE NEWLINK\n\nCreate hardlink to a file." + +#define HELP_killall5 "usage: killall5 [-l [SIGNAL]] [-SIGNAL|-s SIGNAL] [-o PID]...\n\nSend a signal to all processes outside current session.\n\n-l List signal name(s) and number(s)\n-o PID Omit PID\n-s Send SIGNAL (default SIGTERM)" + +#define HELP_kill "usage: kill [-l [SIGNAL] | -s SIGNAL | -SIGNAL] PID...\n\nSend signal to process(es).\n\n-l List signal name(s) and number(s)\n-s Send SIGNAL (default SIGTERM)" + +#define HELP_whoami "usage: whoami\n\nPrint the current user name." + +#define HELP_logname "usage: logname\n\nPrint the current user name." + +#define HELP_groups "usage: groups [user]\n\nPrint the groups a user is in." + +#define HELP_id_z "usage: id [-Z]\n\n-Z Show only security context" + +#define HELP_id "usage: id [-nGgru] [USER...]\n\nPrint user and group ID.\n\n-G Show all group IDs\n-g Show only the effective group ID\n-n Print names instead of numeric IDs (to be used with -Ggu)\n-r Show real ID instead of effective ID\n-u Show only the effective user ID" + +#define HELP_iconv "usage: iconv [-f FROM] [-t TO] [FILE...]\n\nConvert character encoding of files.\n\n-c Omit invalid chars\n-f Convert from (default UTF-8)\n-t Convert to (default UTF-8)" + +#define HELP_head "usage: head [-n NUM] [FILE...]\n\nCopy first lines from files to stdout. If no files listed, copy from\nstdin. Filename \"-\" is a synonym for stdin.\n\n-n Number of lines to copy\n-c Number of bytes to copy\n-q Never print headers\n-v Always print headers" + +#define HELP_grep "usage: grep [-EFrivwcloqsHbhn] [-ABC NUM] [-m MAX] [-e REGEX]... [-MS PATTERN]... [-f REGFILE] [FILE]...\n\nShow lines matching regular expressions. If no -e, first argument is\nregular expression to match. With no files (or \"-\" filename) read stdin.\nReturns 0 if matched, 1 if no match found, 2 for command errors.\n\n-e Regex to match. (May be repeated.)\n-f File listing regular expressions to match.\n\nfile search:\n-r Recurse into subdirectories (defaults FILE to \".\")\n-R Recurse into subdirectories and symlinks to directories\n-M Match filename pattern (--include)\n-S Skip filename pattern (--exclude)\n--exclude-dir=PATTERN Skip directory pattern\n-I Ignore binary files\n\nmatch type:\n-A Show NUM lines after -B Show NUM lines before match\n-C NUM lines context (A+B) -E extended regex syntax\n-F fixed (literal match) -a always text (not binary)\n-i case insensitive -m match MAX many lines\n-v invert match -w whole word (implies -E)\n-x whole line -z input NUL terminated\n\ndisplay modes: (default: matched line)\n-c count of matching lines -l show only matching filenames\n-o only matching part -q quiet (errors only)\n-s silent (no error msg) -Z output NUL terminated\n\noutput prefix (default: filename if checking more than 1 file)\n-H force filename -b byte offset of match\n-h hide filename -n line number of match" + +#define HELP_getconf "usage: getconf -a [PATH] | -l | NAME [PATH]\n\nGet system configuration values. Values from pathconf(3) require a path.\n\n-a Show all (defaults to \"/\" if no path given)\n-l List available value names (grouped by source)" + +#define HELP_find "usage: find [-HL] [DIR...] []\n\nSearch directories for matching files.\nDefault: search \".\", match all, -print matches.\n\n-H Follow command line symlinks -L Follow all symlinks\n\nMatch filters:\n-name PATTERN filename with wildcards (-iname case insensitive)\n-path PATTERN path name with wildcards (-ipath case insensitive)\n-user UNAME belongs to user UNAME -nouser user ID not known\n-group GROUP belongs to group GROUP -nogroup group ID not known\n-perm [-/]MODE permissions (-=min /=any) -prune ignore dir contents\n-size N[c] 512 byte blocks (c=bytes) -xdev only this filesystem\n-links N hardlink count -atime N[u] accessed N units ago\n-ctime N[u] created N units ago -mtime N[u] modified N units ago\n-newer FILE newer mtime than FILE -mindepth N at least N dirs down\n-depth ignore contents of dir -maxdepth N at most N dirs down\n-inum N inode number N -empty empty files and dirs\n-type [bcdflps] type is (block, char, dir, file, symlink, pipe, socket)\n-true always true -false always false\n-context PATTERN security context\n-newerXY FILE X=acm time > FILE's Y=acm time (Y=t: FILE is literal time)\n\nNumbers N may be prefixed by a - (less than) or + (greater than). Units for\n-Xtime are d (days, default), h (hours), m (minutes), or s (seconds).\n\nCombine matches with:\n!, -a, -o, ( ) not, and, or, group expressions\n\nActions:\n-print Print match with newline -print0 Print match with null\n-exec Run command with path -execdir Run command in file's dir\n-ok Ask before exec -okdir Ask before execdir\n-delete Remove matching file/dir -printf FORMAT Print using format string\n\nCommands substitute \"{}\" with matched file. End with \";\" to run each file,\nor \"+\" (next argument after \"{}\") to collect and run with multiple files.\n\n-printf FORMAT characters are \\ escapes and:\n%b 512 byte blocks used\n%f basename %g textual gid %G numeric gid\n%i decimal inode %l target of symlink %m octal mode\n%M ls format type/mode %p path to file %P path to file minus DIR\n%s size in bytes %T@ mod time as unixtime\n%u username %U numeric uid %Z security context" + +#define HELP_file "usage: file [-bhLs] [FILE...]\n\nExamine the given files and describe their content types.\n\n-b Brief (no filename)\n-h Don't follow symlinks (default)\n-L Follow symlinks\n-s Show block/char device contents" + +#define HELP_false "usage: false\n\nReturn nonzero." + +#define HELP_expand "usage: expand [-t TABLIST] [FILE...]\n\nExpand tabs to spaces according to tabstops.\n\n-t TABLIST\n\nSpecify tab stops, either a single number instead of the default 8,\nor a comma separated list of increasing numbers representing tabstop\npositions (absolute, not increments) with each additional tab beyond\nthat becoming one space." + +#define HELP_env "usage: env [-i] [-u NAME] [NAME=VALUE...] [COMMAND...]\n\nSet the environment for command invocation, or list environment variables.\n\n-i Clear existing environment\n-u NAME Remove NAME from the environment\n-0 Use null instead of newline in output" + +#define HELP_echo "usage: echo [-neE] [ARG...]\n\nWrite each argument to stdout, with one space between each, followed\nby a newline.\n\n-n No trailing newline\n-E Print escape sequences literally (default)\n-e Process the following escape sequences:\n \\\\ Backslash\n \\0NNN Octal values (1 to 3 digits)\n \\a Alert (beep/flash)\n \\b Backspace\n \\c Stop output here (avoids trailing newline)\n \\f Form feed\n \\n Newline\n \\r Carriage return\n \\t Horizontal tab\n \\v Vertical tab\n \\xHH Hexadecimal values (1 to 2 digits)" + +#define HELP_du "usage: du [-d N] [-askxHLlmc] [FILE...]\n\nShow disk usage, space consumed by files and directories.\n\nSize in:\n-k 1024 byte blocks (default)\n-K 512 byte blocks (posix)\n-m Megabytes\n-h Human readable (e.g., 1K 243M 2G)\n\nWhat to show:\n-a All files, not just directories\n-H Follow symlinks on cmdline\n-L Follow all symlinks\n-s Only total size of each argument\n-x Don't leave this filesystem\n-c Cumulative total\n-d N Only depth < N\n-l Disable hardlink filter" + +#define HELP_dirname "usage: dirname PATH...\n\nShow directory portion of path." + +#define HELP_df "usage: df [-HPkhi] [-t type] [FILE...]\n\nThe \"disk free\" command shows total/used/available disk space for\neach filesystem listed on the command line, or all currently mounted\nfilesystems.\n\n-a Show all (including /proc and friends)\n-P The SUSv3 \"Pedantic\" option\n-k Sets units back to 1024 bytes (the default without -P)\n-h Human readable (K=1024)\n-H Human readable (k=1000)\n-i Show inodes instead of blocks\n-t type Display only filesystems of this type\n\nPedantic provides a slightly less useful output format dictated by Posix,\nand sets the units to 512 bytes instead of the default 1024 bytes." + +#define HELP_date "usage: date [-u] [-r FILE] [-d DATE] [+DISPLAY_FORMAT] [-D SET_FORMAT] [SET]\n\nSet/get the current date/time. With no SET shows the current date.\n\n-d Show DATE instead of current time (convert date format)\n-D +FORMAT for SET or -d (instead of MMDDhhmm[[CC]YY][.ss])\n-r Use modification time of FILE instead of current date\n-u Use UTC instead of current timezone\n\nSupported input formats:\n\nMMDDhhmm[[CC]YY][.ss] POSIX\n@UNIXTIME[.FRACTION] seconds since midnight 1970-01-01\nYYYY-MM-DD [hh:mm[:ss]] ISO 8601\nhh:mm[:ss] 24-hour time today\n\nAll input formats can be preceded by TZ=\"id\" to set the input time zone\nseparately from the output time zone. Otherwise $TZ sets both.\n\n+FORMAT specifies display format string using strftime(3) syntax:\n\n%% literal % %n newline %t tab\n%S seconds (00-60) %M minute (00-59) %m month (01-12)\n%H hour (0-23) %I hour (01-12) %p AM/PM\n%y short year (00-99) %Y year %C century\n%a short weekday name %A weekday name %u day of week (1-7, 1=mon)\n%b short month name %B month name %Z timezone name\n%j day of year (001-366) %d day of month (01-31) %e day of month ( 1-31)\n%N nanosec (output only)\n\n%U Week of year (0-53 start sunday) %W Week of year (0-53 start monday)\n%V Week of year (1-53 start monday, week < 4 days not part of this year)\n\n%F \"%Y-%m-%d\" %R \"%H:%M\" %T \"%H:%M:%S\" %z numeric timezone\n%D \"%m/%d/%y\" %r \"%I:%M:%S %p\" %h \"%b\" %s unix epoch time\n%x locale date %X locale time %c locale date/time" + +#define HELP_cut "usage: cut [-Ds] [-bcfF LIST] [-dO DELIM] [FILE...]\n\nPrint selected parts of lines from each FILE to standard output.\n\nEach selection LIST is comma separated, either numbers (counting from 1)\nor dash separated ranges (inclusive, with X- meaning to end of line and -X\nfrom start). By default selection ranges are sorted and collated, use -D\nto prevent that.\n\n-b Select bytes\n-c Select UTF-8 characters\n-C Select unicode columns\n-d Use DELIM (default is TAB for -f, run of whitespace for -F)\n-D Don't sort/collate selections or match -fF lines without delimiter\n-f Select fields (words) separated by single DELIM character\n-F Select fields separated by DELIM regex\n-O Output delimiter (default one space for -F, input delim for -f)\n-s Skip lines without delimiters" + +#define HELP_cpio "usage: cpio -{o|t|i|p DEST} [-v] [--verbose] [-F FILE] [--no-preserve-owner]\n [ignored: -mdu -H newc]\n\nCopy files into and out of a \"newc\" format cpio archive.\n\n-F FILE Use archive FILE instead of stdin/stdout\n-p DEST Copy-pass mode, copy stdin file list to directory DEST\n-i Extract from archive into file system (stdin=archive)\n-o Create archive (stdin=list of files, stdout=archive)\n-t Test files (list only, stdin=archive, stdout=list of files)\n-v Verbose\n--no-preserve-owner (don't set ownership during extract)\n--trailer Add legacy trailer (prevents concatenation)" + +#define HELP_install "usage: install [-dDpsv] [-o USER] [-g GROUP] [-m MODE] [SOURCE...] DEST\n\nCopy files and set attributes.\n\n-d Act like mkdir -p\n-D Create leading directories for DEST\n-g Make copy belong to GROUP\n-m Set permissions to MODE\n-o Make copy belong to USER\n-p Preserve timestamps\n-s Call \"strip -p\"\n-v Verbose" + +#define HELP_mv "usage: mv [-finTv] SOURCE... DEST\n\n-f Force copy by deleting destination file\n-i Interactive, prompt before overwriting existing DEST\n-n No clobber (don't overwrite DEST)\n-T DEST always treated as file, max 2 arguments\n-v Verbose" + +#define HELP_cp_preserve "--preserve takes either a comma separated list of attributes, or the first\nletter(s) of:\n\n mode - permissions (ignore umask for rwx, copy suid and sticky bit)\n ownership - user and group\n timestamps - file creation, modification, and access times.\n context - security context\n xattr - extended attributes\n all - all of the above\n\nusage: cp [--preserve=motcxa] [-adfHiLlnPpRrsTv] SOURCE... DEST\n\nCopy files from SOURCE to DEST. If more than one SOURCE, DEST must\nbe a directory.\n-v Verbose\n-T DEST always treated as file, max 2 arguments\n-s Symlink instead of copy\n-r Synonym for -R\n-R Recurse into subdirectories (DEST must be a directory)\n-p Preserve timestamps, ownership, and mode\n-P Do not follow symlinks [default]\n-n No clobber (don't overwrite DEST)\n-l Hard link instead of copy\n-L Follow all symlinks\n-i Interactive, prompt before overwriting existing DEST\n-H Follow symlinks listed on command line\n-f Delete destination files we can't write to\n-F Delete any existing destination file first (--remove-destination)\n-d Don't dereference symlinks\n-D Create leading dirs under DEST (--parents)\n-a Same as -dpr" + +#define HELP_cp "usage: cp [--preserve=motcxa] [-adfHiLlnPpRrsTv] SOURCE... DEST\n\nCopy files from SOURCE to DEST. If more than one SOURCE, DEST must\nbe a directory.\n-v Verbose\n-T DEST always treated as file, max 2 arguments\n-s Symlink instead of copy\n-r Synonym for -R\n-R Recurse into subdirectories (DEST must be a directory)\n-p Preserve timestamps, ownership, and mode\n-P Do not follow symlinks [default]\n-n No clobber (don't overwrite DEST)\n-l Hard link instead of copy\n-L Follow all symlinks\n-i Interactive, prompt before overwriting existing DEST\n-H Follow symlinks listed on command line\n-f Delete destination files we can't write to\n-F Delete any existing destination file first (--remove-destination)\n-d Don't dereference symlinks\n-D Create leading dirs under DEST (--parents)\n-a Same as -dpr\n--preserve takes either a comma separated list of attributes, or the first\nletter(s) of:\n\n mode - permissions (ignore umask for rwx, copy suid and sticky bit)\n ownership - user and group\n timestamps - file creation, modification, and access times.\n context - security context\n xattr - extended attributes\n all - all of the above" + +#define HELP_comm "usage: comm [-123] FILE1 FILE2\n\nRead FILE1 and FILE2, which should be ordered, and produce three text\ncolumns as output: lines only in FILE1; lines only in FILE2; and lines\nin both files. Filename \"-\" is a synonym for stdin.\n\n-1 Suppress the output column of lines unique to FILE1\n-2 Suppress the output column of lines unique to FILE2\n-3 Suppress the output column of lines duplicated in FILE1 and FILE2" + +#define HELP_cmp "usage: cmp [-l] [-s] FILE1 [FILE2 [SKIP1 [SKIP2]]]\n\nCompare the contents of two files. (Or stdin and file if only one given.)\n\n-l Show all differing bytes\n-s Silent" + +#define HELP_crc32 "usage: crc32 [file...]\n\nOutput crc32 checksum for each file." + +#define HELP_cksum "usage: cksum [-IPLN] [FILE...]\n\nFor each file, output crc32 checksum value, length and name of file.\nIf no files listed, copy from stdin. Filename \"-\" is a synonym for stdin.\n\n-H Hexadecimal checksum (defaults to decimal)\n-L Little endian (defaults to big endian)\n-P Pre-inversion\n-I Skip post-inversion\n-N Do not include length in CRC calculation (or output)" + +#define HELP_chmod "usage: chmod [-R] MODE FILE...\n\nChange mode of listed file[s] (recursively with -R).\n\nMODE can be (comma-separated) stanzas: [ugoa][+-=][rwxstXugo]\n\nStanzas are applied in order: For each category (u = user,\ng = group, o = other, a = all three, if none specified default is a),\nset (+), clear (-), or copy (=), r = read, w = write, x = execute.\ns = u+s = suid, g+s = sgid, o+s = sticky. (+t is an alias for o+s).\nsuid/sgid: execute as the user/group who owns the file.\nsticky: can't delete files you don't own out of this directory\nX = x for directories or if any category already has x set.\n\nOr MODE can be an octal value up to 7777 ug uuugggooo top +\nbit 1 = o+x, bit 1<<8 = u+w, 1<<11 = g+1 sstrwxrwxrwx bottom\n\nExamples:\nchmod u+w file - allow owner of \"file\" to write to it.\nchmod 744 file - user can read/write/execute, everyone else read only" + +#define HELP_chown "see: chgrp" + +#define HELP_chgrp "usage: chgrp/chown [-RHLP] [-fvh] GROUP FILE...\n\nChange group of one or more files.\n\n-f Suppress most error messages\n-h Change symlinks instead of what they point to\n-R Recurse into subdirectories (implies -h)\n-H With -R change target of symlink, follow command line symlinks\n-L With -R change target of symlink, follow all symlinks\n-P With -R change symlink, do not follow symlinks (default)\n-v Verbose" + +#define HELP_catv "usage: catv [-evt] [FILE...]\n\nDisplay nonprinting characters as escape sequences. Use M-x for\nhigh ascii characters (>127), and ^x for other nonprinting chars.\n\n-e Mark each newline with $\n-t Show tabs as ^I\n-v Don't use ^x or M-x escapes" + +#define HELP_cat "usage: cat [-etuv] [FILE...]\n\nCopy (concatenate) files to stdout. If no files listed, copy from stdin.\nFilename \"-\" is a synonym for stdin.\n\n-e Mark each newline with $\n-t Show tabs as ^I\n-u Copy one byte at a time (slow)\n-v Display nonprinting characters as escape sequences with M-x for\n high ascii characters (>127), and ^x for other nonprinting chars" + +#define HELP_cal "usage: cal [[MONTH] YEAR]\n\nPrint a calendar.\n\nWith one argument, prints all months of the specified year.\nWith two arguments, prints calendar for month and year.\n\n-h Don't highlight today" + +#define HELP_basename "usage: basename [-a] [-s SUFFIX] NAME... | NAME [SUFFIX]\n\nReturn non-directory portion of a pathname removing suffix.\n\n-a All arguments are names\n-s SUFFIX Remove suffix (implies -a)" + diff --git a/aosp/external/toybox/android/linux/generated/newtoys.h b/aosp/external/toybox/android/linux/generated/newtoys.h new file mode 100644 index 0000000000000000000000000000000000000000..6b93beabcf7d8d66d27325630e1b5adf03ac19c8 --- /dev/null +++ b/aosp/external/toybox/android/linux/generated/newtoys.h @@ -0,0 +1,303 @@ +USE_TOYBOX(NEWTOY(toybox, NULL, TOYFLAG_STAYROOT)) +USE_SH(OLDTOY(-bash, sh, 0)) +USE_SH(OLDTOY(-sh, sh, 0)) +USE_SH(OLDTOY(-toysh, sh, 0)) +USE_TRUE(OLDTOY(:, true, TOYFLAG_NOFORK|TOYFLAG_NOHELP|TOYFLAG_MAYFORK)) +USE_TEST(OLDTOY([, test, TOYFLAG_NOFORK|TOYFLAG_NOHELP)) +USE_ACPI(NEWTOY(acpi, "abctV", TOYFLAG_USR|TOYFLAG_BIN)) +USE_GROUPADD(OLDTOY(addgroup, groupadd, TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_USERADD(OLDTOY(adduser, useradd, TOYFLAG_NEEDROOT|TOYFLAG_UMASK|TOYFLAG_SBIN)) +USE_ARCH(NEWTOY(arch, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_ARP(NEWTOY(arp, "vi:nDsdap:A:H:[+Ap][!sd]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ARPING(NEWTOY(arping, "<1>1s:I:w#<0c#<0AUDbqf[+AU][+Df]", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_ASCII(NEWTOY(ascii, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_BASE64(NEWTOY(base64, "diw#<0=76[!dw]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_BASENAME(NEWTOY(basename, "^<1as:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SH(OLDTOY(bash, sh, TOYFLAG_BIN)) +USE_BC(NEWTOY(bc, "i(interactive)l(mathlib)q(quiet)s(standard)w(warn)", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_BLKID(NEWTOY(blkid, "ULs*[!LU]", TOYFLAG_BIN)) +USE_BLOCKDEV(NEWTOY(blockdev, "<1>1(setro)(setrw)(getro)(getss)(getbsz)(setbsz)#<0(getsz)(getsize)(getsize64)(getra)(setra)#<0(flushbufs)(rereadpt)",TOYFLAG_SBIN)) +USE_BOOTCHARTD(NEWTOY(bootchartd, 0, TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN)) +USE_BRCTL(NEWTOY(brctl, "<1", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_BUNZIP2(NEWTOY(bunzip2, "cftkv", TOYFLAG_USR|TOYFLAG_BIN)) +USE_BZCAT(NEWTOY(bzcat, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_CAL(NEWTOY(cal, ">2h", TOYFLAG_USR|TOYFLAG_BIN)) +USE_CAT(NEWTOY(cat, "u"USE_CAT_V("vte"), TOYFLAG_BIN)) +USE_CATV(NEWTOY(catv, USE_CATV("vte"), TOYFLAG_USR|TOYFLAG_BIN)) +USE_SH(NEWTOY(cd, ">1LP[-LP]", TOYFLAG_NOFORK)) +USE_CHATTR(NEWTOY(chattr, "?p#v#R", TOYFLAG_BIN)) +USE_CHCON(NEWTOY(chcon, "<2hvR", TOYFLAG_USR|TOYFLAG_BIN)) +USE_CHGRP(NEWTOY(chgrp, "<2hPLHRfv[-HLP]", TOYFLAG_BIN)) +USE_CHMOD(NEWTOY(chmod, "<2?vRf[-vf]", TOYFLAG_BIN)) +USE_CHOWN(OLDTOY(chown, chgrp, TOYFLAG_BIN)) +USE_CHROOT(NEWTOY(chroot, "^<1", TOYFLAG_USR|TOYFLAG_SBIN|TOYFLAG_ARGFAIL(125))) +USE_CHRT(NEWTOY(chrt, "^mp#<0iRbrfo[!ibrfo]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_CHVT(NEWTOY(chvt, "<1", TOYFLAG_USR|TOYFLAG_BIN)) +USE_CKSUM(NEWTOY(cksum, "HIPLN", TOYFLAG_BIN)) +USE_CLEAR(NEWTOY(clear, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_CMP(NEWTOY(cmp, "<1>2ls(silent)(quiet)[!ls]", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_COMM(NEWTOY(comm, "<2>2321", TOYFLAG_USR|TOYFLAG_BIN)) +USE_COUNT(NEWTOY(count, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_CP(NEWTOY(cp, "<2"USE_CP_PRESERVE("(preserve):;")"D(parents)RHLPprdaslvnF(remove-destination)fiT[-HLPd][-ni]", TOYFLAG_BIN)) +USE_CPIO(NEWTOY(cpio, "(no-preserve-owner)(trailer)mduH:p:|i|t|F:v(verbose)o|[!pio][!pot][!pF]", TOYFLAG_BIN)) +USE_CRC32(NEWTOY(crc32, 0, TOYFLAG_BIN)) +USE_CROND(NEWTOY(crond, "fbSl#<0=8d#<0L:c:[-bf][-LS][-ld]", TOYFLAG_USR|TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_CRONTAB(NEWTOY(crontab, "c:u:elr[!elr]", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_STAYROOT)) +USE_CUT(NEWTOY(cut, "b*|c*|f*|F*|C*|O(output-delimiter):d:sDn[!cbf]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_DATE(NEWTOY(date, "d:D:r:u[!dr]", TOYFLAG_BIN)) +USE_DD(NEWTOY(dd, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_DEALLOCVT(NEWTOY(deallocvt, ">1", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_NEEDROOT)) +USE_GROUPDEL(OLDTOY(delgroup, groupdel, TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_USERDEL(OLDTOY(deluser, userdel, TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_DEMO_MANY_OPTIONS(NEWTOY(demo_many_options, "ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba", TOYFLAG_BIN)) +USE_DEMO_NUMBER(NEWTOY(demo_number, "D#=3<3hdbs", TOYFLAG_BIN)) +USE_DEMO_SCANKEY(NEWTOY(demo_scankey, 0, TOYFLAG_BIN)) +USE_DEMO_UTF8TOWC(NEWTOY(demo_utf8towc, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_DEVMEM(NEWTOY(devmem, "<1>3", TOYFLAG_USR|TOYFLAG_BIN)) +USE_DF(NEWTOY(df, "HPkhit*a[-HPkh]", TOYFLAG_SBIN)) +USE_DHCP(NEWTOY(dhcp, "V:H:F:x*r:O*A#<0=20T#<0=3t#<0=3s:p:i:SBRCaovqnbf", TOYFLAG_SBIN|TOYFLAG_ROOTONLY)) +USE_DHCP6(NEWTOY(dhcp6, "r:A#<0T#<0t#<0s:p:i:SRvqnbf", TOYFLAG_SBIN|TOYFLAG_ROOTONLY)) +USE_DHCPD(NEWTOY(dhcpd, ">1P#<0>65535fi:S46[!46]", TOYFLAG_SBIN|TOYFLAG_ROOTONLY)) +USE_DIFF(NEWTOY(diff, "<2>2(color)(strip-trailing-cr)B(ignore-blank-lines)d(minimal)b(ignore-space-change)ut(expand-tabs)w(ignore-all-space)i(ignore-case)T(initial-tab)s(report-identical-files)q(brief)a(text)L(label)*S(starting-file):N(new-file)r(recursive)U(unified)#<0=3", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_DIRNAME(NEWTOY(dirname, "<1", TOYFLAG_USR|TOYFLAG_BIN)) +USE_DMESG(NEWTOY(dmesg, "w(follow)CSTtrs#<1n#c[!Ttr][!Cc][!Sw]", TOYFLAG_BIN)) +USE_DNSDOMAINNAME(NEWTOY(dnsdomainname, ">0", TOYFLAG_BIN)) +USE_DOS2UNIX(NEWTOY(dos2unix, 0, TOYFLAG_BIN)) +USE_DU(NEWTOY(du, "d#<0=-1hmlcaHkKLsx[-HL][-kKmh]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_DUMPLEASES(NEWTOY(dumpleases, ">0arf:[!ar]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ECHO(NEWTOY(echo, "^?Een[-eE]", TOYFLAG_BIN|TOYFLAG_MAYFORK)) +USE_EGREP(OLDTOY(egrep, grep, TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_EJECT(NEWTOY(eject, ">1stT[!tT]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ENV(NEWTOY(env, "^0iu*", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(125))) +USE_SH(NEWTOY(exit, 0, TOYFLAG_NOFORK)) +USE_EXPAND(NEWTOY(expand, "t*", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_EXPR(NEWTOY(expr, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_FACTOR(NEWTOY(factor, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_FALLOCATE(NEWTOY(fallocate, ">1l#|o#", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FALSE(NEWTOY(false, NULL, TOYFLAG_BIN|TOYFLAG_NOHELP|TOYFLAG_MAYFORK)) +USE_FDISK(NEWTOY(fdisk, "C#<0H#<0S#<0b#<512ul", TOYFLAG_SBIN)) +USE_FGREP(OLDTOY(fgrep, grep, TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_FILE(NEWTOY(file, "<1bhLs[!hL]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FIND(NEWTOY(find, "?^HL[-HL]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FLOCK(NEWTOY(flock, "<1>1nsux[-sux]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FMT(NEWTOY(fmt, "w#<0=75", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_FOLD(NEWTOY(fold, "bsuw#<1", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FREE(NEWTOY(free, "htgmkb[!htgmkb]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FREERAMDISK(NEWTOY(freeramdisk, "<1>1", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_FSCK(NEWTOY(fsck, "?t:ANPRTVsC#", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FSFREEZE(NEWTOY(fsfreeze, "<1>1f|u|[!fu]", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_FSTYPE(NEWTOY(fstype, "<1", TOYFLAG_BIN)) +USE_FSYNC(NEWTOY(fsync, "<1d", TOYFLAG_BIN)) +USE_FTPGET(NEWTOY(ftpget, "<2>3P:cp:u:vgslLmMdD[-gs][!gslLmMdD][!clL]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FTPPUT(OLDTOY(ftpput, ftpget, TOYFLAG_USR|TOYFLAG_BIN)) +USE_GETCONF(NEWTOY(getconf, ">2al", TOYFLAG_USR|TOYFLAG_BIN)) +USE_GETENFORCE(NEWTOY(getenforce, ">0", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_GETFATTR(NEWTOY(getfattr, "(only-values)dhn:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_GETOPT(NEWTOY(getopt, "^a(alternative)n:(name)o:(options)l*(long)(longoptions)Tu", TOYFLAG_USR|TOYFLAG_BIN)) +USE_GETTY(NEWTOY(getty, "<2t#<0H:I:l:f:iwnmLh",TOYFLAG_SBIN)) +USE_GREP(NEWTOY(grep, "(line-buffered)(color):;(exclude-dir)*S(exclude)*M(include)*ZzEFHIab(byte-offset)h(no-filename)ino(only-matching)rRsvwcl(files-with-matches)q(quiet)(silent)e*f*C#B#A#m#x[!wx][!EFw]", TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_GROUPADD(NEWTOY(groupadd, "<1>2g#<0S", TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_GROUPDEL(NEWTOY(groupdel, "<1>2", TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_GROUPS(NEWTOY(groups, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_GUNZIP(NEWTOY(gunzip, "cdfk123456789[-123456789]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_GZIP(NEWTOY(gzip, "ncdfk123456789[-123456789]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_REBOOT(OLDTOY(halt, reboot, TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_HEAD(NEWTOY(head, "?n(lines)#<0=10c(bytes)#<0qv[-nc]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_HELLO(NEWTOY(hello, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_HELP(NEWTOY(help, "ahu", TOYFLAG_BIN|TOYFLAG_MAYFORK)) +USE_HEXEDIT(NEWTOY(hexedit, "<1>1r", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_HOST(NEWTOY(host, "<1>2avt:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_HOSTID(NEWTOY(hostid, ">0", TOYFLAG_USR|TOYFLAG_BIN)) +USE_HOSTNAME(NEWTOY(hostname, ">1bdsfF:[!bdsf]", TOYFLAG_BIN)) +USE_HWCLOCK(NEWTOY(hwclock, ">0(fast)f(rtc):u(utc)l(localtime)t(systz)s(hctosys)r(show)w(systohc)[-ul][!rtsw]", TOYFLAG_SBIN)) +USE_I2CDETECT(NEWTOY(i2cdetect, ">3aFly", TOYFLAG_USR|TOYFLAG_BIN)) +USE_I2CDUMP(NEWTOY(i2cdump, "<2>2fy", TOYFLAG_USR|TOYFLAG_BIN)) +USE_I2CGET(NEWTOY(i2cget, "<3>3fy", TOYFLAG_USR|TOYFLAG_BIN)) +USE_I2CSET(NEWTOY(i2cset, "<4fy", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ICONV(NEWTOY(iconv, "cst:f:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ID(NEWTOY(id, ">1"USE_ID_Z("Z")"nGgru[!"USE_ID_Z("Z")"Ggu]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_IFCONFIG(NEWTOY(ifconfig, "^?aS", TOYFLAG_SBIN)) +USE_INIT(NEWTOY(init, "", TOYFLAG_SBIN)) +USE_INOTIFYD(NEWTOY(inotifyd, "<2", TOYFLAG_USR|TOYFLAG_BIN)) +USE_INSMOD(NEWTOY(insmod, "<1", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_INSTALL(NEWTOY(install, "<1cdDpsvm:o:g:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_IONICE(NEWTOY(ionice, "^tc#<0>3=2n#<0>7=5p#", TOYFLAG_USR|TOYFLAG_BIN)) +USE_IORENICE(NEWTOY(iorenice, "?<1>3", TOYFLAG_USR|TOYFLAG_BIN)) +USE_IOTOP(NEWTOY(iotop, ">0AaKO" "Hk*o*p*u*s#<1=7d%<100=3000m#n#<1bq", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_STAYROOT|TOYFLAG_LOCALE)) +USE_IP(NEWTOY(ip, NULL, TOYFLAG_SBIN)) +USE_IP(OLDTOY(ipaddr, ip, TOYFLAG_SBIN)) +USE_IPCRM(NEWTOY(ipcrm, "m*M*s*S*q*Q*", TOYFLAG_USR|TOYFLAG_BIN)) +USE_IPCS(NEWTOY(ipcs, "acptulsqmi#", TOYFLAG_USR|TOYFLAG_BIN)) +USE_IP(OLDTOY(iplink, ip, TOYFLAG_SBIN)) +USE_IP(OLDTOY(iproute, ip, TOYFLAG_SBIN)) +USE_IP(OLDTOY(iprule, ip, TOYFLAG_SBIN)) +USE_IP(OLDTOY(iptunnel, ip, TOYFLAG_SBIN)) +USE_KILL(NEWTOY(kill, "?ls: ", TOYFLAG_BIN|TOYFLAG_MAYFORK)) +USE_KILLALL(NEWTOY(killall, "?s:ilqvw", TOYFLAG_USR|TOYFLAG_BIN)) +USE_KILLALL5(NEWTOY(killall5, "?o*ls: [!lo][!ls]", TOYFLAG_SBIN)) +USE_KLOGD(NEWTOY(klogd, "c#<1>8n", TOYFLAG_SBIN)) +USE_LAST(NEWTOY(last, "f:W", TOYFLAG_BIN)) +USE_LINK(NEWTOY(link, "<2>2", TOYFLAG_USR|TOYFLAG_BIN)) +USE_LN(NEWTOY(ln, "<1rt:Tvnfs", TOYFLAG_BIN)) +USE_LOAD_POLICY(NEWTOY(load_policy, "<1>1", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_LOG(NEWTOY(log, "<1p:t:", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_LOGGER(NEWTOY(logger, "st:p:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_LOGIN(NEWTOY(login, ">1f:ph:", TOYFLAG_BIN|TOYFLAG_NEEDROOT)) +USE_LOGNAME(NEWTOY(logname, ">0", TOYFLAG_USR|TOYFLAG_BIN)) +USE_LOGWRAPPER(NEWTOY(logwrapper, 0, TOYFLAG_NOHELP|TOYFLAG_USR|TOYFLAG_BIN)) +USE_LOSETUP(NEWTOY(losetup, ">2S(sizelimit)#s(show)ro#j:fdcaD[!afj]", TOYFLAG_SBIN)) +USE_LS(NEWTOY(ls, "(color):;(full-time)(show-control-chars)ZgoACFHLRSabcdfhikl@mnpqrstuw#=80<0x1[-Cxm1][-Cxml][-Cxmo][-Cxmg][-cu][-ftS][-HL][!qb]", TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_LSATTR(NEWTOY(lsattr, "ldapvR", TOYFLAG_BIN)) +USE_LSMOD(NEWTOY(lsmod, NULL, TOYFLAG_SBIN)) +USE_LSOF(NEWTOY(lsof, "lp*t", TOYFLAG_USR|TOYFLAG_BIN)) +USE_LSPCI(NEWTOY(lspci, "emkn"USE_LSPCI_TEXT("@i:"), TOYFLAG_USR|TOYFLAG_BIN)) +USE_LSUSB(NEWTOY(lsusb, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_MAKEDEVS(NEWTOY(makedevs, "<1>1d:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MAN(NEWTOY(man, "k:M:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MCOOKIE(NEWTOY(mcookie, "v(verbose)V(version)", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MD5SUM(NEWTOY(md5sum, "bc(check)s(status)[!bc]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MDEV(NEWTOY(mdev, "s", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_UMASK)) +USE_MICROCOM(NEWTOY(microcom, "<1>1s:X", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MIX(NEWTOY(mix, "c:d:l#r#", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MKDIR(NEWTOY(mkdir, "<1"USE_MKDIR_Z("Z:")"vp(parent)(parents)m:", TOYFLAG_BIN|TOYFLAG_UMASK)) +USE_MKE2FS(NEWTOY(mke2fs, "<1>2g:Fnqm#N#i#b#", TOYFLAG_SBIN)) +USE_MKFIFO(NEWTOY(mkfifo, "<1"USE_MKFIFO_Z("Z:")"m:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MKNOD(NEWTOY(mknod, "<2>4m(mode):"USE_MKNOD_Z("Z:"), TOYFLAG_BIN|TOYFLAG_UMASK)) +USE_MKPASSWD(NEWTOY(mkpasswd, ">2S:m:P#=0<0", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MKSWAP(NEWTOY(mkswap, "<1>1L:", TOYFLAG_SBIN)) +USE_MKTEMP(NEWTOY(mktemp, ">1(tmpdir);:uqd(directory)p:t", TOYFLAG_BIN)) +USE_MODINFO(NEWTOY(modinfo, "<1b:k:F:0", TOYFLAG_SBIN)) +USE_MODPROBE(NEWTOY(modprobe, "alrqvsDbd*", TOYFLAG_SBIN)) +USE_MORE(NEWTOY(more, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_MOUNT(NEWTOY(mount, "?O:afnrvwt:o*[-rw]", TOYFLAG_BIN|TOYFLAG_STAYROOT)) +USE_MOUNTPOINT(NEWTOY(mountpoint, "<1qdx[-dx]", TOYFLAG_BIN)) +USE_MV(NEWTOY(mv, "<2vnF(remove-destination)fiT[-ni]", TOYFLAG_BIN)) +USE_NBD_CLIENT(OLDTOY(nbd-client, nbd_client, TOYFLAG_USR|TOYFLAG_BIN)) +USE_NBD_CLIENT(NEWTOY(nbd_client, "<3>3ns", 0)) +USE_NETCAT(OLDTOY(nc, netcat, TOYFLAG_USR|TOYFLAG_BIN)) +USE_NETCAT(NEWTOY(netcat, USE_NETCAT_LISTEN("^tlL")"w#<1W#<1p#<1>65535q#<1s:f:46uU"USE_NETCAT_LISTEN("[!tlL][!Lw]")"[!46U]", TOYFLAG_BIN)) +USE_NETSTAT(NEWTOY(netstat, "pWrxwutneal", TOYFLAG_BIN)) +USE_NICE(NEWTOY(nice, "^<1n#", TOYFLAG_BIN)) +USE_NL(NEWTOY(nl, "v#=1l#w#<0=6Eb:n:s:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_NOHUP(NEWTOY(nohup, "<1^", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(125))) +USE_NPROC(NEWTOY(nproc, "(all)", TOYFLAG_USR|TOYFLAG_BIN)) +USE_NSENTER(NEWTOY(nsenter, "<1F(no-fork)t#<1(target)i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user);", TOYFLAG_USR|TOYFLAG_BIN)) +USE_OD(NEWTOY(od, "j#vw#<1=16N#xsodcbA:t*", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ONEIT(NEWTOY(oneit, "^<1nc:p3[!pn]", TOYFLAG_SBIN)) +USE_OPENVT(NEWTOY(openvt, "c#<1>63sw", TOYFLAG_BIN|TOYFLAG_NEEDROOT)) +USE_PARTPROBE(NEWTOY(partprobe, "<1", TOYFLAG_SBIN)) +USE_PASSWD(NEWTOY(passwd, ">1a:dlu", TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN)) +USE_PASTE(NEWTOY(paste, "d:s", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_PATCH(NEWTOY(patch, ">2(no-backup-if-mismatch)(dry-run)"USE_TOYBOX_DEBUG("x")"F#g#fulp#d:i:Rs(quiet)", TOYFLAG_USR|TOYFLAG_BIN)) +USE_PGREP(NEWTOY(pgrep, "?cld:u*U*t*s*P*g*G*fnovxL:[-no]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_PIDOF(NEWTOY(pidof, "<1so:x", TOYFLAG_BIN)) +USE_PING(NEWTOY(ping, "<1>1m#t#<0>255=64c#<0=3s#<0>4088=56i%W#<0=3w#<0qf46I:[-46]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_PING(OLDTOY(ping6, ping, TOYFLAG_USR|TOYFLAG_BIN)) +USE_PIVOT_ROOT(NEWTOY(pivot_root, "<2>2", TOYFLAG_SBIN)) +USE_PKILL(NEWTOY(pkill, "?Vu*U*t*s*P*g*G*fnovxl:[-no]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_PMAP(NEWTOY(pmap, "<1xq", TOYFLAG_USR|TOYFLAG_BIN)) +USE_REBOOT(OLDTOY(poweroff, reboot, TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_PRINTENV(NEWTOY(printenv, "0(null)", TOYFLAG_BIN)) +USE_PRINTF(NEWTOY(printf, "<1?^", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_MAYFORK)) +USE_ULIMIT(OLDTOY(prlimit, ulimit, TOYFLAG_USR|TOYFLAG_BIN)) +USE_PS(NEWTOY(ps, "k(sort)*P(ppid)*aAdeflMno*O*p(pid)*s*t*Tu*U*g*G*wZ[!ol][+Ae][!oO]", TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_PWD(NEWTOY(pwd, ">0LP[-LP]", TOYFLAG_BIN|TOYFLAG_MAYFORK)) +USE_PWDX(NEWTOY(pwdx, "<1a", TOYFLAG_USR|TOYFLAG_BIN)) +USE_READAHEAD(NEWTOY(readahead, NULL, TOYFLAG_BIN)) +USE_READELF(NEWTOY(readelf, "<1(dyn-syms)adhlnp:SsWx:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_READLINK(NEWTOY(readlink, "<1nqmef(canonicalize)[-mef]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_REALPATH(NEWTOY(realpath, "<1", TOYFLAG_USR|TOYFLAG_BIN)) +USE_REBOOT(NEWTOY(reboot, "fn", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_RENICE(NEWTOY(renice, "<1gpun#|", TOYFLAG_USR|TOYFLAG_BIN)) +USE_RESET(NEWTOY(reset, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_RESTORECON(NEWTOY(restorecon, "<1DFnRrv", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_REV(NEWTOY(rev, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_RFKILL(NEWTOY(rfkill, "<1>2", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_RM(NEWTOY(rm, "fiRrv[-fi]", TOYFLAG_BIN)) +USE_RMDIR(NEWTOY(rmdir, "<1(ignore-fail-on-non-empty)p", TOYFLAG_BIN)) +USE_RMMOD(NEWTOY(rmmod, "<1wf", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_ROUTE(NEWTOY(route, "?neA:", TOYFLAG_BIN)) +USE_RUNCON(NEWTOY(runcon, "<2", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_SED(NEWTOY(sed, "(help)(version)e*f*i:;nErz(null-data)[+Er]", TOYFLAG_BIN|TOYFLAG_LOCALE|TOYFLAG_NOHELP)) +USE_SENDEVENT(NEWTOY(sendevent, "<4>4", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_SEQ(NEWTOY(seq, "<1>3?f:s:w[!fw]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SETENFORCE(NEWTOY(setenforce, "<1>1", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_SETFATTR(NEWTOY(setfattr, "hn:|v:x:|[!xv]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SETSID(NEWTOY(setsid, "^<1wcd[!dc]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SH(NEWTOY(sh, "(noediting)(noprofile)(norc)sc:i", TOYFLAG_BIN)) +USE_SHA1SUM(NEWTOY(sha1sum, "bc(check)s(status)[!bc]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TOYBOX_LIBCRYPTO(USE_SHA224SUM(OLDTOY(sha224sum, sha1sum, TOYFLAG_USR|TOYFLAG_BIN))) +USE_TOYBOX_LIBCRYPTO(USE_SHA256SUM(OLDTOY(sha256sum, sha1sum, TOYFLAG_USR|TOYFLAG_BIN))) +USE_TOYBOX_LIBCRYPTO(USE_SHA384SUM(OLDTOY(sha384sum, sha1sum, TOYFLAG_USR|TOYFLAG_BIN))) +USE_TOYBOX_LIBCRYPTO(USE_SHA512SUM(OLDTOY(sha512sum, sha1sum, TOYFLAG_USR|TOYFLAG_BIN))) +USE_SHRED(NEWTOY(shred, "<1zxus#<1n#<1o#<0f", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SKELETON(NEWTOY(skeleton, "(walrus)(blubber):;(also):e@d*c#b:a", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SKELETON_ALIAS(NEWTOY(skeleton_alias, "b#dq", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SLEEP(NEWTOY(sleep, "<1", TOYFLAG_BIN)) +USE_SNTP(NEWTOY(sntp, ">1M :m :Sp:t#<0=1>16asdDqr#<4>17=10[!as]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SORT(NEWTOY(sort, USE_SORT_FLOAT("g")"S:T:m" "o:k*t:" "xVbMcszdfirun", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_SPLIT(NEWTOY(split, ">2a#<1=2>9b#<1l#<1[!bl]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_STAT(NEWTOY(stat, "<1c:(format)fLt", TOYFLAG_BIN)) +USE_STRINGS(NEWTOY(strings, "t:an#=4<1fo", TOYFLAG_USR|TOYFLAG_BIN)) +USE_STTY(NEWTOY(stty, "?aF:g[!ag]", TOYFLAG_BIN)) +USE_SU(NEWTOY(su, "^lmpu:g:c:s:[!lmp]", TOYFLAG_BIN|TOYFLAG_ROOTONLY)) +USE_SULOGIN(NEWTOY(sulogin, "t#<0=0", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_SWAPOFF(NEWTOY(swapoff, "<1>1", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_SWAPON(NEWTOY(swapon, "<1>1p#<0>32767d", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_SWITCH_ROOT(NEWTOY(switch_root, "<2c:h", TOYFLAG_SBIN)) +USE_SYNC(NEWTOY(sync, NULL, TOYFLAG_BIN)) +USE_SYSCTL(NEWTOY(sysctl, "^neNqwpaA[!ap][!aq][!aw][+aA]", TOYFLAG_SBIN)) +USE_SYSLOGD(NEWTOY(syslogd,">0l#<1>8=8R:b#<0>99=1s#<0=200m#<0>71582787=20O:p:f:a:nSKLD", TOYFLAG_SBIN|TOYFLAG_STAYROOT)) +USE_TAC(NEWTOY(tac, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_TAIL(NEWTOY(tail, "?fc-n-[-cn]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TAR(NEWTOY(tar, "&(restrict)(full-time)(no-recursion)(numeric-owner)(no-same-permissions)(overwrite)(exclude)*(mode):(mtime):(group):(owner):(to-command):o(no-same-owner)p(same-permissions)k(keep-old)c(create)|h(dereference)x(extract)|t(list)|v(verbose)J(xz)j(bzip2)z(gzip)S(sparse)O(to-stdout)m(touch)X(exclude-from)*T(files-from)*C(directory):f(file):a[!txc][!jzJa]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TASKSET(NEWTOY(taskset, "<1^pa", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_STAYROOT)) +USE_TCPSVD(NEWTOY(tcpsvd, "^<3c#=30<1C:b#=20<0u:l:hEv", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TEE(NEWTOY(tee, "ia", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TELNET(NEWTOY(telnet, "<1>2", TOYFLAG_BIN)) +USE_TELNETD(NEWTOY(telnetd, "w#<0b:p#<0>65535=23f:l:FSKi[!wi]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TEST(NEWTOY(test, 0, TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_NOHELP|TOYFLAG_MAYFORK)) +USE_TFTP(NEWTOY(tftp, "<1b#<8>65464r:l:g|p|[!gp]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TFTPD(NEWTOY(tftpd, "rcu:l", TOYFLAG_BIN)) +USE_TIME(NEWTOY(time, "<1^pv", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_MAYFORK)) +USE_TIMEOUT(NEWTOY(timeout, "<2^(foreground)(preserve-status)vk:s(signal):", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(125))) +USE_TOP(NEWTOY(top, ">0O*" "Hk*o*p*u*s#<1d%<100=3000m#n#<1bq[!oO]", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_TOUCH(NEWTOY(touch, "<1acd:fmr:t:h[!dtr]", TOYFLAG_BIN)) +USE_SH(OLDTOY(toysh, sh, TOYFLAG_BIN)) +USE_TR(NEWTOY(tr, "^>2<1Ccsd[+cC]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TRACEROUTE(NEWTOY(traceroute, "<1>2i:f#<1>255=1z#<0>86400=0g*w#<0>86400=5t#<0>255=0s:q#<1>255=3p#<1>65535=33434m#<1>255=30rvndlIUF64", TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN)) +USE_TRACEROUTE(OLDTOY(traceroute6,traceroute, TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN)) +USE_TRUE(NEWTOY(true, NULL, TOYFLAG_BIN|TOYFLAG_NOHELP|TOYFLAG_MAYFORK)) +USE_TRUNCATE(NEWTOY(truncate, "<1s:|c", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TTY(NEWTOY(tty, "s", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TUNCTL(NEWTOY(tunctl, "<1>1t|d|u:T[!td]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TCPSVD(OLDTOY(udpsvd, tcpsvd, TOYFLAG_USR|TOYFLAG_BIN)) +USE_ULIMIT(NEWTOY(ulimit, ">1P#<1SHavutsrRqpnmlifedc[-SH][!apvutsrRqnmlifedc]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_UMOUNT(NEWTOY(umount, "cndDflrat*v[!na]", TOYFLAG_BIN|TOYFLAG_STAYROOT)) +USE_UNAME(NEWTOY(uname, "oamvrns[+os]", TOYFLAG_BIN)) +USE_UNIQ(NEWTOY(uniq, "f#s#w#zicdu", TOYFLAG_USR|TOYFLAG_BIN)) +USE_UNIX2DOS(NEWTOY(unix2dos, 0, TOYFLAG_BIN)) +USE_UNLINK(NEWTOY(unlink, "<1>1", TOYFLAG_USR|TOYFLAG_BIN)) +USE_UNSHARE(NEWTOY(unshare, "<1^f(fork);r(map-root-user);i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user);", TOYFLAG_USR|TOYFLAG_BIN)) +USE_UPTIME(NEWTOY(uptime, ">0ps", TOYFLAG_USR|TOYFLAG_BIN)) +USE_USERADD(NEWTOY(useradd, "<1>2u#<0G:s:g:h:SDH", TOYFLAG_NEEDROOT|TOYFLAG_UMASK|TOYFLAG_SBIN)) +USE_USERDEL(NEWTOY(userdel, "<1>1r", TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_USLEEP(NEWTOY(usleep, "<1", TOYFLAG_BIN)) +USE_UUDECODE(NEWTOY(uudecode, ">1o:", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_UMASK)) +USE_UUENCODE(NEWTOY(uuencode, "<1>2m", TOYFLAG_USR|TOYFLAG_BIN)) +USE_UUIDGEN(NEWTOY(uuidgen, ">0r(random)", TOYFLAG_USR|TOYFLAG_BIN)) +USE_VCONFIG(NEWTOY(vconfig, "<2>4", TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_VI(NEWTOY(vi, ">1s:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_VMSTAT(NEWTOY(vmstat, ">2n", TOYFLAG_BIN)) +USE_W(NEWTOY(w, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_WATCH(NEWTOY(watch, "^<1n%<100=2000tebx", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_WC(NEWTOY(wc, "mcwl", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_WGET(NEWTOY(wget, "(no-check-certificate)O:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_WHICH(NEWTOY(which, "<1a", TOYFLAG_USR|TOYFLAG_BIN)) +USE_WHO(NEWTOY(who, "a", TOYFLAG_USR|TOYFLAG_BIN)) +USE_WHOAMI(OLDTOY(whoami, logname, TOYFLAG_USR|TOYFLAG_BIN)) +USE_XARGS(NEWTOY(xargs, "^E:P#optrn#<1(max-args)s#0[!0E]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_XXD(NEWTOY(xxd, ">1c#l#o#g#<1=2iprs#[!rs]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_XZCAT(NEWTOY(xzcat, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_YES(NEWTOY(yes, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_ZCAT(NEWTOY(zcat, "cdfk123456789[-123456789]", TOYFLAG_USR|TOYFLAG_BIN)) diff --git a/aosp/external/toybox/android/linux/generated/tags.h b/aosp/external/toybox/android/linux/generated/tags.h new file mode 100644 index 0000000000000000000000000000000000000000..e1e4d31485815cf3db91dcd3c8846cdd79e8816b --- /dev/null +++ b/aosp/external/toybox/android/linux/generated/tags.h @@ -0,0 +1,140 @@ +#define DD_conv_fsync 0 +#define _DD_conv_fsync (1<<0) +#define DD_conv_noerror 1 +#define _DD_conv_noerror (1<<1) +#define DD_conv_notrunc 2 +#define _DD_conv_notrunc (1<<2) +#define DD_conv_sync 3 +#define _DD_conv_sync (1<<3) +#define DD_iflag_count_bytes 0 +#define _DD_iflag_count_bytes (1<<0) +#define DD_iflag_skip_bytes 1 +#define _DD_iflag_skip_bytes (1<<1) +#define DD_oflag_seek_bytes 0 +#define _DD_oflag_seek_bytes (1<<0) +#define CP_mode 0 +#define _CP_mode (1<<0) +#define CP_ownership 1 +#define _CP_ownership (1<<1) +#define CP_timestamps 2 +#define _CP_timestamps (1<<2) +#define CP_context 3 +#define _CP_context (1<<3) +#define CP_xattr 4 +#define _CP_xattr (1<<4) +#define PS_PID 0 +#define _PS_PID (1<<0) +#define PS_PPID 1 +#define _PS_PPID (1<<1) +#define PS_PRI 2 +#define _PS_PRI (1<<2) +#define PS_NI 3 +#define _PS_NI (1<<3) +#define PS_ADDR 4 +#define _PS_ADDR (1<<4) +#define PS_SZ 5 +#define _PS_SZ (1<<5) +#define PS_RSS 6 +#define _PS_RSS (1<<6) +#define PS_PGID 7 +#define _PS_PGID (1<<7) +#define PS_VSZ 8 +#define _PS_VSZ (1<<8) +#define PS_MAJFL 9 +#define _PS_MAJFL (1<<9) +#define PS_MINFL 10 +#define _PS_MINFL (1<<10) +#define PS_PR 11 +#define _PS_PR (1<<11) +#define PS_PSR 12 +#define _PS_PSR (1<<12) +#define PS_RTPRIO 13 +#define _PS_RTPRIO (1<<13) +#define PS_SCH 14 +#define _PS_SCH (1<<14) +#define PS_CPU 15 +#define _PS_CPU (1<<15) +#define PS_TID 16 +#define _PS_TID (1<<16) +#define PS_TCNT 17 +#define _PS_TCNT (1<<17) +#define PS_BIT 18 +#define _PS_BIT (1<<18) +#define PS_TTY 19 +#define _PS_TTY (1<<19) +#define PS_WCHAN 20 +#define _PS_WCHAN (1<<20) +#define PS_LABEL 21 +#define _PS_LABEL (1<<21) +#define PS_COMM 22 +#define _PS_COMM (1<<22) +#define PS_NAME 23 +#define _PS_NAME (1<<23) +#define PS_COMMAND 24 +#define _PS_COMMAND (1<<24) +#define PS_CMDLINE 25 +#define _PS_CMDLINE (1<<25) +#define PS_ARGS 26 +#define _PS_ARGS (1<<26) +#define PS_CMD 27 +#define _PS_CMD (1<<27) +#define PS_UID 28 +#define _PS_UID (1<<28) +#define PS_USER 29 +#define _PS_USER (1<<29) +#define PS_RUID 30 +#define _PS_RUID (1<<30) +#define PS_RUSER 31 +#define _PS_RUSER (1<<31) +#define PS_GID 32 +#define _PS_GID (1LL<<32) +#define PS_GROUP 33 +#define _PS_GROUP (1LL<<33) +#define PS_RGID 34 +#define _PS_RGID (1LL<<34) +#define PS_RGROUP 35 +#define _PS_RGROUP (1LL<<35) +#define PS_TIME 36 +#define _PS_TIME (1LL<<36) +#define PS_ELAPSED 37 +#define _PS_ELAPSED (1LL<<37) +#define PS_TIME_ 38 +#define _PS_TIME_ (1LL<<38) +#define PS_C 39 +#define _PS_C (1LL<<39) +#define PS__VSZ 40 +#define _PS__VSZ (1LL<<40) +#define PS__MEM 41 +#define _PS__MEM (1LL<<41) +#define PS__CPU 42 +#define _PS__CPU (1LL<<42) +#define PS_VIRT 43 +#define _PS_VIRT (1LL<<43) +#define PS_RES 44 +#define _PS_RES (1LL<<44) +#define PS_SHR 45 +#define _PS_SHR (1LL<<45) +#define PS_READ 46 +#define _PS_READ (1LL<<46) +#define PS_WRITE 47 +#define _PS_WRITE (1LL<<47) +#define PS_IO 48 +#define _PS_IO (1LL<<48) +#define PS_DREAD 49 +#define _PS_DREAD (1LL<<49) +#define PS_DWRITE 50 +#define _PS_DWRITE (1LL<<50) +#define PS_SWAP 51 +#define _PS_SWAP (1LL<<51) +#define PS_DIO 52 +#define _PS_DIO (1LL<<52) +#define PS_STIME 53 +#define _PS_STIME (1LL<<53) +#define PS_F 54 +#define _PS_F (1LL<<54) +#define PS_S 55 +#define _PS_S (1LL<<55) +#define PS_STAT 56 +#define _PS_STAT (1LL<<56) +#define PS_PCY 57 +#define _PS_PCY (1LL<<57) diff --git a/aosp/external/toybox/android/mac/generated/config.h b/aosp/external/toybox/android/mac/generated/config.h new file mode 100644 index 0000000000000000000000000000000000000000..07b3de56475fc3840f9cf0ff0148952344f7a603 --- /dev/null +++ b/aosp/external/toybox/android/mac/generated/config.h @@ -0,0 +1,650 @@ +#define CFG_TOYBOX_ANDROID_SCHEDPOLICY 0 +#define USE_TOYBOX_ANDROID_SCHEDPOLICY(...) +#define CFG_TOYBOX_CONTAINER 0 +#define USE_TOYBOX_CONTAINER(...) +#define CFG_TOYBOX_DEBUG 0 +#define USE_TOYBOX_DEBUG(...) +#define CFG_TOYBOX_FALLOCATE 0 +#define USE_TOYBOX_FALLOCATE(...) +#define CFG_TOYBOX_FIFREEZE 0 +#define USE_TOYBOX_FIFREEZE(...) +#define CFG_TOYBOX_FLOAT 1 +#define USE_TOYBOX_FLOAT(...) __VA_ARGS__ +#define CFG_TOYBOX_FORK 1 +#define USE_TOYBOX_FORK(...) __VA_ARGS__ +#define CFG_TOYBOX_FREE 0 +#define USE_TOYBOX_FREE(...) +#define CFG_TOYBOX_GETRANDOM 0 +#define USE_TOYBOX_GETRANDOM(...) +#define CFG_TOYBOX_HELP_DASHDASH 1 +#define USE_TOYBOX_HELP_DASHDASH(...) __VA_ARGS__ +#define CFG_TOYBOX_HELP 1 +#define USE_TOYBOX_HELP(...) __VA_ARGS__ +#define CFG_TOYBOX_I18N 1 +#define USE_TOYBOX_I18N(...) __VA_ARGS__ +#define CFG_TOYBOX_ICONV 1 +#define USE_TOYBOX_ICONV(...) __VA_ARGS__ +#define CFG_TOYBOX_LIBCRYPTO 1 +#define USE_TOYBOX_LIBCRYPTO(...) __VA_ARGS__ +#define CFG_TOYBOX_LIBZ 1 +#define USE_TOYBOX_LIBZ(...) __VA_ARGS__ +#define CFG_TOYBOX_LSM_NONE 1 +#define USE_TOYBOX_LSM_NONE(...) __VA_ARGS__ +#define CFG_TOYBOX_MUSL_NOMMU_IS_BROKEN 0 +#define USE_TOYBOX_MUSL_NOMMU_IS_BROKEN(...) +#define CFG_TOYBOX_NORECURSE 0 +#define USE_TOYBOX_NORECURSE(...) +#define CFG_TOYBOX_ON_ANDROID 0 +#define USE_TOYBOX_ON_ANDROID(...) +#define CFG_TOYBOX_PEDANTIC_ARGS 0 +#define USE_TOYBOX_PEDANTIC_ARGS(...) +#define CFG_TOYBOX_PRLIMIT 0 +#define USE_TOYBOX_PRLIMIT(...) +#define CFG_TOYBOX_SELINUX 0 +#define USE_TOYBOX_SELINUX(...) +#define CFG_TOYBOX_SHADOW 0 +#define USE_TOYBOX_SHADOW(...) +#define CFG_TOYBOX_SMACK 0 +#define USE_TOYBOX_SMACK(...) +#define CFG_TOYBOX_SUID 1 +#define USE_TOYBOX_SUID(...) __VA_ARGS__ +#define CFG_TOYBOX_UID_SYS 100 +#define CFG_TOYBOX_UID_USR 500 +#define CFG_TOYBOX_UTMPX 0 +#define USE_TOYBOX_UTMPX(...) +#define CFG_TOYBOX 1 +#define USE_TOYBOX(...) __VA_ARGS__ +#define CFG_ACPI 0 +#define USE_ACPI(...) +#define CFG_ARCH 0 +#define USE_ARCH(...) +#define CFG_ARPING 0 +#define USE_ARPING(...) +#define CFG_ARP 0 +#define USE_ARP(...) +#define CFG_ASCII 0 +#define USE_ASCII(...) +#define CFG_BASE64 0 +#define USE_BASE64(...) +#define CFG_BASENAME 1 +#define USE_BASENAME(...) __VA_ARGS__ +#define CFG_BC 0 +#define USE_BC(...) +#define CFG_BLKID 0 +#define USE_BLKID(...) +#define CFG_BLOCKDEV 0 +#define USE_BLOCKDEV(...) +#define CFG_BOOTCHARTD 0 +#define USE_BOOTCHARTD(...) +#define CFG_BRCTL 0 +#define USE_BRCTL(...) +#define CFG_BUNZIP2 0 +#define USE_BUNZIP2(...) +#define CFG_BZCAT 0 +#define USE_BZCAT(...) +#define CFG_CAL 0 +#define USE_CAL(...) +#define CFG_CATV 0 +#define USE_CATV(...) +#define CFG_CAT_V 1 +#define USE_CAT_V(...) __VA_ARGS__ +#define CFG_CAT 1 +#define USE_CAT(...) __VA_ARGS__ +#define CFG_CD 0 +#define USE_CD(...) +#define CFG_CHATTR 0 +#define USE_CHATTR(...) +#define CFG_CHCON 0 +#define USE_CHCON(...) +#define CFG_CHGRP 0 +#define USE_CHGRP(...) +#define CFG_CHMOD 1 +#define USE_CHMOD(...) __VA_ARGS__ +#define CFG_CHOWN 0 +#define USE_CHOWN(...) +#define CFG_CHROOT 0 +#define USE_CHROOT(...) +#define CFG_CHRT 0 +#define USE_CHRT(...) +#define CFG_CHVT 0 +#define USE_CHVT(...) +#define CFG_CKSUM 0 +#define USE_CKSUM(...) +#define CFG_CLEAR 0 +#define USE_CLEAR(...) +#define CFG_CMP 1 +#define USE_CMP(...) __VA_ARGS__ +#define CFG_COMM 1 +#define USE_COMM(...) __VA_ARGS__ +#define CFG_COUNT 0 +#define USE_COUNT(...) +#define CFG_CPIO 0 +#define USE_CPIO(...) +#define CFG_CP_PRESERVE 1 +#define USE_CP_PRESERVE(...) __VA_ARGS__ +#define CFG_CP 1 +#define USE_CP(...) __VA_ARGS__ +#define CFG_CRC32 0 +#define USE_CRC32(...) +#define CFG_CROND 0 +#define USE_CROND(...) +#define CFG_CRONTAB 0 +#define USE_CRONTAB(...) +#define CFG_CUT 1 +#define USE_CUT(...) __VA_ARGS__ +#define CFG_DATE 1 +#define USE_DATE(...) __VA_ARGS__ +#define CFG_DD 1 +#define USE_DD(...) __VA_ARGS__ +#define CFG_DEALLOCVT 0 +#define USE_DEALLOCVT(...) +#define CFG_DEBUG_DHCP 0 +#define USE_DEBUG_DHCP(...) +#define CFG_DEMO_MANY_OPTIONS 0 +#define USE_DEMO_MANY_OPTIONS(...) +#define CFG_DEMO_NUMBER 0 +#define USE_DEMO_NUMBER(...) +#define CFG_DEMO_SCANKEY 0 +#define USE_DEMO_SCANKEY(...) +#define CFG_DEMO_UTF8TOWC 0 +#define USE_DEMO_UTF8TOWC(...) +#define CFG_DEVMEM 0 +#define USE_DEVMEM(...) +#define CFG_DF 0 +#define USE_DF(...) +#define CFG_DHCP6 0 +#define USE_DHCP6(...) +#define CFG_DHCPD 0 +#define USE_DHCPD(...) +#define CFG_DHCP 0 +#define USE_DHCP(...) +#define CFG_DIFF 1 +#define USE_DIFF(...) __VA_ARGS__ +#define CFG_DIRNAME 1 +#define USE_DIRNAME(...) __VA_ARGS__ +#define CFG_DMESG 0 +#define USE_DMESG(...) +#define CFG_DNSDOMAINNAME 0 +#define USE_DNSDOMAINNAME(...) +#define CFG_DOS2UNIX 1 +#define USE_DOS2UNIX(...) __VA_ARGS__ +#define CFG_DUMPLEASES 0 +#define USE_DUMPLEASES(...) +#define CFG_DU 1 +#define USE_DU(...) __VA_ARGS__ +#define CFG_ECHO 1 +#define USE_ECHO(...) __VA_ARGS__ +#define CFG_EGREP 1 +#define USE_EGREP(...) __VA_ARGS__ +#define CFG_EJECT 0 +#define USE_EJECT(...) +#define CFG_ENV 1 +#define USE_ENV(...) __VA_ARGS__ +#define CFG_EXIT 0 +#define USE_EXIT(...) +#define CFG_EXPAND 0 +#define USE_EXPAND(...) +#define CFG_EXPR 1 +#define USE_EXPR(...) __VA_ARGS__ +#define CFG_FACTOR 0 +#define USE_FACTOR(...) +#define CFG_FALLOCATE 0 +#define USE_FALLOCATE(...) +#define CFG_FALSE 0 +#define USE_FALSE(...) +#define CFG_FDISK 0 +#define USE_FDISK(...) +#define CFG_FGREP 0 +#define USE_FGREP(...) +#define CFG_FILE 0 +#define USE_FILE(...) +#define CFG_FIND 1 +#define USE_FIND(...) __VA_ARGS__ +#define CFG_FLOCK 0 +#define USE_FLOCK(...) +#define CFG_FMT 0 +#define USE_FMT(...) +#define CFG_FOLD 0 +#define USE_FOLD(...) +#define CFG_FREE 0 +#define USE_FREE(...) +#define CFG_FREERAMDISK 0 +#define USE_FREERAMDISK(...) +#define CFG_FSCK 0 +#define USE_FSCK(...) +#define CFG_FSFREEZE 0 +#define USE_FSFREEZE(...) +#define CFG_FSTYPE 0 +#define USE_FSTYPE(...) +#define CFG_FSYNC 0 +#define USE_FSYNC(...) +#define CFG_FTPGET 0 +#define USE_FTPGET(...) +#define CFG_FTPPUT 0 +#define USE_FTPPUT(...) +#define CFG_GETCONF 1 +#define USE_GETCONF(...) __VA_ARGS__ +#define CFG_GETENFORCE 0 +#define USE_GETENFORCE(...) +#define CFG_GETFATTR 0 +#define USE_GETFATTR(...) +#define CFG_GETOPT 1 +#define USE_GETOPT(...) __VA_ARGS__ +#define CFG_GETTY 0 +#define USE_GETTY(...) +#define CFG_GREP 1 +#define USE_GREP(...) __VA_ARGS__ +#define CFG_GROUPADD 0 +#define USE_GROUPADD(...) +#define CFG_GROUPDEL 0 +#define USE_GROUPDEL(...) +#define CFG_GROUPS 0 +#define USE_GROUPS(...) +#define CFG_GUNZIP 0 +#define USE_GUNZIP(...) +#define CFG_GZIP 1 +#define USE_GZIP(...) __VA_ARGS__ +#define CFG_HEAD 1 +#define USE_HEAD(...) __VA_ARGS__ +#define CFG_HELLO 0 +#define USE_HELLO(...) +#define CFG_HELP_EXTRAS 0 +#define USE_HELP_EXTRAS(...) +#define CFG_HELP 0 +#define USE_HELP(...) +#define CFG_HEXEDIT 0 +#define USE_HEXEDIT(...) +#define CFG_HOSTID 0 +#define USE_HOSTID(...) +#define CFG_HOST 0 +#define USE_HOST(...) +#define CFG_HOSTNAME 1 +#define USE_HOSTNAME(...) __VA_ARGS__ +#define CFG_HWCLOCK 0 +#define USE_HWCLOCK(...) +#define CFG_I2CDETECT 0 +#define USE_I2CDETECT(...) +#define CFG_I2CDUMP 0 +#define USE_I2CDUMP(...) +#define CFG_I2CGET 0 +#define USE_I2CGET(...) +#define CFG_I2CSET 0 +#define USE_I2CSET(...) +#define CFG_ICONV 0 +#define USE_ICONV(...) +#define CFG_ID 1 +#define USE_ID(...) __VA_ARGS__ +#define CFG_ID_Z 0 +#define USE_ID_Z(...) +#define CFG_IFCONFIG 0 +#define USE_IFCONFIG(...) +#define CFG_INIT 0 +#define USE_INIT(...) +#define CFG_INOTIFYD 0 +#define USE_INOTIFYD(...) +#define CFG_INSMOD 0 +#define USE_INSMOD(...) +#define CFG_INSTALL 0 +#define USE_INSTALL(...) +#define CFG_IONICE 0 +#define USE_IONICE(...) +#define CFG_IORENICE 0 +#define USE_IORENICE(...) +#define CFG_IOTOP 0 +#define USE_IOTOP(...) +#define CFG_IPCRM 0 +#define USE_IPCRM(...) +#define CFG_IPCS 0 +#define USE_IPCS(...) +#define CFG_IP 0 +#define USE_IP(...) +#define CFG_KILLALL5 0 +#define USE_KILLALL5(...) +#define CFG_KILLALL 0 +#define USE_KILLALL(...) +#define CFG_KILL 0 +#define USE_KILL(...) +#define CFG_KLOGD 0 +#define USE_KLOGD(...) +#define CFG_KLOGD_SOURCE_RING_BUFFER 0 +#define USE_KLOGD_SOURCE_RING_BUFFER(...) +#define CFG_LAST 0 +#define USE_LAST(...) +#define CFG_LINK 0 +#define USE_LINK(...) +#define CFG_LN 1 +#define USE_LN(...) __VA_ARGS__ +#define CFG_LOAD_POLICY 0 +#define USE_LOAD_POLICY(...) +#define CFG_LOGGER 0 +#define USE_LOGGER(...) +#define CFG_LOGIN 0 +#define USE_LOGIN(...) +#define CFG_LOG 0 +#define USE_LOG(...) +#define CFG_LOGNAME 0 +#define USE_LOGNAME(...) +#define CFG_LOGWRAPPER 0 +#define USE_LOGWRAPPER(...) +#define CFG_LOSETUP 0 +#define USE_LOSETUP(...) +#define CFG_LSATTR 0 +#define USE_LSATTR(...) +#define CFG_LSMOD 0 +#define USE_LSMOD(...) +#define CFG_LSOF 0 +#define USE_LSOF(...) +#define CFG_LSPCI 0 +#define USE_LSPCI(...) +#define CFG_LSPCI_TEXT 0 +#define USE_LSPCI_TEXT(...) +#define CFG_LSUSB 0 +#define USE_LSUSB(...) +#define CFG_LS 1 +#define USE_LS(...) __VA_ARGS__ +#define CFG_MAKEDEVS 0 +#define USE_MAKEDEVS(...) +#define CFG_MAN 0 +#define USE_MAN(...) +#define CFG_MCOOKIE 0 +#define USE_MCOOKIE(...) +#define CFG_MD5SUM 1 +#define USE_MD5SUM(...) __VA_ARGS__ +#define CFG_MDEV_CONF 0 +#define USE_MDEV_CONF(...) +#define CFG_MDEV 0 +#define USE_MDEV(...) +#define CFG_MICROCOM 1 +#define USE_MICROCOM(...) __VA_ARGS__ +#define CFG_MIX 0 +#define USE_MIX(...) +#define CFG_MKDIR 1 +#define USE_MKDIR(...) __VA_ARGS__ +#define CFG_MKDIR_Z 0 +#define USE_MKDIR_Z(...) +#define CFG_MKE2FS_EXTENDED 0 +#define USE_MKE2FS_EXTENDED(...) +#define CFG_MKE2FS_GEN 0 +#define USE_MKE2FS_GEN(...) +#define CFG_MKE2FS 0 +#define USE_MKE2FS(...) +#define CFG_MKE2FS_JOURNAL 0 +#define USE_MKE2FS_JOURNAL(...) +#define CFG_MKE2FS_LABEL 0 +#define USE_MKE2FS_LABEL(...) +#define CFG_MKFIFO 0 +#define USE_MKFIFO(...) +#define CFG_MKFIFO_Z 0 +#define USE_MKFIFO_Z(...) +#define CFG_MKNOD 0 +#define USE_MKNOD(...) +#define CFG_MKNOD_Z 0 +#define USE_MKNOD_Z(...) +#define CFG_MKPASSWD 0 +#define USE_MKPASSWD(...) +#define CFG_MKSWAP 0 +#define USE_MKSWAP(...) +#define CFG_MKTEMP 1 +#define USE_MKTEMP(...) __VA_ARGS__ +#define CFG_MODINFO 0 +#define USE_MODINFO(...) +#define CFG_MODPROBE 0 +#define USE_MODPROBE(...) +#define CFG_MORE 0 +#define USE_MORE(...) +#define CFG_MOUNT 0 +#define USE_MOUNT(...) +#define CFG_MOUNTPOINT 0 +#define USE_MOUNTPOINT(...) +#define CFG_MV 1 +#define USE_MV(...) __VA_ARGS__ +#define CFG_NBD_CLIENT 0 +#define USE_NBD_CLIENT(...) +#define CFG_NETCAT 0 +#define USE_NETCAT(...) +#define CFG_NETCAT_LISTEN 0 +#define USE_NETCAT_LISTEN(...) +#define CFG_NETSTAT 0 +#define USE_NETSTAT(...) +#define CFG_NICE 0 +#define USE_NICE(...) +#define CFG_NL 0 +#define USE_NL(...) +#define CFG_NOHUP 0 +#define USE_NOHUP(...) +#define CFG_NPROC 0 +#define USE_NPROC(...) +#define CFG_NSENTER 0 +#define USE_NSENTER(...) +#define CFG_OD 1 +#define USE_OD(...) __VA_ARGS__ +#define CFG_ONEIT 0 +#define USE_ONEIT(...) +#define CFG_OPENVT 0 +#define USE_OPENVT(...) +#define CFG_PARTPROBE 0 +#define USE_PARTPROBE(...) +#define CFG_PASSWD 0 +#define USE_PASSWD(...) +#define CFG_PASSWD_SAD 0 +#define USE_PASSWD_SAD(...) +#define CFG_PASTE 1 +#define USE_PASTE(...) __VA_ARGS__ +#define CFG_PATCH 1 +#define USE_PATCH(...) __VA_ARGS__ +#define CFG_PGREP 0 +#define USE_PGREP(...) +#define CFG_PIDOF 0 +#define USE_PIDOF(...) +#define CFG_PING 0 +#define USE_PING(...) +#define CFG_PIVOT_ROOT 0 +#define USE_PIVOT_ROOT(...) +#define CFG_PKILL 0 +#define USE_PKILL(...) +#define CFG_PMAP 0 +#define USE_PMAP(...) +#define CFG_PRINTENV 0 +#define USE_PRINTENV(...) +#define CFG_PRINTF 0 +#define USE_PRINTF(...) +#define CFG_PS 0 +#define USE_PS(...) +#define CFG_PWDX 0 +#define USE_PWDX(...) +#define CFG_PWD 1 +#define USE_PWD(...) __VA_ARGS__ +#define CFG_READAHEAD 0 +#define USE_READAHEAD(...) +#define CFG_READELF 0 +#define USE_READELF(...) +#define CFG_READLINK 1 +#define USE_READLINK(...) __VA_ARGS__ +#define CFG_REALPATH 1 +#define USE_REALPATH(...) __VA_ARGS__ +#define CFG_REBOOT 0 +#define USE_REBOOT(...) +#define CFG_RENICE 0 +#define USE_RENICE(...) +#define CFG_RESET 0 +#define USE_RESET(...) +#define CFG_RESTORECON 0 +#define USE_RESTORECON(...) +#define CFG_REV 0 +#define USE_REV(...) +#define CFG_RFKILL 0 +#define USE_RFKILL(...) +#define CFG_RMDIR 1 +#define USE_RMDIR(...) __VA_ARGS__ +#define CFG_RMMOD 0 +#define USE_RMMOD(...) +#define CFG_RM 1 +#define USE_RM(...) __VA_ARGS__ +#define CFG_ROUTE 0 +#define USE_ROUTE(...) +#define CFG_RUNCON 0 +#define USE_RUNCON(...) +#define CFG_SED 1 +#define USE_SED(...) __VA_ARGS__ +#define CFG_SENDEVENT 0 +#define USE_SENDEVENT(...) +#define CFG_SEQ 1 +#define USE_SEQ(...) __VA_ARGS__ +#define CFG_SETENFORCE 0 +#define USE_SETENFORCE(...) +#define CFG_SETFATTR 0 +#define USE_SETFATTR(...) +#define CFG_SETSID 1 +#define USE_SETSID(...) __VA_ARGS__ +#define CFG_SHA1SUM 1 +#define USE_SHA1SUM(...) __VA_ARGS__ +#define CFG_SHA224SUM 0 +#define USE_SHA224SUM(...) +#define CFG_SHA256SUM 1 +#define USE_SHA256SUM(...) __VA_ARGS__ +#define CFG_SHA384SUM 0 +#define USE_SHA384SUM(...) +#define CFG_SHA512SUM 1 +#define USE_SHA512SUM(...) __VA_ARGS__ +#define CFG_SH 0 +#define USE_SH(...) +#define CFG_SHRED 0 +#define USE_SHRED(...) +#define CFG_SKELETON_ALIAS 0 +#define USE_SKELETON_ALIAS(...) +#define CFG_SKELETON 0 +#define USE_SKELETON(...) +#define CFG_SLEEP 1 +#define USE_SLEEP(...) __VA_ARGS__ +#define CFG_SNTP 0 +#define USE_SNTP(...) +#define CFG_SORT_FLOAT 1 +#define USE_SORT_FLOAT(...) __VA_ARGS__ +#define CFG_SORT 1 +#define USE_SORT(...) __VA_ARGS__ +#define CFG_SPLIT 0 +#define USE_SPLIT(...) +#define CFG_STAT 1 +#define USE_STAT(...) __VA_ARGS__ +#define CFG_STRINGS 0 +#define USE_STRINGS(...) +#define CFG_STTY 0 +#define USE_STTY(...) +#define CFG_SU 0 +#define USE_SU(...) +#define CFG_SULOGIN 0 +#define USE_SULOGIN(...) +#define CFG_SWAPOFF 0 +#define USE_SWAPOFF(...) +#define CFG_SWAPON 0 +#define USE_SWAPON(...) +#define CFG_SWITCH_ROOT 0 +#define USE_SWITCH_ROOT(...) +#define CFG_SYNC 0 +#define USE_SYNC(...) +#define CFG_SYSCTL 0 +#define USE_SYSCTL(...) +#define CFG_SYSLOGD 0 +#define USE_SYSLOGD(...) +#define CFG_TAC 0 +#define USE_TAC(...) +#define CFG_TAIL 1 +#define USE_TAIL(...) __VA_ARGS__ +#define CFG_TAR 1 +#define USE_TAR(...) __VA_ARGS__ +#define CFG_TASKSET 0 +#define USE_TASKSET(...) +#define CFG_TCPSVD 0 +#define USE_TCPSVD(...) +#define CFG_TEE 1 +#define USE_TEE(...) __VA_ARGS__ +#define CFG_TELNETD 0 +#define USE_TELNETD(...) +#define CFG_TELNET 0 +#define USE_TELNET(...) +#define CFG_TEST 1 +#define USE_TEST(...) __VA_ARGS__ +#define CFG_TFTPD 0 +#define USE_TFTPD(...) +#define CFG_TFTP 0 +#define USE_TFTP(...) +#define CFG_TIME 0 +#define USE_TIME(...) +#define CFG_TIMEOUT 1 +#define USE_TIMEOUT(...) __VA_ARGS__ +#define CFG_TOP 0 +#define USE_TOP(...) +#define CFG_TOUCH 1 +#define USE_TOUCH(...) __VA_ARGS__ +#define CFG_TRACEROUTE 0 +#define USE_TRACEROUTE(...) +#define CFG_TRUE 1 +#define USE_TRUE(...) __VA_ARGS__ +#define CFG_TRUNCATE 1 +#define USE_TRUNCATE(...) __VA_ARGS__ +#define CFG_TR 1 +#define USE_TR(...) __VA_ARGS__ +#define CFG_TTY 0 +#define USE_TTY(...) +#define CFG_TUNCTL 0 +#define USE_TUNCTL(...) +#define CFG_ULIMIT 0 +#define USE_ULIMIT(...) +#define CFG_UMOUNT 0 +#define USE_UMOUNT(...) +#define CFG_UNAME 1 +#define USE_UNAME(...) __VA_ARGS__ +#define CFG_UNIQ 1 +#define USE_UNIQ(...) __VA_ARGS__ +#define CFG_UNIX2DOS 1 +#define USE_UNIX2DOS(...) __VA_ARGS__ +#define CFG_UNLINK 0 +#define USE_UNLINK(...) +#define CFG_UNSHARE 0 +#define USE_UNSHARE(...) +#define CFG_UPTIME 0 +#define USE_UPTIME(...) +#define CFG_USERADD 0 +#define USE_USERADD(...) +#define CFG_USERDEL 0 +#define USE_USERDEL(...) +#define CFG_USLEEP 0 +#define USE_USLEEP(...) +#define CFG_UUDECODE 0 +#define USE_UUDECODE(...) +#define CFG_UUENCODE 0 +#define USE_UUENCODE(...) +#define CFG_UUIDGEN 0 +#define USE_UUIDGEN(...) +#define CFG_VCONFIG 0 +#define USE_VCONFIG(...) +#define CFG_VI 0 +#define USE_VI(...) +#define CFG_VMSTAT 0 +#define USE_VMSTAT(...) +#define CFG_WATCH 0 +#define USE_WATCH(...) +#define CFG_WC 1 +#define USE_WC(...) __VA_ARGS__ +#define CFG_WGET 0 +#define USE_WGET(...) +#define CFG_WHICH 1 +#define USE_WHICH(...) __VA_ARGS__ +#define CFG_WHOAMI 1 +#define USE_WHOAMI(...) __VA_ARGS__ +#define CFG_WHO 0 +#define USE_WHO(...) +#define CFG_W 0 +#define USE_W(...) +#define CFG_XARGS_PEDANTIC 0 +#define USE_XARGS_PEDANTIC(...) +#define CFG_XARGS 1 +#define USE_XARGS(...) __VA_ARGS__ +#define CFG_XXD 1 +#define USE_XXD(...) __VA_ARGS__ +#define CFG_XZCAT 0 +#define USE_XZCAT(...) +#define CFG_YES 0 +#define USE_YES(...) +#define CFG_ZCAT 1 +#define USE_ZCAT(...) __VA_ARGS__ diff --git a/aosp/external/toybox/android/mac/generated/flags.h b/aosp/external/toybox/android/mac/generated/flags.h new file mode 100644 index 0000000000000000000000000000000000000000..7b026e670e009b03f0d271b93a3125e111baf2ab --- /dev/null +++ b/aosp/external/toybox/android/mac/generated/flags.h @@ -0,0 +1,6302 @@ +#undef FORCED_FLAG +#undef FORCED_FLAGLL +#ifdef FORCE_FLAGS +#define FORCED_FLAG 1 +#define FORCED_FLAGLL 1ULL +#else +#define FORCED_FLAG 0 +#define FORCED_FLAGLL 0 +#endif + +// acpi abctV +#undef OPTSTR_acpi +#define OPTSTR_acpi "abctV" +#ifdef CLEANUP_acpi +#undef CLEANUP_acpi +#undef FOR_acpi +#undef FLAG_V +#undef FLAG_t +#undef FLAG_c +#undef FLAG_b +#undef FLAG_a +#endif + +// arch +#undef OPTSTR_arch +#define OPTSTR_arch 0 +#ifdef CLEANUP_arch +#undef CLEANUP_arch +#undef FOR_arch +#endif + +// arp vi:nDsdap:A:H:[+Ap][!sd] +#undef OPTSTR_arp +#define OPTSTR_arp "vi:nDsdap:A:H:[+Ap][!sd]" +#ifdef CLEANUP_arp +#undef CLEANUP_arp +#undef FOR_arp +#undef FLAG_H +#undef FLAG_A +#undef FLAG_p +#undef FLAG_a +#undef FLAG_d +#undef FLAG_s +#undef FLAG_D +#undef FLAG_n +#undef FLAG_i +#undef FLAG_v +#endif + +// arping <1>1s:I:w#<0c#<0AUDbqf[+AU][+Df] +#undef OPTSTR_arping +#define OPTSTR_arping "<1>1s:I:w#<0c#<0AUDbqf[+AU][+Df]" +#ifdef CLEANUP_arping +#undef CLEANUP_arping +#undef FOR_arping +#undef FLAG_f +#undef FLAG_q +#undef FLAG_b +#undef FLAG_D +#undef FLAG_U +#undef FLAG_A +#undef FLAG_c +#undef FLAG_w +#undef FLAG_I +#undef FLAG_s +#endif + +// ascii +#undef OPTSTR_ascii +#define OPTSTR_ascii 0 +#ifdef CLEANUP_ascii +#undef CLEANUP_ascii +#undef FOR_ascii +#endif + +// base64 diw#<0=76[!dw] +#undef OPTSTR_base64 +#define OPTSTR_base64 "diw#<0=76[!dw]" +#ifdef CLEANUP_base64 +#undef CLEANUP_base64 +#undef FOR_base64 +#undef FLAG_w +#undef FLAG_i +#undef FLAG_d +#endif + +// basename ^<1as: ^<1as: +#undef OPTSTR_basename +#define OPTSTR_basename "^<1as:" +#ifdef CLEANUP_basename +#undef CLEANUP_basename +#undef FOR_basename +#undef FLAG_s +#undef FLAG_a +#endif + +// bc i(interactive)l(mathlib)q(quiet)s(standard)w(warn) +#undef OPTSTR_bc +#define OPTSTR_bc "i(interactive)l(mathlib)q(quiet)s(standard)w(warn)" +#ifdef CLEANUP_bc +#undef CLEANUP_bc +#undef FOR_bc +#undef FLAG_w +#undef FLAG_s +#undef FLAG_q +#undef FLAG_l +#undef FLAG_i +#endif + +// blkid ULs*[!LU] +#undef OPTSTR_blkid +#define OPTSTR_blkid "ULs*[!LU]" +#ifdef CLEANUP_blkid +#undef CLEANUP_blkid +#undef FOR_blkid +#undef FLAG_s +#undef FLAG_L +#undef FLAG_U +#endif + +// blockdev <1>1(setro)(setrw)(getro)(getss)(getbsz)(setbsz)#<0(getsz)(getsize)(getsize64)(getra)(setra)#<0(flushbufs)(rereadpt) +#undef OPTSTR_blockdev +#define OPTSTR_blockdev "<1>1(setro)(setrw)(getro)(getss)(getbsz)(setbsz)#<0(getsz)(getsize)(getsize64)(getra)(setra)#<0(flushbufs)(rereadpt)" +#ifdef CLEANUP_blockdev +#undef CLEANUP_blockdev +#undef FOR_blockdev +#undef FLAG_rereadpt +#undef FLAG_flushbufs +#undef FLAG_setra +#undef FLAG_getra +#undef FLAG_getsize64 +#undef FLAG_getsize +#undef FLAG_getsz +#undef FLAG_setbsz +#undef FLAG_getbsz +#undef FLAG_getss +#undef FLAG_getro +#undef FLAG_setrw +#undef FLAG_setro +#endif + +// bootchartd +#undef OPTSTR_bootchartd +#define OPTSTR_bootchartd 0 +#ifdef CLEANUP_bootchartd +#undef CLEANUP_bootchartd +#undef FOR_bootchartd +#endif + +// brctl <1 +#undef OPTSTR_brctl +#define OPTSTR_brctl "<1" +#ifdef CLEANUP_brctl +#undef CLEANUP_brctl +#undef FOR_brctl +#endif + +// bunzip2 cftkv +#undef OPTSTR_bunzip2 +#define OPTSTR_bunzip2 "cftkv" +#ifdef CLEANUP_bunzip2 +#undef CLEANUP_bunzip2 +#undef FOR_bunzip2 +#undef FLAG_v +#undef FLAG_k +#undef FLAG_t +#undef FLAG_f +#undef FLAG_c +#endif + +// bzcat +#undef OPTSTR_bzcat +#define OPTSTR_bzcat 0 +#ifdef CLEANUP_bzcat +#undef CLEANUP_bzcat +#undef FOR_bzcat +#endif + +// cal >2h +#undef OPTSTR_cal +#define OPTSTR_cal ">2h" +#ifdef CLEANUP_cal +#undef CLEANUP_cal +#undef FOR_cal +#undef FLAG_h +#endif + +// cat uvte uvte +#undef OPTSTR_cat +#define OPTSTR_cat "uvte" +#ifdef CLEANUP_cat +#undef CLEANUP_cat +#undef FOR_cat +#undef FLAG_e +#undef FLAG_t +#undef FLAG_v +#undef FLAG_u +#endif + +// catv vte +#undef OPTSTR_catv +#define OPTSTR_catv "vte" +#ifdef CLEANUP_catv +#undef CLEANUP_catv +#undef FOR_catv +#undef FLAG_e +#undef FLAG_t +#undef FLAG_v +#endif + +// cd >1LP[-LP] +#undef OPTSTR_cd +#define OPTSTR_cd ">1LP[-LP]" +#ifdef CLEANUP_cd +#undef CLEANUP_cd +#undef FOR_cd +#undef FLAG_P +#undef FLAG_L +#endif + +// chattr ?p#v#R +#undef OPTSTR_chattr +#define OPTSTR_chattr "?p#v#R" +#ifdef CLEANUP_chattr +#undef CLEANUP_chattr +#undef FOR_chattr +#undef FLAG_R +#undef FLAG_v +#undef FLAG_p +#endif + +// chcon <2hvR +#undef OPTSTR_chcon +#define OPTSTR_chcon "<2hvR" +#ifdef CLEANUP_chcon +#undef CLEANUP_chcon +#undef FOR_chcon +#undef FLAG_R +#undef FLAG_v +#undef FLAG_h +#endif + +// chgrp <2hPLHRfv[-HLP] +#undef OPTSTR_chgrp +#define OPTSTR_chgrp "<2hPLHRfv[-HLP]" +#ifdef CLEANUP_chgrp +#undef CLEANUP_chgrp +#undef FOR_chgrp +#undef FLAG_v +#undef FLAG_f +#undef FLAG_R +#undef FLAG_H +#undef FLAG_L +#undef FLAG_P +#undef FLAG_h +#endif + +// chmod <2?vRf[-vf] <2?vRf[-vf] +#undef OPTSTR_chmod +#define OPTSTR_chmod "<2?vRf[-vf]" +#ifdef CLEANUP_chmod +#undef CLEANUP_chmod +#undef FOR_chmod +#undef FLAG_f +#undef FLAG_R +#undef FLAG_v +#endif + +// chroot ^<1 +#undef OPTSTR_chroot +#define OPTSTR_chroot "^<1" +#ifdef CLEANUP_chroot +#undef CLEANUP_chroot +#undef FOR_chroot +#endif + +// chrt ^mp#<0iRbrfo[!ibrfo] +#undef OPTSTR_chrt +#define OPTSTR_chrt "^mp#<0iRbrfo[!ibrfo]" +#ifdef CLEANUP_chrt +#undef CLEANUP_chrt +#undef FOR_chrt +#undef FLAG_o +#undef FLAG_f +#undef FLAG_r +#undef FLAG_b +#undef FLAG_R +#undef FLAG_i +#undef FLAG_p +#undef FLAG_m +#endif + +// chvt <1 +#undef OPTSTR_chvt +#define OPTSTR_chvt "<1" +#ifdef CLEANUP_chvt +#undef CLEANUP_chvt +#undef FOR_chvt +#endif + +// cksum HIPLN +#undef OPTSTR_cksum +#define OPTSTR_cksum "HIPLN" +#ifdef CLEANUP_cksum +#undef CLEANUP_cksum +#undef FOR_cksum +#undef FLAG_N +#undef FLAG_L +#undef FLAG_P +#undef FLAG_I +#undef FLAG_H +#endif + +// clear +#undef OPTSTR_clear +#define OPTSTR_clear 0 +#ifdef CLEANUP_clear +#undef CLEANUP_clear +#undef FOR_clear +#endif + +// cmp <1>2ls(silent)(quiet)[!ls] <1>2ls(silent)(quiet)[!ls] +#undef OPTSTR_cmp +#define OPTSTR_cmp "<1>2ls(silent)(quiet)[!ls]" +#ifdef CLEANUP_cmp +#undef CLEANUP_cmp +#undef FOR_cmp +#undef FLAG_s +#undef FLAG_l +#endif + +// comm <2>2321 <2>2321 +#undef OPTSTR_comm +#define OPTSTR_comm "<2>2321" +#ifdef CLEANUP_comm +#undef CLEANUP_comm +#undef FOR_comm +#undef FLAG_1 +#undef FLAG_2 +#undef FLAG_3 +#endif + +// count +#undef OPTSTR_count +#define OPTSTR_count 0 +#ifdef CLEANUP_count +#undef CLEANUP_count +#undef FOR_count +#endif + +// cp <2(preserve):;D(parents)RHLPprdaslvnF(remove-destination)fiT[-HLPd][-ni] <2(preserve):;D(parents)RHLPprdaslvnF(remove-destination)fiT[-HLPd][-ni] +#undef OPTSTR_cp +#define OPTSTR_cp "<2(preserve):;D(parents)RHLPprdaslvnF(remove-destination)fiT[-HLPd][-ni]" +#ifdef CLEANUP_cp +#undef CLEANUP_cp +#undef FOR_cp +#undef FLAG_T +#undef FLAG_i +#undef FLAG_f +#undef FLAG_F +#undef FLAG_n +#undef FLAG_v +#undef FLAG_l +#undef FLAG_s +#undef FLAG_a +#undef FLAG_d +#undef FLAG_r +#undef FLAG_p +#undef FLAG_P +#undef FLAG_L +#undef FLAG_H +#undef FLAG_R +#undef FLAG_D +#undef FLAG_preserve +#endif + +// cpio (no-preserve-owner)(trailer)mduH:p:|i|t|F:v(verbose)o|[!pio][!pot][!pF] +#undef OPTSTR_cpio +#define OPTSTR_cpio "(no-preserve-owner)(trailer)mduH:p:|i|t|F:v(verbose)o|[!pio][!pot][!pF]" +#ifdef CLEANUP_cpio +#undef CLEANUP_cpio +#undef FOR_cpio +#undef FLAG_o +#undef FLAG_v +#undef FLAG_F +#undef FLAG_t +#undef FLAG_i +#undef FLAG_p +#undef FLAG_H +#undef FLAG_u +#undef FLAG_d +#undef FLAG_m +#undef FLAG_trailer +#undef FLAG_no_preserve_owner +#endif + +// crc32 +#undef OPTSTR_crc32 +#define OPTSTR_crc32 0 +#ifdef CLEANUP_crc32 +#undef CLEANUP_crc32 +#undef FOR_crc32 +#endif + +// crond fbSl#<0=8d#<0L:c:[-bf][-LS][-ld] +#undef OPTSTR_crond +#define OPTSTR_crond "fbSl#<0=8d#<0L:c:[-bf][-LS][-ld]" +#ifdef CLEANUP_crond +#undef CLEANUP_crond +#undef FOR_crond +#undef FLAG_c +#undef FLAG_L +#undef FLAG_d +#undef FLAG_l +#undef FLAG_S +#undef FLAG_b +#undef FLAG_f +#endif + +// crontab c:u:elr[!elr] +#undef OPTSTR_crontab +#define OPTSTR_crontab "c:u:elr[!elr]" +#ifdef CLEANUP_crontab +#undef CLEANUP_crontab +#undef FOR_crontab +#undef FLAG_r +#undef FLAG_l +#undef FLAG_e +#undef FLAG_u +#undef FLAG_c +#endif + +// cut b*|c*|f*|F*|C*|O(output-delimiter):d:sDn[!cbf] b*|c*|f*|F*|C*|O(output-delimiter):d:sDn[!cbf] +#undef OPTSTR_cut +#define OPTSTR_cut "b*|c*|f*|F*|C*|O(output-delimiter):d:sDn[!cbf]" +#ifdef CLEANUP_cut +#undef CLEANUP_cut +#undef FOR_cut +#undef FLAG_n +#undef FLAG_D +#undef FLAG_s +#undef FLAG_d +#undef FLAG_O +#undef FLAG_C +#undef FLAG_F +#undef FLAG_f +#undef FLAG_c +#undef FLAG_b +#endif + +// date d:D:r:u[!dr] d:D:r:u[!dr] +#undef OPTSTR_date +#define OPTSTR_date "d:D:r:u[!dr]" +#ifdef CLEANUP_date +#undef CLEANUP_date +#undef FOR_date +#undef FLAG_u +#undef FLAG_r +#undef FLAG_D +#undef FLAG_d +#endif + +// dd +#undef OPTSTR_dd +#define OPTSTR_dd 0 +#ifdef CLEANUP_dd +#undef CLEANUP_dd +#undef FOR_dd +#endif + +// deallocvt >1 +#undef OPTSTR_deallocvt +#define OPTSTR_deallocvt ">1" +#ifdef CLEANUP_deallocvt +#undef CLEANUP_deallocvt +#undef FOR_deallocvt +#endif + +// demo_many_options ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba +#undef OPTSTR_demo_many_options +#define OPTSTR_demo_many_options "ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba" +#ifdef CLEANUP_demo_many_options +#undef CLEANUP_demo_many_options +#undef FOR_demo_many_options +#undef FLAG_a +#undef FLAG_b +#undef FLAG_c +#undef FLAG_d +#undef FLAG_e +#undef FLAG_f +#undef FLAG_g +#undef FLAG_h +#undef FLAG_i +#undef FLAG_j +#undef FLAG_k +#undef FLAG_l +#undef FLAG_m +#undef FLAG_n +#undef FLAG_o +#undef FLAG_p +#undef FLAG_q +#undef FLAG_r +#undef FLAG_s +#undef FLAG_t +#undef FLAG_u +#undef FLAG_v +#undef FLAG_w +#undef FLAG_x +#undef FLAG_y +#undef FLAG_z +#undef FLAG_A +#undef FLAG_B +#undef FLAG_C +#undef FLAG_D +#undef FLAG_E +#undef FLAG_F +#undef FLAG_G +#undef FLAG_H +#undef FLAG_I +#undef FLAG_J +#undef FLAG_K +#undef FLAG_L +#undef FLAG_M +#undef FLAG_N +#undef FLAG_O +#undef FLAG_P +#undef FLAG_Q +#undef FLAG_R +#undef FLAG_S +#undef FLAG_T +#undef FLAG_U +#undef FLAG_V +#undef FLAG_W +#undef FLAG_X +#undef FLAG_Y +#undef FLAG_Z +#endif + +// demo_number D#=3<3hdbs +#undef OPTSTR_demo_number +#define OPTSTR_demo_number "D#=3<3hdbs" +#ifdef CLEANUP_demo_number +#undef CLEANUP_demo_number +#undef FOR_demo_number +#undef FLAG_s +#undef FLAG_b +#undef FLAG_d +#undef FLAG_h +#undef FLAG_D +#endif + +// demo_scankey +#undef OPTSTR_demo_scankey +#define OPTSTR_demo_scankey 0 +#ifdef CLEANUP_demo_scankey +#undef CLEANUP_demo_scankey +#undef FOR_demo_scankey +#endif + +// demo_utf8towc +#undef OPTSTR_demo_utf8towc +#define OPTSTR_demo_utf8towc 0 +#ifdef CLEANUP_demo_utf8towc +#undef CLEANUP_demo_utf8towc +#undef FOR_demo_utf8towc +#endif + +// devmem <1>3 +#undef OPTSTR_devmem +#define OPTSTR_devmem "<1>3" +#ifdef CLEANUP_devmem +#undef CLEANUP_devmem +#undef FOR_devmem +#endif + +// df HPkhit*a[-HPkh] +#undef OPTSTR_df +#define OPTSTR_df "HPkhit*a[-HPkh]" +#ifdef CLEANUP_df +#undef CLEANUP_df +#undef FOR_df +#undef FLAG_a +#undef FLAG_t +#undef FLAG_i +#undef FLAG_h +#undef FLAG_k +#undef FLAG_P +#undef FLAG_H +#endif + +// dhcp V:H:F:x*r:O*A#<0=20T#<0=3t#<0=3s:p:i:SBRCaovqnbf +#undef OPTSTR_dhcp +#define OPTSTR_dhcp "V:H:F:x*r:O*A#<0=20T#<0=3t#<0=3s:p:i:SBRCaovqnbf" +#ifdef CLEANUP_dhcp +#undef CLEANUP_dhcp +#undef FOR_dhcp +#undef FLAG_f +#undef FLAG_b +#undef FLAG_n +#undef FLAG_q +#undef FLAG_v +#undef FLAG_o +#undef FLAG_a +#undef FLAG_C +#undef FLAG_R +#undef FLAG_B +#undef FLAG_S +#undef FLAG_i +#undef FLAG_p +#undef FLAG_s +#undef FLAG_t +#undef FLAG_T +#undef FLAG_A +#undef FLAG_O +#undef FLAG_r +#undef FLAG_x +#undef FLAG_F +#undef FLAG_H +#undef FLAG_V +#endif + +// dhcp6 r:A#<0T#<0t#<0s:p:i:SRvqnbf +#undef OPTSTR_dhcp6 +#define OPTSTR_dhcp6 "r:A#<0T#<0t#<0s:p:i:SRvqnbf" +#ifdef CLEANUP_dhcp6 +#undef CLEANUP_dhcp6 +#undef FOR_dhcp6 +#undef FLAG_f +#undef FLAG_b +#undef FLAG_n +#undef FLAG_q +#undef FLAG_v +#undef FLAG_R +#undef FLAG_S +#undef FLAG_i +#undef FLAG_p +#undef FLAG_s +#undef FLAG_t +#undef FLAG_T +#undef FLAG_A +#undef FLAG_r +#endif + +// dhcpd >1P#<0>65535fi:S46[!46] +#undef OPTSTR_dhcpd +#define OPTSTR_dhcpd ">1P#<0>65535fi:S46[!46]" +#ifdef CLEANUP_dhcpd +#undef CLEANUP_dhcpd +#undef FOR_dhcpd +#undef FLAG_6 +#undef FLAG_4 +#undef FLAG_S +#undef FLAG_i +#undef FLAG_f +#undef FLAG_P +#endif + +// diff <2>2(color)(strip-trailing-cr)B(ignore-blank-lines)d(minimal)b(ignore-space-change)ut(expand-tabs)w(ignore-all-space)i(ignore-case)T(initial-tab)s(report-identical-files)q(brief)a(text)L(label)*S(starting-file):N(new-file)r(recursive)U(unified)#<0=3 <2>2(color)(strip-trailing-cr)B(ignore-blank-lines)d(minimal)b(ignore-space-change)ut(expand-tabs)w(ignore-all-space)i(ignore-case)T(initial-tab)s(report-identical-files)q(brief)a(text)L(label)*S(starting-file):N(new-file)r(recursive)U(unified)#<0=3 +#undef OPTSTR_diff +#define OPTSTR_diff "<2>2(color)(strip-trailing-cr)B(ignore-blank-lines)d(minimal)b(ignore-space-change)ut(expand-tabs)w(ignore-all-space)i(ignore-case)T(initial-tab)s(report-identical-files)q(brief)a(text)L(label)*S(starting-file):N(new-file)r(recursive)U(unified)#<0=3" +#ifdef CLEANUP_diff +#undef CLEANUP_diff +#undef FOR_diff +#undef FLAG_U +#undef FLAG_r +#undef FLAG_N +#undef FLAG_S +#undef FLAG_L +#undef FLAG_a +#undef FLAG_q +#undef FLAG_s +#undef FLAG_T +#undef FLAG_i +#undef FLAG_w +#undef FLAG_t +#undef FLAG_u +#undef FLAG_b +#undef FLAG_d +#undef FLAG_B +#undef FLAG_strip_trailing_cr +#undef FLAG_color +#endif + +// dirname <1 <1 +#undef OPTSTR_dirname +#define OPTSTR_dirname "<1" +#ifdef CLEANUP_dirname +#undef CLEANUP_dirname +#undef FOR_dirname +#endif + +// dmesg w(follow)CSTtrs#<1n#c[!Ttr][!Cc][!Sw] +#undef OPTSTR_dmesg +#define OPTSTR_dmesg "w(follow)CSTtrs#<1n#c[!Ttr][!Cc][!Sw]" +#ifdef CLEANUP_dmesg +#undef CLEANUP_dmesg +#undef FOR_dmesg +#undef FLAG_c +#undef FLAG_n +#undef FLAG_s +#undef FLAG_r +#undef FLAG_t +#undef FLAG_T +#undef FLAG_S +#undef FLAG_C +#undef FLAG_w +#endif + +// dnsdomainname >0 +#undef OPTSTR_dnsdomainname +#define OPTSTR_dnsdomainname ">0" +#ifdef CLEANUP_dnsdomainname +#undef CLEANUP_dnsdomainname +#undef FOR_dnsdomainname +#endif + +// dos2unix +#undef OPTSTR_dos2unix +#define OPTSTR_dos2unix 0 +#ifdef CLEANUP_dos2unix +#undef CLEANUP_dos2unix +#undef FOR_dos2unix +#endif + +// du d#<0=-1hmlcaHkKLsx[-HL][-kKmh] d#<0=-1hmlcaHkKLsx[-HL][-kKmh] +#undef OPTSTR_du +#define OPTSTR_du "d#<0=-1hmlcaHkKLsx[-HL][-kKmh]" +#ifdef CLEANUP_du +#undef CLEANUP_du +#undef FOR_du +#undef FLAG_x +#undef FLAG_s +#undef FLAG_L +#undef FLAG_K +#undef FLAG_k +#undef FLAG_H +#undef FLAG_a +#undef FLAG_c +#undef FLAG_l +#undef FLAG_m +#undef FLAG_h +#undef FLAG_d +#endif + +// dumpleases >0arf:[!ar] +#undef OPTSTR_dumpleases +#define OPTSTR_dumpleases ">0arf:[!ar]" +#ifdef CLEANUP_dumpleases +#undef CLEANUP_dumpleases +#undef FOR_dumpleases +#undef FLAG_f +#undef FLAG_r +#undef FLAG_a +#endif + +// echo ^?Een[-eE] ^?Een[-eE] +#undef OPTSTR_echo +#define OPTSTR_echo "^?Een[-eE]" +#ifdef CLEANUP_echo +#undef CLEANUP_echo +#undef FOR_echo +#undef FLAG_n +#undef FLAG_e +#undef FLAG_E +#endif + +// eject >1stT[!tT] +#undef OPTSTR_eject +#define OPTSTR_eject ">1stT[!tT]" +#ifdef CLEANUP_eject +#undef CLEANUP_eject +#undef FOR_eject +#undef FLAG_T +#undef FLAG_t +#undef FLAG_s +#endif + +// env ^0iu* ^0iu* +#undef OPTSTR_env +#define OPTSTR_env "^0iu*" +#ifdef CLEANUP_env +#undef CLEANUP_env +#undef FOR_env +#undef FLAG_u +#undef FLAG_i +#undef FLAG_0 +#endif + +// exit +#undef OPTSTR_exit +#define OPTSTR_exit 0 +#ifdef CLEANUP_exit +#undef CLEANUP_exit +#undef FOR_exit +#endif + +// expand t* +#undef OPTSTR_expand +#define OPTSTR_expand "t*" +#ifdef CLEANUP_expand +#undef CLEANUP_expand +#undef FOR_expand +#undef FLAG_t +#endif + +// expr +#undef OPTSTR_expr +#define OPTSTR_expr 0 +#ifdef CLEANUP_expr +#undef CLEANUP_expr +#undef FOR_expr +#endif + +// factor +#undef OPTSTR_factor +#define OPTSTR_factor 0 +#ifdef CLEANUP_factor +#undef CLEANUP_factor +#undef FOR_factor +#endif + +// fallocate >1l#|o# +#undef OPTSTR_fallocate +#define OPTSTR_fallocate ">1l#|o#" +#ifdef CLEANUP_fallocate +#undef CLEANUP_fallocate +#undef FOR_fallocate +#undef FLAG_o +#undef FLAG_l +#endif + +// false +#undef OPTSTR_false +#define OPTSTR_false 0 +#ifdef CLEANUP_false +#undef CLEANUP_false +#undef FOR_false +#endif + +// fdisk C#<0H#<0S#<0b#<512ul +#undef OPTSTR_fdisk +#define OPTSTR_fdisk "C#<0H#<0S#<0b#<512ul" +#ifdef CLEANUP_fdisk +#undef CLEANUP_fdisk +#undef FOR_fdisk +#undef FLAG_l +#undef FLAG_u +#undef FLAG_b +#undef FLAG_S +#undef FLAG_H +#undef FLAG_C +#endif + +// file <1bhLs[!hL] +#undef OPTSTR_file +#define OPTSTR_file "<1bhLs[!hL]" +#ifdef CLEANUP_file +#undef CLEANUP_file +#undef FOR_file +#undef FLAG_s +#undef FLAG_L +#undef FLAG_h +#undef FLAG_b +#endif + +// find ?^HL[-HL] ?^HL[-HL] +#undef OPTSTR_find +#define OPTSTR_find "?^HL[-HL]" +#ifdef CLEANUP_find +#undef CLEANUP_find +#undef FOR_find +#undef FLAG_L +#undef FLAG_H +#endif + +// flock <1>1nsux[-sux] +#undef OPTSTR_flock +#define OPTSTR_flock "<1>1nsux[-sux]" +#ifdef CLEANUP_flock +#undef CLEANUP_flock +#undef FOR_flock +#undef FLAG_x +#undef FLAG_u +#undef FLAG_s +#undef FLAG_n +#endif + +// fmt w#<0=75 +#undef OPTSTR_fmt +#define OPTSTR_fmt "w#<0=75" +#ifdef CLEANUP_fmt +#undef CLEANUP_fmt +#undef FOR_fmt +#undef FLAG_w +#endif + +// fold bsuw#<1 +#undef OPTSTR_fold +#define OPTSTR_fold "bsuw#<1" +#ifdef CLEANUP_fold +#undef CLEANUP_fold +#undef FOR_fold +#undef FLAG_w +#undef FLAG_u +#undef FLAG_s +#undef FLAG_b +#endif + +// free htgmkb[!htgmkb] +#undef OPTSTR_free +#define OPTSTR_free "htgmkb[!htgmkb]" +#ifdef CLEANUP_free +#undef CLEANUP_free +#undef FOR_free +#undef FLAG_b +#undef FLAG_k +#undef FLAG_m +#undef FLAG_g +#undef FLAG_t +#undef FLAG_h +#endif + +// freeramdisk <1>1 +#undef OPTSTR_freeramdisk +#define OPTSTR_freeramdisk "<1>1" +#ifdef CLEANUP_freeramdisk +#undef CLEANUP_freeramdisk +#undef FOR_freeramdisk +#endif + +// fsck ?t:ANPRTVsC# +#undef OPTSTR_fsck +#define OPTSTR_fsck "?t:ANPRTVsC#" +#ifdef CLEANUP_fsck +#undef CLEANUP_fsck +#undef FOR_fsck +#undef FLAG_C +#undef FLAG_s +#undef FLAG_V +#undef FLAG_T +#undef FLAG_R +#undef FLAG_P +#undef FLAG_N +#undef FLAG_A +#undef FLAG_t +#endif + +// fsfreeze <1>1f|u|[!fu] +#undef OPTSTR_fsfreeze +#define OPTSTR_fsfreeze "<1>1f|u|[!fu]" +#ifdef CLEANUP_fsfreeze +#undef CLEANUP_fsfreeze +#undef FOR_fsfreeze +#undef FLAG_u +#undef FLAG_f +#endif + +// fstype <1 +#undef OPTSTR_fstype +#define OPTSTR_fstype "<1" +#ifdef CLEANUP_fstype +#undef CLEANUP_fstype +#undef FOR_fstype +#endif + +// fsync <1d +#undef OPTSTR_fsync +#define OPTSTR_fsync "<1d" +#ifdef CLEANUP_fsync +#undef CLEANUP_fsync +#undef FOR_fsync +#undef FLAG_d +#endif + +// ftpget <2>3P:cp:u:vgslLmMdD[-gs][!gslLmMdD][!clL] +#undef OPTSTR_ftpget +#define OPTSTR_ftpget "<2>3P:cp:u:vgslLmMdD[-gs][!gslLmMdD][!clL]" +#ifdef CLEANUP_ftpget +#undef CLEANUP_ftpget +#undef FOR_ftpget +#undef FLAG_D +#undef FLAG_d +#undef FLAG_M +#undef FLAG_m +#undef FLAG_L +#undef FLAG_l +#undef FLAG_s +#undef FLAG_g +#undef FLAG_v +#undef FLAG_u +#undef FLAG_p +#undef FLAG_c +#undef FLAG_P +#endif + +// getconf >2al >2al +#undef OPTSTR_getconf +#define OPTSTR_getconf ">2al" +#ifdef CLEANUP_getconf +#undef CLEANUP_getconf +#undef FOR_getconf +#undef FLAG_l +#undef FLAG_a +#endif + +// getenforce >0 +#undef OPTSTR_getenforce +#define OPTSTR_getenforce ">0" +#ifdef CLEANUP_getenforce +#undef CLEANUP_getenforce +#undef FOR_getenforce +#endif + +// getfattr (only-values)dhn: +#undef OPTSTR_getfattr +#define OPTSTR_getfattr "(only-values)dhn:" +#ifdef CLEANUP_getfattr +#undef CLEANUP_getfattr +#undef FOR_getfattr +#undef FLAG_n +#undef FLAG_h +#undef FLAG_d +#undef FLAG_only_values +#endif + +// getopt ^a(alternative)n:(name)o:(options)l*(long)(longoptions)Tu ^a(alternative)n:(name)o:(options)l*(long)(longoptions)Tu +#undef OPTSTR_getopt +#define OPTSTR_getopt "^a(alternative)n:(name)o:(options)l*(long)(longoptions)Tu" +#ifdef CLEANUP_getopt +#undef CLEANUP_getopt +#undef FOR_getopt +#undef FLAG_u +#undef FLAG_T +#undef FLAG_l +#undef FLAG_o +#undef FLAG_n +#undef FLAG_a +#endif + +// getty <2t#<0H:I:l:f:iwnmLh +#undef OPTSTR_getty +#define OPTSTR_getty "<2t#<0H:I:l:f:iwnmLh" +#ifdef CLEANUP_getty +#undef CLEANUP_getty +#undef FOR_getty +#undef FLAG_h +#undef FLAG_L +#undef FLAG_m +#undef FLAG_n +#undef FLAG_w +#undef FLAG_i +#undef FLAG_f +#undef FLAG_l +#undef FLAG_I +#undef FLAG_H +#undef FLAG_t +#endif + +// grep (line-buffered)(color):;(exclude-dir)*S(exclude)*M(include)*ZzEFHIab(byte-offset)h(no-filename)ino(only-matching)rRsvwcl(files-with-matches)q(quiet)(silent)e*f*C#B#A#m#x[!wx][!EFw] (line-buffered)(color):;(exclude-dir)*S(exclude)*M(include)*ZzEFHIab(byte-offset)h(no-filename)ino(only-matching)rRsvwcl(files-with-matches)q(quiet)(silent)e*f*C#B#A#m#x[!wx][!EFw] +#undef OPTSTR_grep +#define OPTSTR_grep "(line-buffered)(color):;(exclude-dir)*S(exclude)*M(include)*ZzEFHIab(byte-offset)h(no-filename)ino(only-matching)rRsvwcl(files-with-matches)q(quiet)(silent)e*f*C#B#A#m#x[!wx][!EFw]" +#ifdef CLEANUP_grep +#undef CLEANUP_grep +#undef FOR_grep +#undef FLAG_x +#undef FLAG_m +#undef FLAG_A +#undef FLAG_B +#undef FLAG_C +#undef FLAG_f +#undef FLAG_e +#undef FLAG_q +#undef FLAG_l +#undef FLAG_c +#undef FLAG_w +#undef FLAG_v +#undef FLAG_s +#undef FLAG_R +#undef FLAG_r +#undef FLAG_o +#undef FLAG_n +#undef FLAG_i +#undef FLAG_h +#undef FLAG_b +#undef FLAG_a +#undef FLAG_I +#undef FLAG_H +#undef FLAG_F +#undef FLAG_E +#undef FLAG_z +#undef FLAG_Z +#undef FLAG_M +#undef FLAG_S +#undef FLAG_exclude_dir +#undef FLAG_color +#undef FLAG_line_buffered +#endif + +// groupadd <1>2g#<0S +#undef OPTSTR_groupadd +#define OPTSTR_groupadd "<1>2g#<0S" +#ifdef CLEANUP_groupadd +#undef CLEANUP_groupadd +#undef FOR_groupadd +#undef FLAG_S +#undef FLAG_g +#endif + +// groupdel <1>2 +#undef OPTSTR_groupdel +#define OPTSTR_groupdel "<1>2" +#ifdef CLEANUP_groupdel +#undef CLEANUP_groupdel +#undef FOR_groupdel +#endif + +// groups +#undef OPTSTR_groups +#define OPTSTR_groups 0 +#ifdef CLEANUP_groups +#undef CLEANUP_groups +#undef FOR_groups +#endif + +// gunzip cdfk123456789[-123456789] +#undef OPTSTR_gunzip +#define OPTSTR_gunzip "cdfk123456789[-123456789]" +#ifdef CLEANUP_gunzip +#undef CLEANUP_gunzip +#undef FOR_gunzip +#undef FLAG_9 +#undef FLAG_8 +#undef FLAG_7 +#undef FLAG_6 +#undef FLAG_5 +#undef FLAG_4 +#undef FLAG_3 +#undef FLAG_2 +#undef FLAG_1 +#undef FLAG_k +#undef FLAG_f +#undef FLAG_d +#undef FLAG_c +#endif + +// gzip ncdfk123456789[-123456789] ncdfk123456789[-123456789] +#undef OPTSTR_gzip +#define OPTSTR_gzip "ncdfk123456789[-123456789]" +#ifdef CLEANUP_gzip +#undef CLEANUP_gzip +#undef FOR_gzip +#undef FLAG_9 +#undef FLAG_8 +#undef FLAG_7 +#undef FLAG_6 +#undef FLAG_5 +#undef FLAG_4 +#undef FLAG_3 +#undef FLAG_2 +#undef FLAG_1 +#undef FLAG_k +#undef FLAG_f +#undef FLAG_d +#undef FLAG_c +#undef FLAG_n +#endif + +// head ?n(lines)#<0=10c(bytes)#<0qv[-nc] ?n(lines)#<0=10c(bytes)#<0qv[-nc] +#undef OPTSTR_head +#define OPTSTR_head "?n(lines)#<0=10c(bytes)#<0qv[-nc]" +#ifdef CLEANUP_head +#undef CLEANUP_head +#undef FOR_head +#undef FLAG_v +#undef FLAG_q +#undef FLAG_c +#undef FLAG_n +#endif + +// hello +#undef OPTSTR_hello +#define OPTSTR_hello 0 +#ifdef CLEANUP_hello +#undef CLEANUP_hello +#undef FOR_hello +#endif + +// help ahu +#undef OPTSTR_help +#define OPTSTR_help "ahu" +#ifdef CLEANUP_help +#undef CLEANUP_help +#undef FOR_help +#undef FLAG_u +#undef FLAG_h +#undef FLAG_a +#endif + +// hexedit <1>1r +#undef OPTSTR_hexedit +#define OPTSTR_hexedit "<1>1r" +#ifdef CLEANUP_hexedit +#undef CLEANUP_hexedit +#undef FOR_hexedit +#undef FLAG_r +#endif + +// host <1>2avt: +#undef OPTSTR_host +#define OPTSTR_host "<1>2avt:" +#ifdef CLEANUP_host +#undef CLEANUP_host +#undef FOR_host +#undef FLAG_t +#undef FLAG_v +#undef FLAG_a +#endif + +// hostid >0 +#undef OPTSTR_hostid +#define OPTSTR_hostid ">0" +#ifdef CLEANUP_hostid +#undef CLEANUP_hostid +#undef FOR_hostid +#endif + +// hostname >1bdsfF:[!bdsf] >1bdsfF:[!bdsf] +#undef OPTSTR_hostname +#define OPTSTR_hostname ">1bdsfF:[!bdsf]" +#ifdef CLEANUP_hostname +#undef CLEANUP_hostname +#undef FOR_hostname +#undef FLAG_F +#undef FLAG_f +#undef FLAG_s +#undef FLAG_d +#undef FLAG_b +#endif + +// hwclock >0(fast)f(rtc):u(utc)l(localtime)t(systz)s(hctosys)r(show)w(systohc)[-ul][!rtsw] +#undef OPTSTR_hwclock +#define OPTSTR_hwclock ">0(fast)f(rtc):u(utc)l(localtime)t(systz)s(hctosys)r(show)w(systohc)[-ul][!rtsw]" +#ifdef CLEANUP_hwclock +#undef CLEANUP_hwclock +#undef FOR_hwclock +#undef FLAG_w +#undef FLAG_r +#undef FLAG_s +#undef FLAG_t +#undef FLAG_l +#undef FLAG_u +#undef FLAG_f +#undef FLAG_fast +#endif + +// i2cdetect >3aFly +#undef OPTSTR_i2cdetect +#define OPTSTR_i2cdetect ">3aFly" +#ifdef CLEANUP_i2cdetect +#undef CLEANUP_i2cdetect +#undef FOR_i2cdetect +#undef FLAG_y +#undef FLAG_l +#undef FLAG_F +#undef FLAG_a +#endif + +// i2cdump <2>2fy +#undef OPTSTR_i2cdump +#define OPTSTR_i2cdump "<2>2fy" +#ifdef CLEANUP_i2cdump +#undef CLEANUP_i2cdump +#undef FOR_i2cdump +#undef FLAG_y +#undef FLAG_f +#endif + +// i2cget <3>3fy +#undef OPTSTR_i2cget +#define OPTSTR_i2cget "<3>3fy" +#ifdef CLEANUP_i2cget +#undef CLEANUP_i2cget +#undef FOR_i2cget +#undef FLAG_y +#undef FLAG_f +#endif + +// i2cset <4fy +#undef OPTSTR_i2cset +#define OPTSTR_i2cset "<4fy" +#ifdef CLEANUP_i2cset +#undef CLEANUP_i2cset +#undef FOR_i2cset +#undef FLAG_y +#undef FLAG_f +#endif + +// iconv cst:f: +#undef OPTSTR_iconv +#define OPTSTR_iconv "cst:f:" +#ifdef CLEANUP_iconv +#undef CLEANUP_iconv +#undef FOR_iconv +#undef FLAG_f +#undef FLAG_t +#undef FLAG_s +#undef FLAG_c +#endif + +// id >1nGgru[!Ggu] >1ZnGgru[!ZGgu] +#undef OPTSTR_id +#define OPTSTR_id ">1nGgru[!Ggu]" +#ifdef CLEANUP_id +#undef CLEANUP_id +#undef FOR_id +#undef FLAG_u +#undef FLAG_r +#undef FLAG_g +#undef FLAG_G +#undef FLAG_n +#undef FLAG_Z +#endif + +// ifconfig ^?aS +#undef OPTSTR_ifconfig +#define OPTSTR_ifconfig "^?aS" +#ifdef CLEANUP_ifconfig +#undef CLEANUP_ifconfig +#undef FOR_ifconfig +#undef FLAG_S +#undef FLAG_a +#endif + +// init +#undef OPTSTR_init +#define OPTSTR_init 0 +#ifdef CLEANUP_init +#undef CLEANUP_init +#undef FOR_init +#endif + +// inotifyd <2 +#undef OPTSTR_inotifyd +#define OPTSTR_inotifyd "<2" +#ifdef CLEANUP_inotifyd +#undef CLEANUP_inotifyd +#undef FOR_inotifyd +#endif + +// insmod <1 +#undef OPTSTR_insmod +#define OPTSTR_insmod "<1" +#ifdef CLEANUP_insmod +#undef CLEANUP_insmod +#undef FOR_insmod +#endif + +// install <1cdDpsvm:o:g: +#undef OPTSTR_install +#define OPTSTR_install "<1cdDpsvm:o:g:" +#ifdef CLEANUP_install +#undef CLEANUP_install +#undef FOR_install +#undef FLAG_g +#undef FLAG_o +#undef FLAG_m +#undef FLAG_v +#undef FLAG_s +#undef FLAG_p +#undef FLAG_D +#undef FLAG_d +#undef FLAG_c +#endif + +// ionice ^tc#<0>3=2n#<0>7=5p# +#undef OPTSTR_ionice +#define OPTSTR_ionice "^tc#<0>3=2n#<0>7=5p#" +#ifdef CLEANUP_ionice +#undef CLEANUP_ionice +#undef FOR_ionice +#undef FLAG_p +#undef FLAG_n +#undef FLAG_c +#undef FLAG_t +#endif + +// iorenice ?<1>3 +#undef OPTSTR_iorenice +#define OPTSTR_iorenice "?<1>3" +#ifdef CLEANUP_iorenice +#undef CLEANUP_iorenice +#undef FOR_iorenice +#endif + +// iotop >0AaKOHk*o*p*u*s#<1=7d%<100=3000m#n#<1bq +#undef OPTSTR_iotop +#define OPTSTR_iotop ">0AaKOHk*o*p*u*s#<1=7d%<100=3000m#n#<1bq" +#ifdef CLEANUP_iotop +#undef CLEANUP_iotop +#undef FOR_iotop +#undef FLAG_q +#undef FLAG_b +#undef FLAG_n +#undef FLAG_m +#undef FLAG_d +#undef FLAG_s +#undef FLAG_u +#undef FLAG_p +#undef FLAG_o +#undef FLAG_k +#undef FLAG_H +#undef FLAG_O +#undef FLAG_K +#undef FLAG_a +#undef FLAG_A +#endif + +// ip +#undef OPTSTR_ip +#define OPTSTR_ip 0 +#ifdef CLEANUP_ip +#undef CLEANUP_ip +#undef FOR_ip +#endif + +// ipcrm m*M*s*S*q*Q* +#undef OPTSTR_ipcrm +#define OPTSTR_ipcrm "m*M*s*S*q*Q*" +#ifdef CLEANUP_ipcrm +#undef CLEANUP_ipcrm +#undef FOR_ipcrm +#undef FLAG_Q +#undef FLAG_q +#undef FLAG_S +#undef FLAG_s +#undef FLAG_M +#undef FLAG_m +#endif + +// ipcs acptulsqmi# +#undef OPTSTR_ipcs +#define OPTSTR_ipcs "acptulsqmi#" +#ifdef CLEANUP_ipcs +#undef CLEANUP_ipcs +#undef FOR_ipcs +#undef FLAG_i +#undef FLAG_m +#undef FLAG_q +#undef FLAG_s +#undef FLAG_l +#undef FLAG_u +#undef FLAG_t +#undef FLAG_p +#undef FLAG_c +#undef FLAG_a +#endif + +// kill ?ls: +#undef OPTSTR_kill +#define OPTSTR_kill "?ls: " +#ifdef CLEANUP_kill +#undef CLEANUP_kill +#undef FOR_kill +#undef FLAG_s +#undef FLAG_l +#endif + +// killall ?s:ilqvw +#undef OPTSTR_killall +#define OPTSTR_killall "?s:ilqvw" +#ifdef CLEANUP_killall +#undef CLEANUP_killall +#undef FOR_killall +#undef FLAG_w +#undef FLAG_v +#undef FLAG_q +#undef FLAG_l +#undef FLAG_i +#undef FLAG_s +#endif + +// killall5 ?o*ls: [!lo][!ls] +#undef OPTSTR_killall5 +#define OPTSTR_killall5 "?o*ls: [!lo][!ls]" +#ifdef CLEANUP_killall5 +#undef CLEANUP_killall5 +#undef FOR_killall5 +#undef FLAG_s +#undef FLAG_l +#undef FLAG_o +#endif + +// klogd c#<1>8n +#undef OPTSTR_klogd +#define OPTSTR_klogd "c#<1>8n" +#ifdef CLEANUP_klogd +#undef CLEANUP_klogd +#undef FOR_klogd +#undef FLAG_n +#undef FLAG_c +#endif + +// last f:W +#undef OPTSTR_last +#define OPTSTR_last "f:W" +#ifdef CLEANUP_last +#undef CLEANUP_last +#undef FOR_last +#undef FLAG_W +#undef FLAG_f +#endif + +// link <2>2 +#undef OPTSTR_link +#define OPTSTR_link "<2>2" +#ifdef CLEANUP_link +#undef CLEANUP_link +#undef FOR_link +#endif + +// ln <1rt:Tvnfs <1rt:Tvnfs +#undef OPTSTR_ln +#define OPTSTR_ln "<1rt:Tvnfs" +#ifdef CLEANUP_ln +#undef CLEANUP_ln +#undef FOR_ln +#undef FLAG_s +#undef FLAG_f +#undef FLAG_n +#undef FLAG_v +#undef FLAG_T +#undef FLAG_t +#undef FLAG_r +#endif + +// load_policy <1>1 +#undef OPTSTR_load_policy +#define OPTSTR_load_policy "<1>1" +#ifdef CLEANUP_load_policy +#undef CLEANUP_load_policy +#undef FOR_load_policy +#endif + +// log <1p:t: +#undef OPTSTR_log +#define OPTSTR_log "<1p:t:" +#ifdef CLEANUP_log +#undef CLEANUP_log +#undef FOR_log +#undef FLAG_t +#undef FLAG_p +#endif + +// logger st:p: +#undef OPTSTR_logger +#define OPTSTR_logger "st:p:" +#ifdef CLEANUP_logger +#undef CLEANUP_logger +#undef FOR_logger +#undef FLAG_p +#undef FLAG_t +#undef FLAG_s +#endif + +// login >1f:ph: +#undef OPTSTR_login +#define OPTSTR_login ">1f:ph:" +#ifdef CLEANUP_login +#undef CLEANUP_login +#undef FOR_login +#undef FLAG_h +#undef FLAG_p +#undef FLAG_f +#endif + +// logname >0 +#undef OPTSTR_logname +#define OPTSTR_logname ">0" +#ifdef CLEANUP_logname +#undef CLEANUP_logname +#undef FOR_logname +#endif + +// logwrapper +#undef OPTSTR_logwrapper +#define OPTSTR_logwrapper 0 +#ifdef CLEANUP_logwrapper +#undef CLEANUP_logwrapper +#undef FOR_logwrapper +#endif + +// losetup >2S(sizelimit)#s(show)ro#j:fdcaD[!afj] +#undef OPTSTR_losetup +#define OPTSTR_losetup ">2S(sizelimit)#s(show)ro#j:fdcaD[!afj]" +#ifdef CLEANUP_losetup +#undef CLEANUP_losetup +#undef FOR_losetup +#undef FLAG_D +#undef FLAG_a +#undef FLAG_c +#undef FLAG_d +#undef FLAG_f +#undef FLAG_j +#undef FLAG_o +#undef FLAG_r +#undef FLAG_s +#undef FLAG_S +#endif + +// ls (color):;(full-time)(show-control-chars)ZgoACFHLRSabcdfhikl@mnpqrstuw#=80<0x1[-Cxm1][-Cxml][-Cxmo][-Cxmg][-cu][-ftS][-HL][!qb] (color):;(full-time)(show-control-chars)ZgoACFHLRSabcdfhikl@mnpqrstuw#=80<0x1[-Cxm1][-Cxml][-Cxmo][-Cxmg][-cu][-ftS][-HL][!qb] +#undef OPTSTR_ls +#define OPTSTR_ls "(color):;(full-time)(show-control-chars)ZgoACFHLRSabcdfhikl@mnpqrstuw#=80<0x1[-Cxm1][-Cxml][-Cxmo][-Cxmg][-cu][-ftS][-HL][!qb]" +#ifdef CLEANUP_ls +#undef CLEANUP_ls +#undef FOR_ls +#undef FLAG_1 +#undef FLAG_x +#undef FLAG_w +#undef FLAG_u +#undef FLAG_t +#undef FLAG_s +#undef FLAG_r +#undef FLAG_q +#undef FLAG_p +#undef FLAG_n +#undef FLAG_m +#undef FLAG_l +#undef FLAG_k +#undef FLAG_i +#undef FLAG_h +#undef FLAG_f +#undef FLAG_d +#undef FLAG_c +#undef FLAG_b +#undef FLAG_a +#undef FLAG_S +#undef FLAG_R +#undef FLAG_L +#undef FLAG_H +#undef FLAG_F +#undef FLAG_C +#undef FLAG_A +#undef FLAG_o +#undef FLAG_g +#undef FLAG_Z +#undef FLAG_show_control_chars +#undef FLAG_full_time +#undef FLAG_color +#endif + +// lsattr ldapvR +#undef OPTSTR_lsattr +#define OPTSTR_lsattr "ldapvR" +#ifdef CLEANUP_lsattr +#undef CLEANUP_lsattr +#undef FOR_lsattr +#undef FLAG_R +#undef FLAG_v +#undef FLAG_p +#undef FLAG_a +#undef FLAG_d +#undef FLAG_l +#endif + +// lsmod +#undef OPTSTR_lsmod +#define OPTSTR_lsmod 0 +#ifdef CLEANUP_lsmod +#undef CLEANUP_lsmod +#undef FOR_lsmod +#endif + +// lsof lp*t +#undef OPTSTR_lsof +#define OPTSTR_lsof "lp*t" +#ifdef CLEANUP_lsof +#undef CLEANUP_lsof +#undef FOR_lsof +#undef FLAG_t +#undef FLAG_p +#undef FLAG_l +#endif + +// lspci emkn@i: +#undef OPTSTR_lspci +#define OPTSTR_lspci "emkn@i:" +#ifdef CLEANUP_lspci +#undef CLEANUP_lspci +#undef FOR_lspci +#undef FLAG_i +#undef FLAG_n +#undef FLAG_k +#undef FLAG_m +#undef FLAG_e +#endif + +// lsusb +#undef OPTSTR_lsusb +#define OPTSTR_lsusb 0 +#ifdef CLEANUP_lsusb +#undef CLEANUP_lsusb +#undef FOR_lsusb +#endif + +// makedevs <1>1d: +#undef OPTSTR_makedevs +#define OPTSTR_makedevs "<1>1d:" +#ifdef CLEANUP_makedevs +#undef CLEANUP_makedevs +#undef FOR_makedevs +#undef FLAG_d +#endif + +// man k:M: +#undef OPTSTR_man +#define OPTSTR_man "k:M:" +#ifdef CLEANUP_man +#undef CLEANUP_man +#undef FOR_man +#undef FLAG_M +#undef FLAG_k +#endif + +// mcookie v(verbose)V(version) +#undef OPTSTR_mcookie +#define OPTSTR_mcookie "v(verbose)V(version)" +#ifdef CLEANUP_mcookie +#undef CLEANUP_mcookie +#undef FOR_mcookie +#undef FLAG_V +#undef FLAG_v +#endif + +// md5sum bc(check)s(status)[!bc] bc(check)s(status)[!bc] +#undef OPTSTR_md5sum +#define OPTSTR_md5sum "bc(check)s(status)[!bc]" +#ifdef CLEANUP_md5sum +#undef CLEANUP_md5sum +#undef FOR_md5sum +#undef FLAG_s +#undef FLAG_c +#undef FLAG_b +#endif + +// mdev s +#undef OPTSTR_mdev +#define OPTSTR_mdev "s" +#ifdef CLEANUP_mdev +#undef CLEANUP_mdev +#undef FOR_mdev +#undef FLAG_s +#endif + +// microcom <1>1s:X <1>1s:X +#undef OPTSTR_microcom +#define OPTSTR_microcom "<1>1s:X" +#ifdef CLEANUP_microcom +#undef CLEANUP_microcom +#undef FOR_microcom +#undef FLAG_X +#undef FLAG_s +#endif + +// mix c:d:l#r# +#undef OPTSTR_mix +#define OPTSTR_mix "c:d:l#r#" +#ifdef CLEANUP_mix +#undef CLEANUP_mix +#undef FOR_mix +#undef FLAG_r +#undef FLAG_l +#undef FLAG_d +#undef FLAG_c +#endif + +// mkdir <1vp(parent)(parents)m: <1Z:vp(parent)(parents)m: +#undef OPTSTR_mkdir +#define OPTSTR_mkdir "<1vp(parent)(parents)m:" +#ifdef CLEANUP_mkdir +#undef CLEANUP_mkdir +#undef FOR_mkdir +#undef FLAG_m +#undef FLAG_p +#undef FLAG_v +#undef FLAG_Z +#endif + +// mke2fs <1>2g:Fnqm#N#i#b# +#undef OPTSTR_mke2fs +#define OPTSTR_mke2fs "<1>2g:Fnqm#N#i#b#" +#ifdef CLEANUP_mke2fs +#undef CLEANUP_mke2fs +#undef FOR_mke2fs +#undef FLAG_b +#undef FLAG_i +#undef FLAG_N +#undef FLAG_m +#undef FLAG_q +#undef FLAG_n +#undef FLAG_F +#undef FLAG_g +#endif + +// mkfifo <1Z:m: +#undef OPTSTR_mkfifo +#define OPTSTR_mkfifo "<1Z:m:" +#ifdef CLEANUP_mkfifo +#undef CLEANUP_mkfifo +#undef FOR_mkfifo +#undef FLAG_m +#undef FLAG_Z +#endif + +// mknod <2>4m(mode):Z: +#undef OPTSTR_mknod +#define OPTSTR_mknod "<2>4m(mode):Z:" +#ifdef CLEANUP_mknod +#undef CLEANUP_mknod +#undef FOR_mknod +#undef FLAG_Z +#undef FLAG_m +#endif + +// mkpasswd >2S:m:P#=0<0 +#undef OPTSTR_mkpasswd +#define OPTSTR_mkpasswd ">2S:m:P#=0<0" +#ifdef CLEANUP_mkpasswd +#undef CLEANUP_mkpasswd +#undef FOR_mkpasswd +#undef FLAG_P +#undef FLAG_m +#undef FLAG_S +#endif + +// mkswap <1>1L: +#undef OPTSTR_mkswap +#define OPTSTR_mkswap "<1>1L:" +#ifdef CLEANUP_mkswap +#undef CLEANUP_mkswap +#undef FOR_mkswap +#undef FLAG_L +#endif + +// mktemp >1(tmpdir);:uqd(directory)p:t >1(tmpdir);:uqd(directory)p:t +#undef OPTSTR_mktemp +#define OPTSTR_mktemp ">1(tmpdir);:uqd(directory)p:t" +#ifdef CLEANUP_mktemp +#undef CLEANUP_mktemp +#undef FOR_mktemp +#undef FLAG_t +#undef FLAG_p +#undef FLAG_d +#undef FLAG_q +#undef FLAG_u +#undef FLAG_tmpdir +#endif + +// modinfo <1b:k:F:0 +#undef OPTSTR_modinfo +#define OPTSTR_modinfo "<1b:k:F:0" +#ifdef CLEANUP_modinfo +#undef CLEANUP_modinfo +#undef FOR_modinfo +#undef FLAG_0 +#undef FLAG_F +#undef FLAG_k +#undef FLAG_b +#endif + +// modprobe alrqvsDbd* +#undef OPTSTR_modprobe +#define OPTSTR_modprobe "alrqvsDbd*" +#ifdef CLEANUP_modprobe +#undef CLEANUP_modprobe +#undef FOR_modprobe +#undef FLAG_d +#undef FLAG_b +#undef FLAG_D +#undef FLAG_s +#undef FLAG_v +#undef FLAG_q +#undef FLAG_r +#undef FLAG_l +#undef FLAG_a +#endif + +// more +#undef OPTSTR_more +#define OPTSTR_more 0 +#ifdef CLEANUP_more +#undef CLEANUP_more +#undef FOR_more +#endif + +// mount ?O:afnrvwt:o*[-rw] +#undef OPTSTR_mount +#define OPTSTR_mount "?O:afnrvwt:o*[-rw]" +#ifdef CLEANUP_mount +#undef CLEANUP_mount +#undef FOR_mount +#undef FLAG_o +#undef FLAG_t +#undef FLAG_w +#undef FLAG_v +#undef FLAG_r +#undef FLAG_n +#undef FLAG_f +#undef FLAG_a +#undef FLAG_O +#endif + +// mountpoint <1qdx[-dx] +#undef OPTSTR_mountpoint +#define OPTSTR_mountpoint "<1qdx[-dx]" +#ifdef CLEANUP_mountpoint +#undef CLEANUP_mountpoint +#undef FOR_mountpoint +#undef FLAG_x +#undef FLAG_d +#undef FLAG_q +#endif + +// mv <2vnF(remove-destination)fiT[-ni] <2vnF(remove-destination)fiT[-ni] +#undef OPTSTR_mv +#define OPTSTR_mv "<2vnF(remove-destination)fiT[-ni]" +#ifdef CLEANUP_mv +#undef CLEANUP_mv +#undef FOR_mv +#undef FLAG_T +#undef FLAG_i +#undef FLAG_f +#undef FLAG_F +#undef FLAG_n +#undef FLAG_v +#endif + +// nbd_client <3>3ns +#undef OPTSTR_nbd_client +#define OPTSTR_nbd_client "<3>3ns" +#ifdef CLEANUP_nbd_client +#undef CLEANUP_nbd_client +#undef FOR_nbd_client +#undef FLAG_s +#undef FLAG_n +#endif + +// netcat ^tlLw#<1W#<1p#<1>65535q#<1s:f:46uU[!tlL][!Lw][!46U] +#undef OPTSTR_netcat +#define OPTSTR_netcat "^tlLw#<1W#<1p#<1>65535q#<1s:f:46uU[!tlL][!Lw][!46U]" +#ifdef CLEANUP_netcat +#undef CLEANUP_netcat +#undef FOR_netcat +#undef FLAG_U +#undef FLAG_u +#undef FLAG_6 +#undef FLAG_4 +#undef FLAG_f +#undef FLAG_s +#undef FLAG_q +#undef FLAG_p +#undef FLAG_W +#undef FLAG_w +#undef FLAG_L +#undef FLAG_l +#undef FLAG_t +#endif + +// netstat pWrxwutneal +#undef OPTSTR_netstat +#define OPTSTR_netstat "pWrxwutneal" +#ifdef CLEANUP_netstat +#undef CLEANUP_netstat +#undef FOR_netstat +#undef FLAG_l +#undef FLAG_a +#undef FLAG_e +#undef FLAG_n +#undef FLAG_t +#undef FLAG_u +#undef FLAG_w +#undef FLAG_x +#undef FLAG_r +#undef FLAG_W +#undef FLAG_p +#endif + +// nice ^<1n# +#undef OPTSTR_nice +#define OPTSTR_nice "^<1n#" +#ifdef CLEANUP_nice +#undef CLEANUP_nice +#undef FOR_nice +#undef FLAG_n +#endif + +// nl v#=1l#w#<0=6Eb:n:s: +#undef OPTSTR_nl +#define OPTSTR_nl "v#=1l#w#<0=6Eb:n:s:" +#ifdef CLEANUP_nl +#undef CLEANUP_nl +#undef FOR_nl +#undef FLAG_s +#undef FLAG_n +#undef FLAG_b +#undef FLAG_E +#undef FLAG_w +#undef FLAG_l +#undef FLAG_v +#endif + +// nohup <1^ +#undef OPTSTR_nohup +#define OPTSTR_nohup "<1^" +#ifdef CLEANUP_nohup +#undef CLEANUP_nohup +#undef FOR_nohup +#endif + +// nproc (all) +#undef OPTSTR_nproc +#define OPTSTR_nproc "(all)" +#ifdef CLEANUP_nproc +#undef CLEANUP_nproc +#undef FOR_nproc +#undef FLAG_all +#endif + +// nsenter <1F(no-fork)t#<1(target)i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user); +#undef OPTSTR_nsenter +#define OPTSTR_nsenter "<1F(no-fork)t#<1(target)i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user);" +#ifdef CLEANUP_nsenter +#undef CLEANUP_nsenter +#undef FOR_nsenter +#undef FLAG_U +#undef FLAG_u +#undef FLAG_p +#undef FLAG_n +#undef FLAG_m +#undef FLAG_i +#undef FLAG_t +#undef FLAG_F +#endif + +// od j#vw#<1=16N#xsodcbA:t* j#vw#<1=16N#xsodcbA:t* +#undef OPTSTR_od +#define OPTSTR_od "j#vw#<1=16N#xsodcbA:t*" +#ifdef CLEANUP_od +#undef CLEANUP_od +#undef FOR_od +#undef FLAG_t +#undef FLAG_A +#undef FLAG_b +#undef FLAG_c +#undef FLAG_d +#undef FLAG_o +#undef FLAG_s +#undef FLAG_x +#undef FLAG_N +#undef FLAG_w +#undef FLAG_v +#undef FLAG_j +#endif + +// oneit ^<1nc:p3[!pn] +#undef OPTSTR_oneit +#define OPTSTR_oneit "^<1nc:p3[!pn]" +#ifdef CLEANUP_oneit +#undef CLEANUP_oneit +#undef FOR_oneit +#undef FLAG_3 +#undef FLAG_p +#undef FLAG_c +#undef FLAG_n +#endif + +// openvt c#<1>63sw +#undef OPTSTR_openvt +#define OPTSTR_openvt "c#<1>63sw" +#ifdef CLEANUP_openvt +#undef CLEANUP_openvt +#undef FOR_openvt +#undef FLAG_w +#undef FLAG_s +#undef FLAG_c +#endif + +// partprobe <1 +#undef OPTSTR_partprobe +#define OPTSTR_partprobe "<1" +#ifdef CLEANUP_partprobe +#undef CLEANUP_partprobe +#undef FOR_partprobe +#endif + +// passwd >1a:dlu +#undef OPTSTR_passwd +#define OPTSTR_passwd ">1a:dlu" +#ifdef CLEANUP_passwd +#undef CLEANUP_passwd +#undef FOR_passwd +#undef FLAG_u +#undef FLAG_l +#undef FLAG_d +#undef FLAG_a +#endif + +// paste d:s d:s +#undef OPTSTR_paste +#define OPTSTR_paste "d:s" +#ifdef CLEANUP_paste +#undef CLEANUP_paste +#undef FOR_paste +#undef FLAG_s +#undef FLAG_d +#endif + +// patch >2(no-backup-if-mismatch)(dry-run)F#g#fulp#d:i:Rs(quiet) >2(no-backup-if-mismatch)(dry-run)xF#g#fulp#d:i:Rs(quiet) +#undef OPTSTR_patch +#define OPTSTR_patch ">2(no-backup-if-mismatch)(dry-run)F#g#fulp#d:i:Rs(quiet)" +#ifdef CLEANUP_patch +#undef CLEANUP_patch +#undef FOR_patch +#undef FLAG_s +#undef FLAG_R +#undef FLAG_i +#undef FLAG_d +#undef FLAG_p +#undef FLAG_l +#undef FLAG_u +#undef FLAG_f +#undef FLAG_g +#undef FLAG_F +#undef FLAG_x +#undef FLAG_dry_run +#undef FLAG_no_backup_if_mismatch +#endif + +// pgrep ?cld:u*U*t*s*P*g*G*fnovxL:[-no] +#undef OPTSTR_pgrep +#define OPTSTR_pgrep "?cld:u*U*t*s*P*g*G*fnovxL:[-no]" +#ifdef CLEANUP_pgrep +#undef CLEANUP_pgrep +#undef FOR_pgrep +#undef FLAG_L +#undef FLAG_x +#undef FLAG_v +#undef FLAG_o +#undef FLAG_n +#undef FLAG_f +#undef FLAG_G +#undef FLAG_g +#undef FLAG_P +#undef FLAG_s +#undef FLAG_t +#undef FLAG_U +#undef FLAG_u +#undef FLAG_d +#undef FLAG_l +#undef FLAG_c +#endif + +// pidof <1so:x +#undef OPTSTR_pidof +#define OPTSTR_pidof "<1so:x" +#ifdef CLEANUP_pidof +#undef CLEANUP_pidof +#undef FOR_pidof +#undef FLAG_x +#undef FLAG_o +#undef FLAG_s +#endif + +// ping <1>1m#t#<0>255=64c#<0=3s#<0>4088=56i%W#<0=3w#<0qf46I:[-46] +#undef OPTSTR_ping +#define OPTSTR_ping "<1>1m#t#<0>255=64c#<0=3s#<0>4088=56i%W#<0=3w#<0qf46I:[-46]" +#ifdef CLEANUP_ping +#undef CLEANUP_ping +#undef FOR_ping +#undef FLAG_I +#undef FLAG_6 +#undef FLAG_4 +#undef FLAG_f +#undef FLAG_q +#undef FLAG_w +#undef FLAG_W +#undef FLAG_i +#undef FLAG_s +#undef FLAG_c +#undef FLAG_t +#undef FLAG_m +#endif + +// pivot_root <2>2 +#undef OPTSTR_pivot_root +#define OPTSTR_pivot_root "<2>2" +#ifdef CLEANUP_pivot_root +#undef CLEANUP_pivot_root +#undef FOR_pivot_root +#endif + +// pkill ?Vu*U*t*s*P*g*G*fnovxl:[-no] +#undef OPTSTR_pkill +#define OPTSTR_pkill "?Vu*U*t*s*P*g*G*fnovxl:[-no]" +#ifdef CLEANUP_pkill +#undef CLEANUP_pkill +#undef FOR_pkill +#undef FLAG_l +#undef FLAG_x +#undef FLAG_v +#undef FLAG_o +#undef FLAG_n +#undef FLAG_f +#undef FLAG_G +#undef FLAG_g +#undef FLAG_P +#undef FLAG_s +#undef FLAG_t +#undef FLAG_U +#undef FLAG_u +#undef FLAG_V +#endif + +// pmap <1xq +#undef OPTSTR_pmap +#define OPTSTR_pmap "<1xq" +#ifdef CLEANUP_pmap +#undef CLEANUP_pmap +#undef FOR_pmap +#undef FLAG_q +#undef FLAG_x +#endif + +// printenv 0(null) +#undef OPTSTR_printenv +#define OPTSTR_printenv "0(null)" +#ifdef CLEANUP_printenv +#undef CLEANUP_printenv +#undef FOR_printenv +#undef FLAG_0 +#endif + +// printf <1?^ +#undef OPTSTR_printf +#define OPTSTR_printf "<1?^" +#ifdef CLEANUP_printf +#undef CLEANUP_printf +#undef FOR_printf +#endif + +// ps k(sort)*P(ppid)*aAdeflMno*O*p(pid)*s*t*Tu*U*g*G*wZ[!ol][+Ae][!oO] +#undef OPTSTR_ps +#define OPTSTR_ps "k(sort)*P(ppid)*aAdeflMno*O*p(pid)*s*t*Tu*U*g*G*wZ[!ol][+Ae][!oO]" +#ifdef CLEANUP_ps +#undef CLEANUP_ps +#undef FOR_ps +#undef FLAG_Z +#undef FLAG_w +#undef FLAG_G +#undef FLAG_g +#undef FLAG_U +#undef FLAG_u +#undef FLAG_T +#undef FLAG_t +#undef FLAG_s +#undef FLAG_p +#undef FLAG_O +#undef FLAG_o +#undef FLAG_n +#undef FLAG_M +#undef FLAG_l +#undef FLAG_f +#undef FLAG_e +#undef FLAG_d +#undef FLAG_A +#undef FLAG_a +#undef FLAG_P +#undef FLAG_k +#endif + +// pwd >0LP[-LP] >0LP[-LP] +#undef OPTSTR_pwd +#define OPTSTR_pwd ">0LP[-LP]" +#ifdef CLEANUP_pwd +#undef CLEANUP_pwd +#undef FOR_pwd +#undef FLAG_P +#undef FLAG_L +#endif + +// pwdx <1a +#undef OPTSTR_pwdx +#define OPTSTR_pwdx "<1a" +#ifdef CLEANUP_pwdx +#undef CLEANUP_pwdx +#undef FOR_pwdx +#undef FLAG_a +#endif + +// readahead +#undef OPTSTR_readahead +#define OPTSTR_readahead 0 +#ifdef CLEANUP_readahead +#undef CLEANUP_readahead +#undef FOR_readahead +#endif + +// readelf <1(dyn-syms)adhlnp:SsWx: +#undef OPTSTR_readelf +#define OPTSTR_readelf "<1(dyn-syms)adhlnp:SsWx:" +#ifdef CLEANUP_readelf +#undef CLEANUP_readelf +#undef FOR_readelf +#undef FLAG_x +#undef FLAG_W +#undef FLAG_s +#undef FLAG_S +#undef FLAG_p +#undef FLAG_n +#undef FLAG_l +#undef FLAG_h +#undef FLAG_d +#undef FLAG_a +#undef FLAG_dyn_syms +#endif + +// readlink <1nqmef(canonicalize)[-mef] <1nqmef(canonicalize)[-mef] +#undef OPTSTR_readlink +#define OPTSTR_readlink "<1nqmef(canonicalize)[-mef]" +#ifdef CLEANUP_readlink +#undef CLEANUP_readlink +#undef FOR_readlink +#undef FLAG_f +#undef FLAG_e +#undef FLAG_m +#undef FLAG_q +#undef FLAG_n +#endif + +// realpath <1 <1 +#undef OPTSTR_realpath +#define OPTSTR_realpath "<1" +#ifdef CLEANUP_realpath +#undef CLEANUP_realpath +#undef FOR_realpath +#endif + +// reboot fn +#undef OPTSTR_reboot +#define OPTSTR_reboot "fn" +#ifdef CLEANUP_reboot +#undef CLEANUP_reboot +#undef FOR_reboot +#undef FLAG_n +#undef FLAG_f +#endif + +// renice <1gpun#| +#undef OPTSTR_renice +#define OPTSTR_renice "<1gpun#|" +#ifdef CLEANUP_renice +#undef CLEANUP_renice +#undef FOR_renice +#undef FLAG_n +#undef FLAG_u +#undef FLAG_p +#undef FLAG_g +#endif + +// reset +#undef OPTSTR_reset +#define OPTSTR_reset 0 +#ifdef CLEANUP_reset +#undef CLEANUP_reset +#undef FOR_reset +#endif + +// restorecon <1DFnRrv +#undef OPTSTR_restorecon +#define OPTSTR_restorecon "<1DFnRrv" +#ifdef CLEANUP_restorecon +#undef CLEANUP_restorecon +#undef FOR_restorecon +#undef FLAG_v +#undef FLAG_r +#undef FLAG_R +#undef FLAG_n +#undef FLAG_F +#undef FLAG_D +#endif + +// rev +#undef OPTSTR_rev +#define OPTSTR_rev 0 +#ifdef CLEANUP_rev +#undef CLEANUP_rev +#undef FOR_rev +#endif + +// rfkill <1>2 +#undef OPTSTR_rfkill +#define OPTSTR_rfkill "<1>2" +#ifdef CLEANUP_rfkill +#undef CLEANUP_rfkill +#undef FOR_rfkill +#endif + +// rm fiRrv[-fi] fiRrv[-fi] +#undef OPTSTR_rm +#define OPTSTR_rm "fiRrv[-fi]" +#ifdef CLEANUP_rm +#undef CLEANUP_rm +#undef FOR_rm +#undef FLAG_v +#undef FLAG_r +#undef FLAG_R +#undef FLAG_i +#undef FLAG_f +#endif + +// rmdir <1(ignore-fail-on-non-empty)p <1(ignore-fail-on-non-empty)p +#undef OPTSTR_rmdir +#define OPTSTR_rmdir "<1(ignore-fail-on-non-empty)p" +#ifdef CLEANUP_rmdir +#undef CLEANUP_rmdir +#undef FOR_rmdir +#undef FLAG_p +#undef FLAG_ignore_fail_on_non_empty +#endif + +// rmmod <1wf +#undef OPTSTR_rmmod +#define OPTSTR_rmmod "<1wf" +#ifdef CLEANUP_rmmod +#undef CLEANUP_rmmod +#undef FOR_rmmod +#undef FLAG_f +#undef FLAG_w +#endif + +// route ?neA: +#undef OPTSTR_route +#define OPTSTR_route "?neA:" +#ifdef CLEANUP_route +#undef CLEANUP_route +#undef FOR_route +#undef FLAG_A +#undef FLAG_e +#undef FLAG_n +#endif + +// runcon <2 +#undef OPTSTR_runcon +#define OPTSTR_runcon "<2" +#ifdef CLEANUP_runcon +#undef CLEANUP_runcon +#undef FOR_runcon +#endif + +// sed (help)(version)e*f*i:;nErz(null-data)[+Er] (help)(version)e*f*i:;nErz(null-data)[+Er] +#undef OPTSTR_sed +#define OPTSTR_sed "(help)(version)e*f*i:;nErz(null-data)[+Er]" +#ifdef CLEANUP_sed +#undef CLEANUP_sed +#undef FOR_sed +#undef FLAG_z +#undef FLAG_r +#undef FLAG_E +#undef FLAG_n +#undef FLAG_i +#undef FLAG_f +#undef FLAG_e +#undef FLAG_version +#undef FLAG_help +#endif + +// sendevent <4>4 +#undef OPTSTR_sendevent +#define OPTSTR_sendevent "<4>4" +#ifdef CLEANUP_sendevent +#undef CLEANUP_sendevent +#undef FOR_sendevent +#endif + +// seq <1>3?f:s:w[!fw] <1>3?f:s:w[!fw] +#undef OPTSTR_seq +#define OPTSTR_seq "<1>3?f:s:w[!fw]" +#ifdef CLEANUP_seq +#undef CLEANUP_seq +#undef FOR_seq +#undef FLAG_w +#undef FLAG_s +#undef FLAG_f +#endif + +// setenforce <1>1 +#undef OPTSTR_setenforce +#define OPTSTR_setenforce "<1>1" +#ifdef CLEANUP_setenforce +#undef CLEANUP_setenforce +#undef FOR_setenforce +#endif + +// setfattr hn:|v:x:|[!xv] +#undef OPTSTR_setfattr +#define OPTSTR_setfattr "hn:|v:x:|[!xv]" +#ifdef CLEANUP_setfattr +#undef CLEANUP_setfattr +#undef FOR_setfattr +#undef FLAG_x +#undef FLAG_v +#undef FLAG_n +#undef FLAG_h +#endif + +// setsid ^<1wcd[!dc] ^<1wcd[!dc] +#undef OPTSTR_setsid +#define OPTSTR_setsid "^<1wcd[!dc]" +#ifdef CLEANUP_setsid +#undef CLEANUP_setsid +#undef FOR_setsid +#undef FLAG_d +#undef FLAG_c +#undef FLAG_w +#endif + +// sh (noediting)(noprofile)(norc)sc:i +#undef OPTSTR_sh +#define OPTSTR_sh "(noediting)(noprofile)(norc)sc:i" +#ifdef CLEANUP_sh +#undef CLEANUP_sh +#undef FOR_sh +#undef FLAG_i +#undef FLAG_c +#undef FLAG_s +#undef FLAG_norc +#undef FLAG_noprofile +#undef FLAG_noediting +#endif + +// sha1sum bc(check)s(status)[!bc] bc(check)s(status)[!bc] +#undef OPTSTR_sha1sum +#define OPTSTR_sha1sum "bc(check)s(status)[!bc]" +#ifdef CLEANUP_sha1sum +#undef CLEANUP_sha1sum +#undef FOR_sha1sum +#undef FLAG_s +#undef FLAG_c +#undef FLAG_b +#endif + +// shred <1zxus#<1n#<1o#<0f +#undef OPTSTR_shred +#define OPTSTR_shred "<1zxus#<1n#<1o#<0f" +#ifdef CLEANUP_shred +#undef CLEANUP_shred +#undef FOR_shred +#undef FLAG_f +#undef FLAG_o +#undef FLAG_n +#undef FLAG_s +#undef FLAG_u +#undef FLAG_x +#undef FLAG_z +#endif + +// skeleton (walrus)(blubber):;(also):e@d*c#b:a +#undef OPTSTR_skeleton +#define OPTSTR_skeleton "(walrus)(blubber):;(also):e@d*c#b:a" +#ifdef CLEANUP_skeleton +#undef CLEANUP_skeleton +#undef FOR_skeleton +#undef FLAG_a +#undef FLAG_b +#undef FLAG_c +#undef FLAG_d +#undef FLAG_e +#undef FLAG_also +#undef FLAG_blubber +#undef FLAG_walrus +#endif + +// skeleton_alias b#dq +#undef OPTSTR_skeleton_alias +#define OPTSTR_skeleton_alias "b#dq" +#ifdef CLEANUP_skeleton_alias +#undef CLEANUP_skeleton_alias +#undef FOR_skeleton_alias +#undef FLAG_q +#undef FLAG_d +#undef FLAG_b +#endif + +// sleep <1 <1 +#undef OPTSTR_sleep +#define OPTSTR_sleep "<1" +#ifdef CLEANUP_sleep +#undef CLEANUP_sleep +#undef FOR_sleep +#endif + +// sntp >1M :m :Sp:t#<0=1>16asdDqr#<4>17=10[!as] +#undef OPTSTR_sntp +#define OPTSTR_sntp ">1M :m :Sp:t#<0=1>16asdDqr#<4>17=10[!as]" +#ifdef CLEANUP_sntp +#undef CLEANUP_sntp +#undef FOR_sntp +#undef FLAG_r +#undef FLAG_q +#undef FLAG_D +#undef FLAG_d +#undef FLAG_s +#undef FLAG_a +#undef FLAG_t +#undef FLAG_p +#undef FLAG_S +#undef FLAG_m +#undef FLAG_M +#endif + +// sort gS:T:mo:k*t:xVbMcszdfirun gS:T:mo:k*t:xVbMcszdfirun +#undef OPTSTR_sort +#define OPTSTR_sort "gS:T:mo:k*t:xVbMcszdfirun" +#ifdef CLEANUP_sort +#undef CLEANUP_sort +#undef FOR_sort +#undef FLAG_n +#undef FLAG_u +#undef FLAG_r +#undef FLAG_i +#undef FLAG_f +#undef FLAG_d +#undef FLAG_z +#undef FLAG_s +#undef FLAG_c +#undef FLAG_M +#undef FLAG_b +#undef FLAG_V +#undef FLAG_x +#undef FLAG_t +#undef FLAG_k +#undef FLAG_o +#undef FLAG_m +#undef FLAG_T +#undef FLAG_S +#undef FLAG_g +#endif + +// split >2a#<1=2>9b#<1l#<1[!bl] +#undef OPTSTR_split +#define OPTSTR_split ">2a#<1=2>9b#<1l#<1[!bl]" +#ifdef CLEANUP_split +#undef CLEANUP_split +#undef FOR_split +#undef FLAG_l +#undef FLAG_b +#undef FLAG_a +#endif + +// stat <1c:(format)fLt <1c:(format)fLt +#undef OPTSTR_stat +#define OPTSTR_stat "<1c:(format)fLt" +#ifdef CLEANUP_stat +#undef CLEANUP_stat +#undef FOR_stat +#undef FLAG_t +#undef FLAG_L +#undef FLAG_f +#undef FLAG_c +#endif + +// strings t:an#=4<1fo +#undef OPTSTR_strings +#define OPTSTR_strings "t:an#=4<1fo" +#ifdef CLEANUP_strings +#undef CLEANUP_strings +#undef FOR_strings +#undef FLAG_o +#undef FLAG_f +#undef FLAG_n +#undef FLAG_a +#undef FLAG_t +#endif + +// stty ?aF:g[!ag] +#undef OPTSTR_stty +#define OPTSTR_stty "?aF:g[!ag]" +#ifdef CLEANUP_stty +#undef CLEANUP_stty +#undef FOR_stty +#undef FLAG_g +#undef FLAG_F +#undef FLAG_a +#endif + +// su ^lmpu:g:c:s:[!lmp] +#undef OPTSTR_su +#define OPTSTR_su "^lmpu:g:c:s:[!lmp]" +#ifdef CLEANUP_su +#undef CLEANUP_su +#undef FOR_su +#undef FLAG_s +#undef FLAG_c +#undef FLAG_g +#undef FLAG_u +#undef FLAG_p +#undef FLAG_m +#undef FLAG_l +#endif + +// sulogin t#<0=0 +#undef OPTSTR_sulogin +#define OPTSTR_sulogin "t#<0=0" +#ifdef CLEANUP_sulogin +#undef CLEANUP_sulogin +#undef FOR_sulogin +#undef FLAG_t +#endif + +// swapoff <1>1 +#undef OPTSTR_swapoff +#define OPTSTR_swapoff "<1>1" +#ifdef CLEANUP_swapoff +#undef CLEANUP_swapoff +#undef FOR_swapoff +#endif + +// swapon <1>1p#<0>32767d +#undef OPTSTR_swapon +#define OPTSTR_swapon "<1>1p#<0>32767d" +#ifdef CLEANUP_swapon +#undef CLEANUP_swapon +#undef FOR_swapon +#undef FLAG_d +#undef FLAG_p +#endif + +// switch_root <2c:h +#undef OPTSTR_switch_root +#define OPTSTR_switch_root "<2c:h" +#ifdef CLEANUP_switch_root +#undef CLEANUP_switch_root +#undef FOR_switch_root +#undef FLAG_h +#undef FLAG_c +#endif + +// sync +#undef OPTSTR_sync +#define OPTSTR_sync 0 +#ifdef CLEANUP_sync +#undef CLEANUP_sync +#undef FOR_sync +#endif + +// sysctl ^neNqwpaA[!ap][!aq][!aw][+aA] +#undef OPTSTR_sysctl +#define OPTSTR_sysctl "^neNqwpaA[!ap][!aq][!aw][+aA]" +#ifdef CLEANUP_sysctl +#undef CLEANUP_sysctl +#undef FOR_sysctl +#undef FLAG_A +#undef FLAG_a +#undef FLAG_p +#undef FLAG_w +#undef FLAG_q +#undef FLAG_N +#undef FLAG_e +#undef FLAG_n +#endif + +// syslogd >0l#<1>8=8R:b#<0>99=1s#<0=200m#<0>71582787=20O:p:f:a:nSKLD +#undef OPTSTR_syslogd +#define OPTSTR_syslogd ">0l#<1>8=8R:b#<0>99=1s#<0=200m#<0>71582787=20O:p:f:a:nSKLD" +#ifdef CLEANUP_syslogd +#undef CLEANUP_syslogd +#undef FOR_syslogd +#undef FLAG_D +#undef FLAG_L +#undef FLAG_K +#undef FLAG_S +#undef FLAG_n +#undef FLAG_a +#undef FLAG_f +#undef FLAG_p +#undef FLAG_O +#undef FLAG_m +#undef FLAG_s +#undef FLAG_b +#undef FLAG_R +#undef FLAG_l +#endif + +// tac +#undef OPTSTR_tac +#define OPTSTR_tac 0 +#ifdef CLEANUP_tac +#undef CLEANUP_tac +#undef FOR_tac +#endif + +// tail ?fc-n-[-cn] ?fc-n-[-cn] +#undef OPTSTR_tail +#define OPTSTR_tail "?fc-n-[-cn]" +#ifdef CLEANUP_tail +#undef CLEANUP_tail +#undef FOR_tail +#undef FLAG_n +#undef FLAG_c +#undef FLAG_f +#endif + +// tar &(restrict)(full-time)(no-recursion)(numeric-owner)(no-same-permissions)(overwrite)(exclude)*(mode):(mtime):(group):(owner):(to-command):o(no-same-owner)p(same-permissions)k(keep-old)c(create)|h(dereference)x(extract)|t(list)|v(verbose)J(xz)j(bzip2)z(gzip)S(sparse)O(to-stdout)m(touch)X(exclude-from)*T(files-from)*C(directory):f(file):a[!txc][!jzJa] &(restrict)(full-time)(no-recursion)(numeric-owner)(no-same-permissions)(overwrite)(exclude)*(mode):(mtime):(group):(owner):(to-command):o(no-same-owner)p(same-permissions)k(keep-old)c(create)|h(dereference)x(extract)|t(list)|v(verbose)J(xz)j(bzip2)z(gzip)S(sparse)O(to-stdout)m(touch)X(exclude-from)*T(files-from)*C(directory):f(file):a[!txc][!jzJa] +#undef OPTSTR_tar +#define OPTSTR_tar "&(restrict)(full-time)(no-recursion)(numeric-owner)(no-same-permissions)(overwrite)(exclude)*(mode):(mtime):(group):(owner):(to-command):o(no-same-owner)p(same-permissions)k(keep-old)c(create)|h(dereference)x(extract)|t(list)|v(verbose)J(xz)j(bzip2)z(gzip)S(sparse)O(to-stdout)m(touch)X(exclude-from)*T(files-from)*C(directory):f(file):a[!txc][!jzJa]" +#ifdef CLEANUP_tar +#undef CLEANUP_tar +#undef FOR_tar +#undef FLAG_a +#undef FLAG_f +#undef FLAG_C +#undef FLAG_T +#undef FLAG_X +#undef FLAG_m +#undef FLAG_O +#undef FLAG_S +#undef FLAG_z +#undef FLAG_j +#undef FLAG_J +#undef FLAG_v +#undef FLAG_t +#undef FLAG_x +#undef FLAG_h +#undef FLAG_c +#undef FLAG_k +#undef FLAG_p +#undef FLAG_o +#undef FLAG_to_command +#undef FLAG_owner +#undef FLAG_group +#undef FLAG_mtime +#undef FLAG_mode +#undef FLAG_exclude +#undef FLAG_overwrite +#undef FLAG_no_same_permissions +#undef FLAG_numeric_owner +#undef FLAG_no_recursion +#undef FLAG_full_time +#undef FLAG_restrict +#endif + +// taskset <1^pa +#undef OPTSTR_taskset +#define OPTSTR_taskset "<1^pa" +#ifdef CLEANUP_taskset +#undef CLEANUP_taskset +#undef FOR_taskset +#undef FLAG_a +#undef FLAG_p +#endif + +// tcpsvd ^<3c#=30<1C:b#=20<0u:l:hEv +#undef OPTSTR_tcpsvd +#define OPTSTR_tcpsvd "^<3c#=30<1C:b#=20<0u:l:hEv" +#ifdef CLEANUP_tcpsvd +#undef CLEANUP_tcpsvd +#undef FOR_tcpsvd +#undef FLAG_v +#undef FLAG_E +#undef FLAG_h +#undef FLAG_l +#undef FLAG_u +#undef FLAG_b +#undef FLAG_C +#undef FLAG_c +#endif + +// tee ia ia +#undef OPTSTR_tee +#define OPTSTR_tee "ia" +#ifdef CLEANUP_tee +#undef CLEANUP_tee +#undef FOR_tee +#undef FLAG_a +#undef FLAG_i +#endif + +// telnet <1>2 +#undef OPTSTR_telnet +#define OPTSTR_telnet "<1>2" +#ifdef CLEANUP_telnet +#undef CLEANUP_telnet +#undef FOR_telnet +#endif + +// telnetd w#<0b:p#<0>65535=23f:l:FSKi[!wi] +#undef OPTSTR_telnetd +#define OPTSTR_telnetd "w#<0b:p#<0>65535=23f:l:FSKi[!wi]" +#ifdef CLEANUP_telnetd +#undef CLEANUP_telnetd +#undef FOR_telnetd +#undef FLAG_i +#undef FLAG_K +#undef FLAG_S +#undef FLAG_F +#undef FLAG_l +#undef FLAG_f +#undef FLAG_p +#undef FLAG_b +#undef FLAG_w +#endif + +// test +#undef OPTSTR_test +#define OPTSTR_test 0 +#ifdef CLEANUP_test +#undef CLEANUP_test +#undef FOR_test +#endif + +// tftp <1b#<8>65464r:l:g|p|[!gp] +#undef OPTSTR_tftp +#define OPTSTR_tftp "<1b#<8>65464r:l:g|p|[!gp]" +#ifdef CLEANUP_tftp +#undef CLEANUP_tftp +#undef FOR_tftp +#undef FLAG_p +#undef FLAG_g +#undef FLAG_l +#undef FLAG_r +#undef FLAG_b +#endif + +// tftpd rcu:l +#undef OPTSTR_tftpd +#define OPTSTR_tftpd "rcu:l" +#ifdef CLEANUP_tftpd +#undef CLEANUP_tftpd +#undef FOR_tftpd +#undef FLAG_l +#undef FLAG_u +#undef FLAG_c +#undef FLAG_r +#endif + +// time <1^pv +#undef OPTSTR_time +#define OPTSTR_time "<1^pv" +#ifdef CLEANUP_time +#undef CLEANUP_time +#undef FOR_time +#undef FLAG_v +#undef FLAG_p +#endif + +// timeout <2^(foreground)(preserve-status)vk:s(signal): <2^(foreground)(preserve-status)vk:s(signal): +#undef OPTSTR_timeout +#define OPTSTR_timeout "<2^(foreground)(preserve-status)vk:s(signal):" +#ifdef CLEANUP_timeout +#undef CLEANUP_timeout +#undef FOR_timeout +#undef FLAG_s +#undef FLAG_k +#undef FLAG_v +#undef FLAG_preserve_status +#undef FLAG_foreground +#endif + +// top >0O*Hk*o*p*u*s#<1d%<100=3000m#n#<1bq[!oO] +#undef OPTSTR_top +#define OPTSTR_top ">0O*Hk*o*p*u*s#<1d%<100=3000m#n#<1bq[!oO]" +#ifdef CLEANUP_top +#undef CLEANUP_top +#undef FOR_top +#undef FLAG_q +#undef FLAG_b +#undef FLAG_n +#undef FLAG_m +#undef FLAG_d +#undef FLAG_s +#undef FLAG_u +#undef FLAG_p +#undef FLAG_o +#undef FLAG_k +#undef FLAG_H +#undef FLAG_O +#endif + +// touch <1acd:fmr:t:h[!dtr] <1acd:fmr:t:h[!dtr] +#undef OPTSTR_touch +#define OPTSTR_touch "<1acd:fmr:t:h[!dtr]" +#ifdef CLEANUP_touch +#undef CLEANUP_touch +#undef FOR_touch +#undef FLAG_h +#undef FLAG_t +#undef FLAG_r +#undef FLAG_m +#undef FLAG_f +#undef FLAG_d +#undef FLAG_c +#undef FLAG_a +#endif + +// toybox +#undef OPTSTR_toybox +#define OPTSTR_toybox 0 +#ifdef CLEANUP_toybox +#undef CLEANUP_toybox +#undef FOR_toybox +#endif + +// tr ^>2<1Ccsd[+cC] ^>2<1Ccsd[+cC] +#undef OPTSTR_tr +#define OPTSTR_tr "^>2<1Ccsd[+cC]" +#ifdef CLEANUP_tr +#undef CLEANUP_tr +#undef FOR_tr +#undef FLAG_d +#undef FLAG_s +#undef FLAG_c +#undef FLAG_C +#endif + +// traceroute <1>2i:f#<1>255=1z#<0>86400=0g*w#<0>86400=5t#<0>255=0s:q#<1>255=3p#<1>65535=33434m#<1>255=30rvndlIUF64 +#undef OPTSTR_traceroute +#define OPTSTR_traceroute "<1>2i:f#<1>255=1z#<0>86400=0g*w#<0>86400=5t#<0>255=0s:q#<1>255=3p#<1>65535=33434m#<1>255=30rvndlIUF64" +#ifdef CLEANUP_traceroute +#undef CLEANUP_traceroute +#undef FOR_traceroute +#undef FLAG_4 +#undef FLAG_6 +#undef FLAG_F +#undef FLAG_U +#undef FLAG_I +#undef FLAG_l +#undef FLAG_d +#undef FLAG_n +#undef FLAG_v +#undef FLAG_r +#undef FLAG_m +#undef FLAG_p +#undef FLAG_q +#undef FLAG_s +#undef FLAG_t +#undef FLAG_w +#undef FLAG_g +#undef FLAG_z +#undef FLAG_f +#undef FLAG_i +#endif + +// true +#undef OPTSTR_true +#define OPTSTR_true 0 +#ifdef CLEANUP_true +#undef CLEANUP_true +#undef FOR_true +#endif + +// truncate <1s:|c <1s:|c +#undef OPTSTR_truncate +#define OPTSTR_truncate "<1s:|c" +#ifdef CLEANUP_truncate +#undef CLEANUP_truncate +#undef FOR_truncate +#undef FLAG_c +#undef FLAG_s +#endif + +// tty s +#undef OPTSTR_tty +#define OPTSTR_tty "s" +#ifdef CLEANUP_tty +#undef CLEANUP_tty +#undef FOR_tty +#undef FLAG_s +#endif + +// tunctl <1>1t|d|u:T[!td] +#undef OPTSTR_tunctl +#define OPTSTR_tunctl "<1>1t|d|u:T[!td]" +#ifdef CLEANUP_tunctl +#undef CLEANUP_tunctl +#undef FOR_tunctl +#undef FLAG_T +#undef FLAG_u +#undef FLAG_d +#undef FLAG_t +#endif + +// ulimit >1P#<1SHavutsrRqpnmlifedc[-SH][!apvutsrRqnmlifedc] +#undef OPTSTR_ulimit +#define OPTSTR_ulimit ">1P#<1SHavutsrRqpnmlifedc[-SH][!apvutsrRqnmlifedc]" +#ifdef CLEANUP_ulimit +#undef CLEANUP_ulimit +#undef FOR_ulimit +#undef FLAG_c +#undef FLAG_d +#undef FLAG_e +#undef FLAG_f +#undef FLAG_i +#undef FLAG_l +#undef FLAG_m +#undef FLAG_n +#undef FLAG_p +#undef FLAG_q +#undef FLAG_R +#undef FLAG_r +#undef FLAG_s +#undef FLAG_t +#undef FLAG_u +#undef FLAG_v +#undef FLAG_a +#undef FLAG_H +#undef FLAG_S +#undef FLAG_P +#endif + +// umount cndDflrat*v[!na] +#undef OPTSTR_umount +#define OPTSTR_umount "cndDflrat*v[!na]" +#ifdef CLEANUP_umount +#undef CLEANUP_umount +#undef FOR_umount +#undef FLAG_v +#undef FLAG_t +#undef FLAG_a +#undef FLAG_r +#undef FLAG_l +#undef FLAG_f +#undef FLAG_D +#undef FLAG_d +#undef FLAG_n +#undef FLAG_c +#endif + +// uname oamvrns[+os] oamvrns[+os] +#undef OPTSTR_uname +#define OPTSTR_uname "oamvrns[+os]" +#ifdef CLEANUP_uname +#undef CLEANUP_uname +#undef FOR_uname +#undef FLAG_s +#undef FLAG_n +#undef FLAG_r +#undef FLAG_v +#undef FLAG_m +#undef FLAG_a +#undef FLAG_o +#endif + +// uniq f#s#w#zicdu f#s#w#zicdu +#undef OPTSTR_uniq +#define OPTSTR_uniq "f#s#w#zicdu" +#ifdef CLEANUP_uniq +#undef CLEANUP_uniq +#undef FOR_uniq +#undef FLAG_u +#undef FLAG_d +#undef FLAG_c +#undef FLAG_i +#undef FLAG_z +#undef FLAG_w +#undef FLAG_s +#undef FLAG_f +#endif + +// unix2dos +#undef OPTSTR_unix2dos +#define OPTSTR_unix2dos 0 +#ifdef CLEANUP_unix2dos +#undef CLEANUP_unix2dos +#undef FOR_unix2dos +#endif + +// unlink <1>1 +#undef OPTSTR_unlink +#define OPTSTR_unlink "<1>1" +#ifdef CLEANUP_unlink +#undef CLEANUP_unlink +#undef FOR_unlink +#endif + +// unshare <1^f(fork);r(map-root-user);i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user); +#undef OPTSTR_unshare +#define OPTSTR_unshare "<1^f(fork);r(map-root-user);i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user);" +#ifdef CLEANUP_unshare +#undef CLEANUP_unshare +#undef FOR_unshare +#undef FLAG_U +#undef FLAG_u +#undef FLAG_p +#undef FLAG_n +#undef FLAG_m +#undef FLAG_i +#undef FLAG_r +#undef FLAG_f +#endif + +// uptime >0ps +#undef OPTSTR_uptime +#define OPTSTR_uptime ">0ps" +#ifdef CLEANUP_uptime +#undef CLEANUP_uptime +#undef FOR_uptime +#undef FLAG_s +#undef FLAG_p +#endif + +// useradd <1>2u#<0G:s:g:h:SDH +#undef OPTSTR_useradd +#define OPTSTR_useradd "<1>2u#<0G:s:g:h:SDH" +#ifdef CLEANUP_useradd +#undef CLEANUP_useradd +#undef FOR_useradd +#undef FLAG_H +#undef FLAG_D +#undef FLAG_S +#undef FLAG_h +#undef FLAG_g +#undef FLAG_s +#undef FLAG_G +#undef FLAG_u +#endif + +// userdel <1>1r +#undef OPTSTR_userdel +#define OPTSTR_userdel "<1>1r" +#ifdef CLEANUP_userdel +#undef CLEANUP_userdel +#undef FOR_userdel +#undef FLAG_r +#endif + +// usleep <1 +#undef OPTSTR_usleep +#define OPTSTR_usleep "<1" +#ifdef CLEANUP_usleep +#undef CLEANUP_usleep +#undef FOR_usleep +#endif + +// uudecode >1o: +#undef OPTSTR_uudecode +#define OPTSTR_uudecode ">1o:" +#ifdef CLEANUP_uudecode +#undef CLEANUP_uudecode +#undef FOR_uudecode +#undef FLAG_o +#endif + +// uuencode <1>2m +#undef OPTSTR_uuencode +#define OPTSTR_uuencode "<1>2m" +#ifdef CLEANUP_uuencode +#undef CLEANUP_uuencode +#undef FOR_uuencode +#undef FLAG_m +#endif + +// uuidgen >0r(random) +#undef OPTSTR_uuidgen +#define OPTSTR_uuidgen ">0r(random)" +#ifdef CLEANUP_uuidgen +#undef CLEANUP_uuidgen +#undef FOR_uuidgen +#undef FLAG_r +#endif + +// vconfig <2>4 +#undef OPTSTR_vconfig +#define OPTSTR_vconfig "<2>4" +#ifdef CLEANUP_vconfig +#undef CLEANUP_vconfig +#undef FOR_vconfig +#endif + +// vi >1s: +#undef OPTSTR_vi +#define OPTSTR_vi ">1s:" +#ifdef CLEANUP_vi +#undef CLEANUP_vi +#undef FOR_vi +#undef FLAG_s +#endif + +// vmstat >2n +#undef OPTSTR_vmstat +#define OPTSTR_vmstat ">2n" +#ifdef CLEANUP_vmstat +#undef CLEANUP_vmstat +#undef FOR_vmstat +#undef FLAG_n +#endif + +// w +#undef OPTSTR_w +#define OPTSTR_w 0 +#ifdef CLEANUP_w +#undef CLEANUP_w +#undef FOR_w +#endif + +// watch ^<1n%<100=2000tebx +#undef OPTSTR_watch +#define OPTSTR_watch "^<1n%<100=2000tebx" +#ifdef CLEANUP_watch +#undef CLEANUP_watch +#undef FOR_watch +#undef FLAG_x +#undef FLAG_b +#undef FLAG_e +#undef FLAG_t +#undef FLAG_n +#endif + +// wc mcwl mcwl +#undef OPTSTR_wc +#define OPTSTR_wc "mcwl" +#ifdef CLEANUP_wc +#undef CLEANUP_wc +#undef FOR_wc +#undef FLAG_l +#undef FLAG_w +#undef FLAG_c +#undef FLAG_m +#endif + +// wget (no-check-certificate)O: +#undef OPTSTR_wget +#define OPTSTR_wget "(no-check-certificate)O:" +#ifdef CLEANUP_wget +#undef CLEANUP_wget +#undef FOR_wget +#undef FLAG_O +#undef FLAG_no_check_certificate +#endif + +// which <1a <1a +#undef OPTSTR_which +#define OPTSTR_which "<1a" +#ifdef CLEANUP_which +#undef CLEANUP_which +#undef FOR_which +#undef FLAG_a +#endif + +// who a +#undef OPTSTR_who +#define OPTSTR_who "a" +#ifdef CLEANUP_who +#undef CLEANUP_who +#undef FOR_who +#undef FLAG_a +#endif + +// xargs ^E:P#optrn#<1(max-args)s#0[!0E] ^E:P#optrn#<1(max-args)s#0[!0E] +#undef OPTSTR_xargs +#define OPTSTR_xargs "^E:P#optrn#<1(max-args)s#0[!0E]" +#ifdef CLEANUP_xargs +#undef CLEANUP_xargs +#undef FOR_xargs +#undef FLAG_0 +#undef FLAG_s +#undef FLAG_n +#undef FLAG_r +#undef FLAG_t +#undef FLAG_p +#undef FLAG_o +#undef FLAG_P +#undef FLAG_E +#endif + +// xxd >1c#l#o#g#<1=2iprs#[!rs] >1c#l#o#g#<1=2iprs#[!rs] +#undef OPTSTR_xxd +#define OPTSTR_xxd ">1c#l#o#g#<1=2iprs#[!rs]" +#ifdef CLEANUP_xxd +#undef CLEANUP_xxd +#undef FOR_xxd +#undef FLAG_s +#undef FLAG_r +#undef FLAG_p +#undef FLAG_i +#undef FLAG_g +#undef FLAG_o +#undef FLAG_l +#undef FLAG_c +#endif + +// xzcat +#undef OPTSTR_xzcat +#define OPTSTR_xzcat 0 +#ifdef CLEANUP_xzcat +#undef CLEANUP_xzcat +#undef FOR_xzcat +#endif + +// yes +#undef OPTSTR_yes +#define OPTSTR_yes 0 +#ifdef CLEANUP_yes +#undef CLEANUP_yes +#undef FOR_yes +#endif + +// zcat cdfk123456789[-123456789] cdfk123456789[-123456789] +#undef OPTSTR_zcat +#define OPTSTR_zcat "cdfk123456789[-123456789]" +#ifdef CLEANUP_zcat +#undef CLEANUP_zcat +#undef FOR_zcat +#undef FLAG_9 +#undef FLAG_8 +#undef FLAG_7 +#undef FLAG_6 +#undef FLAG_5 +#undef FLAG_4 +#undef FLAG_3 +#undef FLAG_2 +#undef FLAG_1 +#undef FLAG_k +#undef FLAG_f +#undef FLAG_d +#undef FLAG_c +#endif + +#ifdef FOR_acpi +#ifndef TT +#define TT this.acpi +#endif +#define FLAG_V (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#define FLAG_b (FORCED_FLAG<<3) +#define FLAG_a (FORCED_FLAG<<4) +#endif + +#ifdef FOR_arch +#ifndef TT +#define TT this.arch +#endif +#endif + +#ifdef FOR_arp +#ifndef TT +#define TT this.arp +#endif +#define FLAG_H (FORCED_FLAG<<0) +#define FLAG_A (FORCED_FLAG<<1) +#define FLAG_p (FORCED_FLAG<<2) +#define FLAG_a (FORCED_FLAG<<3) +#define FLAG_d (FORCED_FLAG<<4) +#define FLAG_s (FORCED_FLAG<<5) +#define FLAG_D (FORCED_FLAG<<6) +#define FLAG_n (FORCED_FLAG<<7) +#define FLAG_i (FORCED_FLAG<<8) +#define FLAG_v (FORCED_FLAG<<9) +#endif + +#ifdef FOR_arping +#ifndef TT +#define TT this.arping +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_q (FORCED_FLAG<<1) +#define FLAG_b (FORCED_FLAG<<2) +#define FLAG_D (FORCED_FLAG<<3) +#define FLAG_U (FORCED_FLAG<<4) +#define FLAG_A (FORCED_FLAG<<5) +#define FLAG_c (FORCED_FLAG<<6) +#define FLAG_w (FORCED_FLAG<<7) +#define FLAG_I (FORCED_FLAG<<8) +#define FLAG_s (FORCED_FLAG<<9) +#endif + +#ifdef FOR_ascii +#ifndef TT +#define TT this.ascii +#endif +#endif + +#ifdef FOR_base64 +#ifndef TT +#define TT this.base64 +#endif +#define FLAG_w (FORCED_FLAG<<0) +#define FLAG_i (FORCED_FLAG<<1) +#define FLAG_d (FORCED_FLAG<<2) +#endif + +#ifdef FOR_basename +#ifndef TT +#define TT this.basename +#endif +#define FLAG_s (1<<0) +#define FLAG_a (1<<1) +#endif + +#ifdef FOR_bc +#ifndef TT +#define TT this.bc +#endif +#define FLAG_w (FORCED_FLAG<<0) +#define FLAG_s (FORCED_FLAG<<1) +#define FLAG_q (FORCED_FLAG<<2) +#define FLAG_l (FORCED_FLAG<<3) +#define FLAG_i (FORCED_FLAG<<4) +#endif + +#ifdef FOR_blkid +#ifndef TT +#define TT this.blkid +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_L (FORCED_FLAG<<1) +#define FLAG_U (FORCED_FLAG<<2) +#endif + +#ifdef FOR_blockdev +#ifndef TT +#define TT this.blockdev +#endif +#define FLAG_rereadpt (FORCED_FLAG<<0) +#define FLAG_flushbufs (FORCED_FLAG<<1) +#define FLAG_setra (FORCED_FLAG<<2) +#define FLAG_getra (FORCED_FLAG<<3) +#define FLAG_getsize64 (FORCED_FLAG<<4) +#define FLAG_getsize (FORCED_FLAG<<5) +#define FLAG_getsz (FORCED_FLAG<<6) +#define FLAG_setbsz (FORCED_FLAG<<7) +#define FLAG_getbsz (FORCED_FLAG<<8) +#define FLAG_getss (FORCED_FLAG<<9) +#define FLAG_getro (FORCED_FLAG<<10) +#define FLAG_setrw (FORCED_FLAG<<11) +#define FLAG_setro (FORCED_FLAG<<12) +#endif + +#ifdef FOR_bootchartd +#ifndef TT +#define TT this.bootchartd +#endif +#endif + +#ifdef FOR_brctl +#ifndef TT +#define TT this.brctl +#endif +#endif + +#ifdef FOR_bunzip2 +#ifndef TT +#define TT this.bunzip2 +#endif +#define FLAG_v (FORCED_FLAG<<0) +#define FLAG_k (FORCED_FLAG<<1) +#define FLAG_t (FORCED_FLAG<<2) +#define FLAG_f (FORCED_FLAG<<3) +#define FLAG_c (FORCED_FLAG<<4) +#endif + +#ifdef FOR_bzcat +#ifndef TT +#define TT this.bzcat +#endif +#endif + +#ifdef FOR_cal +#ifndef TT +#define TT this.cal +#endif +#define FLAG_h (FORCED_FLAG<<0) +#endif + +#ifdef FOR_cat +#ifndef TT +#define TT this.cat +#endif +#define FLAG_e (1<<0) +#define FLAG_t (1<<1) +#define FLAG_v (1<<2) +#define FLAG_u (1<<3) +#endif + +#ifdef FOR_catv +#ifndef TT +#define TT this.catv +#endif +#define FLAG_e (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_v (FORCED_FLAG<<2) +#endif + +#ifdef FOR_cd +#ifndef TT +#define TT this.cd +#endif +#define FLAG_P (FORCED_FLAG<<0) +#define FLAG_L (FORCED_FLAG<<1) +#endif + +#ifdef FOR_chattr +#ifndef TT +#define TT this.chattr +#endif +#define FLAG_R (FORCED_FLAG<<0) +#define FLAG_v (FORCED_FLAG<<1) +#define FLAG_p (FORCED_FLAG<<2) +#endif + +#ifdef FOR_chcon +#ifndef TT +#define TT this.chcon +#endif +#define FLAG_R (FORCED_FLAG<<0) +#define FLAG_v (FORCED_FLAG<<1) +#define FLAG_h (FORCED_FLAG<<2) +#endif + +#ifdef FOR_chgrp +#ifndef TT +#define TT this.chgrp +#endif +#define FLAG_v (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#define FLAG_R (FORCED_FLAG<<2) +#define FLAG_H (FORCED_FLAG<<3) +#define FLAG_L (FORCED_FLAG<<4) +#define FLAG_P (FORCED_FLAG<<5) +#define FLAG_h (FORCED_FLAG<<6) +#endif + +#ifdef FOR_chmod +#ifndef TT +#define TT this.chmod +#endif +#define FLAG_f (1<<0) +#define FLAG_R (1<<1) +#define FLAG_v (1<<2) +#endif + +#ifdef FOR_chroot +#ifndef TT +#define TT this.chroot +#endif +#endif + +#ifdef FOR_chrt +#ifndef TT +#define TT this.chrt +#endif +#define FLAG_o (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#define FLAG_r (FORCED_FLAG<<2) +#define FLAG_b (FORCED_FLAG<<3) +#define FLAG_R (FORCED_FLAG<<4) +#define FLAG_i (FORCED_FLAG<<5) +#define FLAG_p (FORCED_FLAG<<6) +#define FLAG_m (FORCED_FLAG<<7) +#endif + +#ifdef FOR_chvt +#ifndef TT +#define TT this.chvt +#endif +#endif + +#ifdef FOR_cksum +#ifndef TT +#define TT this.cksum +#endif +#define FLAG_N (FORCED_FLAG<<0) +#define FLAG_L (FORCED_FLAG<<1) +#define FLAG_P (FORCED_FLAG<<2) +#define FLAG_I (FORCED_FLAG<<3) +#define FLAG_H (FORCED_FLAG<<4) +#endif + +#ifdef FOR_clear +#ifndef TT +#define TT this.clear +#endif +#endif + +#ifdef FOR_cmp +#ifndef TT +#define TT this.cmp +#endif +#define FLAG_s (1<<0) +#define FLAG_l (1<<1) +#endif + +#ifdef FOR_comm +#ifndef TT +#define TT this.comm +#endif +#define FLAG_1 (1<<0) +#define FLAG_2 (1<<1) +#define FLAG_3 (1<<2) +#endif + +#ifdef FOR_count +#ifndef TT +#define TT this.count +#endif +#endif + +#ifdef FOR_cp +#ifndef TT +#define TT this.cp +#endif +#define FLAG_T (1<<0) +#define FLAG_i (1<<1) +#define FLAG_f (1<<2) +#define FLAG_F (1<<3) +#define FLAG_n (1<<4) +#define FLAG_v (1<<5) +#define FLAG_l (1<<6) +#define FLAG_s (1<<7) +#define FLAG_a (1<<8) +#define FLAG_d (1<<9) +#define FLAG_r (1<<10) +#define FLAG_p (1<<11) +#define FLAG_P (1<<12) +#define FLAG_L (1<<13) +#define FLAG_H (1<<14) +#define FLAG_R (1<<15) +#define FLAG_D (1<<16) +#define FLAG_preserve (1<<17) +#endif + +#ifdef FOR_cpio +#ifndef TT +#define TT this.cpio +#endif +#define FLAG_o (FORCED_FLAG<<0) +#define FLAG_v (FORCED_FLAG<<1) +#define FLAG_F (FORCED_FLAG<<2) +#define FLAG_t (FORCED_FLAG<<3) +#define FLAG_i (FORCED_FLAG<<4) +#define FLAG_p (FORCED_FLAG<<5) +#define FLAG_H (FORCED_FLAG<<6) +#define FLAG_u (FORCED_FLAG<<7) +#define FLAG_d (FORCED_FLAG<<8) +#define FLAG_m (FORCED_FLAG<<9) +#define FLAG_trailer (FORCED_FLAG<<10) +#define FLAG_no_preserve_owner (FORCED_FLAG<<11) +#endif + +#ifdef FOR_crc32 +#ifndef TT +#define TT this.crc32 +#endif +#endif + +#ifdef FOR_crond +#ifndef TT +#define TT this.crond +#endif +#define FLAG_c (FORCED_FLAG<<0) +#define FLAG_L (FORCED_FLAG<<1) +#define FLAG_d (FORCED_FLAG<<2) +#define FLAG_l (FORCED_FLAG<<3) +#define FLAG_S (FORCED_FLAG<<4) +#define FLAG_b (FORCED_FLAG<<5) +#define FLAG_f (FORCED_FLAG<<6) +#endif + +#ifdef FOR_crontab +#ifndef TT +#define TT this.crontab +#endif +#define FLAG_r (FORCED_FLAG<<0) +#define FLAG_l (FORCED_FLAG<<1) +#define FLAG_e (FORCED_FLAG<<2) +#define FLAG_u (FORCED_FLAG<<3) +#define FLAG_c (FORCED_FLAG<<4) +#endif + +#ifdef FOR_cut +#ifndef TT +#define TT this.cut +#endif +#define FLAG_n (1<<0) +#define FLAG_D (1<<1) +#define FLAG_s (1<<2) +#define FLAG_d (1<<3) +#define FLAG_O (1<<4) +#define FLAG_C (1<<5) +#define FLAG_F (1<<6) +#define FLAG_f (1<<7) +#define FLAG_c (1<<8) +#define FLAG_b (1<<9) +#endif + +#ifdef FOR_date +#ifndef TT +#define TT this.date +#endif +#define FLAG_u (1<<0) +#define FLAG_r (1<<1) +#define FLAG_D (1<<2) +#define FLAG_d (1<<3) +#endif + +#ifdef FOR_dd +#ifndef TT +#define TT this.dd +#endif +#endif + +#ifdef FOR_deallocvt +#ifndef TT +#define TT this.deallocvt +#endif +#endif + +#ifdef FOR_demo_many_options +#ifndef TT +#define TT this.demo_many_options +#endif +#define FLAG_a (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#define FLAG_d (FORCED_FLAG<<3) +#define FLAG_e (FORCED_FLAG<<4) +#define FLAG_f (FORCED_FLAG<<5) +#define FLAG_g (FORCED_FLAG<<6) +#define FLAG_h (FORCED_FLAG<<7) +#define FLAG_i (FORCED_FLAG<<8) +#define FLAG_j (FORCED_FLAG<<9) +#define FLAG_k (FORCED_FLAG<<10) +#define FLAG_l (FORCED_FLAG<<11) +#define FLAG_m (FORCED_FLAG<<12) +#define FLAG_n (FORCED_FLAG<<13) +#define FLAG_o (FORCED_FLAG<<14) +#define FLAG_p (FORCED_FLAG<<15) +#define FLAG_q (FORCED_FLAG<<16) +#define FLAG_r (FORCED_FLAG<<17) +#define FLAG_s (FORCED_FLAG<<18) +#define FLAG_t (FORCED_FLAG<<19) +#define FLAG_u (FORCED_FLAG<<20) +#define FLAG_v (FORCED_FLAG<<21) +#define FLAG_w (FORCED_FLAG<<22) +#define FLAG_x (FORCED_FLAG<<23) +#define FLAG_y (FORCED_FLAG<<24) +#define FLAG_z (FORCED_FLAG<<25) +#define FLAG_A (FORCED_FLAG<<26) +#define FLAG_B (FORCED_FLAG<<27) +#define FLAG_C (FORCED_FLAG<<28) +#define FLAG_D (FORCED_FLAG<<29) +#define FLAG_E (FORCED_FLAG<<30) +#define FLAG_F (FORCED_FLAGLL<<31) +#define FLAG_G (FORCED_FLAGLL<<32) +#define FLAG_H (FORCED_FLAGLL<<33) +#define FLAG_I (FORCED_FLAGLL<<34) +#define FLAG_J (FORCED_FLAGLL<<35) +#define FLAG_K (FORCED_FLAGLL<<36) +#define FLAG_L (FORCED_FLAGLL<<37) +#define FLAG_M (FORCED_FLAGLL<<38) +#define FLAG_N (FORCED_FLAGLL<<39) +#define FLAG_O (FORCED_FLAGLL<<40) +#define FLAG_P (FORCED_FLAGLL<<41) +#define FLAG_Q (FORCED_FLAGLL<<42) +#define FLAG_R (FORCED_FLAGLL<<43) +#define FLAG_S (FORCED_FLAGLL<<44) +#define FLAG_T (FORCED_FLAGLL<<45) +#define FLAG_U (FORCED_FLAGLL<<46) +#define FLAG_V (FORCED_FLAGLL<<47) +#define FLAG_W (FORCED_FLAGLL<<48) +#define FLAG_X (FORCED_FLAGLL<<49) +#define FLAG_Y (FORCED_FLAGLL<<50) +#define FLAG_Z (FORCED_FLAGLL<<51) +#endif + +#ifdef FOR_demo_number +#ifndef TT +#define TT this.demo_number +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_d (FORCED_FLAG<<2) +#define FLAG_h (FORCED_FLAG<<3) +#define FLAG_D (FORCED_FLAG<<4) +#endif + +#ifdef FOR_demo_scankey +#ifndef TT +#define TT this.demo_scankey +#endif +#endif + +#ifdef FOR_demo_utf8towc +#ifndef TT +#define TT this.demo_utf8towc +#endif +#endif + +#ifdef FOR_devmem +#ifndef TT +#define TT this.devmem +#endif +#endif + +#ifdef FOR_df +#ifndef TT +#define TT this.df +#endif +#define FLAG_a (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_i (FORCED_FLAG<<2) +#define FLAG_h (FORCED_FLAG<<3) +#define FLAG_k (FORCED_FLAG<<4) +#define FLAG_P (FORCED_FLAG<<5) +#define FLAG_H (FORCED_FLAG<<6) +#endif + +#ifdef FOR_dhcp +#ifndef TT +#define TT this.dhcp +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#define FLAG_q (FORCED_FLAG<<3) +#define FLAG_v (FORCED_FLAG<<4) +#define FLAG_o (FORCED_FLAG<<5) +#define FLAG_a (FORCED_FLAG<<6) +#define FLAG_C (FORCED_FLAG<<7) +#define FLAG_R (FORCED_FLAG<<8) +#define FLAG_B (FORCED_FLAG<<9) +#define FLAG_S (FORCED_FLAG<<10) +#define FLAG_i (FORCED_FLAG<<11) +#define FLAG_p (FORCED_FLAG<<12) +#define FLAG_s (FORCED_FLAG<<13) +#define FLAG_t (FORCED_FLAG<<14) +#define FLAG_T (FORCED_FLAG<<15) +#define FLAG_A (FORCED_FLAG<<16) +#define FLAG_O (FORCED_FLAG<<17) +#define FLAG_r (FORCED_FLAG<<18) +#define FLAG_x (FORCED_FLAG<<19) +#define FLAG_F (FORCED_FLAG<<20) +#define FLAG_H (FORCED_FLAG<<21) +#define FLAG_V (FORCED_FLAG<<22) +#endif + +#ifdef FOR_dhcp6 +#ifndef TT +#define TT this.dhcp6 +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#define FLAG_q (FORCED_FLAG<<3) +#define FLAG_v (FORCED_FLAG<<4) +#define FLAG_R (FORCED_FLAG<<5) +#define FLAG_S (FORCED_FLAG<<6) +#define FLAG_i (FORCED_FLAG<<7) +#define FLAG_p (FORCED_FLAG<<8) +#define FLAG_s (FORCED_FLAG<<9) +#define FLAG_t (FORCED_FLAG<<10) +#define FLAG_T (FORCED_FLAG<<11) +#define FLAG_A (FORCED_FLAG<<12) +#define FLAG_r (FORCED_FLAG<<13) +#endif + +#ifdef FOR_dhcpd +#ifndef TT +#define TT this.dhcpd +#endif +#define FLAG_6 (FORCED_FLAG<<0) +#define FLAG_4 (FORCED_FLAG<<1) +#define FLAG_S (FORCED_FLAG<<2) +#define FLAG_i (FORCED_FLAG<<3) +#define FLAG_f (FORCED_FLAG<<4) +#define FLAG_P (FORCED_FLAG<<5) +#endif + +#ifdef FOR_diff +#ifndef TT +#define TT this.diff +#endif +#define FLAG_U (1<<0) +#define FLAG_r (1<<1) +#define FLAG_N (1<<2) +#define FLAG_S (1<<3) +#define FLAG_L (1<<4) +#define FLAG_a (1<<5) +#define FLAG_q (1<<6) +#define FLAG_s (1<<7) +#define FLAG_T (1<<8) +#define FLAG_i (1<<9) +#define FLAG_w (1<<10) +#define FLAG_t (1<<11) +#define FLAG_u (1<<12) +#define FLAG_b (1<<13) +#define FLAG_d (1<<14) +#define FLAG_B (1<<15) +#define FLAG_strip_trailing_cr (1<<16) +#define FLAG_color (1<<17) +#endif + +#ifdef FOR_dirname +#ifndef TT +#define TT this.dirname +#endif +#endif + +#ifdef FOR_dmesg +#ifndef TT +#define TT this.dmesg +#endif +#define FLAG_c (FORCED_FLAG<<0) +#define FLAG_n (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#define FLAG_r (FORCED_FLAG<<3) +#define FLAG_t (FORCED_FLAG<<4) +#define FLAG_T (FORCED_FLAG<<5) +#define FLAG_S (FORCED_FLAG<<6) +#define FLAG_C (FORCED_FLAG<<7) +#define FLAG_w (FORCED_FLAG<<8) +#endif + +#ifdef FOR_dnsdomainname +#ifndef TT +#define TT this.dnsdomainname +#endif +#endif + +#ifdef FOR_dos2unix +#ifndef TT +#define TT this.dos2unix +#endif +#endif + +#ifdef FOR_du +#ifndef TT +#define TT this.du +#endif +#define FLAG_x (1<<0) +#define FLAG_s (1<<1) +#define FLAG_L (1<<2) +#define FLAG_K (1<<3) +#define FLAG_k (1<<4) +#define FLAG_H (1<<5) +#define FLAG_a (1<<6) +#define FLAG_c (1<<7) +#define FLAG_l (1<<8) +#define FLAG_m (1<<9) +#define FLAG_h (1<<10) +#define FLAG_d (1<<11) +#endif + +#ifdef FOR_dumpleases +#ifndef TT +#define TT this.dumpleases +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_r (FORCED_FLAG<<1) +#define FLAG_a (FORCED_FLAG<<2) +#endif + +#ifdef FOR_echo +#ifndef TT +#define TT this.echo +#endif +#define FLAG_n (1<<0) +#define FLAG_e (1<<1) +#define FLAG_E (1<<2) +#endif + +#ifdef FOR_eject +#ifndef TT +#define TT this.eject +#endif +#define FLAG_T (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#endif + +#ifdef FOR_env +#ifndef TT +#define TT this.env +#endif +#define FLAG_u (1<<0) +#define FLAG_i (1<<1) +#define FLAG_0 (1<<2) +#endif + +#ifdef FOR_exit +#ifndef TT +#define TT this.exit +#endif +#endif + +#ifdef FOR_expand +#ifndef TT +#define TT this.expand +#endif +#define FLAG_t (FORCED_FLAG<<0) +#endif + +#ifdef FOR_expr +#ifndef TT +#define TT this.expr +#endif +#endif + +#ifdef FOR_factor +#ifndef TT +#define TT this.factor +#endif +#endif + +#ifdef FOR_fallocate +#ifndef TT +#define TT this.fallocate +#endif +#define FLAG_o (FORCED_FLAG<<0) +#define FLAG_l (FORCED_FLAG<<1) +#endif + +#ifdef FOR_false +#ifndef TT +#define TT this.false +#endif +#endif + +#ifdef FOR_fdisk +#ifndef TT +#define TT this.fdisk +#endif +#define FLAG_l (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_b (FORCED_FLAG<<2) +#define FLAG_S (FORCED_FLAG<<3) +#define FLAG_H (FORCED_FLAG<<4) +#define FLAG_C (FORCED_FLAG<<5) +#endif + +#ifdef FOR_file +#ifndef TT +#define TT this.file +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_L (FORCED_FLAG<<1) +#define FLAG_h (FORCED_FLAG<<2) +#define FLAG_b (FORCED_FLAG<<3) +#endif + +#ifdef FOR_find +#ifndef TT +#define TT this.find +#endif +#define FLAG_L (1<<0) +#define FLAG_H (1<<1) +#endif + +#ifdef FOR_flock +#ifndef TT +#define TT this.flock +#endif +#define FLAG_x (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#define FLAG_n (FORCED_FLAG<<3) +#endif + +#ifdef FOR_fmt +#ifndef TT +#define TT this.fmt +#endif +#define FLAG_w (FORCED_FLAG<<0) +#endif + +#ifdef FOR_fold +#ifndef TT +#define TT this.fold +#endif +#define FLAG_w (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#define FLAG_b (FORCED_FLAG<<3) +#endif + +#ifdef FOR_free +#ifndef TT +#define TT this.free +#endif +#define FLAG_b (FORCED_FLAG<<0) +#define FLAG_k (FORCED_FLAG<<1) +#define FLAG_m (FORCED_FLAG<<2) +#define FLAG_g (FORCED_FLAG<<3) +#define FLAG_t (FORCED_FLAG<<4) +#define FLAG_h (FORCED_FLAG<<5) +#endif + +#ifdef FOR_freeramdisk +#ifndef TT +#define TT this.freeramdisk +#endif +#endif + +#ifdef FOR_fsck +#ifndef TT +#define TT this.fsck +#endif +#define FLAG_C (FORCED_FLAG<<0) +#define FLAG_s (FORCED_FLAG<<1) +#define FLAG_V (FORCED_FLAG<<2) +#define FLAG_T (FORCED_FLAG<<3) +#define FLAG_R (FORCED_FLAG<<4) +#define FLAG_P (FORCED_FLAG<<5) +#define FLAG_N (FORCED_FLAG<<6) +#define FLAG_A (FORCED_FLAG<<7) +#define FLAG_t (FORCED_FLAG<<8) +#endif + +#ifdef FOR_fsfreeze +#ifndef TT +#define TT this.fsfreeze +#endif +#define FLAG_u (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#endif + +#ifdef FOR_fstype +#ifndef TT +#define TT this.fstype +#endif +#endif + +#ifdef FOR_fsync +#ifndef TT +#define TT this.fsync +#endif +#define FLAG_d (FORCED_FLAG<<0) +#endif + +#ifdef FOR_ftpget +#ifndef TT +#define TT this.ftpget +#endif +#define FLAG_D (FORCED_FLAG<<0) +#define FLAG_d (FORCED_FLAG<<1) +#define FLAG_M (FORCED_FLAG<<2) +#define FLAG_m (FORCED_FLAG<<3) +#define FLAG_L (FORCED_FLAG<<4) +#define FLAG_l (FORCED_FLAG<<5) +#define FLAG_s (FORCED_FLAG<<6) +#define FLAG_g (FORCED_FLAG<<7) +#define FLAG_v (FORCED_FLAG<<8) +#define FLAG_u (FORCED_FLAG<<9) +#define FLAG_p (FORCED_FLAG<<10) +#define FLAG_c (FORCED_FLAG<<11) +#define FLAG_P (FORCED_FLAG<<12) +#endif + +#ifdef FOR_getconf +#ifndef TT +#define TT this.getconf +#endif +#define FLAG_l (1<<0) +#define FLAG_a (1<<1) +#endif + +#ifdef FOR_getenforce +#ifndef TT +#define TT this.getenforce +#endif +#endif + +#ifdef FOR_getfattr +#ifndef TT +#define TT this.getfattr +#endif +#define FLAG_n (FORCED_FLAG<<0) +#define FLAG_h (FORCED_FLAG<<1) +#define FLAG_d (FORCED_FLAG<<2) +#define FLAG_only_values (FORCED_FLAG<<3) +#endif + +#ifdef FOR_getopt +#ifndef TT +#define TT this.getopt +#endif +#define FLAG_u (1<<0) +#define FLAG_T (1<<1) +#define FLAG_l (1<<2) +#define FLAG_o (1<<3) +#define FLAG_n (1<<4) +#define FLAG_a (1<<5) +#endif + +#ifdef FOR_getty +#ifndef TT +#define TT this.getty +#endif +#define FLAG_h (FORCED_FLAG<<0) +#define FLAG_L (FORCED_FLAG<<1) +#define FLAG_m (FORCED_FLAG<<2) +#define FLAG_n (FORCED_FLAG<<3) +#define FLAG_w (FORCED_FLAG<<4) +#define FLAG_i (FORCED_FLAG<<5) +#define FLAG_f (FORCED_FLAG<<6) +#define FLAG_l (FORCED_FLAG<<7) +#define FLAG_I (FORCED_FLAG<<8) +#define FLAG_H (FORCED_FLAG<<9) +#define FLAG_t (FORCED_FLAG<<10) +#endif + +#ifdef FOR_grep +#ifndef TT +#define TT this.grep +#endif +#define FLAG_x (1<<0) +#define FLAG_m (1<<1) +#define FLAG_A (1<<2) +#define FLAG_B (1<<3) +#define FLAG_C (1<<4) +#define FLAG_f (1<<5) +#define FLAG_e (1<<6) +#define FLAG_q (1<<7) +#define FLAG_l (1<<8) +#define FLAG_c (1<<9) +#define FLAG_w (1<<10) +#define FLAG_v (1<<11) +#define FLAG_s (1<<12) +#define FLAG_R (1<<13) +#define FLAG_r (1<<14) +#define FLAG_o (1<<15) +#define FLAG_n (1<<16) +#define FLAG_i (1<<17) +#define FLAG_h (1<<18) +#define FLAG_b (1<<19) +#define FLAG_a (1<<20) +#define FLAG_I (1<<21) +#define FLAG_H (1<<22) +#define FLAG_F (1<<23) +#define FLAG_E (1<<24) +#define FLAG_z (1<<25) +#define FLAG_Z (1<<26) +#define FLAG_M (1<<27) +#define FLAG_S (1<<28) +#define FLAG_exclude_dir (1<<29) +#define FLAG_color (1<<30) +#define FLAG_line_buffered (1LL<<31) +#endif + +#ifdef FOR_groupadd +#ifndef TT +#define TT this.groupadd +#endif +#define FLAG_S (FORCED_FLAG<<0) +#define FLAG_g (FORCED_FLAG<<1) +#endif + +#ifdef FOR_groupdel +#ifndef TT +#define TT this.groupdel +#endif +#endif + +#ifdef FOR_groups +#ifndef TT +#define TT this.groups +#endif +#endif + +#ifdef FOR_gunzip +#ifndef TT +#define TT this.gunzip +#endif +#define FLAG_9 (FORCED_FLAG<<0) +#define FLAG_8 (FORCED_FLAG<<1) +#define FLAG_7 (FORCED_FLAG<<2) +#define FLAG_6 (FORCED_FLAG<<3) +#define FLAG_5 (FORCED_FLAG<<4) +#define FLAG_4 (FORCED_FLAG<<5) +#define FLAG_3 (FORCED_FLAG<<6) +#define FLAG_2 (FORCED_FLAG<<7) +#define FLAG_1 (FORCED_FLAG<<8) +#define FLAG_k (FORCED_FLAG<<9) +#define FLAG_f (FORCED_FLAG<<10) +#define FLAG_d (FORCED_FLAG<<11) +#define FLAG_c (FORCED_FLAG<<12) +#endif + +#ifdef FOR_gzip +#ifndef TT +#define TT this.gzip +#endif +#define FLAG_9 (1<<0) +#define FLAG_8 (1<<1) +#define FLAG_7 (1<<2) +#define FLAG_6 (1<<3) +#define FLAG_5 (1<<4) +#define FLAG_4 (1<<5) +#define FLAG_3 (1<<6) +#define FLAG_2 (1<<7) +#define FLAG_1 (1<<8) +#define FLAG_k (1<<9) +#define FLAG_f (1<<10) +#define FLAG_d (1<<11) +#define FLAG_c (1<<12) +#define FLAG_n (1<<13) +#endif + +#ifdef FOR_head +#ifndef TT +#define TT this.head +#endif +#define FLAG_v (1<<0) +#define FLAG_q (1<<1) +#define FLAG_c (1<<2) +#define FLAG_n (1<<3) +#endif + +#ifdef FOR_hello +#ifndef TT +#define TT this.hello +#endif +#endif + +#ifdef FOR_help +#ifndef TT +#define TT this.help +#endif +#define FLAG_u (FORCED_FLAG<<0) +#define FLAG_h (FORCED_FLAG<<1) +#define FLAG_a (FORCED_FLAG<<2) +#endif + +#ifdef FOR_hexedit +#ifndef TT +#define TT this.hexedit +#endif +#define FLAG_r (FORCED_FLAG<<0) +#endif + +#ifdef FOR_host +#ifndef TT +#define TT this.host +#endif +#define FLAG_t (FORCED_FLAG<<0) +#define FLAG_v (FORCED_FLAG<<1) +#define FLAG_a (FORCED_FLAG<<2) +#endif + +#ifdef FOR_hostid +#ifndef TT +#define TT this.hostid +#endif +#endif + +#ifdef FOR_hostname +#ifndef TT +#define TT this.hostname +#endif +#define FLAG_F (1<<0) +#define FLAG_f (1<<1) +#define FLAG_s (1<<2) +#define FLAG_d (1<<3) +#define FLAG_b (1<<4) +#endif + +#ifdef FOR_hwclock +#ifndef TT +#define TT this.hwclock +#endif +#define FLAG_w (FORCED_FLAG<<0) +#define FLAG_r (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#define FLAG_t (FORCED_FLAG<<3) +#define FLAG_l (FORCED_FLAG<<4) +#define FLAG_u (FORCED_FLAG<<5) +#define FLAG_f (FORCED_FLAG<<6) +#define FLAG_fast (FORCED_FLAG<<7) +#endif + +#ifdef FOR_i2cdetect +#ifndef TT +#define TT this.i2cdetect +#endif +#define FLAG_y (FORCED_FLAG<<0) +#define FLAG_l (FORCED_FLAG<<1) +#define FLAG_F (FORCED_FLAG<<2) +#define FLAG_a (FORCED_FLAG<<3) +#endif + +#ifdef FOR_i2cdump +#ifndef TT +#define TT this.i2cdump +#endif +#define FLAG_y (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#endif + +#ifdef FOR_i2cget +#ifndef TT +#define TT this.i2cget +#endif +#define FLAG_y (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#endif + +#ifdef FOR_i2cset +#ifndef TT +#define TT this.i2cset +#endif +#define FLAG_y (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#endif + +#ifdef FOR_iconv +#ifndef TT +#define TT this.iconv +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#define FLAG_c (FORCED_FLAG<<3) +#endif + +#ifdef FOR_id +#ifndef TT +#define TT this.id +#endif +#define FLAG_u (1<<0) +#define FLAG_r (1<<1) +#define FLAG_g (1<<2) +#define FLAG_G (1<<3) +#define FLAG_n (1<<4) +#define FLAG_Z (FORCED_FLAG<<5) +#endif + +#ifdef FOR_ifconfig +#ifndef TT +#define TT this.ifconfig +#endif +#define FLAG_S (FORCED_FLAG<<0) +#define FLAG_a (FORCED_FLAG<<1) +#endif + +#ifdef FOR_init +#ifndef TT +#define TT this.init +#endif +#endif + +#ifdef FOR_inotifyd +#ifndef TT +#define TT this.inotifyd +#endif +#endif + +#ifdef FOR_insmod +#ifndef TT +#define TT this.insmod +#endif +#endif + +#ifdef FOR_install +#ifndef TT +#define TT this.install +#endif +#define FLAG_g (FORCED_FLAG<<0) +#define FLAG_o (FORCED_FLAG<<1) +#define FLAG_m (FORCED_FLAG<<2) +#define FLAG_v (FORCED_FLAG<<3) +#define FLAG_s (FORCED_FLAG<<4) +#define FLAG_p (FORCED_FLAG<<5) +#define FLAG_D (FORCED_FLAG<<6) +#define FLAG_d (FORCED_FLAG<<7) +#define FLAG_c (FORCED_FLAG<<8) +#endif + +#ifdef FOR_ionice +#ifndef TT +#define TT this.ionice +#endif +#define FLAG_p (FORCED_FLAG<<0) +#define FLAG_n (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#define FLAG_t (FORCED_FLAG<<3) +#endif + +#ifdef FOR_iorenice +#ifndef TT +#define TT this.iorenice +#endif +#endif + +#ifdef FOR_iotop +#ifndef TT +#define TT this.iotop +#endif +#define FLAG_q (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#define FLAG_m (FORCED_FLAG<<3) +#define FLAG_d (FORCED_FLAG<<4) +#define FLAG_s (FORCED_FLAG<<5) +#define FLAG_u (FORCED_FLAG<<6) +#define FLAG_p (FORCED_FLAG<<7) +#define FLAG_o (FORCED_FLAG<<8) +#define FLAG_k (FORCED_FLAG<<9) +#define FLAG_H (FORCED_FLAG<<10) +#define FLAG_O (FORCED_FLAG<<11) +#define FLAG_K (FORCED_FLAG<<12) +#define FLAG_a (FORCED_FLAG<<13) +#define FLAG_A (FORCED_FLAG<<14) +#endif + +#ifdef FOR_ip +#ifndef TT +#define TT this.ip +#endif +#endif + +#ifdef FOR_ipcrm +#ifndef TT +#define TT this.ipcrm +#endif +#define FLAG_Q (FORCED_FLAG<<0) +#define FLAG_q (FORCED_FLAG<<1) +#define FLAG_S (FORCED_FLAG<<2) +#define FLAG_s (FORCED_FLAG<<3) +#define FLAG_M (FORCED_FLAG<<4) +#define FLAG_m (FORCED_FLAG<<5) +#endif + +#ifdef FOR_ipcs +#ifndef TT +#define TT this.ipcs +#endif +#define FLAG_i (FORCED_FLAG<<0) +#define FLAG_m (FORCED_FLAG<<1) +#define FLAG_q (FORCED_FLAG<<2) +#define FLAG_s (FORCED_FLAG<<3) +#define FLAG_l (FORCED_FLAG<<4) +#define FLAG_u (FORCED_FLAG<<5) +#define FLAG_t (FORCED_FLAG<<6) +#define FLAG_p (FORCED_FLAG<<7) +#define FLAG_c (FORCED_FLAG<<8) +#define FLAG_a (FORCED_FLAG<<9) +#endif + +#ifdef FOR_kill +#ifndef TT +#define TT this.kill +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_l (FORCED_FLAG<<1) +#endif + +#ifdef FOR_killall +#ifndef TT +#define TT this.killall +#endif +#define FLAG_w (FORCED_FLAG<<0) +#define FLAG_v (FORCED_FLAG<<1) +#define FLAG_q (FORCED_FLAG<<2) +#define FLAG_l (FORCED_FLAG<<3) +#define FLAG_i (FORCED_FLAG<<4) +#define FLAG_s (FORCED_FLAG<<5) +#endif + +#ifdef FOR_killall5 +#ifndef TT +#define TT this.killall5 +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_l (FORCED_FLAG<<1) +#define FLAG_o (FORCED_FLAG<<2) +#endif + +#ifdef FOR_klogd +#ifndef TT +#define TT this.klogd +#endif +#define FLAG_n (FORCED_FLAG<<0) +#define FLAG_c (FORCED_FLAG<<1) +#endif + +#ifdef FOR_last +#ifndef TT +#define TT this.last +#endif +#define FLAG_W (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#endif + +#ifdef FOR_link +#ifndef TT +#define TT this.link +#endif +#endif + +#ifdef FOR_ln +#ifndef TT +#define TT this.ln +#endif +#define FLAG_s (1<<0) +#define FLAG_f (1<<1) +#define FLAG_n (1<<2) +#define FLAG_v (1<<3) +#define FLAG_T (1<<4) +#define FLAG_t (1<<5) +#define FLAG_r (1<<6) +#endif + +#ifdef FOR_load_policy +#ifndef TT +#define TT this.load_policy +#endif +#endif + +#ifdef FOR_log +#ifndef TT +#define TT this.log +#endif +#define FLAG_t (FORCED_FLAG<<0) +#define FLAG_p (FORCED_FLAG<<1) +#endif + +#ifdef FOR_logger +#ifndef TT +#define TT this.logger +#endif +#define FLAG_p (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#endif + +#ifdef FOR_login +#ifndef TT +#define TT this.login +#endif +#define FLAG_h (FORCED_FLAG<<0) +#define FLAG_p (FORCED_FLAG<<1) +#define FLAG_f (FORCED_FLAG<<2) +#endif + +#ifdef FOR_logname +#ifndef TT +#define TT this.logname +#endif +#endif + +#ifdef FOR_logwrapper +#ifndef TT +#define TT this.logwrapper +#endif +#endif + +#ifdef FOR_losetup +#ifndef TT +#define TT this.losetup +#endif +#define FLAG_D (FORCED_FLAG<<0) +#define FLAG_a (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#define FLAG_d (FORCED_FLAG<<3) +#define FLAG_f (FORCED_FLAG<<4) +#define FLAG_j (FORCED_FLAG<<5) +#define FLAG_o (FORCED_FLAG<<6) +#define FLAG_r (FORCED_FLAG<<7) +#define FLAG_s (FORCED_FLAG<<8) +#define FLAG_S (FORCED_FLAG<<9) +#endif + +#ifdef FOR_ls +#ifndef TT +#define TT this.ls +#endif +#define FLAG_1 (1<<0) +#define FLAG_x (1<<1) +#define FLAG_w (1<<2) +#define FLAG_u (1<<3) +#define FLAG_t (1<<4) +#define FLAG_s (1<<5) +#define FLAG_r (1<<6) +#define FLAG_q (1<<7) +#define FLAG_p (1<<8) +#define FLAG_n (1<<9) +#define FLAG_m (1<<10) +#define FLAG_l (1<<11) +#define FLAG_k (1<<12) +#define FLAG_i (1<<13) +#define FLAG_h (1<<14) +#define FLAG_f (1<<15) +#define FLAG_d (1<<16) +#define FLAG_c (1<<17) +#define FLAG_b (1<<18) +#define FLAG_a (1<<19) +#define FLAG_S (1<<20) +#define FLAG_R (1<<21) +#define FLAG_L (1<<22) +#define FLAG_H (1<<23) +#define FLAG_F (1<<24) +#define FLAG_C (1<<25) +#define FLAG_A (1<<26) +#define FLAG_o (1<<27) +#define FLAG_g (1<<28) +#define FLAG_Z (1<<29) +#define FLAG_show_control_chars (1<<30) +#define FLAG_full_time (1LL<<31) +#define FLAG_color (1LL<<32) +#endif + +#ifdef FOR_lsattr +#ifndef TT +#define TT this.lsattr +#endif +#define FLAG_R (FORCED_FLAG<<0) +#define FLAG_v (FORCED_FLAG<<1) +#define FLAG_p (FORCED_FLAG<<2) +#define FLAG_a (FORCED_FLAG<<3) +#define FLAG_d (FORCED_FLAG<<4) +#define FLAG_l (FORCED_FLAG<<5) +#endif + +#ifdef FOR_lsmod +#ifndef TT +#define TT this.lsmod +#endif +#endif + +#ifdef FOR_lsof +#ifndef TT +#define TT this.lsof +#endif +#define FLAG_t (FORCED_FLAG<<0) +#define FLAG_p (FORCED_FLAG<<1) +#define FLAG_l (FORCED_FLAG<<2) +#endif + +#ifdef FOR_lspci +#ifndef TT +#define TT this.lspci +#endif +#define FLAG_i (FORCED_FLAG<<0) +#define FLAG_n (FORCED_FLAG<<1) +#define FLAG_k (FORCED_FLAG<<2) +#define FLAG_m (FORCED_FLAG<<3) +#define FLAG_e (FORCED_FLAG<<4) +#endif + +#ifdef FOR_lsusb +#ifndef TT +#define TT this.lsusb +#endif +#endif + +#ifdef FOR_makedevs +#ifndef TT +#define TT this.makedevs +#endif +#define FLAG_d (FORCED_FLAG<<0) +#endif + +#ifdef FOR_man +#ifndef TT +#define TT this.man +#endif +#define FLAG_M (FORCED_FLAG<<0) +#define FLAG_k (FORCED_FLAG<<1) +#endif + +#ifdef FOR_mcookie +#ifndef TT +#define TT this.mcookie +#endif +#define FLAG_V (FORCED_FLAG<<0) +#define FLAG_v (FORCED_FLAG<<1) +#endif + +#ifdef FOR_md5sum +#ifndef TT +#define TT this.md5sum +#endif +#define FLAG_s (1<<0) +#define FLAG_c (1<<1) +#define FLAG_b (1<<2) +#endif + +#ifdef FOR_mdev +#ifndef TT +#define TT this.mdev +#endif +#define FLAG_s (FORCED_FLAG<<0) +#endif + +#ifdef FOR_microcom +#ifndef TT +#define TT this.microcom +#endif +#define FLAG_X (1<<0) +#define FLAG_s (1<<1) +#endif + +#ifdef FOR_mix +#ifndef TT +#define TT this.mix +#endif +#define FLAG_r (FORCED_FLAG<<0) +#define FLAG_l (FORCED_FLAG<<1) +#define FLAG_d (FORCED_FLAG<<2) +#define FLAG_c (FORCED_FLAG<<3) +#endif + +#ifdef FOR_mkdir +#ifndef TT +#define TT this.mkdir +#endif +#define FLAG_m (1<<0) +#define FLAG_p (1<<1) +#define FLAG_v (1<<2) +#define FLAG_Z (FORCED_FLAG<<3) +#endif + +#ifdef FOR_mke2fs +#ifndef TT +#define TT this.mke2fs +#endif +#define FLAG_b (FORCED_FLAG<<0) +#define FLAG_i (FORCED_FLAG<<1) +#define FLAG_N (FORCED_FLAG<<2) +#define FLAG_m (FORCED_FLAG<<3) +#define FLAG_q (FORCED_FLAG<<4) +#define FLAG_n (FORCED_FLAG<<5) +#define FLAG_F (FORCED_FLAG<<6) +#define FLAG_g (FORCED_FLAG<<7) +#endif + +#ifdef FOR_mkfifo +#ifndef TT +#define TT this.mkfifo +#endif +#define FLAG_m (FORCED_FLAG<<0) +#define FLAG_Z (FORCED_FLAG<<1) +#endif + +#ifdef FOR_mknod +#ifndef TT +#define TT this.mknod +#endif +#define FLAG_Z (FORCED_FLAG<<0) +#define FLAG_m (FORCED_FLAG<<1) +#endif + +#ifdef FOR_mkpasswd +#ifndef TT +#define TT this.mkpasswd +#endif +#define FLAG_P (FORCED_FLAG<<0) +#define FLAG_m (FORCED_FLAG<<1) +#define FLAG_S (FORCED_FLAG<<2) +#endif + +#ifdef FOR_mkswap +#ifndef TT +#define TT this.mkswap +#endif +#define FLAG_L (FORCED_FLAG<<0) +#endif + +#ifdef FOR_mktemp +#ifndef TT +#define TT this.mktemp +#endif +#define FLAG_t (1<<0) +#define FLAG_p (1<<1) +#define FLAG_d (1<<2) +#define FLAG_q (1<<3) +#define FLAG_u (1<<4) +#define FLAG_tmpdir (1<<5) +#endif + +#ifdef FOR_modinfo +#ifndef TT +#define TT this.modinfo +#endif +#define FLAG_0 (FORCED_FLAG<<0) +#define FLAG_F (FORCED_FLAG<<1) +#define FLAG_k (FORCED_FLAG<<2) +#define FLAG_b (FORCED_FLAG<<3) +#endif + +#ifdef FOR_modprobe +#ifndef TT +#define TT this.modprobe +#endif +#define FLAG_d (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_D (FORCED_FLAG<<2) +#define FLAG_s (FORCED_FLAG<<3) +#define FLAG_v (FORCED_FLAG<<4) +#define FLAG_q (FORCED_FLAG<<5) +#define FLAG_r (FORCED_FLAG<<6) +#define FLAG_l (FORCED_FLAG<<7) +#define FLAG_a (FORCED_FLAG<<8) +#endif + +#ifdef FOR_more +#ifndef TT +#define TT this.more +#endif +#endif + +#ifdef FOR_mount +#ifndef TT +#define TT this.mount +#endif +#define FLAG_o (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_w (FORCED_FLAG<<2) +#define FLAG_v (FORCED_FLAG<<3) +#define FLAG_r (FORCED_FLAG<<4) +#define FLAG_n (FORCED_FLAG<<5) +#define FLAG_f (FORCED_FLAG<<6) +#define FLAG_a (FORCED_FLAG<<7) +#define FLAG_O (FORCED_FLAG<<8) +#endif + +#ifdef FOR_mountpoint +#ifndef TT +#define TT this.mountpoint +#endif +#define FLAG_x (FORCED_FLAG<<0) +#define FLAG_d (FORCED_FLAG<<1) +#define FLAG_q (FORCED_FLAG<<2) +#endif + +#ifdef FOR_mv +#ifndef TT +#define TT this.mv +#endif +#define FLAG_T (1<<0) +#define FLAG_i (1<<1) +#define FLAG_f (1<<2) +#define FLAG_F (1<<3) +#define FLAG_n (1<<4) +#define FLAG_v (1<<5) +#endif + +#ifdef FOR_nbd_client +#ifndef TT +#define TT this.nbd_client +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_n (FORCED_FLAG<<1) +#endif + +#ifdef FOR_netcat +#ifndef TT +#define TT this.netcat +#endif +#define FLAG_U (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_6 (FORCED_FLAG<<2) +#define FLAG_4 (FORCED_FLAG<<3) +#define FLAG_f (FORCED_FLAG<<4) +#define FLAG_s (FORCED_FLAG<<5) +#define FLAG_q (FORCED_FLAG<<6) +#define FLAG_p (FORCED_FLAG<<7) +#define FLAG_W (FORCED_FLAG<<8) +#define FLAG_w (FORCED_FLAG<<9) +#define FLAG_L (FORCED_FLAG<<10) +#define FLAG_l (FORCED_FLAG<<11) +#define FLAG_t (FORCED_FLAG<<12) +#endif + +#ifdef FOR_netstat +#ifndef TT +#define TT this.netstat +#endif +#define FLAG_l (FORCED_FLAG<<0) +#define FLAG_a (FORCED_FLAG<<1) +#define FLAG_e (FORCED_FLAG<<2) +#define FLAG_n (FORCED_FLAG<<3) +#define FLAG_t (FORCED_FLAG<<4) +#define FLAG_u (FORCED_FLAG<<5) +#define FLAG_w (FORCED_FLAG<<6) +#define FLAG_x (FORCED_FLAG<<7) +#define FLAG_r (FORCED_FLAG<<8) +#define FLAG_W (FORCED_FLAG<<9) +#define FLAG_p (FORCED_FLAG<<10) +#endif + +#ifdef FOR_nice +#ifndef TT +#define TT this.nice +#endif +#define FLAG_n (FORCED_FLAG<<0) +#endif + +#ifdef FOR_nl +#ifndef TT +#define TT this.nl +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_n (FORCED_FLAG<<1) +#define FLAG_b (FORCED_FLAG<<2) +#define FLAG_E (FORCED_FLAG<<3) +#define FLAG_w (FORCED_FLAG<<4) +#define FLAG_l (FORCED_FLAG<<5) +#define FLAG_v (FORCED_FLAG<<6) +#endif + +#ifdef FOR_nohup +#ifndef TT +#define TT this.nohup +#endif +#endif + +#ifdef FOR_nproc +#ifndef TT +#define TT this.nproc +#endif +#define FLAG_all (FORCED_FLAG<<0) +#endif + +#ifdef FOR_nsenter +#ifndef TT +#define TT this.nsenter +#endif +#define FLAG_U (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_p (FORCED_FLAG<<2) +#define FLAG_n (FORCED_FLAG<<3) +#define FLAG_m (FORCED_FLAG<<4) +#define FLAG_i (FORCED_FLAG<<5) +#define FLAG_t (FORCED_FLAG<<6) +#define FLAG_F (FORCED_FLAG<<7) +#endif + +#ifdef FOR_od +#ifndef TT +#define TT this.od +#endif +#define FLAG_t (1<<0) +#define FLAG_A (1<<1) +#define FLAG_b (1<<2) +#define FLAG_c (1<<3) +#define FLAG_d (1<<4) +#define FLAG_o (1<<5) +#define FLAG_s (1<<6) +#define FLAG_x (1<<7) +#define FLAG_N (1<<8) +#define FLAG_w (1<<9) +#define FLAG_v (1<<10) +#define FLAG_j (1<<11) +#endif + +#ifdef FOR_oneit +#ifndef TT +#define TT this.oneit +#endif +#define FLAG_3 (FORCED_FLAG<<0) +#define FLAG_p (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#define FLAG_n (FORCED_FLAG<<3) +#endif + +#ifdef FOR_openvt +#ifndef TT +#define TT this.openvt +#endif +#define FLAG_w (FORCED_FLAG<<0) +#define FLAG_s (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#endif + +#ifdef FOR_partprobe +#ifndef TT +#define TT this.partprobe +#endif +#endif + +#ifdef FOR_passwd +#ifndef TT +#define TT this.passwd +#endif +#define FLAG_u (FORCED_FLAG<<0) +#define FLAG_l (FORCED_FLAG<<1) +#define FLAG_d (FORCED_FLAG<<2) +#define FLAG_a (FORCED_FLAG<<3) +#endif + +#ifdef FOR_paste +#ifndef TT +#define TT this.paste +#endif +#define FLAG_s (1<<0) +#define FLAG_d (1<<1) +#endif + +#ifdef FOR_patch +#ifndef TT +#define TT this.patch +#endif +#define FLAG_s (1<<0) +#define FLAG_R (1<<1) +#define FLAG_i (1<<2) +#define FLAG_d (1<<3) +#define FLAG_p (1<<4) +#define FLAG_l (1<<5) +#define FLAG_u (1<<6) +#define FLAG_f (1<<7) +#define FLAG_g (1<<8) +#define FLAG_F (1<<9) +#define FLAG_x (FORCED_FLAG<<10) +#define FLAG_dry_run (1<<11) +#define FLAG_no_backup_if_mismatch (1<<12) +#endif + +#ifdef FOR_pgrep +#ifndef TT +#define TT this.pgrep +#endif +#define FLAG_L (FORCED_FLAG<<0) +#define FLAG_x (FORCED_FLAG<<1) +#define FLAG_v (FORCED_FLAG<<2) +#define FLAG_o (FORCED_FLAG<<3) +#define FLAG_n (FORCED_FLAG<<4) +#define FLAG_f (FORCED_FLAG<<5) +#define FLAG_G (FORCED_FLAG<<6) +#define FLAG_g (FORCED_FLAG<<7) +#define FLAG_P (FORCED_FLAG<<8) +#define FLAG_s (FORCED_FLAG<<9) +#define FLAG_t (FORCED_FLAG<<10) +#define FLAG_U (FORCED_FLAG<<11) +#define FLAG_u (FORCED_FLAG<<12) +#define FLAG_d (FORCED_FLAG<<13) +#define FLAG_l (FORCED_FLAG<<14) +#define FLAG_c (FORCED_FLAG<<15) +#endif + +#ifdef FOR_pidof +#ifndef TT +#define TT this.pidof +#endif +#define FLAG_x (FORCED_FLAG<<0) +#define FLAG_o (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#endif + +#ifdef FOR_ping +#ifndef TT +#define TT this.ping +#endif +#define FLAG_I (FORCED_FLAG<<0) +#define FLAG_6 (FORCED_FLAG<<1) +#define FLAG_4 (FORCED_FLAG<<2) +#define FLAG_f (FORCED_FLAG<<3) +#define FLAG_q (FORCED_FLAG<<4) +#define FLAG_w (FORCED_FLAG<<5) +#define FLAG_W (FORCED_FLAG<<6) +#define FLAG_i (FORCED_FLAG<<7) +#define FLAG_s (FORCED_FLAG<<8) +#define FLAG_c (FORCED_FLAG<<9) +#define FLAG_t (FORCED_FLAG<<10) +#define FLAG_m (FORCED_FLAG<<11) +#endif + +#ifdef FOR_pivot_root +#ifndef TT +#define TT this.pivot_root +#endif +#endif + +#ifdef FOR_pkill +#ifndef TT +#define TT this.pkill +#endif +#define FLAG_l (FORCED_FLAG<<0) +#define FLAG_x (FORCED_FLAG<<1) +#define FLAG_v (FORCED_FLAG<<2) +#define FLAG_o (FORCED_FLAG<<3) +#define FLAG_n (FORCED_FLAG<<4) +#define FLAG_f (FORCED_FLAG<<5) +#define FLAG_G (FORCED_FLAG<<6) +#define FLAG_g (FORCED_FLAG<<7) +#define FLAG_P (FORCED_FLAG<<8) +#define FLAG_s (FORCED_FLAG<<9) +#define FLAG_t (FORCED_FLAG<<10) +#define FLAG_U (FORCED_FLAG<<11) +#define FLAG_u (FORCED_FLAG<<12) +#define FLAG_V (FORCED_FLAG<<13) +#endif + +#ifdef FOR_pmap +#ifndef TT +#define TT this.pmap +#endif +#define FLAG_q (FORCED_FLAG<<0) +#define FLAG_x (FORCED_FLAG<<1) +#endif + +#ifdef FOR_printenv +#ifndef TT +#define TT this.printenv +#endif +#define FLAG_0 (FORCED_FLAG<<0) +#endif + +#ifdef FOR_printf +#ifndef TT +#define TT this.printf +#endif +#endif + +#ifdef FOR_ps +#ifndef TT +#define TT this.ps +#endif +#define FLAG_Z (FORCED_FLAG<<0) +#define FLAG_w (FORCED_FLAG<<1) +#define FLAG_G (FORCED_FLAG<<2) +#define FLAG_g (FORCED_FLAG<<3) +#define FLAG_U (FORCED_FLAG<<4) +#define FLAG_u (FORCED_FLAG<<5) +#define FLAG_T (FORCED_FLAG<<6) +#define FLAG_t (FORCED_FLAG<<7) +#define FLAG_s (FORCED_FLAG<<8) +#define FLAG_p (FORCED_FLAG<<9) +#define FLAG_O (FORCED_FLAG<<10) +#define FLAG_o (FORCED_FLAG<<11) +#define FLAG_n (FORCED_FLAG<<12) +#define FLAG_M (FORCED_FLAG<<13) +#define FLAG_l (FORCED_FLAG<<14) +#define FLAG_f (FORCED_FLAG<<15) +#define FLAG_e (FORCED_FLAG<<16) +#define FLAG_d (FORCED_FLAG<<17) +#define FLAG_A (FORCED_FLAG<<18) +#define FLAG_a (FORCED_FLAG<<19) +#define FLAG_P (FORCED_FLAG<<20) +#define FLAG_k (FORCED_FLAG<<21) +#endif + +#ifdef FOR_pwd +#ifndef TT +#define TT this.pwd +#endif +#define FLAG_P (1<<0) +#define FLAG_L (1<<1) +#endif + +#ifdef FOR_pwdx +#ifndef TT +#define TT this.pwdx +#endif +#define FLAG_a (FORCED_FLAG<<0) +#endif + +#ifdef FOR_readahead +#ifndef TT +#define TT this.readahead +#endif +#endif + +#ifdef FOR_readelf +#ifndef TT +#define TT this.readelf +#endif +#define FLAG_x (FORCED_FLAG<<0) +#define FLAG_W (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#define FLAG_S (FORCED_FLAG<<3) +#define FLAG_p (FORCED_FLAG<<4) +#define FLAG_n (FORCED_FLAG<<5) +#define FLAG_l (FORCED_FLAG<<6) +#define FLAG_h (FORCED_FLAG<<7) +#define FLAG_d (FORCED_FLAG<<8) +#define FLAG_a (FORCED_FLAG<<9) +#define FLAG_dyn_syms (FORCED_FLAG<<10) +#endif + +#ifdef FOR_readlink +#ifndef TT +#define TT this.readlink +#endif +#define FLAG_f (1<<0) +#define FLAG_e (1<<1) +#define FLAG_m (1<<2) +#define FLAG_q (1<<3) +#define FLAG_n (1<<4) +#endif + +#ifdef FOR_realpath +#ifndef TT +#define TT this.realpath +#endif +#endif + +#ifdef FOR_reboot +#ifndef TT +#define TT this.reboot +#endif +#define FLAG_n (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#endif + +#ifdef FOR_renice +#ifndef TT +#define TT this.renice +#endif +#define FLAG_n (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_p (FORCED_FLAG<<2) +#define FLAG_g (FORCED_FLAG<<3) +#endif + +#ifdef FOR_reset +#ifndef TT +#define TT this.reset +#endif +#endif + +#ifdef FOR_restorecon +#ifndef TT +#define TT this.restorecon +#endif +#define FLAG_v (FORCED_FLAG<<0) +#define FLAG_r (FORCED_FLAG<<1) +#define FLAG_R (FORCED_FLAG<<2) +#define FLAG_n (FORCED_FLAG<<3) +#define FLAG_F (FORCED_FLAG<<4) +#define FLAG_D (FORCED_FLAG<<5) +#endif + +#ifdef FOR_rev +#ifndef TT +#define TT this.rev +#endif +#endif + +#ifdef FOR_rfkill +#ifndef TT +#define TT this.rfkill +#endif +#endif + +#ifdef FOR_rm +#ifndef TT +#define TT this.rm +#endif +#define FLAG_v (1<<0) +#define FLAG_r (1<<1) +#define FLAG_R (1<<2) +#define FLAG_i (1<<3) +#define FLAG_f (1<<4) +#endif + +#ifdef FOR_rmdir +#ifndef TT +#define TT this.rmdir +#endif +#define FLAG_p (1<<0) +#define FLAG_ignore_fail_on_non_empty (1<<1) +#endif + +#ifdef FOR_rmmod +#ifndef TT +#define TT this.rmmod +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_w (FORCED_FLAG<<1) +#endif + +#ifdef FOR_route +#ifndef TT +#define TT this.route +#endif +#define FLAG_A (FORCED_FLAG<<0) +#define FLAG_e (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#endif + +#ifdef FOR_runcon +#ifndef TT +#define TT this.runcon +#endif +#endif + +#ifdef FOR_sed +#ifndef TT +#define TT this.sed +#endif +#define FLAG_z (1<<0) +#define FLAG_r (1<<1) +#define FLAG_E (1<<2) +#define FLAG_n (1<<3) +#define FLAG_i (1<<4) +#define FLAG_f (1<<5) +#define FLAG_e (1<<6) +#define FLAG_version (1<<7) +#define FLAG_help (1<<8) +#endif + +#ifdef FOR_sendevent +#ifndef TT +#define TT this.sendevent +#endif +#endif + +#ifdef FOR_seq +#ifndef TT +#define TT this.seq +#endif +#define FLAG_w (1<<0) +#define FLAG_s (1<<1) +#define FLAG_f (1<<2) +#endif + +#ifdef FOR_setenforce +#ifndef TT +#define TT this.setenforce +#endif +#endif + +#ifdef FOR_setfattr +#ifndef TT +#define TT this.setfattr +#endif +#define FLAG_x (FORCED_FLAG<<0) +#define FLAG_v (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#define FLAG_h (FORCED_FLAG<<3) +#endif + +#ifdef FOR_setsid +#ifndef TT +#define TT this.setsid +#endif +#define FLAG_d (1<<0) +#define FLAG_c (1<<1) +#define FLAG_w (1<<2) +#endif + +#ifdef FOR_sh +#ifndef TT +#define TT this.sh +#endif +#define FLAG_i (FORCED_FLAG<<0) +#define FLAG_c (FORCED_FLAG<<1) +#define FLAG_s (FORCED_FLAG<<2) +#define FLAG_norc (FORCED_FLAG<<3) +#define FLAG_noprofile (FORCED_FLAG<<4) +#define FLAG_noediting (FORCED_FLAG<<5) +#endif + +#ifdef FOR_sha1sum +#ifndef TT +#define TT this.sha1sum +#endif +#define FLAG_s (1<<0) +#define FLAG_c (1<<1) +#define FLAG_b (1<<2) +#endif + +#ifdef FOR_shred +#ifndef TT +#define TT this.shred +#endif +#define FLAG_f (FORCED_FLAG<<0) +#define FLAG_o (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#define FLAG_s (FORCED_FLAG<<3) +#define FLAG_u (FORCED_FLAG<<4) +#define FLAG_x (FORCED_FLAG<<5) +#define FLAG_z (FORCED_FLAG<<6) +#endif + +#ifdef FOR_skeleton +#ifndef TT +#define TT this.skeleton +#endif +#define FLAG_a (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#define FLAG_d (FORCED_FLAG<<3) +#define FLAG_e (FORCED_FLAG<<4) +#define FLAG_also (FORCED_FLAG<<5) +#define FLAG_blubber (FORCED_FLAG<<6) +#define FLAG_walrus (FORCED_FLAG<<7) +#endif + +#ifdef FOR_skeleton_alias +#ifndef TT +#define TT this.skeleton_alias +#endif +#define FLAG_q (FORCED_FLAG<<0) +#define FLAG_d (FORCED_FLAG<<1) +#define FLAG_b (FORCED_FLAG<<2) +#endif + +#ifdef FOR_sleep +#ifndef TT +#define TT this.sleep +#endif +#endif + +#ifdef FOR_sntp +#ifndef TT +#define TT this.sntp +#endif +#define FLAG_r (FORCED_FLAG<<0) +#define FLAG_q (FORCED_FLAG<<1) +#define FLAG_D (FORCED_FLAG<<2) +#define FLAG_d (FORCED_FLAG<<3) +#define FLAG_s (FORCED_FLAG<<4) +#define FLAG_a (FORCED_FLAG<<5) +#define FLAG_t (FORCED_FLAG<<6) +#define FLAG_p (FORCED_FLAG<<7) +#define FLAG_S (FORCED_FLAG<<8) +#define FLAG_m (FORCED_FLAG<<9) +#define FLAG_M (FORCED_FLAG<<10) +#endif + +#ifdef FOR_sort +#ifndef TT +#define TT this.sort +#endif +#define FLAG_n (1<<0) +#define FLAG_u (1<<1) +#define FLAG_r (1<<2) +#define FLAG_i (1<<3) +#define FLAG_f (1<<4) +#define FLAG_d (1<<5) +#define FLAG_z (1<<6) +#define FLAG_s (1<<7) +#define FLAG_c (1<<8) +#define FLAG_M (1<<9) +#define FLAG_b (1<<10) +#define FLAG_V (1<<11) +#define FLAG_x (1<<12) +#define FLAG_t (1<<13) +#define FLAG_k (1<<14) +#define FLAG_o (1<<15) +#define FLAG_m (1<<16) +#define FLAG_T (1<<17) +#define FLAG_S (1<<18) +#define FLAG_g (1<<19) +#endif + +#ifdef FOR_split +#ifndef TT +#define TT this.split +#endif +#define FLAG_l (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_a (FORCED_FLAG<<2) +#endif + +#ifdef FOR_stat +#ifndef TT +#define TT this.stat +#endif +#define FLAG_t (1<<0) +#define FLAG_L (1<<1) +#define FLAG_f (1<<2) +#define FLAG_c (1<<3) +#endif + +#ifdef FOR_strings +#ifndef TT +#define TT this.strings +#endif +#define FLAG_o (FORCED_FLAG<<0) +#define FLAG_f (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#define FLAG_a (FORCED_FLAG<<3) +#define FLAG_t (FORCED_FLAG<<4) +#endif + +#ifdef FOR_stty +#ifndef TT +#define TT this.stty +#endif +#define FLAG_g (FORCED_FLAG<<0) +#define FLAG_F (FORCED_FLAG<<1) +#define FLAG_a (FORCED_FLAG<<2) +#endif + +#ifdef FOR_su +#ifndef TT +#define TT this.su +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_c (FORCED_FLAG<<1) +#define FLAG_g (FORCED_FLAG<<2) +#define FLAG_u (FORCED_FLAG<<3) +#define FLAG_p (FORCED_FLAG<<4) +#define FLAG_m (FORCED_FLAG<<5) +#define FLAG_l (FORCED_FLAG<<6) +#endif + +#ifdef FOR_sulogin +#ifndef TT +#define TT this.sulogin +#endif +#define FLAG_t (FORCED_FLAG<<0) +#endif + +#ifdef FOR_swapoff +#ifndef TT +#define TT this.swapoff +#endif +#endif + +#ifdef FOR_swapon +#ifndef TT +#define TT this.swapon +#endif +#define FLAG_d (FORCED_FLAG<<0) +#define FLAG_p (FORCED_FLAG<<1) +#endif + +#ifdef FOR_switch_root +#ifndef TT +#define TT this.switch_root +#endif +#define FLAG_h (FORCED_FLAG<<0) +#define FLAG_c (FORCED_FLAG<<1) +#endif + +#ifdef FOR_sync +#ifndef TT +#define TT this.sync +#endif +#endif + +#ifdef FOR_sysctl +#ifndef TT +#define TT this.sysctl +#endif +#define FLAG_A (FORCED_FLAG<<0) +#define FLAG_a (FORCED_FLAG<<1) +#define FLAG_p (FORCED_FLAG<<2) +#define FLAG_w (FORCED_FLAG<<3) +#define FLAG_q (FORCED_FLAG<<4) +#define FLAG_N (FORCED_FLAG<<5) +#define FLAG_e (FORCED_FLAG<<6) +#define FLAG_n (FORCED_FLAG<<7) +#endif + +#ifdef FOR_syslogd +#ifndef TT +#define TT this.syslogd +#endif +#define FLAG_D (FORCED_FLAG<<0) +#define FLAG_L (FORCED_FLAG<<1) +#define FLAG_K (FORCED_FLAG<<2) +#define FLAG_S (FORCED_FLAG<<3) +#define FLAG_n (FORCED_FLAG<<4) +#define FLAG_a (FORCED_FLAG<<5) +#define FLAG_f (FORCED_FLAG<<6) +#define FLAG_p (FORCED_FLAG<<7) +#define FLAG_O (FORCED_FLAG<<8) +#define FLAG_m (FORCED_FLAG<<9) +#define FLAG_s (FORCED_FLAG<<10) +#define FLAG_b (FORCED_FLAG<<11) +#define FLAG_R (FORCED_FLAG<<12) +#define FLAG_l (FORCED_FLAG<<13) +#endif + +#ifdef FOR_tac +#ifndef TT +#define TT this.tac +#endif +#endif + +#ifdef FOR_tail +#ifndef TT +#define TT this.tail +#endif +#define FLAG_n (1<<0) +#define FLAG_c (1<<1) +#define FLAG_f (1<<2) +#endif + +#ifdef FOR_tar +#ifndef TT +#define TT this.tar +#endif +#define FLAG_a (1<<0) +#define FLAG_f (1<<1) +#define FLAG_C (1<<2) +#define FLAG_T (1<<3) +#define FLAG_X (1<<4) +#define FLAG_m (1<<5) +#define FLAG_O (1<<6) +#define FLAG_S (1<<7) +#define FLAG_z (1<<8) +#define FLAG_j (1<<9) +#define FLAG_J (1<<10) +#define FLAG_v (1<<11) +#define FLAG_t (1<<12) +#define FLAG_x (1<<13) +#define FLAG_h (1<<14) +#define FLAG_c (1<<15) +#define FLAG_k (1<<16) +#define FLAG_p (1<<17) +#define FLAG_o (1<<18) +#define FLAG_to_command (1<<19) +#define FLAG_owner (1<<20) +#define FLAG_group (1<<21) +#define FLAG_mtime (1<<22) +#define FLAG_mode (1<<23) +#define FLAG_exclude (1<<24) +#define FLAG_overwrite (1<<25) +#define FLAG_no_same_permissions (1<<26) +#define FLAG_numeric_owner (1<<27) +#define FLAG_no_recursion (1<<28) +#define FLAG_full_time (1<<29) +#define FLAG_restrict (1<<30) +#endif + +#ifdef FOR_taskset +#ifndef TT +#define TT this.taskset +#endif +#define FLAG_a (FORCED_FLAG<<0) +#define FLAG_p (FORCED_FLAG<<1) +#endif + +#ifdef FOR_tcpsvd +#ifndef TT +#define TT this.tcpsvd +#endif +#define FLAG_v (FORCED_FLAG<<0) +#define FLAG_E (FORCED_FLAG<<1) +#define FLAG_h (FORCED_FLAG<<2) +#define FLAG_l (FORCED_FLAG<<3) +#define FLAG_u (FORCED_FLAG<<4) +#define FLAG_b (FORCED_FLAG<<5) +#define FLAG_C (FORCED_FLAG<<6) +#define FLAG_c (FORCED_FLAG<<7) +#endif + +#ifdef FOR_tee +#ifndef TT +#define TT this.tee +#endif +#define FLAG_a (1<<0) +#define FLAG_i (1<<1) +#endif + +#ifdef FOR_telnet +#ifndef TT +#define TT this.telnet +#endif +#endif + +#ifdef FOR_telnetd +#ifndef TT +#define TT this.telnetd +#endif +#define FLAG_i (FORCED_FLAG<<0) +#define FLAG_K (FORCED_FLAG<<1) +#define FLAG_S (FORCED_FLAG<<2) +#define FLAG_F (FORCED_FLAG<<3) +#define FLAG_l (FORCED_FLAG<<4) +#define FLAG_f (FORCED_FLAG<<5) +#define FLAG_p (FORCED_FLAG<<6) +#define FLAG_b (FORCED_FLAG<<7) +#define FLAG_w (FORCED_FLAG<<8) +#endif + +#ifdef FOR_test +#ifndef TT +#define TT this.test +#endif +#endif + +#ifdef FOR_tftp +#ifndef TT +#define TT this.tftp +#endif +#define FLAG_p (FORCED_FLAG<<0) +#define FLAG_g (FORCED_FLAG<<1) +#define FLAG_l (FORCED_FLAG<<2) +#define FLAG_r (FORCED_FLAG<<3) +#define FLAG_b (FORCED_FLAG<<4) +#endif + +#ifdef FOR_tftpd +#ifndef TT +#define TT this.tftpd +#endif +#define FLAG_l (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_c (FORCED_FLAG<<2) +#define FLAG_r (FORCED_FLAG<<3) +#endif + +#ifdef FOR_time +#ifndef TT +#define TT this.time +#endif +#define FLAG_v (FORCED_FLAG<<0) +#define FLAG_p (FORCED_FLAG<<1) +#endif + +#ifdef FOR_timeout +#ifndef TT +#define TT this.timeout +#endif +#define FLAG_s (1<<0) +#define FLAG_k (1<<1) +#define FLAG_v (1<<2) +#define FLAG_preserve_status (1<<3) +#define FLAG_foreground (1<<4) +#endif + +#ifdef FOR_top +#ifndef TT +#define TT this.top +#endif +#define FLAG_q (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_n (FORCED_FLAG<<2) +#define FLAG_m (FORCED_FLAG<<3) +#define FLAG_d (FORCED_FLAG<<4) +#define FLAG_s (FORCED_FLAG<<5) +#define FLAG_u (FORCED_FLAG<<6) +#define FLAG_p (FORCED_FLAG<<7) +#define FLAG_o (FORCED_FLAG<<8) +#define FLAG_k (FORCED_FLAG<<9) +#define FLAG_H (FORCED_FLAG<<10) +#define FLAG_O (FORCED_FLAG<<11) +#endif + +#ifdef FOR_touch +#ifndef TT +#define TT this.touch +#endif +#define FLAG_h (1<<0) +#define FLAG_t (1<<1) +#define FLAG_r (1<<2) +#define FLAG_m (1<<3) +#define FLAG_f (1<<4) +#define FLAG_d (1<<5) +#define FLAG_c (1<<6) +#define FLAG_a (1<<7) +#endif + +#ifdef FOR_toybox +#ifndef TT +#define TT this.toybox +#endif +#endif + +#ifdef FOR_tr +#ifndef TT +#define TT this.tr +#endif +#define FLAG_d (1<<0) +#define FLAG_s (1<<1) +#define FLAG_c (1<<2) +#define FLAG_C (1<<3) +#endif + +#ifdef FOR_traceroute +#ifndef TT +#define TT this.traceroute +#endif +#define FLAG_4 (FORCED_FLAG<<0) +#define FLAG_6 (FORCED_FLAG<<1) +#define FLAG_F (FORCED_FLAG<<2) +#define FLAG_U (FORCED_FLAG<<3) +#define FLAG_I (FORCED_FLAG<<4) +#define FLAG_l (FORCED_FLAG<<5) +#define FLAG_d (FORCED_FLAG<<6) +#define FLAG_n (FORCED_FLAG<<7) +#define FLAG_v (FORCED_FLAG<<8) +#define FLAG_r (FORCED_FLAG<<9) +#define FLAG_m (FORCED_FLAG<<10) +#define FLAG_p (FORCED_FLAG<<11) +#define FLAG_q (FORCED_FLAG<<12) +#define FLAG_s (FORCED_FLAG<<13) +#define FLAG_t (FORCED_FLAG<<14) +#define FLAG_w (FORCED_FLAG<<15) +#define FLAG_g (FORCED_FLAG<<16) +#define FLAG_z (FORCED_FLAG<<17) +#define FLAG_f (FORCED_FLAG<<18) +#define FLAG_i (FORCED_FLAG<<19) +#endif + +#ifdef FOR_true +#ifndef TT +#define TT this.true +#endif +#endif + +#ifdef FOR_truncate +#ifndef TT +#define TT this.truncate +#endif +#define FLAG_c (1<<0) +#define FLAG_s (1<<1) +#endif + +#ifdef FOR_tty +#ifndef TT +#define TT this.tty +#endif +#define FLAG_s (FORCED_FLAG<<0) +#endif + +#ifdef FOR_tunctl +#ifndef TT +#define TT this.tunctl +#endif +#define FLAG_T (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_d (FORCED_FLAG<<2) +#define FLAG_t (FORCED_FLAG<<3) +#endif + +#ifdef FOR_ulimit +#ifndef TT +#define TT this.ulimit +#endif +#define FLAG_c (FORCED_FLAG<<0) +#define FLAG_d (FORCED_FLAG<<1) +#define FLAG_e (FORCED_FLAG<<2) +#define FLAG_f (FORCED_FLAG<<3) +#define FLAG_i (FORCED_FLAG<<4) +#define FLAG_l (FORCED_FLAG<<5) +#define FLAG_m (FORCED_FLAG<<6) +#define FLAG_n (FORCED_FLAG<<7) +#define FLAG_p (FORCED_FLAG<<8) +#define FLAG_q (FORCED_FLAG<<9) +#define FLAG_R (FORCED_FLAG<<10) +#define FLAG_r (FORCED_FLAG<<11) +#define FLAG_s (FORCED_FLAG<<12) +#define FLAG_t (FORCED_FLAG<<13) +#define FLAG_u (FORCED_FLAG<<14) +#define FLAG_v (FORCED_FLAG<<15) +#define FLAG_a (FORCED_FLAG<<16) +#define FLAG_H (FORCED_FLAG<<17) +#define FLAG_S (FORCED_FLAG<<18) +#define FLAG_P (FORCED_FLAG<<19) +#endif + +#ifdef FOR_umount +#ifndef TT +#define TT this.umount +#endif +#define FLAG_v (FORCED_FLAG<<0) +#define FLAG_t (FORCED_FLAG<<1) +#define FLAG_a (FORCED_FLAG<<2) +#define FLAG_r (FORCED_FLAG<<3) +#define FLAG_l (FORCED_FLAG<<4) +#define FLAG_f (FORCED_FLAG<<5) +#define FLAG_D (FORCED_FLAG<<6) +#define FLAG_d (FORCED_FLAG<<7) +#define FLAG_n (FORCED_FLAG<<8) +#define FLAG_c (FORCED_FLAG<<9) +#endif + +#ifdef FOR_uname +#ifndef TT +#define TT this.uname +#endif +#define FLAG_s (1<<0) +#define FLAG_n (1<<1) +#define FLAG_r (1<<2) +#define FLAG_v (1<<3) +#define FLAG_m (1<<4) +#define FLAG_a (1<<5) +#define FLAG_o (1<<6) +#endif + +#ifdef FOR_uniq +#ifndef TT +#define TT this.uniq +#endif +#define FLAG_u (1<<0) +#define FLAG_d (1<<1) +#define FLAG_c (1<<2) +#define FLAG_i (1<<3) +#define FLAG_z (1<<4) +#define FLAG_w (1<<5) +#define FLAG_s (1<<6) +#define FLAG_f (1<<7) +#endif + +#ifdef FOR_unix2dos +#ifndef TT +#define TT this.unix2dos +#endif +#endif + +#ifdef FOR_unlink +#ifndef TT +#define TT this.unlink +#endif +#endif + +#ifdef FOR_unshare +#ifndef TT +#define TT this.unshare +#endif +#define FLAG_U (FORCED_FLAG<<0) +#define FLAG_u (FORCED_FLAG<<1) +#define FLAG_p (FORCED_FLAG<<2) +#define FLAG_n (FORCED_FLAG<<3) +#define FLAG_m (FORCED_FLAG<<4) +#define FLAG_i (FORCED_FLAG<<5) +#define FLAG_r (FORCED_FLAG<<6) +#define FLAG_f (FORCED_FLAG<<7) +#endif + +#ifdef FOR_uptime +#ifndef TT +#define TT this.uptime +#endif +#define FLAG_s (FORCED_FLAG<<0) +#define FLAG_p (FORCED_FLAG<<1) +#endif + +#ifdef FOR_useradd +#ifndef TT +#define TT this.useradd +#endif +#define FLAG_H (FORCED_FLAG<<0) +#define FLAG_D (FORCED_FLAG<<1) +#define FLAG_S (FORCED_FLAG<<2) +#define FLAG_h (FORCED_FLAG<<3) +#define FLAG_g (FORCED_FLAG<<4) +#define FLAG_s (FORCED_FLAG<<5) +#define FLAG_G (FORCED_FLAG<<6) +#define FLAG_u (FORCED_FLAG<<7) +#endif + +#ifdef FOR_userdel +#ifndef TT +#define TT this.userdel +#endif +#define FLAG_r (FORCED_FLAG<<0) +#endif + +#ifdef FOR_usleep +#ifndef TT +#define TT this.usleep +#endif +#endif + +#ifdef FOR_uudecode +#ifndef TT +#define TT this.uudecode +#endif +#define FLAG_o (FORCED_FLAG<<0) +#endif + +#ifdef FOR_uuencode +#ifndef TT +#define TT this.uuencode +#endif +#define FLAG_m (FORCED_FLAG<<0) +#endif + +#ifdef FOR_uuidgen +#ifndef TT +#define TT this.uuidgen +#endif +#define FLAG_r (FORCED_FLAG<<0) +#endif + +#ifdef FOR_vconfig +#ifndef TT +#define TT this.vconfig +#endif +#endif + +#ifdef FOR_vi +#ifndef TT +#define TT this.vi +#endif +#define FLAG_s (FORCED_FLAG<<0) +#endif + +#ifdef FOR_vmstat +#ifndef TT +#define TT this.vmstat +#endif +#define FLAG_n (FORCED_FLAG<<0) +#endif + +#ifdef FOR_w +#ifndef TT +#define TT this.w +#endif +#endif + +#ifdef FOR_watch +#ifndef TT +#define TT this.watch +#endif +#define FLAG_x (FORCED_FLAG<<0) +#define FLAG_b (FORCED_FLAG<<1) +#define FLAG_e (FORCED_FLAG<<2) +#define FLAG_t (FORCED_FLAG<<3) +#define FLAG_n (FORCED_FLAG<<4) +#endif + +#ifdef FOR_wc +#ifndef TT +#define TT this.wc +#endif +#define FLAG_l (1<<0) +#define FLAG_w (1<<1) +#define FLAG_c (1<<2) +#define FLAG_m (1<<3) +#endif + +#ifdef FOR_wget +#ifndef TT +#define TT this.wget +#endif +#define FLAG_O (FORCED_FLAG<<0) +#define FLAG_no_check_certificate (FORCED_FLAG<<1) +#endif + +#ifdef FOR_which +#ifndef TT +#define TT this.which +#endif +#define FLAG_a (1<<0) +#endif + +#ifdef FOR_who +#ifndef TT +#define TT this.who +#endif +#define FLAG_a (FORCED_FLAG<<0) +#endif + +#ifdef FOR_xargs +#ifndef TT +#define TT this.xargs +#endif +#define FLAG_0 (1<<0) +#define FLAG_s (1<<1) +#define FLAG_n (1<<2) +#define FLAG_r (1<<3) +#define FLAG_t (1<<4) +#define FLAG_p (1<<5) +#define FLAG_o (1<<6) +#define FLAG_P (1<<7) +#define FLAG_E (1<<8) +#endif + +#ifdef FOR_xxd +#ifndef TT +#define TT this.xxd +#endif +#define FLAG_s (1<<0) +#define FLAG_r (1<<1) +#define FLAG_p (1<<2) +#define FLAG_i (1<<3) +#define FLAG_g (1<<4) +#define FLAG_o (1<<5) +#define FLAG_l (1<<6) +#define FLAG_c (1<<7) +#endif + +#ifdef FOR_xzcat +#ifndef TT +#define TT this.xzcat +#endif +#endif + +#ifdef FOR_yes +#ifndef TT +#define TT this.yes +#endif +#endif + +#ifdef FOR_zcat +#ifndef TT +#define TT this.zcat +#endif +#define FLAG_9 (1<<0) +#define FLAG_8 (1<<1) +#define FLAG_7 (1<<2) +#define FLAG_6 (1<<3) +#define FLAG_5 (1<<4) +#define FLAG_4 (1<<5) +#define FLAG_3 (1<<6) +#define FLAG_2 (1<<7) +#define FLAG_1 (1<<8) +#define FLAG_k (1<<9) +#define FLAG_f (1<<10) +#define FLAG_d (1<<11) +#define FLAG_c (1<<12) +#endif + diff --git a/aosp/external/toybox/android/mac/generated/globals.h b/aosp/external/toybox/android/mac/generated/globals.h new file mode 100644 index 0000000000000000000000000000000000000000..4a201bf0354b587fc3eae3f1e7a353d2aaf7dbe1 --- /dev/null +++ b/aosp/external/toybox/android/mac/generated/globals.h @@ -0,0 +1,1664 @@ +// toys/android/log.c + +struct log_data { + char *t, *p; +}; + +// toys/example/demo_number.c + +struct demo_number_data { + long D; +}; + +// toys/example/hello.c + +struct hello_data { + int unused; +}; + +// toys/example/skeleton.c + +struct skeleton_data { + union { + struct { + char *b; + long c; + struct arg_list *d; + long e; + char *also, *blubber; + } s; + struct { + long b; + } a; + }; + + int more_globals; +}; + +// toys/lsb/dmesg.c + +struct dmesg_data { + long n, s; + + int use_color; + time_t tea; +}; + +// toys/lsb/gzip.c + +struct gzip_data { + int level; +}; + +// toys/lsb/hostname.c + +struct hostname_data { + char *F; +}; + +// toys/lsb/killall.c + +struct killall_data { + char *s; + + int signum; + pid_t cur_pid; + char **names; + short *err; + struct int_list { struct int_list *next; int val; } *pids; +}; + +// toys/lsb/md5sum.c + +struct md5sum_data { + int sawline; + + // Crypto variables blanked after summing + unsigned state[5]; + unsigned oldstate[5]; + uint64_t count; + union { + char c[64]; + unsigned i[16]; + } buffer; +}; + +// toys/lsb/mknod.c + +struct mknod_data { + char *Z, *m; +}; + +// toys/lsb/mktemp.c + +struct mktemp_data { + char *p, *tmpdir; +}; + +// toys/lsb/mount.c + +struct mount_data { + struct arg_list *optlist; + char *type; + char *bigO; + + unsigned long flags; + char *opts; + int okuser; +}; + +// toys/lsb/passwd.c + +struct passwd_data { + char *a; +}; + +// toys/lsb/pidof.c + +struct pidof_data { + char *omit; +}; + +// toys/lsb/seq.c + +struct seq_data { + char *s, *f; + + int precision; +}; + +// toys/lsb/su.c + +struct su_data { + char *s; + char *c; +}; + +// toys/lsb/umount.c + +struct umount_data { + struct arg_list *t; + + char *types; +}; + +// toys/net/ftpget.c + +struct ftpget_data { + char *u, *p, *P; + + int fd; +}; + +// toys/net/ifconfig.c + +struct ifconfig_data { + int sockfd; +}; + +// toys/net/microcom.c + +struct microcom_data { + char *s; + + int fd; + struct termios original_stdin_state, original_fd_state; +}; + +// toys/net/netcat.c + +struct netcat_data { + char *f, *s; + long q, p, W, w; +}; + +// toys/net/netstat.c + +struct netstat_data { + struct num_cache *inodes; + int wpad; +};; + +// toys/net/ping.c + +struct ping_data { + char *I; + long w, W, i, s, c, t, m; + + struct sockaddr *sa; + int sock; + unsigned long sent, recv, fugit, min, max; +}; + +// toys/net/sntp.c + +struct sntp_data { + long r, t; + char *p, *m, *M; +}; + +// toys/net/tunctl.c + +struct tunctl_data { + char *u; +}; + +// toys/other/acpi.c + +struct acpi_data { + int ac, bat, therm, cool; + char *cpath; +}; + +// toys/other/base64.c + +struct base64_data { + long w; + + unsigned total; +}; + +// toys/other/blkid.c + +struct blkid_data { + struct arg_list *s; +}; + +// toys/other/blockdev.c + +struct blockdev_data { + long setbsz, setra; +}; + +// toys/other/chrt.c + +struct chrt_data { + long p; +}; + +// toys/other/dos2unix.c + +struct dos2unix_data { + char *tempfile; +}; + +// toys/other/fallocate.c + +struct fallocate_data { + long o, l; +}; + +// toys/other/fmt.c + +struct fmt_data { + int width; + + int level, pos; +}; + +// toys/other/free.c + +struct free_data { + unsigned bits; + unsigned long long units; + char *buf; +}; + +// toys/other/hexedit.c + +struct hexedit_data { + char *data; + long long len, base; + int numlen, undo, undolen; + unsigned height; +}; + +// toys/other/hwclock.c + +struct hwclock_data { + char *f; + + int utc; +}; + +// toys/other/ionice.c + +struct ionice_data { + long p, n, c; +}; + +// toys/other/login.c + +struct login_data { + char *h, *f; + + int login_timeout, login_fail_timeout; +}; + +// toys/other/losetup.c + +struct losetup_data { + char *j; + long o, S; + + int openflags; + dev_t jdev; + ino_t jino; + char *dir; +}; + +// toys/other/lsattr.c + +struct lsattr_data { + long v; + long p; + + long add, rm, set; + // !add and !rm tell us whether they were used, but `chattr =` is meaningful. + int have_set; +}; + +// toys/other/lspci.c + +struct lspci_data { + char *i; + long n; + + FILE *db; +}; + +// toys/other/makedevs.c + +struct makedevs_data { + char *d; +}; + +// toys/other/mix.c + +struct mix_data { + long r, l; + char *d, *c; +}; + +// toys/other/mkpasswd.c + +struct mkpasswd_data { + long P; + char *m, *S; +}; + +// toys/other/mkswap.c + +struct mkswap_data { + char *L; +}; + +// toys/other/modinfo.c + +struct modinfo_data { + char *F, *k, *b; + + long mod; + int count; +}; + +// toys/other/nsenter.c + +struct nsenter_data { + char *Uupnmi[6]; + long t; +}; + +// toys/other/oneit.c + +struct oneit_data { + char *c; +}; + +// toys/other/setfattr.c + +struct setfattr_data { + char *x, *v, *n; +}; + +// toys/other/shred.c + +struct shred_data { + long o, n, s; +}; + +// toys/other/stat.c + +struct stat_data { + char *c; + + union { + struct stat st; + struct statfs sf; + } stat; + char *file, *pattern; + int patlen; +}; + +// toys/other/swapon.c + +struct swapon_data { + long p; +}; + +// toys/other/switch_root.c + +struct switch_root_data { + char *c; + + dev_t rootdev; +}; + +// toys/other/tac.c + +struct tac_data { + struct double_list *dl; +}; + +// toys/other/timeout.c + +struct timeout_data { + char *s, *k; + + int nextsig; + pid_t pid; + struct timeval ktv; + struct itimerval itv; +}; + +// toys/other/truncate.c + +struct truncate_data { + char *s; + + long size; + int type; +}; + +// toys/other/watch.c + +struct watch_data { + int n; + + pid_t pid, oldpid; +}; + +// toys/other/xxd.c + +struct xxd_data { + long s, g, o, l, c; +}; + +// toys/pending/arp.c + +struct arp_data { + char *hw_type; + char *af_type_A; + char *af_type_p; + char *interface; + + int sockfd; + char *device; +}; + +// toys/pending/arping.c + +struct arping_data { + long count; + unsigned long time_out; + char *iface; + char *src_ip; + + int sockfd; + unsigned long start, end; + unsigned sent_at, sent_nr, rcvd_nr, brd_sent, rcvd_req, brd_rcv, + unicast_flag; +}; + +// toys/pending/bc.c + +struct bc_data { + // This actually needs to be a BcVm*, but the toybox build + // system complains if I make it so. Instead, we'll just cast. + char *vm; + + size_t nchars; + char *file, sig, max_ibase; + uint16_t line_len; +}; + +// toys/pending/bootchartd.c + +struct bootchartd_data { + char buf[32]; + long smpl_period_usec; + int proc_accounting; + int is_login; + + pid_t cur_pid; +}; + +// toys/pending/brctl.c + +struct brctl_data { + int sockfd; +}; + +// toys/pending/crond.c + +struct crond_data { + char *crontabs_dir; + char *logfile; + int loglevel_d; + int loglevel; + + time_t crontabs_dir_mtime; + uint8_t flagd; +}; + +// toys/pending/crontab.c + +struct crontab_data { + char *user; + char *cdir; +}; + +// toys/pending/dd.c + +struct dd_data { + int show_xfer, show_records; + unsigned long long bytes, c_count, in_full, in_part, out_full, out_part; + struct timeval start; + struct { + char *name; + int fd; + unsigned char *buff, *bp; + long sz, count; + unsigned long long offset; + } in, out; + unsigned conv, iflag, oflag; +};; + +// toys/pending/dhcp.c + +struct dhcp_data { + char *iface; + char *pidfile; + char *script; + long retries; + long timeout; + long tryagain; + struct arg_list *req_opt; + char *req_ip; + struct arg_list *pkt_opt; + char *fdn_name; + char *hostname; + char *vendor_cls; +}; + +// toys/pending/dhcp6.c + +struct dhcp6_data { + char *interface_name, *pidfile, *script; + long retry, timeout, errortimeout; + char *req_ip; + int length, state, request_length, sock, sock1, status, retval, retries; + struct timeval tv; + uint8_t transction_id[3]; + struct sockaddr_in6 input_socket6; +}; + +// toys/pending/dhcpd.c + +struct dhcpd_data { + char *iface; + long port; +};; + +// toys/pending/diff.c + +struct diff_data { + long ct; + char *start; + struct arg_list *L_list; + + int dir_num, size, is_binary, status, change, len[2]; + int *offset[2]; + struct stat st[2]; +}; + +// toys/pending/dumpleases.c + +struct dumpleases_data { + char *file; +}; + +// toys/pending/expr.c + +struct expr_data { + char **tok; // current token, not on the stack since recursive calls mutate it + + char *refree; +}; + +// toys/pending/fdisk.c + +struct fdisk_data { + long sect_sz; + long sectors; + long heads; + long cylinders; +}; + +// toys/pending/fold.c + +struct fold_data { + int width; +}; + +// toys/pending/fsck.c + +struct fsck_data { + int fd_num; + char *t_list; + + struct double_list *devices; + char *arr_flag; + char **arr_type; + int negate; + int sum_status; + int nr_run; + int sig_num; + long max_nr_run; +}; + +// toys/pending/getfattr.c + +struct getfattr_data { + char *n; +}; + +// toys/pending/getopt.c + +struct getopt_data { + struct arg_list *l; + char *o, *n; +}; + +// toys/pending/getty.c + +struct getty_data { + char *issue_str; + char *login_str; + char *init_str; + char *host_str; + long timeout; + + char *tty_name; + int speeds[20]; + int sc; + struct termios termios; + char buff[128]; +}; + +// toys/pending/groupadd.c + +struct groupadd_data { + long gid; +}; + +// toys/pending/host.c + +struct host_data { + char *type_str; +}; + +// toys/pending/ip.c + +struct ip_data { + char stats, singleline, flush, *filter_dev, gbuf[8192]; + int sockfd, connected, from_ok, route_cmd; + int8_t addressfamily, is_addr; +}; + +// toys/pending/ipcrm.c + +struct ipcrm_data { + struct arg_list *qkey; + struct arg_list *qid; + struct arg_list *skey; + struct arg_list *sid; + struct arg_list *mkey; + struct arg_list *mid; +}; + +// toys/pending/ipcs.c + +struct ipcs_data { + int id; +}; + +// toys/pending/klogd.c + +struct klogd_data { + long level; + + int fd; +}; + +// toys/pending/last.c + +struct last_data { + char *file; + + struct arg_list *list; +}; + +// toys/pending/lsof.c + +struct lsof_data { + struct arg_list *p; + + struct stat *sought_files; + struct double_list *all_sockets, *files; + int last_shown_pid, shown_header; +}; + +// toys/pending/man.c + +struct man_data { + char *M, *k; + + char any, cell, ex, *f, k_done, *line, *m, **sct, **scts, **sufs; + regex_t reg; +}; + +// toys/pending/mke2fs.c + +struct mke2fs_data { + // Command line arguments. + long blocksize; + long bytes_per_inode; + long inodes; // Total inodes in filesystem. + long reserved_percent; // Integer precent of space to reserve for root. + char *gendir; // Where to read dirtree from. + + // Internal data. + struct dirtree *dt; // Tree of files to copy into the new filesystem. + unsigned treeblocks; // Blocks used by dt + unsigned treeinodes; // Inodes used by dt + + unsigned blocks; // Total blocks in the filesystem. + unsigned freeblocks; // Free blocks in the filesystem. + unsigned inodespg; // Inodes per group + unsigned groups; // Total number of block groups. + unsigned blockbits; // Bits per block. (Also blocks per group.) + + // For gene2fs + unsigned nextblock; // Next data block to allocate + unsigned nextgroup; // Next group we'll be allocating from + int fsfd; // File descriptor of filesystem (to output to). +}; + +// toys/pending/modprobe.c + +struct modprobe_data { + struct arg_list *dirs; + + struct arg_list *probes; + struct arg_list *dbase[256]; + char *cmdopts; + int nudeps; + uint8_t symreq; +}; + +// toys/pending/more.c + +struct more_data { + struct termios inf; + int cin_fd; +}; + +// toys/pending/openvt.c + +struct openvt_data { + unsigned long vt_num; +}; + +// toys/pending/readelf.c + +struct readelf_data { + char *x, *p; + + char *elf, *shstrtab, *f; + long long shoff, phoff, size; + int bits, shnum, shentsize, phentsize; + int64_t (*elf_int)(void *ptr, unsigned size); +}; + +// toys/pending/route.c + +struct route_data { + char *family; +}; + +// toys/pending/sh.c + +struct sh_data { + char *c; + + long lineno; + char **locals, *subshell_env; + struct double_list functions; + unsigned options, jobcnt, loc_ro, loc_magic; + int hfd; // next high filehandle (>= 10) + + // Running jobs. + struct sh_job { + struct sh_job *next, *prev; + unsigned jobno; + + // Every pipeline has at least one set of arguments or it's Not A Thing + struct sh_arg { + char **v; + int c; + } pipeline; + + // null terminated array of running processes in pipeline + struct sh_process { + struct sh_process *next, *prev; + struct arg_list *delete; // expanded strings + int *urd, envlen, pid, exit; // undo redirects, child PID, exit status + struct sh_arg arg; + } *procs, *proc; + } *jobs, *job; +}; + +// toys/pending/stty.c + +struct stty_data { + char *device; + + int fd, col; + unsigned output_cols; +}; + +// toys/pending/sulogin.c + +struct sulogin_data { + long timeout; + struct termios crntio; +}; + +// toys/pending/syslogd.c + +struct syslogd_data { + char *socket; + char *config_file; + char *unix_socket; + char *logfile; + long interval; + long rot_size; + long rot_count; + char *remote_log; + long log_prio; + + struct unsocks *lsocks; // list of listen sockets + struct logfile *lfiles; // list of write logfiles + int sigfd[2]; +}; + +// toys/pending/tcpsvd.c + +struct tcpsvd_data { + char *name; + char *user; + long bn; + char *nmsg; + long cn; + + int maxc; + int count_all; + int udp; +}; + +// toys/pending/telnet.c + +struct telnet_data { + int port; + int sfd; + char buff[128]; + int pbuff; + char iac[256]; + int piac; + char *ttype; + struct termios def_term; + struct termios raw_term; + uint8_t term_ok; + uint8_t term_mode; + uint8_t flags; + unsigned win_width; + unsigned win_height; +}; + +// toys/pending/telnetd.c + +struct telnetd_data { + char *login_path; + char *issue_path; + int port; + char *host_addr; + long w_sec; + + int gmax_fd; + pid_t fork_pid; +}; + +// toys/pending/tftp.c + +struct tftp_data { + char *local_file; + char *remote_file; + long block_size; + + struct sockaddr_storage inaddr; + int af; +}; + +// toys/pending/tftpd.c + +struct tftpd_data { + char *user; + + long sfd; + struct passwd *pw; +}; + +// toys/pending/tr.c + +struct tr_data { + short map[256]; //map of chars + int len1, len2; +}; + +// toys/pending/traceroute.c + +struct traceroute_data { + long max_ttl; + long port; + long ttl_probes; + char *src_ip; + long tos; + long wait_time; + struct arg_list *loose_source; + long pause_time; + long first_ttl; + char *iface; + + uint32_t gw_list[9]; + int recv_sock; + int snd_sock; + unsigned msg_len; + char *packet; + uint32_t ident; + int istraceroute6; +}; + +// toys/pending/useradd.c + +struct useradd_data { + char *dir; + char *gecos; + char *shell; + char *u_grp; + long uid; + + long gid; +}; + +// toys/pending/vi.c + +struct vi_data { + char *s; + int cur_col; + int cur_row; + int scr_row; + int drawn_row; + int drawn_col; + unsigned screen_height; + unsigned screen_width; + int vi_mode; + int count0; + int count1; + int vi_mov_flag; + int modified; + char vi_reg; + char *last_search; + int tabstop; + int list; + struct str_line { + int alloc; + int len; + char *data; + } *il; + size_t screen; //offset in slices must be higher than cursor + size_t cursor; //offset in slices + //yank buffer + struct yank_buf { + char reg; + int alloc; + char* data; + } yank; + +// mem_block contains RO data that is either original file as mmap +// or heap allocated inserted data +// +// +// + struct block_list { + struct block_list *next, *prev; + struct mem_block { + size_t size; + size_t len; + enum alloc_flag { + MMAP, //can be munmap() before exit() + HEAP, //can be free() before exit() + STACK, //global or stack perhaps toybuf + } alloc; + const char *data; + } *node; + } *text; + +// slices do not contain actual allocated data but slices of data in mem_block +// when file is first opened it has only one slice. +// after inserting data into middle new mem_block is allocated for insert data +// and 3 slices are created, where first and last slice are pointing to original +// mem_block with offsets, and middle slice is pointing to newly allocated block +// When deleting, data is not freed but mem_blocks are sliced more such way that +// deleted data left between 2 slices + struct slice_list { + struct slice_list *next, *prev; + struct slice { + size_t len; + const char *data; + } *node; + } *slices; + + size_t filesize; + int fd; //file_handle + +}; + +// toys/pending/wget.c + +struct wget_data { + char *filename; +}; + +// toys/posix/basename.c + +struct basename_data { + char *s; +}; + +// toys/posix/cal.c + +struct cal_data { + struct tm *now; +}; + +// toys/posix/chgrp.c + +struct chgrp_data { + uid_t owner; + gid_t group; + char *owner_name, *group_name; + int symfollow; +}; + +// toys/posix/chmod.c + +struct chmod_data { + char *mode; +}; + +// toys/posix/cksum.c + +struct cksum_data { + unsigned crc_table[256]; +}; + +// toys/posix/cmp.c + +struct cmp_data { + int fd; + char *name; +}; + +// toys/posix/cp.c + +struct cp_data { + union { + // install's options + struct { + char *g, *o, *m; + } i; + // cp's options + struct { + char *preserve; + } c; + }; + + char *destname; + struct stat top; + int (*callback)(struct dirtree *try); + uid_t uid; + gid_t gid; + int pflags; +}; + +// toys/posix/cpio.c + +struct cpio_data { + char *F, *p, *H; +}; + +// toys/posix/cut.c + +struct cut_data { + char *d, *O; + struct arg_list *select[5]; // we treat them the same, so loop through + + int pairs; + regex_t reg; +}; + +// toys/posix/date.c + +struct date_data { + char *r, *D, *d; + + unsigned nano; +}; + +// toys/posix/df.c + +struct df_data { + struct arg_list *t; + + long units; + int column_widths[5]; + int header_shown; +}; + +// toys/posix/du.c + +struct du_data { + long d; + + unsigned long depth, total; + dev_t st_dev; + void *inodes; +}; + +// toys/posix/env.c + +struct env_data { + struct arg_list *u; +};; + +// toys/posix/expand.c + +struct expand_data { + struct arg_list *t; + + unsigned tabcount, *tab; +}; + +// toys/posix/file.c + +struct file_data { + int max_name_len; + + off_t len; +}; + +// toys/posix/find.c + +struct find_data { + char **filter; + struct double_list *argdata; + int topdir, xdev, depth; + time_t now; + long max_bytes; + char *start; +}; + +// toys/posix/grep.c + +struct grep_data { + long m, A, B, C; + struct arg_list *f, *e, *M, *S, *exclude_dir; + char *color; + + char *purple, *cyan, *red, *green, *grey; + struct double_list *reg; + char indelim, outdelim; + int found, tried; +}; + +// toys/posix/head.c + +struct head_data { + long c, n; + + int file_no; +}; + +// toys/posix/iconv.c + +struct iconv_data { + char *f, *t; + + void *ic; +}; + +// toys/posix/id.c + +struct id_data { + int is_groups; +}; + +// toys/posix/kill.c + +struct kill_data { + char *s; + struct arg_list *o; +}; + +// toys/posix/ln.c + +struct ln_data { + char *t; +}; + +// toys/posix/logger.c + +struct logger_data { + char *p, *t; +}; + +// toys/posix/ls.c + +struct ls_data { + long w; + long l; + char *color; + + struct dirtree *files, *singledir; + unsigned screen_width; + int nl_title; + char *escmore; +}; + +// toys/posix/mkdir.c + +struct mkdir_data { + char *m, *Z; +}; + +// toys/posix/mkfifo.c + +struct mkfifo_data { + char *m; + char *Z; + + mode_t mode; +}; + +// toys/posix/nice.c + +struct nice_data { + long n; +}; + +// toys/posix/nl.c + +struct nl_data { + char *s, *n, *b; + long w, l, v; + + // Count of consecutive blank lines for -l has to persist between files + long lcount; + long slen; +}; + +// toys/posix/od.c + +struct od_data { + struct arg_list *t; + char *A; + long N, w, j; + + int address_idx; + unsigned types, leftover, star; + char *buf; // Points to buffers[0] or buffers[1]. + char *bufs[2]; // Used to detect duplicate lines. + off_t pos; +}; + +// toys/posix/paste.c + +struct paste_data { + char *d; + + int files; +}; + +// toys/posix/patch.c + +struct patch_data { + char *i, *d; + long p, g, F; + + void *current_hunk; + long oldline, oldlen, newline, newlen, linenum, outnum; + int context, state, filein, fileout, filepatch, hunknum; + char *tempname; +}; + +// toys/posix/ps.c + +struct ps_data { + union { + struct { + struct arg_list *G, *g, *U, *u, *t, *s, *p, *O, *o, *P, *k; + } ps; + struct { + long n, m, d, s; + struct arg_list *u, *p, *o, *k, *O; + } top; + struct { + char *L; + struct arg_list *G, *g, *P, *s, *t, *U, *u; + char *d; + + void *regexes, *snapshot; + int signal; + pid_t self, match; + } pgrep; + }; + + struct ptr_len gg, GG, pp, PP, ss, tt, uu, UU; + struct dirtree *threadparent; + unsigned width, height; + dev_t tty; + void *fields, *kfields; + long long ticks, bits, time; + int kcount, forcek, sortpos; + int (*match_process)(long long *slot); + void (*show_process)(void *tb); +}; + +// toys/posix/renice.c + +struct renice_data { + long n; +}; + +// toys/posix/sed.c + +struct sed_data { + char *i; + struct arg_list *f, *e; + + // processed pattern list + struct double_list *pattern; + + char *nextline, *remember; + void *restart, *lastregex; + long nextlen, rememberlen, count; + int fdout, noeol; + unsigned xx; + char delim; +}; + +// toys/posix/sort.c + +struct sort_data { + char *t; + struct arg_list *k; + char *o, *T, S; + + void *key_list; + int linecount; + char **lines, *name; +}; + +// toys/posix/split.c + +struct split_data { + long l, b, a; + + char *outfile; +}; + +// toys/posix/strings.c + +struct strings_data { + long n; + char *t; +}; + +// toys/posix/tail.c + +struct tail_data { + long n, c; + + int file_no, last_fd; + struct xnotify *not; +}; + +// toys/posix/tar.c + +struct tar_data { + char *f, *C; + struct arg_list *T, *X; + char *to_command, *owner, *group, *mtime, *mode; + struct arg_list *exclude; + + struct double_list *incl, *excl, *seen; + struct string_list *dirs; + char *cwd; + int fd, ouid, ggid, hlc, warn, adev, aino, sparselen; + long long *sparse; + time_t mtt; + + // hardlinks seen so far (hlc many) + struct { + char *arg; + ino_t ino; + dev_t dev; + } *hlx; + + // Parsed information about a tar header. + struct tar_header { + char *name, *link_target, *uname, *gname; + long long size, ssize; + uid_t uid; + gid_t gid; + mode_t mode; + time_t mtime; + dev_t device; + } hdr; +}; + +// toys/posix/tee.c + +struct tee_data { + void *outputs; +}; + +// toys/posix/touch.c + +struct touch_data { + char *t, *r, *d; +}; + +// toys/posix/ulimit.c + +struct ulimit_data { + long P; +}; + +// toys/posix/uniq.c + +struct uniq_data { + long w, s, f; + + long repeats; +}; + +// toys/posix/uudecode.c + +struct uudecode_data { + char *o; +}; + +// toys/posix/wc.c + +struct wc_data { + unsigned long totals[4]; +}; + +// toys/posix/xargs.c + +struct xargs_data { + long s, n, P; + char *E; + + long entries, bytes; + char delim; + FILE *tty; +}; + +extern union global_union { + struct log_data log; + struct demo_number_data demo_number; + struct hello_data hello; + struct skeleton_data skeleton; + struct dmesg_data dmesg; + struct gzip_data gzip; + struct hostname_data hostname; + struct killall_data killall; + struct md5sum_data md5sum; + struct mknod_data mknod; + struct mktemp_data mktemp; + struct mount_data mount; + struct passwd_data passwd; + struct pidof_data pidof; + struct seq_data seq; + struct su_data su; + struct umount_data umount; + struct ftpget_data ftpget; + struct ifconfig_data ifconfig; + struct microcom_data microcom; + struct netcat_data netcat; + struct netstat_data netstat; + struct ping_data ping; + struct sntp_data sntp; + struct tunctl_data tunctl; + struct acpi_data acpi; + struct base64_data base64; + struct blkid_data blkid; + struct blockdev_data blockdev; + struct chrt_data chrt; + struct dos2unix_data dos2unix; + struct fallocate_data fallocate; + struct fmt_data fmt; + struct free_data free; + struct hexedit_data hexedit; + struct hwclock_data hwclock; + struct ionice_data ionice; + struct login_data login; + struct losetup_data losetup; + struct lsattr_data lsattr; + struct lspci_data lspci; + struct makedevs_data makedevs; + struct mix_data mix; + struct mkpasswd_data mkpasswd; + struct mkswap_data mkswap; + struct modinfo_data modinfo; + struct nsenter_data nsenter; + struct oneit_data oneit; + struct setfattr_data setfattr; + struct shred_data shred; + struct stat_data stat; + struct swapon_data swapon; + struct switch_root_data switch_root; + struct tac_data tac; + struct timeout_data timeout; + struct truncate_data truncate; + struct watch_data watch; + struct xxd_data xxd; + struct arp_data arp; + struct arping_data arping; + struct bc_data bc; + struct bootchartd_data bootchartd; + struct brctl_data brctl; + struct crond_data crond; + struct crontab_data crontab; + struct dd_data dd; + struct dhcp_data dhcp; + struct dhcp6_data dhcp6; + struct dhcpd_data dhcpd; + struct diff_data diff; + struct dumpleases_data dumpleases; + struct expr_data expr; + struct fdisk_data fdisk; + struct fold_data fold; + struct fsck_data fsck; + struct getfattr_data getfattr; + struct getopt_data getopt; + struct getty_data getty; + struct groupadd_data groupadd; + struct host_data host; + struct ip_data ip; + struct ipcrm_data ipcrm; + struct ipcs_data ipcs; + struct klogd_data klogd; + struct last_data last; + struct lsof_data lsof; + struct man_data man; + struct mke2fs_data mke2fs; + struct modprobe_data modprobe; + struct more_data more; + struct openvt_data openvt; + struct readelf_data readelf; + struct route_data route; + struct sh_data sh; + struct stty_data stty; + struct sulogin_data sulogin; + struct syslogd_data syslogd; + struct tcpsvd_data tcpsvd; + struct telnet_data telnet; + struct telnetd_data telnetd; + struct tftp_data tftp; + struct tftpd_data tftpd; + struct tr_data tr; + struct traceroute_data traceroute; + struct useradd_data useradd; + struct vi_data vi; + struct wget_data wget; + struct basename_data basename; + struct cal_data cal; + struct chgrp_data chgrp; + struct chmod_data chmod; + struct cksum_data cksum; + struct cmp_data cmp; + struct cp_data cp; + struct cpio_data cpio; + struct cut_data cut; + struct date_data date; + struct df_data df; + struct du_data du; + struct env_data env; + struct expand_data expand; + struct file_data file; + struct find_data find; + struct grep_data grep; + struct head_data head; + struct iconv_data iconv; + struct id_data id; + struct kill_data kill; + struct ln_data ln; + struct logger_data logger; + struct ls_data ls; + struct mkdir_data mkdir; + struct mkfifo_data mkfifo; + struct nice_data nice; + struct nl_data nl; + struct od_data od; + struct paste_data paste; + struct patch_data patch; + struct ps_data ps; + struct renice_data renice; + struct sed_data sed; + struct sort_data sort; + struct split_data split; + struct strings_data strings; + struct tail_data tail; + struct tar_data tar; + struct tee_data tee; + struct touch_data touch; + struct ulimit_data ulimit; + struct uniq_data uniq; + struct uudecode_data uudecode; + struct wc_data wc; + struct xargs_data xargs; +} this; diff --git a/aosp/external/toybox/android/mac/generated/help.h b/aosp/external/toybox/android/mac/generated/help.h new file mode 100644 index 0000000000000000000000000000000000000000..6621ed1cf814c8b0b039347dd5ad12987e2fb21c --- /dev/null +++ b/aosp/external/toybox/android/mac/generated/help.h @@ -0,0 +1,614 @@ +#define HELP_toybox_force_nommu "When using musl-libc on a nommu system, you'll need to say \"y\" here\nunless you used the patch in the mcm-buildall.sh script. You can also\nsay \"y\" here to test the nommu codepaths on an mmu system.\n\nA nommu system can't use fork(), it can only vfork() which suspends\nthe parent until the child calls exec() or exits. When a program\nneeds a second instance of itself to run specific code at the same\ntime as the parent, it must use a more complicated approach (such as\nexec(\"/proc/self/exe\") then pass data to the new child through a pipe)\nwhich is larger and slower, especially for things like toysh subshells\nthat need to duplicate a lot of internal state in the child process\nfork() gives you for free.\n\nLibraries like uclibc omit fork() on nommu systems, allowing\ncompile-time probes to select which codepath to use. But musl\nintentionally includes a broken version of fork() that always returns\n-ENOSYS on nommu systems, and goes out of its way to prevent any\ncross-compile compatible compile-time probes for a nommu system.\n(It doesn't even #define __MUSL__ in features.h.) Musl does this\ndespite the fact that a nommu system can't even run standard ELF\nbinaries (requiring specially packaged executables) because it wants\nto force every program to either include all nommu code in every\ninstance ever built, or drop nommu support altogether.\n\nBuilding a toolchain scripts/mcm-buildall.sh patches musl to fix this." + +#define HELP_toybox_uid_usr "When commands like useradd/groupadd allocate user IDs, start here." + +#define HELP_toybox_uid_sys "When commands like useradd/groupadd allocate system IDs, start here." + +#define HELP_toybox_pedantic_args "Check arguments for commands that have no arguments." + +#define HELP_toybox_debug "Enable extra checks for debugging purposes. All of them catch\nthings that can only go wrong at development time, not runtime." + +#define HELP_toybox_norecurse "When one toybox command calls another, usually it just calls the new\ncommand's main() function rather than searching the $PATH and calling\nexec on another file (which is much slower).\n\nThis disables that optimization, so toybox will run external commands\n even when it has a built-in version of that command. This requires\n toybox symlinks to be installed in the $PATH, or re-invoking the\n \"toybox\" multiplexer command by name." + +#define HELP_toybox_free "When a program exits, the operating system will clean up after it\n(free memory, close files, etc). To save size, toybox usually relies\non this behavior. If you're running toybox under a debugger or\nwithout a real OS (ala newlib+libgloss), enable this to make toybox\nclean up after itself." + +#define HELP_toybox_i18n "Support for UTF-8 character sets, and some locale support." + +#define HELP_toybox_help_dashdash "Support --help argument in all commands, even ones with a NULL\noptstring. (Use TOYFLAG_NOHELP to disable.) Produces the same output\nas \"help command\". --version shows toybox version." + +#define HELP_toybox_help "Include help text for each command." + +#define HELP_toybox_float "Include floating point support infrastructure and commands that\nrequire it." + +#define HELP_toybox_libz "Use libz for gz support." + +#define HELP_toybox_libcrypto "Use faster hash functions out of external -lcrypto library." + +#define HELP_toybox_smack "Include SMACK options in commands like ls for systems like Tizen." + +#define HELP_toybox_selinux "Include SELinux options in commands such as ls, and add\nSELinux-specific commands such as chcon to the Android menu." + +#define HELP_toybox_lsm_none "Don't try to achieve \"watertight\" by plugging the holes in a\ncollander, instead use conventional unix security (and possibly\nLinux Containers) for a simple straightforward system." + +#define HELP_toybox_suid "Support for the Set User ID bit, to install toybox suid root and drop\npermissions for commands which do not require root access. To use\nthis change ownership of the file to the root user and set the suid\nbit in the file permissions:\n\nchown root:root toybox; chmod +s toybox\n\nprompt \"Security Blanket\"\ndefault TOYBOX_LSM_NONE\nhelp\nSelect a Linux Security Module to complicate your system\nuntil you can't find holes in it." + +#define HELP_toybox "usage: toybox [--long | --help | --version | [command] [arguments...]]\n\nWith no arguments, shows available commands. First argument is\nname of a command to run, followed by any arguments to that command.\n\n--long Show path to each command\n\nTo install command symlinks with paths, try:\n for i in $(/bin/toybox --long); do ln -s /bin/toybox $i; done\nor all in one directory:\n for i in $(./toybox); do ln -s toybox $i; done; PATH=$PWD:$PATH\n\nMost toybox commands also understand the following arguments:\n\n--help Show command help (only)\n--version Show toybox version (only)\n\nThe filename \"-\" means stdin/stdout, and \"--\" stops argument parsing.\n\nNumerical arguments accept a single letter suffix for\nkilo, mega, giga, tera, peta, and exabytes, plus an additional\n\"d\" to indicate decimal 1000's instead of 1024.\n\nDurations can be decimal fractions and accept minute (\"m\"), hour (\"h\"),\nor day (\"d\") suffixes (so 0.1m = 6s)." + +#define HELP_setenforce "usage: setenforce [enforcing|permissive|1|0]\n\nSets whether SELinux is enforcing (1) or permissive (0)." + +#define HELP_sendevent "usage: sendevent DEVICE TYPE CODE VALUE\n\nSends a Linux input event." + +#define HELP_runcon "usage: runcon CONTEXT COMMAND [ARGS...]\n\nRun a command in a specified security context." + +#define HELP_restorecon "usage: restorecon [-D] [-F] [-R] [-n] [-v] FILE...\n\nRestores the default security contexts for the given files.\n\n-D Apply to /data/data too\n-F Force reset\n-R Recurse into directories\n-n Don't make any changes; useful with -v to see what would change\n-v Verbose" + +#define HELP_log "usage: log [-p PRI] [-t TAG] MESSAGE...\n\nLogs message to logcat.\n\n-p Use the given priority instead of INFO:\n d: DEBUG e: ERROR f: FATAL i: INFO v: VERBOSE w: WARN s: SILENT\n-t Use the given tag instead of \"log\"" + +#define HELP_load_policy "usage: load_policy FILE\n\nLoad the specified SELinux policy file." + +#define HELP_getenforce "usage: getenforce\n\nShows whether SELinux is disabled, enforcing, or permissive." + +#define HELP_skeleton_alias "usage: skeleton_alias [-dq] [-b NUMBER]\n\nExample of a second command with different arguments in the same source\nfile as the first. This allows shared infrastructure not added to lib/." + +#define HELP_skeleton "usage: skeleton [-a] [-b STRING] [-c NUMBER] [-d LIST] [-e COUNT] [...]\n\nTemplate for new commands. You don't need this.\n\nWhen creating a new command, copy this file and delete the parts you\ndon't need. Be sure to replace all instances of \"skeleton\" (upper and lower\ncase) with your new command name.\n\nFor simple commands, \"hello.c\" is probably a better starting point." + +#define HELP_logwrapper "usage: logwrapper ...\n\nAppend command line to $WRAPLOG, then call second instance\nof command in $PATH." + +#define HELP_hostid "usage: hostid\n\nPrint the numeric identifier for the current host." + +#define HELP_hello "usage: hello\n\nA hello world program.\n\nMostly used as a simple template for adding new commands.\nOccasionally nice to smoketest kernel booting via \"init=/usr/bin/hello\"." + +#define HELP_demo_utf8towc "usage: demo_utf8towc\n\nPrint differences between toybox's utf8 conversion routines vs libc du jour." + +#define HELP_demo_scankey "usage: demo_scankey\n\nMove a letter around the screen. Hit ESC to exit." + +#define HELP_demo_number "usage: demo_number [-hsbi] NUMBER...\n\n-b Use \"B\" for single byte units (HR_B)\n-d Decimal units\n-h Human readable\n-s Space between number and units (HR_SPACE)" + +#define HELP_demo_many_options "usage: demo_many_options -[a-zA-Z]\n\nPrint the optflags value of the command arguments, in hex." + +#define HELP_umount "usage: umount [-a [-t TYPE[,TYPE...]]] [-vrfD] [DIR...]\n\nUnmount the listed filesystems.\n\n-a Unmount all mounts in /proc/mounts instead of command line list\n-D Don't free loopback device(s)\n-f Force unmount\n-l Lazy unmount (detach from filesystem now, close when last user does)\n-n Don't use /proc/mounts\n-r Remount read only if unmounting fails\n-t Restrict \"all\" to mounts of TYPE (or use \"noTYPE\" to skip)\n-v Verbose" + +#define HELP_sync "usage: sync\n\nWrite pending cached data to disk (synchronize), blocking until done." + +#define HELP_su "usage: su [-lp] [-u UID] [-g GID,...] [-s SHELL] [-c CMD] [USER [COMMAND...]]\n\nSwitch user, prompting for password of new user when not run as root.\n\nWith one argument, switch to USER and run user's shell from /etc/passwd.\nWith no arguments, USER is root. If COMMAND line provided after USER,\nexec() it as new USER (bypasing shell). If -u or -g specified, first\nargument (if any) isn't USER (it's COMMAND).\n\nfirst argument is USER name to switch to (which must exist).\nNon-root users are prompted for new user's password.\n\n-s Shell to use (default is user's shell from /etc/passwd)\n-c Command line to pass to -s shell (ala sh -c \"CMD\")\n-l Reset environment as if new login.\n-u Switch to UID instead of USER\n-g Switch to GID (only root allowed, can be comma separated list)\n-p Preserve environment (except for $PATH and $IFS)" + +#define HELP_seq "usage: seq [-w|-f fmt_str] [-s sep_str] [first] [increment] last\n\nCount from first to last, by increment. Omitted arguments default\nto 1. Two arguments are used as first and last. Arguments can be\nnegative or floating point.\n\n-f Use fmt_str as a printf-style floating point format string\n-s Use sep_str as separator, default is a newline character\n-w Pad to equal width with leading zeroes" + +#define HELP_pidof "usage: pidof [-s] [-o omitpid[,omitpid...]] [NAME]...\n\nPrint the PIDs of all processes with the given names.\n\n-s Single shot, only return one pid\n-o Omit PID(s)\n-x Match shell scripts too" + +#define HELP_passwd_sad "Password changes are checked to make sure they're at least 6 chars long,\ndon't include the entire username (but not a subset of it), or the entire\nprevious password (but changing password1, password2, password3 is fine).\nThis heuristic accepts \"aaaaaa\" and \"123456\"." + +#define HELP_passwd "usage: passwd [-a ALGO] [-dlu] [USER]\n\nUpdate user's authentication tokens. Defaults to current user.\n\n-a ALGO Encryption method (des, md5, sha256, sha512) default: des\n-d Set password to ''\n-l Lock (disable) account\n-u Unlock (enable) account" + +#define HELP_mount "usage: mount [-afFrsvw] [-t TYPE] [-o OPTION,] [[DEVICE] DIR]\n\nMount new filesystem(s) on directories. With no arguments, display existing\nmounts.\n\n-a Mount all entries in /etc/fstab (with -t, only entries of that TYPE)\n-O Only mount -a entries that have this option\n-f Fake it (don't actually mount)\n-r Read only (same as -o ro)\n-w Read/write (default, same as -o rw)\n-t Specify filesystem type\n-v Verbose\n\nOPTIONS is a comma separated list of options, which can also be supplied\nas --longopts.\n\nAutodetects loopback mounts (a file on a directory) and bind mounts (file\non file, directory on directory), so you don't need to say --bind or --loop.\nYou can also \"mount -a /path\" to mount everything in /etc/fstab under /path,\neven if it's noauto. DEVICE starting with UUID= is identified by blkid -U." + +#define HELP_mktemp "usage: mktemp [-dqu] [-p DIR] [TEMPLATE]\n\nSafely create a new file \"DIR/TEMPLATE\" and print its name.\n\n-d Create directory instead of file (--directory)\n-p Put new file in DIR (--tmpdir)\n-q Quiet, no error messages\n-t Prefer $TMPDIR > DIR > /tmp (default DIR > $TMPDIR > /tmp)\n-u Don't create anything, just print what would be created\n\nEach X in TEMPLATE is replaced with a random printable character. The\ndefault TEMPLATE is tmp.XXXXXXXXXX." + +#define HELP_mknod_z "usage: mknod [-Z CONTEXT] ...\n\n-Z Set security context to created file" + +#define HELP_mknod "usage: mknod [-m MODE] NAME TYPE [MAJOR MINOR]\n\nCreate a special file NAME with a given type. TYPE is b for block device,\nc or u for character device, p for named pipe (which ignores MAJOR/MINOR).\n\n-m Mode (file permissions) of new device, in octal or u+x format" + +#define HELP_sha512sum "See sha1sum" + +#define HELP_sha384sum "See sha1sum" + +#define HELP_sha256sum "See sha1sum" + +#define HELP_sha224sum "See sha1sum" + +#define HELP_sha1sum "usage: sha?sum [-bcs] [FILE]...\n\nCalculate sha hash for each input file, reading from stdin if none. Output\none hash (40 hex digits for sha1, 56 for sha224, 64 for sha256, 96 for sha384,\nand 128 for sha512) for each input file, followed by filename.\n\n-b Brief (hash only, no filename)\n-c Check each line of each FILE is the same hash+filename we'd output\n-s No output, exit status 0 if all hashes match, 1 otherwise" + +#define HELP_md5sum "usage: md5sum [-bcs] [FILE]...\n\nCalculate md5 hash for each input file, reading from stdin if none.\nOutput one hash (32 hex digits) for each input file, followed by filename.\n\n-b Brief (hash only, no filename)\n-c Check each line of each FILE is the same hash+filename we'd output\n-s No output, exit status 0 if all hashes match, 1 otherwise" + +#define HELP_killall "usage: killall [-l] [-iqv] [-SIGNAL|-s SIGNAL] PROCESS_NAME...\n\nSend a signal (default: TERM) to all processes with the given names.\n\n-i Ask for confirmation before killing\n-l Print list of all available signals\n-q Don't print any warnings or error messages\n-s Send SIGNAL instead of SIGTERM\n-v Report if the signal was successfully sent\n-w Wait until all signaled processes are dead" + +#define HELP_dnsdomainname "usage: dnsdomainname\n\nShow domain this system belongs to (same as hostname -d)." + +#define HELP_hostname "usage: hostname [-bdsf] [-F FILENAME] [newname]\n\nGet/set the current hostname.\n\n-b Set hostname to 'localhost' if otherwise unset\n-d Show DNS domain name (no host)\n-f Show fully-qualified name (host+domain, FQDN)\n-F Set hostname to contents of FILENAME\n-s Show short host name (no domain)" + +#define HELP_zcat "usage: zcat [FILE...]\n\nDecompress files to stdout. Like `gzip -dc`.\n\n-f Force: allow read from tty" + +#define HELP_gunzip "usage: gunzip [-cfk] [FILE...]\n\nDecompress files. With no files, decompresses stdin to stdout.\nOn success, the input files are removed and replaced by new\nfiles without the .gz suffix.\n\n-c Output to stdout (act as zcat)\n-f Force: allow read from tty\n-k Keep input files (default is to remove)" + +#define HELP_gzip "usage: gzip [-19cdfk] [FILE...]\n\nCompress files. With no files, compresses stdin to stdout.\nOn success, the input files are removed and replaced by new\nfiles with the .gz suffix.\n\n-c Output to stdout\n-d Decompress (act as gunzip)\n-f Force: allow overwrite of output file\n-k Keep input files (default is to remove)\n-# Compression level 1-9 (1:fastest, 6:default, 9:best)" + +#define HELP_dmesg "usage: dmesg [-Cc] [-r|-t|-T] [-n LEVEL] [-s SIZE] [-w]\n\nPrint or control the kernel ring buffer.\n\n-C Clear ring buffer without printing\n-c Clear ring buffer after printing\n-n Set kernel logging LEVEL (1-9)\n-r Raw output (with )\n-S Use syslog(2) rather than /dev/kmsg\n-s Show the last SIZE many bytes\n-T Human readable timestamps\n-t Don't print timestamps\n-w Keep waiting for more output (aka --follow)" + +#define HELP_tunctl "usage: tunctl [-dtT] [-u USER] NAME\n\nCreate and delete tun/tap virtual ethernet devices.\n\n-T Use tap (ethernet frames) instead of tun (ip packets)\n-d Delete tun/tap device\n-t Create tun/tap device\n-u Set owner (user who can read/write device without root access)" + +#define HELP_sntp "usage: sntp [-saSdDq] [-r SHIFT] [-mM[ADDRESS]] [-p PORT] [SERVER]\n\nSimple Network Time Protocol client. Query SERVER and display time.\n\n-p Use PORT (default 123)\n-s Set system clock suddenly\n-a Adjust system clock gradually\n-S Serve time instead of querying (bind to SERVER address if specified)\n-m Wait for updates from multicast ADDRESS (RFC 4330 default 224.0.1.1)\n-M Multicast server on ADDRESS (deault 224.0.0.1)\n-t TTL (multicast only, default 1)\n-d Daemonize (run in background re-querying )\n-D Daemonize but stay in foreground: re-query time every 1000 seconds\n-r Retry shift (every 1< expand to,\n / multiple rounding down, % multiple rounding up\nSIZE suffix: k=1024, m=1024^2, g=1024^3, t=1024^4, p=1024^5, e=1024^6" + +#define HELP_timeout "usage: timeout [-k DURATION] [-s SIGNAL] DURATION COMMAND...\n\nRun command line as a child process, sending child a signal if the\ncommand doesn't exit soon enough.\n\nDURATION can be a decimal fraction. An optional suffix can be \"m\"\n(minutes), \"h\" (hours), \"d\" (days), or \"s\" (seconds, the default).\n\n-s Send specified signal (default TERM)\n-k Send KILL signal if child still running this long after first signal\n-v Verbose\n--foreground Don't create new process group\n--preserve-status Exit with the child's exit status" + +#define HELP_taskset "usage: taskset [-ap] [mask] [PID | cmd [args...]]\n\nLaunch a new task which may only run on certain processors, or change\nthe processor affinity of an existing PID.\n\nMask is a hex string where each bit represents a processor the process\nis allowed to run on. PID without a mask displays existing affinity.\n\n-p Set/get the affinity of given PID instead of a new command\n-a Set/get the affinity of all threads of the PID" + +#define HELP_nproc "usage: nproc [--all]\n\nPrint number of processors.\n\n--all Show all processors, not just ones this task can run on" + +#define HELP_tac "usage: tac [FILE...]\n\nOutput lines in reverse order." + +#define HELP_sysctl "usage: sysctl [-aAeNnqw] [-p [FILE] | KEY[=VALUE]...]\n\nRead/write system control data (under /proc/sys).\n\n-a,A Show all values\n-e Don't warn about unknown keys\n-N Don't print key values\n-n Don't print key names\n-p Read values from FILE (default /etc/sysctl.conf)\n-q Don't show value after write\n-w Only write values (object to reading)" + +#define HELP_switch_root "usage: switch_root [-c /dev/console] NEW_ROOT NEW_INIT...\n\nUse from PID 1 under initramfs to free initramfs, chroot to NEW_ROOT,\nand exec NEW_INIT.\n\n-c Redirect console to device in NEW_ROOT\n-h Hang instead of exiting on failure (avoids kernel panic)" + +#define HELP_swapon "usage: swapon [-d] [-p priority] filename\n\nEnable swapping on a given device/file.\n\n-d Discard freed SSD pages\n-p Priority (highest priority areas allocated first)" + +#define HELP_swapoff "usage: swapoff swapregion\n\nDisable swapping on a given swapregion." + +#define HELP_stat "usage: stat [-tfL] [-c FORMAT] FILE...\n\nDisplay status of files or filesystems.\n\n-c Output specified FORMAT string instead of default\n-f Display filesystem status instead of file status\n-L Follow symlinks\n-t terse (-c \"%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %o\")\n (with -f = -c \"%n %i %l %t %s %S %b %f %a %c %d\")\n\nThe valid format escape sequences for files:\n%a Access bits (octal) |%A Access bits (flags)|%b Size/512\n%B Bytes per %b (512) |%C Security context |%d Device ID (dec)\n%D Device ID (hex) |%f All mode bits (hex)|%F File type\n%g Group ID |%G Group name |%h Hard links\n%i Inode |%m Mount point |%n Filename\n%N Long filename |%o I/O block size |%s Size (bytes)\n%t Devtype major (hex) |%T Devtype minor (hex)|%u User ID\n%U User name |%x Access time |%X Access unix time\n%y Modification time |%Y Mod unix time |%z Creation time\n%Z Creation unix time\n\nThe valid format escape sequences for filesystems:\n%a Available blocks |%b Total blocks |%c Total inodes\n%d Free inodes |%f Free blocks |%i File system ID\n%l Max filename length |%n File name |%s Fragment size\n%S Best transfer size |%t FS type (hex) |%T FS type (driver name)" + +#define HELP_shred "usage: shred [-fuz] [-n COUNT] [-s SIZE] FILE...\n\nSecurely delete a file by overwriting its contents with random data.\n\n-f Force (chmod if necessary)\n-n COUNT Random overwrite iterations (default 1)\n-o OFFSET Start at OFFSET\n-s SIZE Use SIZE instead of detecting file size\n-u Unlink (actually delete file when done)\n-x Use exact size (default without -s rounds up to next 4k)\n-z Zero at end\n\nNote: data journaling filesystems render this command useless, you must\noverwrite all free space (fill up disk) to erase old data on those." + +#define HELP_setsid "usage: setsid [-cdw] command [args...]\n\nRun process in a new session.\n\n-d Detach from tty\n-c Control tty (become foreground process & receive keyboard signals)\n-w Wait for child (and exit with its status)" + +#define HELP_setfattr "usage: setfattr [-h] [-x|-n NAME] [-v VALUE] FILE...\n\nWrite POSIX extended attributes.\n\n-h Do not dereference symlink\n-n Set given attribute\n-x Remove given attribute\n-v Set value for attribute -n (default is empty)" + +#define HELP_rmmod "usage: rmmod [-wf] [MODULE]\n\nUnload the module named MODULE from the Linux kernel.\n-f Force unload of a module\n-w Wait until the module is no longer used" + +#define HELP_rev "usage: rev [FILE...]\n\nOutput each line reversed, when no files are given stdin is used." + +#define HELP_reset "usage: reset\n\nReset the terminal." + +#define HELP_reboot "usage: reboot/halt/poweroff [-fn]\n\nRestart, halt or powerdown the system.\n\n-f Don't signal init\n-n Don't sync before stopping the system" + +#define HELP_realpath "usage: realpath FILE...\n\nDisplay the canonical absolute pathname" + +#define HELP_readlink "usage: readlink FILE...\n\nWith no options, show what symlink points to, return error if not symlink.\n\nOptions for producing canonical paths (all symlinks/./.. resolved):\n\n-e Canonical path to existing entry (fail if missing)\n-f Full path (fail if directory missing)\n-m Ignore missing entries, show where it would be\n-n No trailing newline\n-q Quiet (no output, just error code)" + +#define HELP_readahead "usage: readahead FILE...\n\nPreload files into disk cache." + +#define HELP_pwdx "usage: pwdx PID...\n\nPrint working directory of processes listed on command line." + +#define HELP_printenv "usage: printenv [-0] [env_var...]\n\nPrint environment variables.\n\n-0 Use \\0 as delimiter instead of \\n" + +#define HELP_pmap "usage: pmap [-xq] [pids...]\n\nReport the memory map of a process or processes.\n\n-x Show the extended format\n-q Do not display some header/footer lines" + +#define HELP_pivot_root "usage: pivot_root OLD NEW\n\nSwap OLD and NEW filesystems (as if by simultaneous mount --move), and\nmove all processes with chdir or chroot under OLD into NEW (including\nkernel threads) so OLD may be unmounted.\n\nThe directory NEW must exist under OLD. This doesn't work on initramfs,\nwhich can't be moved (about the same way PID 1 can't be killed; see\nswitch_root instead)." + +#define HELP_partprobe "usage: partprobe DEVICE...\n\nTell the kernel about partition table changes\n\nAsk the kernel to re-read the partition table on the specified devices." + +#define HELP_oneit "usage: oneit [-p] [-c /dev/tty0] command [...]\n\nSimple init program that runs a single supplied command line with a\ncontrolling tty (so CTRL-C can kill it).\n\n-c Which console device to use (/dev/console doesn't do CTRL-C, etc)\n-p Power off instead of rebooting when command exits\n-r Restart child when it exits\n-3 Write 32 bit PID of each exiting reparented process to fd 3 of child\n (Blocking writes, child must read to avoid eventual deadlock.)\n\nSpawns a single child process (because PID 1 has signals blocked)\nin its own session, reaps zombies until the child exits, then\nreboots the system (or powers off with -p, or restarts the child with -r).\n\nResponds to SIGUSR1 by halting the system, SIGUSR2 by powering off,\nand SIGTERM or SIGINT reboot." + +#define HELP_nsenter "usage: nsenter [-t pid] [-F] [-i] [-m] [-n] [-p] [-u] [-U] COMMAND...\n\nRun COMMAND in an existing (set of) namespace(s).\n\n-t PID to take namespaces from (--target)\n-F don't fork, even if -p is used (--no-fork)\n\nThe namespaces to switch are:\n\n-i SysV IPC: message queues, semaphores, shared memory (--ipc)\n-m Mount/unmount tree (--mount)\n-n Network address, sockets, routing, iptables (--net)\n-p Process IDs and init, will fork unless -F is used (--pid)\n-u Host and domain names (--uts)\n-U UIDs, GIDs, capabilities (--user)\n\nIf -t isn't specified, each namespace argument must provide a path\nto a namespace file, ala \"-i=/proc/$PID/ns/ipc\"" + +#define HELP_unshare "usage: unshare [-imnpuUr] COMMAND...\n\nCreate new container namespace(s) for this process and its children, so\nsome attribute is not shared with the parent process.\n\n-f Fork command in the background (--fork)\n-i SysV IPC (message queues, semaphores, shared memory) (--ipc)\n-m Mount/unmount tree (--mount)\n-n Network address, sockets, routing, iptables (--net)\n-p Process IDs and init (--pid)\n-r Become root (map current euid/egid to 0/0, implies -U) (--map-root-user)\n-u Host and domain names (--uts)\n-U UIDs, GIDs, capabilities (--user)\n\nA namespace allows a set of processes to have a different view of the\nsystem than other sets of processes." + +#define HELP_nbd_client "usage: nbd-client [-ns] HOST PORT DEVICE\n\n-n Do not fork into background\n-s nbd swap support (lock server into memory)" + +#define HELP_mountpoint "usage: mountpoint [-qd] DIR\n mountpoint [-qx] DEVICE\n\nCheck whether the directory or device is a mountpoint.\n\n-q Be quiet, return zero if directory is a mountpoint\n-d Print major/minor device number of the directory\n-x Print major/minor device number of the block device" + +#define HELP_modinfo "usage: modinfo [-0] [-b basedir] [-k kernel] [-F field] [module|file...]\n\nDisplay module fields for modules specified by name or .ko path.\n\n-F Only show the given field\n-0 Separate fields with NUL rather than newline\n-b Use as root for /lib/modules/\n-k Look in given directory under /lib/modules/" + +#define HELP_mkswap "usage: mkswap [-L LABEL] DEVICE\n\nSet up a Linux swap area on a device or file." + +#define HELP_mkpasswd "usage: mkpasswd [-P FD] [-m TYPE] [-S SALT] [PASSWORD] [SALT]\n\nCrypt PASSWORD using crypt(3)\n\n-P FD Read password from file descriptor FD\n-m TYPE Encryption method (des, md5, sha256, or sha512; default is des)\n-S SALT" + +#define HELP_mix "usage: mix [-d DEV] [-c CHANNEL] [-l VOL] [-r RIGHT]\n\nList OSS sound channels (module snd-mixer-oss), or set volume(s).\n\n-c CHANNEL Set/show volume of CHANNEL (default first channel found)\n-d DEV Device node (default /dev/mixer)\n-l VOL Volume level\n-r RIGHT Volume of right stereo channel (with -r, -l sets left volume)" + +#define HELP_mcookie "usage: mcookie [-vV]\n\nGenerate a 128-bit strong random number.\n\n-v show entropy source (verbose)\n-V show version" + +#define HELP_makedevs "usage: makedevs [-d device_table] rootdir\n\nCreate a range of special files as specified in a device table.\n\n-d File containing device table (default reads from stdin)\n\nEach line of the device table has the fields:\n \nWhere name is the file name, and type is one of the following:\n\nb Block device\nc Character device\nd Directory\nf Regular file\np Named pipe (fifo)\n\nOther fields specify permissions, user and group id owning the file,\nand additional fields for device special files. Use '-' for blank entries,\nunspecified fields are treated as '-'." + +#define HELP_lsusb "usage: lsusb\n\nList USB hosts/devices." + +#define HELP_lspci_text "usage: lspci [-n] [-i FILE ]\n\n-n Numeric output (repeat for readable and numeric)\n-i PCI ID database (default /usr/share/misc/pci.ids)" + +#define HELP_lspci "usage: lspci [-ekm]\n\nList PCI devices.\n\n-e Print all 6 digits in class\n-k Print kernel driver\n-m Machine parseable format" + +#define HELP_lsmod "usage: lsmod\n\nDisplay the currently loaded modules, their sizes and their dependencies." + +#define HELP_chattr "usage: chattr [-R] [-+=AacDdijsStTu] [-p PROJID] [-v VERSION] [FILE...]\n\nChange file attributes on a Linux file system.\n\n-R Recurse\n-p Set the file's project number\n-v Set the file's version/generation number\n\nOperators:\n '-' Remove attributes\n '+' Add attributes\n '=' Set attributes\n\nAttributes:\n A No atime a Append only\n C No COW c Compression\n D Synchronous dir updates d No dump\n E Encrypted e Extents\n F Case-insensitive (casefold)\n I Indexed directory i Immutable\n j Journal data\n N Inline data in inode\n P Project hierarchy\n S Synchronous file updates s Secure delete\n T Top of dir hierarchy t No tail-merging\n u Allow undelete\n V Verity" + +#define HELP_lsattr "usage: lsattr [-Radlpv] [FILE...]\n\nList file attributes on a Linux file system.\nFlag letters are defined in chattr help.\n\n-R Recursively list attributes of directories and their contents\n-a List all files in directories, including files that start with '.'\n-d List directories like other files, rather than listing their contents\n-l List long flag names\n-p List the file's project number\n-v List the file's version/generation number" + +#define HELP_losetup "usage: losetup [-cdrs] [-o OFFSET] [-S SIZE] {-d DEVICE...|-j FILE|-af|{DEVICE FILE}}\n\nAssociate a loopback device with a file, or show current file (if any)\nassociated with a loop device.\n\nInstead of a device:\n-a Iterate through all loopback devices\n-f Find first unused loop device (may create one)\n-j FILE Iterate through all loopback devices associated with FILE\n\nexisting:\n-c Check capacity (file size changed)\n-d DEV Detach loopback device\n-D Detach all loopback devices\n\nnew:\n-s Show device name (alias --show)\n-o OFF Start association at offset OFF into FILE\n-r Read only\n-S SIZE Limit SIZE of loopback association (alias --sizelimit)" + +#define HELP_login "usage: login [-p] [-h host] [-f USERNAME] [USERNAME]\n\nLog in as a user, prompting for username and password if necessary.\n\n-p Preserve environment\n-h The name of the remote host for this login\n-f login as USERNAME without authentication" + +#define HELP_iorenice "usage: iorenice PID [CLASS] [PRIORITY]\n\nDisplay or change I/O priority of existing process. CLASS can be\n\"rt\" for realtime, \"be\" for best effort, \"idle\" for only when idle, or\n\"none\" to leave it alone. PRIORITY can be 0-7 (0 is highest, default 4)." + +#define HELP_ionice "usage: ionice [-t] [-c CLASS] [-n LEVEL] [COMMAND...|-p PID]\n\nChange the I/O scheduling priority of a process. With no arguments\n(or just -p), display process' existing I/O class/priority.\n\n-c CLASS = 1-3: 1(realtime), 2(best-effort, default), 3(when-idle)\n-n LEVEL = 0-7: (0 is highest priority, default = 5)\n-p Affect existing PID instead of spawning new child\n-t Ignore failure to set I/O priority\n\nSystem default iopriority is generally -c 2 -n 4." + +#define HELP_insmod "usage: insmod MODULE [MODULE_OPTIONS]\n\nLoad the module named MODULE passing options if given." + +#define HELP_inotifyd "usage: inotifyd PROG FILE[:MASK] ...\n\nWhen a filesystem event matching MASK occurs to a FILE, run PROG as:\n\n PROG EVENTS FILE [DIRFILE]\n\nIf PROG is \"-\" events are sent to stdout.\n\nThis file is:\n a accessed c modified e metadata change w closed (writable)\n r opened D deleted M moved 0 closed (unwritable)\n u unmounted o overflow x unwatchable\n\nA file in this directory is:\n m moved in y moved out n created d deleted\n\nWhen x event happens for all FILEs, inotifyd exits (after waiting for PROG)." + +#define HELP_i2cset "usage: i2cset [-fy] BUS CHIP ADDR VALUE... MODE\n\nWrite an i2c register. MODE is b for byte, w for 16-bit word, i for I2C block.\n\n-f Force access to busy devices\n-y Answer \"yes\" to confirmation prompts (for script use)" + +#define HELP_i2cget "usage: i2cget [-fy] BUS CHIP ADDR\n\nRead an i2c register.\n\n-f Force access to busy devices\n-y Answer \"yes\" to confirmation prompts (for script use)" + +#define HELP_i2cdump "usage: i2cdump [-fy] BUS CHIP\n\nDump i2c registers.\n\n-f Force access to busy devices\n-y Answer \"yes\" to confirmation prompts (for script use)" + +#define HELP_i2cdetect "usage: i2cdetect [-ary] BUS [FIRST LAST]\nusage: i2cdetect -F BUS\nusage: i2cdetect -l\n\nDetect i2c devices.\n\n-a All addresses (0x00-0x7f rather than 0x03-0x77)\n-F Show functionality\n-l List all buses\n-r Probe with SMBus Read Byte\n-y Answer \"yes\" to confirmation prompts (for script use)" + +#define HELP_hwclock "usage: hwclock [-rswtluf]\n\nGet/set the hardware clock.\n\n-f FILE Use specified device file instead of /dev/rtc (--rtc)\n-l Hardware clock uses localtime (--localtime)\n-r Show hardware clock time (--show)\n-s Set system time from hardware clock (--hctosys)\n-t Set the system time based on the current timezone (--systz)\n-u Hardware clock uses UTC (--utc)\n-w Set hardware clock from system time (--systohc)" + +#define HELP_hexedit "usage: hexedit FILENAME\n\nHexadecimal file editor. All changes are written to disk immediately.\n\n-r Read only (display but don't edit)\n\nKeys:\nArrows Move left/right/up/down by one line/column\nPg Up/Pg Dn Move up/down by one page\n0-9, a-f Change current half-byte to hexadecimal value\nu Undo\nq/^c/^d/ Quit" + +#define HELP_help "usage: help [-ahu] [COMMAND]\n\n-a All commands\n-u Usage only\n-h HTML output\n\nShow usage information for toybox commands.\nRun \"toybox\" with no arguments for a list of available commands." + +#define HELP_fsync "usage: fsync [-d] [FILE...]\n\nSynchronize a file's in-core state with storage device.\n\n-d Avoid syncing metadata" + +#define HELP_fsfreeze "usage: fsfreeze {-f | -u} MOUNTPOINT\n\nFreeze or unfreeze a filesystem.\n\n-f Freeze\n-u Unfreeze" + +#define HELP_freeramdisk "usage: freeramdisk [RAM device]\n\nFree all memory allocated to specified ramdisk" + +#define HELP_free "usage: free [-bkmgt]\n\nDisplay the total, free and used amount of physical memory and swap space.\n\n-bkmgt Output units (default is bytes)\n-h Human readable (K=1024)" + +#define HELP_fmt "usage: fmt [-w WIDTH] [FILE...]\n\nReformat input to wordwrap at a given line length, preserving existing\nindentation level, writing to stdout.\n\n-w WIDTH Maximum characters per line (default 75)" + +#define HELP_flock "usage: flock [-sxun] fd\n\nManage advisory file locks.\n\n-s Shared lock\n-x Exclusive lock (default)\n-u Unlock\n-n Non-blocking: fail rather than wait for the lock" + +#define HELP_fallocate "usage: fallocate [-l size] [-o offset] file\n\nTell the filesystem to allocate space for a file." + +#define HELP_factor "usage: factor NUMBER...\n\nFactor integers." + +#define HELP_eject "usage: eject [-stT] [DEVICE]\n\nEject DEVICE or default /dev/cdrom\n\n-s SCSI device\n-t Close tray\n-T Open/close tray (toggle)" + +#define HELP_unix2dos "usage: unix2dos [FILE...]\n\nConvert newline format from unix \"\\n\" to dos \"\\r\\n\".\nIf no files listed copy from stdin, \"-\" is a synonym for stdin." + +#define HELP_dos2unix "usage: dos2unix [FILE...]\n\nConvert newline format from dos \"\\r\\n\" to unix \"\\n\".\nIf no files listed copy from stdin, \"-\" is a synonym for stdin." + +#define HELP_devmem "usage: devmem ADDR [WIDTH [DATA]]\n\nRead/write physical address via /dev/mem.\n\nWIDTH is 1, 2, 4, or 8 bytes (default 4)." + +#define HELP_count "usage: count\n\nCopy stdin to stdout, displaying simple progress indicator to stderr." + +#define HELP_clear "Clear the screen." + +#define HELP_chvt "usage: chvt N\n\nChange to virtual terminal number N. (This only works in text mode.)\n\nVirtual terminals are the Linux VGA text mode displays, ordinarily\nswitched between via alt-F1, alt-F2, etc. Use ctrl-alt-F1 to switch\nfrom X to a virtual terminal, and alt-F6 (or F7, or F8) to get back." + +#define HELP_chrt "usage: chrt [-Rmofrbi] {-p PID [PRIORITY] | [PRIORITY COMMAND...]}\n\nGet/set a process' real-time scheduling policy and priority.\n\n-p Set/query given pid (instead of running COMMAND)\n-R Set SCHED_RESET_ON_FORK\n-m Show min/max priorities available\n\nSet policy (default -r):\n\n -o SCHED_OTHER -f SCHED_FIFO -r SCHED_RR\n -b SCHED_BATCH -i SCHED_IDLE" + +#define HELP_chroot "usage: chroot NEWROOT [COMMAND [ARG...]]\n\nRun command within a new root directory. If no command, run /bin/sh." + +#define HELP_chcon "usage: chcon [-hRv] CONTEXT FILE...\n\nChange the SELinux security context of listed file[s].\n\n-h Change symlinks instead of what they point to\n-R Recurse into subdirectories\n-v Verbose" + +#define HELP_bzcat "usage: bzcat [FILE...]\n\nDecompress listed files to stdout. Use stdin if no files listed." + +#define HELP_bunzip2 "usage: bunzip2 [-cftkv] [FILE...]\n\nDecompress listed files (file.bz becomes file) deleting archive file(s).\nRead from stdin if no files listed.\n\n-c Force output to stdout\n-f Force decompression (if FILE doesn't end in .bz, replace original)\n-k Keep input files (-c and -t imply this)\n-t Test integrity\n-v Verbose" + +#define HELP_blockdev "usage: blockdev --OPTION... BLOCKDEV...\n\nCall ioctl(s) on each listed block device\n\n--setro Set read only\n--setrw Set read write\n--getro Get read only\n--getss Get sector size\n--getbsz Get block size\n--setbsz BYTES Set block size\n--getsz Get device size in 512-byte sectors\n--getsize Get device size in sectors (deprecated)\n--getsize64 Get device size in bytes\n--getra Get readahead in 512-byte sectors\n--setra SECTORS Set readahead\n--flushbufs Flush buffers\n--rereadpt Reread partition table" + +#define HELP_fstype "usage: fstype DEV...\n\nPrint type of filesystem on a block device or image." + +#define HELP_blkid "usage: blkid [-s TAG] [-UL] DEV...\n\nPrint type, label and UUID of filesystem on a block device or image.\n\n-U Show UUID only (or device with that UUID)\n-L Show LABEL only (or device with that LABEL)\n-s TAG Only show matching tags (default all)" + +#define HELP_base64 "usage: base64 [-di] [-w COLUMNS] [FILE...]\n\nEncode or decode in base64.\n\n-d Decode\n-i Ignore non-alphabetic characters\n-w Wrap output at COLUMNS (default 76 or 0 for no wrap)" + +#define HELP_ascii "usage: ascii\n\nDisplay ascii character set." + +#define HELP_acpi "usage: acpi [-abctV]\n\nShow status of power sources and thermal devices.\n\n-a Show power adapters\n-b Show batteries\n-c Show cooling device state\n-t Show temperatures\n-V Show everything" + +#define HELP_xzcat "usage: xzcat [filename...]\n\nDecompress listed files to stdout. Use stdin if no files listed." + +#define HELP_wget "usage: wget -O filename URL\n-O filename: specify output filename\nURL: uniform resource location, FTP/HTTP only, not HTTPS\n\nexamples:\n wget -O index.html http://www.example.com\n wget -O sample.jpg ftp://ftp.example.com:21/sample.jpg" + +#define HELP_vi "usage: vi [-s script] FILE\n-s script: run script file\nVisual text editor. Predates the existence of standardized cursor keys,\nso the controls are weird and historical." + +#define HELP_userdel "usage: userdel [-r] USER\nusage: deluser [-r] USER\n\nDelete USER from the SYSTEM\n\n-r remove home directory" + +#define HELP_useradd "usage: useradd [-SDH] [-h DIR] [-s SHELL] [-G GRP] [-g NAME] [-u UID] USER [GROUP]\n\nCreate new user, or add USER to GROUP\n\n-D Don't assign a password\n-g NAME Real name\n-G GRP Add user to existing group\n-h DIR Home directory\n-H Don't create home directory\n-s SHELL Login shell\n-S Create a system user\n-u UID User id" + +#define HELP_traceroute "usage: traceroute [-46FUIldnvr] [-f 1ST_TTL] [-m MAXTTL] [-p PORT] [-q PROBES]\n[-s SRC_IP] [-t TOS] [-w WAIT_SEC] [-g GATEWAY] [-i IFACE] [-z PAUSE_MSEC] HOST [BYTES]\n\ntraceroute6 [-dnrv] [-m MAXTTL] [-p PORT] [-q PROBES][-s SRC_IP] [-t TOS] [-w WAIT_SEC]\n [-i IFACE] HOST [BYTES]\n\nTrace the route to HOST\n\n-4,-6 Force IP or IPv6 name resolution\n-F Set the don't fragment bit (supports IPV4 only)\n-U Use UDP datagrams instead of ICMP ECHO (supports IPV4 only)\n-I Use ICMP ECHO instead of UDP datagrams (supports IPV4 only)\n-l Display the TTL value of the returned packet (supports IPV4 only)\n-d Set SO_DEBUG options to socket\n-n Print numeric addresses\n-v verbose\n-r Bypass routing tables, send directly to HOST\n-m Max time-to-live (max number of hops)(RANGE 1 to 255)\n-p Base UDP port number used in probes(default 33434)(RANGE 1 to 65535)\n-q Number of probes per TTL (default 3)(RANGE 1 to 255)\n-s IP address to use as the source address\n-t Type-of-service in probe packets (default 0)(RANGE 0 to 255)\n-w Time in seconds to wait for a response (default 3)(RANGE 0 to 86400)\n-g Loose source route gateway (8 max) (supports IPV4 only)\n-z Pause Time in ms (default 0)(RANGE 0 to 86400) (supports IPV4 only)\n-f Start from the 1ST_TTL hop (instead from 1)(RANGE 1 to 255) (supports IPV4 only)\n-i Specify a network interface to operate with" + +#define HELP_tr "usage: tr [-cds] SET1 [SET2]\n\nTranslate, squeeze, or delete characters from stdin, writing to stdout\n\n-c/-C Take complement of SET1\n-d Delete input characters coded SET1\n-s Squeeze multiple output characters of SET2 into one character" + +#define HELP_tftpd "usage: tftpd [-cr] [-u USER] [DIR]\n\nTransfer file from/to tftp server.\n\n-r read only\n-c Allow file creation via upload\n-u run as USER\n-l Log to syslog (inetd mode requires this)" + +#define HELP_tftp "usage: tftp [OPTIONS] HOST [PORT]\n\nTransfer file from/to tftp server.\n\n-l FILE Local FILE\n-r FILE Remote FILE\n-g Get file\n-p Put file\n-b SIZE Transfer blocks of SIZE octets(8 <= SIZE <= 65464)" + +#define HELP_telnetd "Handle incoming telnet connections\n\n-l LOGIN Exec LOGIN on connect\n-f ISSUE_FILE Display ISSUE_FILE instead of /etc/issue\n-K Close connection as soon as login exits\n-p PORT Port to listen on\n-b ADDR[:PORT] Address to bind to\n-F Run in foreground\n-i Inetd mode\n-w SEC Inetd 'wait' mode, linger time SEC\n-S Log to syslog (implied by -i or without -F and -w)" + +#define HELP_telnet "usage: telnet HOST [PORT]\n\nConnect to telnet server" + +#define HELP_tcpsvd "usage: tcpsvd [-hEv] [-c N] [-C N[:MSG]] [-b N] [-u User] [-l Name] IP Port Prog\nusage: udpsvd [-hEv] [-c N] [-u User] [-l Name] IP Port Prog\n\nCreate TCP/UDP socket, bind to IP:PORT and listen for incoming connection.\nRun PROG for each connection.\n\nIP IP to listen on, 0 = all\nPORT Port to listen on\nPROG ARGS Program to run\n-l NAME Local hostname (else looks up local hostname in DNS)\n-u USER[:GRP] Change to user/group after bind\n-c N Handle up to N (> 0) connections simultaneously\n-b N (TCP Only) Allow a backlog of approximately N TCP SYNs\n-C N[:MSG] (TCP Only) Allow only up to N (> 0) connections from the same IP\n New connections from this IP address are closed\n immediately. MSG is written to the peer before close\n-h Look up peer's hostname\n-E Don't set up environment variables\n-v Verbose" + +#define HELP_syslogd "usage: syslogd [-a socket] [-O logfile] [-f config file] [-m interval]\n [-p socket] [-s SIZE] [-b N] [-R HOST] [-l N] [-nSLKD]\n\nSystem logging utility\n\n-a Extra unix socket for listen\n-O FILE Default log file \n-f FILE Config file \n-p Alternative unix domain socket \n-n Avoid auto-backgrounding\n-S Smaller output\n-m MARK interval (RANGE: 0 to 71582787)\n-R HOST Log to IP or hostname on PORT (default PORT=514/UDP)\"\n-L Log locally and via network (default is network only if -R)\"\n-s SIZE Max size (KB) before rotation (default:200KB, 0=off)\n-b N rotated logs to keep (default:1, max=99, 0=purge)\n-K Log to kernel printk buffer (use dmesg to read it)\n-l N Log only messages more urgent than prio(default:8 max:8 min:1)\n-D Drop duplicates" + +#define HELP_sulogin "usage: sulogin [-t time] [tty]\n\nSingle User Login.\n-t Default Time for Single User Login" + +#define HELP_stty "usage: stty [-ag] [-F device] SETTING...\n\nGet/set terminal configuration.\n\n-F Open device instead of stdin\n-a Show all current settings (default differences from \"sane\")\n-g Show all current settings usable as input to stty\n\nSpecial characters (syntax ^c or undef): intr quit erase kill eof eol eol2\nswtch start stop susp rprnt werase lnext discard\n\nControl/input/output/local settings as shown by -a, '-' prefix to disable\n\nCombo settings: cooked/raw, evenp/oddp/parity, nl, ek, sane\n\nN set input and output speed (ispeed N or ospeed N for just one)\ncols N set number of columns\nrows N set number of rows\nline N set line discipline\nmin N set minimum chars per read\ntime N set read timeout\nspeed show speed only\nsize show size only" + +#define HELP_exit "usage: exit [status]\n\nExit shell. If no return value supplied on command line, use value\nof most recent command, or 0 if none." + +#define HELP_cd "usage: cd [-PL] [path]\n\nChange current directory. With no arguments, go $HOME.\n\n-P Physical path: resolve symlinks in path\n-L Local path: .. trims directories off $PWD (default)" + +#define HELP_sh "usage: sh [-c command] [script]\n\nCommand shell. Runs a shell script, or reads input interactively\nand responds to it.\n\n-c command line to execute\n-i interactive mode (default when STDIN is a tty)" + +#define HELP_route "usage: route [-ne] [-A [46]] [add|del TARGET [OPTIONS]]\n\nDisplay, add or delete network routes in the \"Forwarding Information Base\".\n\n-n Show numerical addresses (no DNS lookups)\n-e display netstat fields\n\nRouting means sending packets out a network interface to an address.\nThe kernel can tell where to send packets one hop away by examining each\ninterface's address and netmask, so the most common use of this command\nis to identify a \"gateway\" that forwards other traffic.\n\nAssigning an address to an interface automatically creates an appropriate\nnetwork route (\"ifconfig eth0 10.0.2.15/8\" does \"route add 10.0.0.0/8 eth0\"\nfor you), although some devices (such as loopback) won't show it in the\ntable. For machines more than one hop away, you need to specify a gateway\n(ala \"route add default gw 10.0.2.2\").\n\nThe address \"default\" is a wildcard address (0.0.0.0/0) matching all\npackets without a more specific route.\n\nAvailable OPTIONS include:\nreject - blocking route (force match failure)\ndev NAME - force packets out this interface (ala \"eth0\")\nnetmask - old way of saying things like ADDR/24\ngw ADDR - forward packets to gateway ADDR" + +#define HELP_readelf "usage: readelf [-adhlnSsW] [-p SECTION] [-x SECTION] [file...]\n\nDisplays information about ELF files.\n\n-a Equivalent to -dhlnSs\n-d Show dynamic section\n-h Show ELF header\n-l Show program headers\n-n Show notes\n-p S Dump strings found in named/numbered section\n-S Show section headers\n-s Show symbol tables (.dynsym and .symtab)\n-W Don't truncate fields (default in toybox)\n-x S Hex dump of named/numbered section\n\n--dyn-syms Show just .dynsym symbol table" + +#define HELP_deallocvt "usage: deallocvt [N]\n\nDeallocate unused virtual terminal /dev/ttyN, or all unused consoles." + +#define HELP_openvt "usage: openvt [-c N] [-sw] [command [command_options]]\n\nstart a program on a new virtual terminal (VT)\n\n-c N Use VT N\n-s Switch to new VT\n-w Wait for command to exit\n\nif -sw used together, switch back to originating VT when command completes" + +#define HELP_more "usage: more [FILE...]\n\nView FILE(s) (or stdin) one screenfull at a time." + +#define HELP_modprobe "usage: modprobe [-alrqvsDb] [-d DIR] MODULE [symbol=value][...]\n\nmodprobe utility - inserts modules and dependencies.\n\n-a Load multiple MODULEs\n-d Load modules from DIR, option may be used multiple times\n-l List (MODULE is a pattern)\n-r Remove MODULE (stacks) or do autoclean\n-q Quiet\n-v Verbose\n-s Log to syslog\n-D Show dependencies\n-b Apply blacklist to module names too" + +#define HELP_mke2fs_extended "usage: mke2fs [-E stride=###] [-O option[,option]]\n\n-E stride= Set RAID stripe size (in blocks)\n-O [opts] Specify fewer ext2 option flags (for old kernels)\n All of these are on by default (as appropriate)\n none Clear default options (all but journaling)\n dir_index Use htree indexes for large directories\n filetype Store file type info in directory entry\n has_journal Set by -j\n journal_dev Set by -J device=XXX\n sparse_super Don't allocate huge numbers of redundant superblocks" + +#define HELP_mke2fs_label "usage: mke2fs [-L label] [-M path] [-o string]\n\n-L Volume label\n-M Path to mount point\n-o Created by" + +#define HELP_mke2fs_gen "usage: gene2fs [options] device filename\n\nThe [options] are the same as mke2fs." + +#define HELP_mke2fs_journal "usage: mke2fs [-j] [-J size=###,device=XXX]\n\n-j Create journal (ext3)\n-J Journal options\n size: Number of blocks (1024-102400)\n device: Specify an external journal" + +#define HELP_mke2fs "usage: mke2fs [-Fnq] [-b ###] [-N|i ###] [-m ###] device\n\nCreate an ext2 filesystem on a block device or filesystem image.\n\n-F Force to run on a mounted device\n-n Don't write to device\n-q Quiet (no output)\n-b size Block size (1024, 2048, or 4096)\n-N inodes Allocate this many inodes\n-i bytes Allocate one inode for every XXX bytes of device\n-m percent Reserve this percent of filesystem space for root user" + +#define HELP_mdev_conf "The mdev config file (/etc/mdev.conf) contains lines that look like:\nhd[a-z][0-9]* 0:3 660\n(sd[a-z]) root:disk 660 =usb_storage\n\nEach line must contain three whitespace separated fields. The first\nfield is a regular expression matching one or more device names,\nthe second and third fields are uid:gid and file permissions for\nmatching devices. Fourth field is optional. It could be used to change\ndevice name (prefix '='), path (prefix '=' and postfix '/') or create a\nsymlink (prefix '>')." + +#define HELP_mdev "usage: mdev [-s]\n\nCreate devices in /dev using information from /sys.\n\n-s Scan all entries in /sys to populate /dev" + +#define HELP_man "usage: man [-M PATH] [-k STRING] | [SECTION] COMMAND\n\nRead manual page for system command.\n\n-k List pages with STRING in their short description\n-M Override $MANPATH\n\nMan pages are divided into 8 sections:\n1 commands 2 system calls 3 library functions 4 /dev files\n5 file formats 6 games 7 miscellaneous 8 system management\n\nSections are searched in the order 1 8 3 2 5 4 6 7 unless you specify a\nsection. Each section has a page called \"intro\", and there's a global\nintroduction under \"man-pages\"." + +#define HELP_lsof "usage: lsof [-lt] [-p PID1,PID2,...] [FILE...]\n\nList all open files belonging to all active processes, or processes using\nlisted FILE(s).\n\n-l list uids numerically\n-p for given comma-separated pids only (default all pids)\n-t terse (pid only) output" + +#define HELP_last "usage: last [-W] [-f FILE]\n\nShow listing of last logged in users.\n\n-W Display the information without host-column truncation\n-f FILE Read from file FILE instead of /var/log/wtmp" + +#define HELP_klogd "usage: klogd [-n] [-c N]\n\n-c N Print to console messages more urgent than prio N (1-8)\"\n-n Run in foreground" + +#define HELP_ipcs "usage: ipcs [[-smq] -i shmid] | [[-asmq] [-tcplu]]\n\n-i Show specific resource\nResource specification:\n-a All (default)\n-m Shared memory segments\n-q Message queues\n-s Semaphore arrays\nOutput format:\n-c Creator\n-l Limits\n-p Pid\n-t Time\n-u Summary" + +#define HELP_ipcrm "usage: ipcrm [ [-q msqid] [-m shmid] [-s semid]\n [-Q msgkey] [-M shmkey] [-S semkey] ... ]\n\n-mM Remove memory segment after last detach\n-qQ Remove message queue\n-sS Remove semaphore" + +#define HELP_ip "usage: ip [ OPTIONS ] OBJECT { COMMAND }\n\nShow / manipulate routing, devices, policy routing and tunnels.\n\nwhere OBJECT := {address | link | route | rule | tunnel}\nOPTIONS := { -f[amily] { inet | inet6 | link } | -o[neline] }" + +#define HELP_init "usage: init\n\nSystem V style init.\n\nFirst program to run (as PID 1) when the system comes up, reading\n/etc/inittab to determine actions." + +#define HELP_host "usage: host [-av] [-t TYPE] NAME [SERVER]\n\nPerform DNS lookup on NAME, which can be a domain name to lookup,\nor an IPv4 dotted or IPv6 colon-separated address to reverse lookup.\nSERVER (if present) is the DNS server to use.\n\n-a -v -t ANY\n-t TYPE query records of type TYPE\n-v verbose" + +#define HELP_groupdel "usage: groupdel [USER] GROUP\n\nDelete a group or remove a user from a group" + +#define HELP_groupadd "usage: groupadd [-S] [-g GID] [USER] GROUP\n\nAdd a group or add a user to a group\n\n -g GID Group id\n -S Create a system group" + +#define HELP_getty "usage: getty [OPTIONS] BAUD_RATE[,BAUD_RATE]... TTY [TERMTYPE]\n\n-h Enable hardware RTS/CTS flow control\n-L Set CLOCAL (ignore Carrier Detect state)\n-m Get baud rate from modem's CONNECT status message\n-n Don't prompt for login name\n-w Wait for CR or LF before sending /etc/issue\n-i Don't display /etc/issue\n-f ISSUE_FILE Display ISSUE_FILE instead of /etc/issue\n-l LOGIN Invoke LOGIN instead of /bin/login\n-t SEC Terminate after SEC if no login name is read\n-I INITSTR Send INITSTR before anything else\n-H HOST Log HOST into the utmp file as the hostname" + +#define HELP_getopt "usage: getopt [OPTIONS] [--] ARG...\n\nParse command-line options for use in shell scripts.\n\n-a Allow long options starting with a single -.\n-l OPTS Specify long options.\n-n NAME Command name for error messages.\n-o OPTS Specify short options.\n-T Test whether this is a modern getopt.\n-u Output options unquoted." + +#define HELP_getfattr "usage: getfattr [-d] [-h] [-n NAME] FILE...\n\nRead POSIX extended attributes.\n\n-d Show values as well as names\n-h Do not dereference symbolic links\n-n Show only attributes with the given name\n--only-values Don't show names" + +#define HELP_fsck "usage: fsck [-ANPRTV] [-C FD] [-t FSTYPE] [FS_OPTS] [BLOCKDEV]...\n\nCheck and repair filesystems\n\n-A Walk /etc/fstab and check all filesystems\n-N Don't execute, just show what would be done\n-P With -A, check filesystems in parallel\n-R With -A, skip the root filesystem\n-T Don't show title on startup\n-V Verbose\n-C n Write status information to specified file descriptor\n-t TYPE List of filesystem types to check" + +#define HELP_fold "usage: fold [-bsu] [-w WIDTH] [FILE...]\n\nFolds (wraps) or unfolds ascii text by adding or removing newlines.\nDefault line width is 80 columns for folding and infinite for unfolding.\n\n-b Fold based on bytes instead of columns\n-s Fold/unfold at whitespace boundaries if possible\n-u Unfold text (and refold if -w is given)\n-w Set lines to WIDTH columns or bytes" + +#define HELP_fdisk "usage: fdisk [-lu] [-C CYLINDERS] [-H HEADS] [-S SECTORS] [-b SECTSZ] DISK\n\nChange partition table\n\n-u Start and End are in sectors (instead of cylinders)\n-l Show partition table for each DISK, then exit\n-b size sector size (512, 1024, 2048 or 4096)\n-C CYLINDERS Set number of cylinders/heads/sectors\n-H HEADS\n-S SECTORS" + +#define HELP_expr "usage: expr ARG1 OPERATOR ARG2...\n\nEvaluate expression and print result. For example, \"expr 1 + 2\".\n\nThe supported operators are (grouped from highest to lowest priority):\n\n ( ) : * / % + - != <= < >= > = & |\n\nEach constant and operator must be a separate command line argument.\nAll operators are infix, meaning they expect a constant (or expression\nthat resolves to a constant) on each side of the operator. Operators of\nthe same priority (within each group above) are evaluated left to right.\nParentheses may be used (as separate arguments) to elevate the priority\nof expressions.\n\nCalling expr from a command shell requires a lot of \\( or '*' escaping\nto avoid interpreting shell control characters.\n\nThe & and | operators are logical (not bitwise) and may operate on\nstrings (a blank string is \"false\"). Comparison operators may also\noperate on strings (alphabetical sort).\n\nConstants may be strings or integers. Comparison, logical, and regex\noperators may operate on strings (a blank string is \"false\"), other\noperators require integers." + +#define HELP_dumpleases "usage: dumpleases [-r|-a] [-f LEASEFILE]\n\nDisplay DHCP leases granted by udhcpd\n-f FILE, Lease file\n-r Show remaining time\n-a Show expiration time" + +#define HELP_diff "usage: diff [-abBdiNqrTstw] [-L LABEL] [-S FILE] [-U LINES] FILE1 FILE2\n\n-a Treat all files as text\n-b Ignore changes in the amount of whitespace\n-B Ignore changes whose lines are all blank\n-d Try hard to find a smaller set of changes\n-i Ignore case differences\n-L Use LABEL instead of the filename in the unified header\n-N Treat absent files as empty\n-q Output only whether files differ\n-r Recurse\n-S Start with FILE when comparing directories\n-T Make tabs line up by prefixing a tab when necessary\n-s Report when two files are the same\n-t Expand tabs to spaces in output\n-u Unified diff\n-U Output LINES lines of context\n-w Ignore all whitespace\n\n--color Colored output\n--strip-trailing-cr Strip trailing '\\r's from input lines" + +#define HELP_dhcpd "usage: dhcpd [-46fS] [-i IFACE] [-P N] [CONFFILE]\n\n -f Run in foreground\n -i Interface to use\n -S Log to syslog too\n -P N Use port N (default ipv4 67, ipv6 547)\n -4, -6 Run as a DHCPv4 or DHCPv6 server" + +#define HELP_dhcp6 "usage: dhcp6 [-fbnqvR] [-i IFACE] [-r IP] [-s PROG] [-p PIDFILE]\n\n Configure network dynamically using DHCP.\n\n -i Interface to use (default eth0)\n -p Create pidfile\n -s Run PROG at DHCP events\n -t Send up to N Solicit packets\n -T Pause between packets (default 3 seconds)\n -A Wait N seconds after failure (default 20)\n -f Run in foreground\n -b Background if lease is not obtained\n -n Exit if lease is not obtained\n -q Exit after obtaining lease\n -R Release IP on exit\n -S Log to syslog too\n -r Request this IP address\n -v Verbose\n\n Signals:\n USR1 Renew current lease\n USR2 Release current lease" + +#define HELP_dhcp "usage: dhcp [-fbnqvoCRB] [-i IFACE] [-r IP] [-s PROG] [-p PIDFILE]\n [-H HOSTNAME] [-V VENDOR] [-x OPT:VAL] [-O OPT]\n\n Configure network dynamically using DHCP.\n\n -i Interface to use (default eth0)\n -p Create pidfile\n -s Run PROG at DHCP events (default /usr/share/dhcp/default.script)\n -B Request broadcast replies\n -t Send up to N discover packets\n -T Pause between packets (default 3 seconds)\n -A Wait N seconds after failure (default 20)\n -f Run in foreground\n -b Background if lease is not obtained\n -n Exit if lease is not obtained\n -q Exit after obtaining lease\n -R Release IP on exit\n -S Log to syslog too\n -a Use arping to validate offered address\n -O Request option OPT from server (cumulative)\n -o Don't request any options (unless -O is given)\n -r Request this IP address\n -x OPT:VAL Include option OPT in sent packets (cumulative)\n -F Ask server to update DNS mapping for NAME\n -H Send NAME as client hostname (default none)\n -V VENDOR Vendor identifier (default 'toybox VERSION')\n -C Don't send MAC as client identifier\n -v Verbose\n\n Signals:\n USR1 Renew current lease\n USR2 Release current lease" + +#define HELP_dd "usage: dd [if=FILE] [of=FILE] [ibs=N] [obs=N] [iflag=FLAGS] [oflag=FLAGS]\n [bs=N] [count=N] [seek=N] [skip=N]\n [conv=notrunc|noerror|sync|fsync] [status=noxfer|none]\n\nCopy/convert files.\n\nif=FILE Read from FILE instead of stdin\nof=FILE Write to FILE instead of stdout\nbs=N Read and write N bytes at a time\nibs=N Input block size\nobs=N Output block size\ncount=N Copy only N input blocks\nskip=N Skip N input blocks\nseek=N Skip N output blocks\niflag=FLAGS Set input flags\noflag=FLAGS Set output flags\nconv=notrunc Don't truncate output file\nconv=noerror Continue after read errors\nconv=sync Pad blocks with zeros\nconv=fsync Physically write data out before finishing\nstatus=noxfer Don't show transfer rate\nstatus=none Don't show transfer rate or records in/out\n\nFLAGS is a comma-separated list of:\n\ncount_bytes (iflag) interpret count=N in bytes, not blocks\nseek_bytes (oflag) interpret seek=N in bytes, not blocks\nskip_bytes (iflag) interpret skip=N in bytes, not blocks\n\nNumbers may be suffixed by c (*1), w (*2), b (*512), kD (*1000), k (*1024),\nMD (*1000*1000), M (*1024*1024), GD (*1000*1000*1000) or G (*1024*1024*1024)." + +#define HELP_crontab "usage: crontab [-u user] FILE\n [-u user] [-e | -l | -r]\n [-c dir]\n\nFiles used to schedule the execution of programs.\n\n-c crontab dir\n-e edit user's crontab\n-l list user's crontab\n-r delete user's crontab\n-u user\nFILE Replace crontab by FILE ('-': stdin)" + +#define HELP_crond "usage: crond [-fbS] [-l N] [-d N] [-L LOGFILE] [-c DIR]\n\nA daemon to execute scheduled commands.\n\n-b Background (default)\n-c crontab dir\n-d Set log level, log to stderr\n-f Foreground\n-l Set log level. 0 is the most verbose, default 8\n-S Log to syslog (default)\n-L Log to file" + +#define HELP_brctl "usage: brctl COMMAND [BRIDGE [INTERFACE]]\n\nManage ethernet bridges\n\nCommands:\nshow Show a list of bridges\naddbr BRIDGE Create BRIDGE\ndelbr BRIDGE Delete BRIDGE\naddif BRIDGE IFACE Add IFACE to BRIDGE\ndelif BRIDGE IFACE Delete IFACE from BRIDGE\nsetageing BRIDGE TIME Set ageing time\nsetfd BRIDGE TIME Set bridge forward delay\nsethello BRIDGE TIME Set hello time\nsetmaxage BRIDGE TIME Set max message age\nsetpathcost BRIDGE PORT COST Set path cost\nsetportprio BRIDGE PORT PRIO Set port priority\nsetbridgeprio BRIDGE PRIO Set bridge priority\nstp BRIDGE [1/yes/on|0/no/off] STP on/off" + +#define HELP_bootchartd "usage: bootchartd {start [PROG ARGS]}|stop|init\n\nCreate /var/log/bootlog.tgz with boot chart data\n\nstart: start background logging; with PROG, run PROG,\n then kill logging with USR1\nstop: send USR1 to all bootchartd processes\ninit: start background logging; stop when getty/xdm is seen\n (for init scripts)\n\nUnder PID 1: as init, then exec $bootchart_init, /init, /sbin/init" + +#define HELP_bc "usage: bc [-ilqsw] [file ...]\n\nbc is a command-line calculator with a Turing-complete language.\n\noptions:\n\n -i --interactive force interactive mode\n -l --mathlib use predefined math routines:\n\n s(expr) = sine of expr in radians\n c(expr) = cosine of expr in radians\n a(expr) = arctangent of expr, returning radians\n l(expr) = natural log of expr\n e(expr) = raises e to the power of expr\n j(n, x) = Bessel function of integer order n of x\n\n -q --quiet don't print version and copyright\n -s --standard error if any non-POSIX extensions are used\n -w --warn warn if any non-POSIX extensions are used" + +#define HELP_arping "usage: arping [-fqbDUA] [-c CNT] [-w TIMEOUT] [-I IFACE] [-s SRC_IP] DST_IP\n\nSend ARP requests/replies\n\n-f Quit on first ARP reply\n-q Quiet\n-b Keep broadcasting, don't go unicast\n-D Duplicated address detection mode\n-U Unsolicited ARP mode, update your neighbors\n-A ARP answer mode, update your neighbors\n-c N Stop after sending N ARP requests\n-w TIMEOUT Time to wait for ARP reply, seconds\n-I IFACE Interface to use (default eth0)\n-s SRC_IP Sender IP address\nDST_IP Target IP address" + +#define HELP_arp "usage: arp\n[-vn] [-H HWTYPE] [-i IF] -a [HOSTNAME]\n[-v] [-i IF] -d HOSTNAME [pub]\n[-v] [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [temp]\n[-v] [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [netmask MASK] pub\n[-v] [-H HWTYPE] [-i IF] -Ds HOSTNAME IFACE [netmask MASK] pub\n\nManipulate ARP cache\n\n-a Display (all) hosts\n-s Set new ARP entry\n-d Delete a specified entry\n-v Verbose\n-n Don't resolve names\n-i IF Network interface\n-D Read from given device\n-A,-p AF Protocol family\n-H HWTYPE Hardware address type" + +#define HELP_xargs "usage: xargs [-0prt] [-s NUM] [-n NUM] [-E STR] COMMAND...\n\nRun command line one or more times, appending arguments from stdin.\n\nIf COMMAND exits with 255, don't launch another even if arguments remain.\n\n-0 Each argument is NULL terminated, no whitespace or quote processing\n-E Stop at line matching string\n-n Max number of arguments per command\n-o Open tty for COMMAND's stdin (default /dev/null)\n-p Prompt for y/n from tty before running each command\n-r Don't run command with empty input (otherwise always run command once)\n-s Size in bytes per command line\n-t Trace, print command line to stderr" + +#define HELP_who "usage: who\n\nPrint information about logged in users." + +#define HELP_wc "usage: wc -lwcm [FILE...]\n\nCount lines, words, and characters in input.\n\n-l Show lines\n-w Show words\n-c Show bytes\n-m Show characters\n\nBy default outputs lines, words, bytes, and filename for each\nargument (or from stdin if none). Displays only either bytes\nor characters." + +#define HELP_uuencode "usage: uuencode [-m] [INFILE] ENCODE_FILENAME\n\nUuencode stdin (or INFILE) to stdout, with ENCODE_FILENAME in the output.\n\n-m Base64" + +#define HELP_uudecode "usage: uudecode [-o OUTFILE] [INFILE]\n\nDecode file from stdin (or INFILE).\n\n-o Write to OUTFILE instead of filename in header" + +#define HELP_unlink "usage: unlink FILE\n\nDelete one file." + +#define HELP_uniq "usage: uniq [-cduiz] [-w MAXCHARS] [-f FIELDS] [-s CHAR] [INFILE [OUTFILE]]\n\nReport or filter out repeated lines in a file\n\n-c Show counts before each line\n-d Show only lines that are repeated\n-u Show only lines that are unique\n-i Ignore case when comparing lines\n-z Lines end with \\0 not \\n\n-w Compare maximum X chars per line\n-f Ignore first X fields\n-s Ignore first X chars" + +#define HELP_uname "usage: uname [-asnrvm]\n\nPrint system information.\n\n-s System name\n-n Network (domain) name\n-r Kernel Release number\n-v Kernel Version\n-m Machine (hardware) name\n-a All of the above" + +#define HELP_arch "usage: arch\n\nPrint machine (hardware) name, same as uname -m." + +#define HELP_ulimit "usage: ulimit [-P PID] [-SHRacdefilmnpqrstuv] [LIMIT]\n\nPrint or set resource limits for process number PID. If no LIMIT specified\n(or read-only -ap selected) display current value (sizes in bytes).\nDefault is ulimit -P $PPID -Sf\" (show soft filesize of your shell).\n\n-S Set/show soft limit -H Set/show hard (maximum) limit\n-a Show all limits -c Core file size\n-d Process data segment -e Max scheduling priority\n-f Output file size -i Pending signal count\n-l Locked memory -m Resident Set Size\n-n Number of open files -p Pipe buffer\n-q Posix message queue -r Max Real-time priority\n-R Realtime latency (usec) -s Stack size\n-t Total CPU time (in seconds) -u Maximum processes (under this UID)\n-v Virtual memory size -P PID to affect (default $PPID)" + +#define HELP_tty "usage: tty [-s]\n\nShow filename of terminal connected to stdin.\n\nPrints \"not a tty\" and exits with nonzero status if no terminal\nis connected to stdin.\n\n-s Silent, exit code only" + +#define HELP_true "usage: true\n\nReturn zero." + +#define HELP_touch "usage: touch [-amch] [-d DATE] [-t TIME] [-r FILE] FILE...\n\nUpdate the access and modification times of each FILE to the current time.\n\n-a Change access time\n-m Change modification time\n-c Don't create file\n-h Change symlink\n-d Set time to DATE (in YYYY-MM-DDThh:mm:SS[.frac][tz] format)\n-t Set time to TIME (in [[CC]YY]MMDDhhmm[.ss][frac] format)\n-r Set time same as reference FILE" + +#define HELP_time "usage: time [-pv] COMMAND...\n\nRun command line and report real, user, and system time elapsed in seconds.\n(real = clock on the wall, user = cpu used by command's code,\nsystem = cpu used by OS on behalf of command.)\n\n-p POSIX format output (default)\n-v Verbose" + +#define HELP_test "usage: test [-bcdefghLPrSsuwx PATH] [-nz STRING] [-t FD] [X ?? Y]\n\nReturn true or false by performing tests. (With no arguments return false.)\n\n--- Tests with a single argument (after the option):\nPATH is/has:\n -b block device -f regular file -p fifo -u setuid bit\n -c char device -g setgid -r read bit -w write bit\n -d directory -h symlink -S socket -x execute bit\n -e exists -L symlink -s nonzero size\nSTRING is:\n -n nonzero size -z zero size (STRING by itself implies -n)\nFD (integer file descriptor) is:\n -t a TTY\n\n--- Tests with one argument on each side of an operator:\nTwo strings:\n = are identical != differ\nTwo integers:\n -eq equal -gt first > second -lt first < second\n -ne not equal -ge first >= second -le first <= second\n\n--- Modify or combine tests:\n ! EXPR not (swap true/false) EXPR -a EXPR and (are both true)\n ( EXPR ) evaluate this first EXPR -o EXPR or (is either true)" + +#define HELP_tee "usage: tee [-ai] [FILE...]\n\nCopy stdin to each listed file, and also to stdout.\nFilename \"-\" is a synonym for stdout.\n\n-a Append to files\n-i Ignore SIGINT" + +#define HELP_tar "usage: tar [-cxt] [-fvohmjkOS] [-XTCf NAME] [FILE...]\n\nCreate, extract, or list files in a .tar (or compressed t?z) file.\n\nOptions:\nc Create x Extract t Test (list)\nf tar FILE (default -) C Change to DIR first v Verbose display\no Ignore owner h Follow symlinks m Ignore mtime\nJ xz compression j bzip2 compression z gzip compression\nO Extract to stdout X exclude names in FILE T include names in FILE\n\n--exclude FILENAME to exclude --full-time Show seconds with -tv\n--mode MODE Adjust modes --mtime TIME Override timestamps\n--owner NAME Set file owner to NAME --group NAME Set file group to NAME\n--sparse Record sparse files\n--restrict All archive contents must extract under one subdirctory\n--numeric-owner Save/use/display uid and gid, not user/group name\n--no-recursion Don't store directory contents" + +#define HELP_tail "usage: tail [-n|c NUMBER] [-f] [FILE...]\n\nCopy last lines from files to stdout. If no files listed, copy from\nstdin. Filename \"-\" is a synonym for stdin.\n\n-n Output the last NUMBER lines (default 10), +X counts from start\n-c Output the last NUMBER bytes, +NUMBER counts from start\n-f Follow FILE(s), waiting for more data to be appended" + +#define HELP_strings "usage: strings [-fo] [-t oxd] [-n LEN] [FILE...]\n\nDisplay printable strings in a binary file\n\n-f Show filename\n-n At least LEN characters form a string (default 4)\n-o Show offset (ala -t d)\n-t Show offset type (o=octal, d=decimal, x=hexadecimal)" + +#define HELP_split "usage: split [-a SUFFIX_LEN] [-b BYTES] [-l LINES] [INPUT [OUTPUT]]\n\nCopy INPUT (or stdin) data to a series of OUTPUT (or \"x\") files with\nalphabetically increasing suffix (aa, ab, ac... az, ba, bb...).\n\n-a Suffix length (default 2)\n-b BYTES/file (10, 10k, 10m, 10g...)\n-l LINES/file (default 1000)" + +#define HELP_sort "usage: sort [-Mbcdfginrsuz] [FILE...] [-k#[,#[x]] [-t X]] [-o FILE]\n\nSort all lines of text from input files (or stdin) to stdout.\n-M Month sort (jan, feb, etc)\n-V Version numbers (name-1.234-rc6.5b.tgz)\n-b Ignore leading blanks (or trailing blanks in second part of key)\n-c Check whether input is sorted\n-d Dictionary order (use alphanumeric and whitespace chars only)\n-f Force uppercase (case insensitive sort)\n-g General numeric sort (double precision with nan and inf)\n-i Ignore nonprinting characters\n-k Sort by \"key\" (see below)\n-n Numeric order (instead of alphabetical)\n-o Output to FILE instead of stdout\n-r Reverse\n-s Skip fallback sort (only sort with keys)\n-t Use a key separator other than whitespace\n-u Unique lines only\n-x Hexadecimal numerical sort\n-z Zero (null) terminated lines\n\nSorting by key looks at a subset of the words on each line. -k2 uses the\nsecond word to the end of the line, -k2,2 looks at only the second word,\n-k2,4 looks from the start of the second to the end of the fourth word.\n-k2.4,5 starts from the fourth character of the second word, to the end\nof the fifth word. Specifying multiple keys uses the later keys as tie\nbreakers, in order. A type specifier appended to a sort key (such as -2,2n)\napplies only to sorting that key." + +#define HELP_sleep "usage: sleep DURATION\n\nWait before exiting.\n\nDURATION can be a decimal fraction. An optional suffix can be \"m\"\n(minutes), \"h\" (hours), \"d\" (days), or \"s\" (seconds, the default)." + +#define HELP_sed "usage: sed [-inrzE] [-e SCRIPT]...|SCRIPT [-f SCRIPT_FILE]... [FILE...]\n\nStream editor. Apply one or more editing SCRIPTs to each line of input\n(from FILE or stdin) producing output (by default to stdout).\n\n-e Add SCRIPT to list\n-f Add contents of SCRIPT_FILE to list\n-i Edit each file in place (-iEXT keeps backup file with extension EXT)\n-n No default output (use the p command to output matched lines)\n-r Use extended regular expression syntax\n-E POSIX alias for -r\n-s Treat input files separately (implied by -i)\n-z Use \\0 rather than \\n as the input line separator\n\nA SCRIPT is a series of one or more COMMANDs separated by newlines or\nsemicolons. All -e SCRIPTs are concatenated together as if separated\nby newlines, followed by all lines from -f SCRIPT_FILEs, in order.\nIf no -e or -f SCRIPTs are specified, the first argument is the SCRIPT.\n\nEach COMMAND may be preceded by an address which limits the command to\napply only to the specified line(s). Commands without an address apply to\nevery line. Addresses are of the form:\n\n [ADDRESS[,ADDRESS]][!]COMMAND\n\nThe ADDRESS may be a decimal line number (starting at 1), a /regular\nexpression/ within a pair of forward slashes, or the character \"$\" which\nmatches the last line of input. (In -s or -i mode this matches the last\nline of each file, otherwise just the last line of the last file.) A single\naddress matches one line, a pair of comma separated addresses match\neverything from the first address to the second address (inclusive). If\nboth addresses are regular expressions, more than one range of lines in\neach file can match. The second address can be +N to end N lines later.\n\nREGULAR EXPRESSIONS in sed are started and ended by the same character\n(traditionally / but anything except a backslash or a newline works).\nBackslashes may be used to escape the delimiter if it occurs in the\nregex, and for the usual printf escapes (\\abcefnrtv and octal, hex,\nand unicode). An empty regex repeats the previous one. ADDRESS regexes\n(above) require the first delimiter to be escaped with a backslash when\nit isn't a forward slash (to distinguish it from the COMMANDs below).\n\nSed mostly operates on individual lines one at a time. It reads each line,\nprocesses it, and either writes it to the output or discards it before\nreading the next line. Sed can remember one additional line in a separate\nbuffer (using the h, H, g, G, and x commands), and can read the next line\nof input early (using the n and N command), but other than that command\nscripts operate on individual lines of text.\n\nEach COMMAND starts with a single character. The following commands take\nno arguments:\n\n ! Run this command when the test _didn't_ match.\n\n { Start a new command block, continuing until a corresponding \"}\".\n Command blocks may nest. If the block has an address, commands within\n the block are only run for lines within the block's address range.\n\n } End command block (this command cannot have an address)\n\n d Delete this line and move on to the next one\n (ignores remaining COMMANDs)\n\n D Delete one line of input and restart command SCRIPT (same as \"d\"\n unless you've glued lines together with \"N\" or similar)\n\n g Get remembered line (overwriting current line)\n\n G Get remembered line (appending to current line)\n\n h Remember this line (overwriting remembered line)\n\n H Remember this line (appending to remembered line, if any)\n\n l Print line, escaping \\abfrtv (but not newline), octal escaping other\n nonprintable characters, wrapping lines to terminal width with a\n backslash, and appending $ to actual end of line.\n\n n Print default output and read next line, replacing current line\n (If no next line available, quit processing script)\n\n N Append next line of input to this line, separated by a newline\n (This advances the line counter for address matching and \"=\", if no\n next line available quit processing script without default output)\n\n p Print this line\n\n P Print this line up to first newline (from \"N\")\n\n q Quit (print default output, no more commands processed or lines read)\n\n x Exchange this line with remembered line (overwrite in both directions)\n\n = Print the current line number (followed by a newline)\n\nThe following commands (may) take an argument. The \"text\" arguments (to\nthe \"a\", \"b\", and \"c\" commands) may end with an unescaped \"\\\" to append\nthe next line (for which leading whitespace is not skipped), and also\ntreat \";\" as a literal character (use \"\\;\" instead).\n\n a [text] Append text to output before attempting to read next line\n\n b [label] Branch, jumps to :label (or with no label, to end of SCRIPT)\n\n c [text] Delete line, output text at end of matching address range\n (ignores remaining COMMANDs)\n\n i [text] Print text\n\n r [file] Append contents of file to output before attempting to read\n next line.\n\n s/S/R/F Search for regex S, replace matched text with R using flags F.\n The first character after the \"s\" (anything but newline or\n backslash) is the delimiter, escape with \\ to use normally.\n\n The replacement text may contain \"&\" to substitute the matched\n text (escape it with backslash for a literal &), or \\1 through\n \\9 to substitute a parenthetical subexpression in the regex.\n You can also use the normal backslash escapes such as \\n and\n a backslash at the end of the line appends the next line.\n\n The flags are:\n\n [0-9] A number, substitute only that occurrence of pattern\n g Global, substitute all occurrences of pattern\n i Ignore case when matching\n p Print the line if match was found and replaced\n w [file] Write (append) line to file if match replaced\n\n t [label] Test, jump to :label only if an \"s\" command found a match in\n this line since last test (replacing with same text counts)\n\n T [label] Test false, jump only if \"s\" hasn't found a match.\n\n w [file] Write (append) line to file\n\n y/old/new/ Change each character in 'old' to corresponding character\n in 'new' (with standard backslash escapes, delimiter can be\n any repeated character except \\ or \\n)\n\n : [label] Labeled target for jump commands\n\n # Comment, ignore rest of this line of SCRIPT\n\nDeviations from POSIX: allow extended regular expressions with -r,\nediting in place with -i, separate with -s, NUL-separated input with -z,\nprintf escapes in text, line continuations, semicolons after all commands,\n2-address anywhere an address is allowed, \"T\" command, multiline\ncontinuations for [abc], \\; to end [abc] argument before end of line." + +#define HELP_rmdir "usage: rmdir [-p] [DIR...]\n\nRemove one or more directories.\n\n-p Remove path\n--ignore-fail-on-non-empty Ignore failures caused by non-empty directories" + +#define HELP_rm "usage: rm [-fiRrv] FILE...\n\nRemove each argument from the filesystem.\n\n-f Force: remove without confirmation, no error if it doesn't exist\n-i Interactive: prompt for confirmation\n-rR Recursive: remove directory contents\n-v Verbose" + +#define HELP_renice "usage: renice [-gpu] -n INCREMENT ID..." + +#define HELP_pwd "usage: pwd [-L|-P]\n\nPrint working (current) directory.\n\n-L Use shell's path from $PWD (when applicable)\n-P Print canonical absolute path" + +#define HELP_pkill "usage: pkill [-fnovx] [-SIGNAL|-l SIGNAL] [PATTERN] [-G GID,] [-g PGRP,] [-P PPID,] [-s SID,] [-t TERM,] [-U UID,] [-u EUID,]\n\n-l Send SIGNAL (default SIGTERM)\n-V Verbose\n-f Check full command line for PATTERN\n-G Match real Group ID(s)\n-g Match Process Group(s) (0 is current user)\n-n Newest match only\n-o Oldest match only\n-P Match Parent Process ID(s)\n-s Match Session ID(s) (0 for current)\n-t Match Terminal(s)\n-U Match real User ID(s)\n-u Match effective User ID(s)\n-v Negate the match\n-x Match whole command (not substring)" + +#define HELP_pgrep "usage: pgrep [-clfnovx] [-d DELIM] [-L SIGNAL] [PATTERN] [-G GID,] [-g PGRP,] [-P PPID,] [-s SID,] [-t TERM,] [-U UID,] [-u EUID,]\n\nSearch for process(es). PATTERN is an extended regular expression checked\nagainst command names.\n\n-c Show only count of matches\n-d Use DELIM instead of newline\n-L Send SIGNAL instead of printing name\n-l Show command name\n-f Check full command line for PATTERN\n-G Match real Group ID(s)\n-g Match Process Group(s) (0 is current user)\n-n Newest match only\n-o Oldest match only\n-P Match Parent Process ID(s)\n-s Match Session ID(s) (0 for current)\n-t Match Terminal(s)\n-U Match real User ID(s)\n-u Match effective User ID(s)\n-v Negate the match\n-x Match whole command (not substring)" + +#define HELP_iotop "usage: iotop [-AaKObq] [-n NUMBER] [-d SECONDS] [-p PID,] [-u USER,]\n\nRank processes by I/O.\n\n-A All I/O, not just disk\n-a Accumulated I/O (not percentage)\n-H Show threads\n-K Kilobytes\n-k Fallback sort FIELDS (default -[D]IO,-ETIME,-PID)\n-m Maximum number of tasks to show\n-O Only show processes doing I/O\n-o Show FIELDS (default PID,PR,USER,[D]READ,[D]WRITE,SWAP,[D]IO,COMM)\n-s Sort by field number (0-X, default 6)\n-b Batch mode (no tty)\n-d Delay SECONDS between each cycle (default 3)\n-n Exit after NUMBER iterations\n-p Show these PIDs\n-u Show these USERs\n-q Quiet (no header lines)\n\nCursor LEFT/RIGHT to change sort, UP/DOWN move list, space to force\nupdate, R to reverse sort, Q to exit." + +#define HELP_top "usage: top [-Hbq] [-k FIELD,] [-o FIELD,] [-s SORT] [-n NUMBER] [-m LINES] [-d SECONDS] [-p PID,] [-u USER,]\n\nShow process activity in real time.\n\n-H Show threads\n-k Fallback sort FIELDS (default -S,-%CPU,-ETIME,-PID)\n-o Show FIELDS (def PID,USER,PR,NI,VIRT,RES,SHR,S,%CPU,%MEM,TIME+,CMDLINE)\n-O Add FIELDS (replacing PR,NI,VIRT,RES,SHR,S from default)\n-s Sort by field number (1-X, default 9)\n-b Batch mode (no tty)\n-d Delay SECONDS between each cycle (default 3)\n-m Maximum number of tasks to show\n-n Exit after NUMBER iterations\n-p Show these PIDs\n-u Show these USERs\n-q Quiet (no header lines)\n\nCursor LEFT/RIGHT to change sort, UP/DOWN move list, space to force\nupdate, R to reverse sort, Q to exit." + +#define HELP_ps "usage: ps [-AadefLlnwZ] [-gG GROUP,] [-k FIELD,] [-o FIELD,] [-p PID,] [-t TTY,] [-uU USER,]\n\nList processes.\n\nWhich processes to show (-gGuUpPt selections may be comma separated lists):\n\n-A All -a Has terminal not session leader\n-d All but session leaders -e Synonym for -A\n-g In GROUPs -G In real GROUPs (before sgid)\n-p PIDs (--pid) -P Parent PIDs (--ppid)\n-s In session IDs -t Attached to selected TTYs\n-T Show threads also -u Owned by selected USERs\n-U Real USERs (before suid)\n\nOutput modifiers:\n\n-k Sort FIELDs (-FIELD to reverse) -M Measure/pad future field widths\n-n Show numeric USER and GROUP -w Wide output (don't truncate fields)\n\nWhich FIELDs to show. (-o HELP for list, default = -o PID,TTY,TIME,CMD)\n\n-f Full listing (-o USER:12=UID,PID,PPID,C,STIME,TTY,TIME,ARGS=CMD)\n-l Long listing (-o F,S,UID,PID,PPID,C,PRI,NI,ADDR,SZ,WCHAN,TTY,TIME,CMD)\n-o Output FIELDs instead of defaults, each with optional :size and =title\n-O Add FIELDS to defaults\n-Z Include LABEL" + +#define HELP_printf "usage: printf FORMAT [ARGUMENT...]\n\nFormat and print ARGUMENT(s) according to FORMAT, using C printf syntax\n(% escapes for cdeEfgGiosuxX, \\ escapes for abefnrtv0 or \\OCTAL or \\xHEX)." + +#define HELP_patch "usage: patch [-d DIR] [-i PATCH] [-p DEPTH] [-F FUZZ] [-Rlsu] [--dry-run] [FILE [PATCH]]\n\nApply a unified diff to one or more files.\n\n-d Modify files in DIR\n-i Input patch file (default=stdin)\n-l Loose match (ignore whitespace)\n-p Number of '/' to strip from start of file paths (default=all)\n-R Reverse patch\n-s Silent except for errors\n-u Ignored (only handles \"unified\" diffs)\n--dry-run Don't change files, just confirm patch applies\n\nThis version of patch only handles unified diffs, and only modifies\na file when all hunks to that file apply. Patch prints failed hunks\nto stderr, and exits with nonzero status if any hunks fail.\n\nA file compared against /dev/null (or with a date <= the epoch) is\ncreated/deleted as appropriate." + +#define HELP_paste "usage: paste [-s] [-d DELIMITERS] [FILE...]\n\nMerge corresponding lines from each input file.\n\n-d List of delimiter characters to separate fields with (default is \\t)\n-s Sequential mode: turn each input file into one line of output" + +#define HELP_od "usage: od [-bcdosxv] [-j #] [-N #] [-w #] [-A doxn] [-t acdfoux[#]]\n\nDump data in octal/hex.\n\n-A Address base (decimal, octal, hexadecimal, none)\n-j Skip this many bytes of input\n-N Stop dumping after this many bytes\n-t Output type a(scii) c(har) d(ecimal) f(loat) o(ctal) u(nsigned) (he)x\n plus optional size in bytes\n aliases: -b=-t o1, -c=-t c, -d=-t u2, -o=-t o2, -s=-t d2, -x=-t x2\n-v Don't collapse repeated lines together\n-w Total line width in bytes (default 16)" + +#define HELP_nohup "usage: nohup COMMAND...\n\nRun a command that survives the end of its terminal.\n\nRedirect tty on stdin to /dev/null, tty on stdout to \"nohup.out\"." + +#define HELP_nl "usage: nl [-E] [-l #] [-b MODE] [-n STYLE] [-s SEPARATOR] [-v #] [-w WIDTH] [FILE...]\n\nNumber lines of input.\n\n-E Use extended regex syntax (when doing -b pREGEX)\n-b Which lines to number: a (all) t (non-empty, default) pREGEX (pattern)\n-l Only count last of this many consecutive blank lines\n-n Number STYLE: ln (left justified) rn (right justified) rz (zero pad)\n-s Separator to use between number and line (instead of TAB)\n-v Starting line number for each section (default 1)\n-w Width of line numbers (default 6)" + +#define HELP_nice "usage: nice [-n PRIORITY] COMMAND...\n\nRun a command line at an increased or decreased scheduling priority.\n\nHigher numbers make a program yield more CPU time, from -20 (highest\npriority) to 19 (lowest). By default processes inherit their parent's\nniceness (usually 0). By default this command adds 10 to the parent's\npriority. Only root can set a negative niceness level." + +#define HELP_mkfifo_z "usage: mkfifo [-Z CONTEXT]\n\n-Z Security context" + +#define HELP_mkfifo "usage: mkfifo [NAME...]\n\nCreate FIFOs (named pipes)." + +#define HELP_mkdir_z "usage: [-Z context]\n\n-Z Set security context" + +#define HELP_mkdir "usage: mkdir [-vp] [-m MODE] [DIR...]\n\nCreate one or more directories.\n\n-m Set permissions of directory to mode\n-p Make parent directories as needed\n-v Verbose" + +#define HELP_ls "usage: ls [-ACFHLRSZacdfhiklmnpqrstuwx1] [--color[=auto]] [FILE...]\n\nList files.\n\nwhat to show:\n-a all files including .hidden -b escape nongraphic chars\n-c use ctime for timestamps -d directory, not contents\n-i inode number -p put a '/' after dir names\n-q unprintable chars as '?' -s storage used (1024 byte units)\n-u use access time for timestamps -A list all files but . and ..\n-H follow command line symlinks -L follow symlinks\n-R recursively list in subdirs -F append /dir *exe @sym |FIFO\n-Z security context\n\noutput formats:\n-1 list one file per line -C columns (sorted vertically)\n-g like -l but no owner -h human readable sizes\n-l long (show full details) -m comma separated\n-n like -l but numeric uid/gid -o like -l but no group\n-w set column width -x columns (horizontal sort)\n-ll long with nanoseconds (--full-time)\n--color device=yellow symlink=turquoise/red dir=blue socket=purple\n files: exe=green suid=red suidfile=redback stickydir=greenback\n =auto means detect if output is a tty.\n\nsorting (default is alphabetical):\n-f unsorted -r reverse -t timestamp -S size" + +#define HELP_logger "usage: logger [-s] [-t TAG] [-p [FACILITY.]PRIORITY] [MESSAGE...]\n\nLog message (or stdin) to syslog.\n\n-s Also write message to stderr\n-t Use TAG instead of username to identify message source\n-p Specify PRIORITY with optional FACILITY. Default is \"user.notice\"" + +#define HELP_ln "usage: ln [-sfnv] [-t DIR] [FROM...] TO\n\nCreate a link between FROM and TO.\nOne/two/many arguments work like \"mv\" or \"cp\".\n\n-s Create a symbolic link\n-f Force the creation of the link, even if TO already exists\n-n Symlink at TO treated as file\n-r Create relative symlink from -> to\n-t Create links in DIR\n-T TO always treated as file, max 2 arguments\n-v Verbose" + +#define HELP_link "usage: link FILE NEWLINK\n\nCreate hardlink to a file." + +#define HELP_killall5 "usage: killall5 [-l [SIGNAL]] [-SIGNAL|-s SIGNAL] [-o PID]...\n\nSend a signal to all processes outside current session.\n\n-l List signal name(s) and number(s)\n-o PID Omit PID\n-s Send SIGNAL (default SIGTERM)" + +#define HELP_kill "usage: kill [-l [SIGNAL] | -s SIGNAL | -SIGNAL] PID...\n\nSend signal to process(es).\n\n-l List signal name(s) and number(s)\n-s Send SIGNAL (default SIGTERM)" + +#define HELP_whoami "usage: whoami\n\nPrint the current user name." + +#define HELP_logname "usage: logname\n\nPrint the current user name." + +#define HELP_groups "usage: groups [user]\n\nPrint the groups a user is in." + +#define HELP_id_z "usage: id [-Z]\n\n-Z Show only security context" + +#define HELP_id "usage: id [-nGgru] [USER...]\n\nPrint user and group ID.\n\n-G Show all group IDs\n-g Show only the effective group ID\n-n Print names instead of numeric IDs (to be used with -Ggu)\n-r Show real ID instead of effective ID\n-u Show only the effective user ID" + +#define HELP_iconv "usage: iconv [-f FROM] [-t TO] [FILE...]\n\nConvert character encoding of files.\n\n-c Omit invalid chars\n-f Convert from (default UTF-8)\n-t Convert to (default UTF-8)" + +#define HELP_head "usage: head [-n NUM] [FILE...]\n\nCopy first lines from files to stdout. If no files listed, copy from\nstdin. Filename \"-\" is a synonym for stdin.\n\n-n Number of lines to copy\n-c Number of bytes to copy\n-q Never print headers\n-v Always print headers" + +#define HELP_grep "usage: grep [-EFrivwcloqsHbhn] [-ABC NUM] [-m MAX] [-e REGEX]... [-MS PATTERN]... [-f REGFILE] [FILE]...\n\nShow lines matching regular expressions. If no -e, first argument is\nregular expression to match. With no files (or \"-\" filename) read stdin.\nReturns 0 if matched, 1 if no match found, 2 for command errors.\n\n-e Regex to match. (May be repeated.)\n-f File listing regular expressions to match.\n\nfile search:\n-r Recurse into subdirectories (defaults FILE to \".\")\n-R Recurse into subdirectories and symlinks to directories\n-M Match filename pattern (--include)\n-S Skip filename pattern (--exclude)\n--exclude-dir=PATTERN Skip directory pattern\n-I Ignore binary files\n\nmatch type:\n-A Show NUM lines after -B Show NUM lines before match\n-C NUM lines context (A+B) -E extended regex syntax\n-F fixed (literal match) -a always text (not binary)\n-i case insensitive -m match MAX many lines\n-v invert match -w whole word (implies -E)\n-x whole line -z input NUL terminated\n\ndisplay modes: (default: matched line)\n-c count of matching lines -l show only matching filenames\n-o only matching part -q quiet (errors only)\n-s silent (no error msg) -Z output NUL terminated\n\noutput prefix (default: filename if checking more than 1 file)\n-H force filename -b byte offset of match\n-h hide filename -n line number of match" + +#define HELP_getconf "usage: getconf -a [PATH] | -l | NAME [PATH]\n\nGet system configuration values. Values from pathconf(3) require a path.\n\n-a Show all (defaults to \"/\" if no path given)\n-l List available value names (grouped by source)" + +#define HELP_find "usage: find [-HL] [DIR...] []\n\nSearch directories for matching files.\nDefault: search \".\", match all, -print matches.\n\n-H Follow command line symlinks -L Follow all symlinks\n\nMatch filters:\n-name PATTERN filename with wildcards (-iname case insensitive)\n-path PATTERN path name with wildcards (-ipath case insensitive)\n-user UNAME belongs to user UNAME -nouser user ID not known\n-group GROUP belongs to group GROUP -nogroup group ID not known\n-perm [-/]MODE permissions (-=min /=any) -prune ignore dir contents\n-size N[c] 512 byte blocks (c=bytes) -xdev only this filesystem\n-links N hardlink count -atime N[u] accessed N units ago\n-ctime N[u] created N units ago -mtime N[u] modified N units ago\n-newer FILE newer mtime than FILE -mindepth N at least N dirs down\n-depth ignore contents of dir -maxdepth N at most N dirs down\n-inum N inode number N -empty empty files and dirs\n-type [bcdflps] type is (block, char, dir, file, symlink, pipe, socket)\n-true always true -false always false\n-context PATTERN security context\n-newerXY FILE X=acm time > FILE's Y=acm time (Y=t: FILE is literal time)\n\nNumbers N may be prefixed by a - (less than) or + (greater than). Units for\n-Xtime are d (days, default), h (hours), m (minutes), or s (seconds).\n\nCombine matches with:\n!, -a, -o, ( ) not, and, or, group expressions\n\nActions:\n-print Print match with newline -print0 Print match with null\n-exec Run command with path -execdir Run command in file's dir\n-ok Ask before exec -okdir Ask before execdir\n-delete Remove matching file/dir -printf FORMAT Print using format string\n\nCommands substitute \"{}\" with matched file. End with \";\" to run each file,\nor \"+\" (next argument after \"{}\") to collect and run with multiple files.\n\n-printf FORMAT characters are \\ escapes and:\n%b 512 byte blocks used\n%f basename %g textual gid %G numeric gid\n%i decimal inode %l target of symlink %m octal mode\n%M ls format type/mode %p path to file %P path to file minus DIR\n%s size in bytes %T@ mod time as unixtime\n%u username %U numeric uid %Z security context" + +#define HELP_file "usage: file [-bhLs] [FILE...]\n\nExamine the given files and describe their content types.\n\n-b Brief (no filename)\n-h Don't follow symlinks (default)\n-L Follow symlinks\n-s Show block/char device contents" + +#define HELP_false "usage: false\n\nReturn nonzero." + +#define HELP_expand "usage: expand [-t TABLIST] [FILE...]\n\nExpand tabs to spaces according to tabstops.\n\n-t TABLIST\n\nSpecify tab stops, either a single number instead of the default 8,\nor a comma separated list of increasing numbers representing tabstop\npositions (absolute, not increments) with each additional tab beyond\nthat becoming one space." + +#define HELP_env "usage: env [-i] [-u NAME] [NAME=VALUE...] [COMMAND...]\n\nSet the environment for command invocation, or list environment variables.\n\n-i Clear existing environment\n-u NAME Remove NAME from the environment\n-0 Use null instead of newline in output" + +#define HELP_echo "usage: echo [-neE] [ARG...]\n\nWrite each argument to stdout, with one space between each, followed\nby a newline.\n\n-n No trailing newline\n-E Print escape sequences literally (default)\n-e Process the following escape sequences:\n \\\\ Backslash\n \\0NNN Octal values (1 to 3 digits)\n \\a Alert (beep/flash)\n \\b Backspace\n \\c Stop output here (avoids trailing newline)\n \\f Form feed\n \\n Newline\n \\r Carriage return\n \\t Horizontal tab\n \\v Vertical tab\n \\xHH Hexadecimal values (1 to 2 digits)" + +#define HELP_du "usage: du [-d N] [-askxHLlmc] [FILE...]\n\nShow disk usage, space consumed by files and directories.\n\nSize in:\n-k 1024 byte blocks (default)\n-K 512 byte blocks (posix)\n-m Megabytes\n-h Human readable (e.g., 1K 243M 2G)\n\nWhat to show:\n-a All files, not just directories\n-H Follow symlinks on cmdline\n-L Follow all symlinks\n-s Only total size of each argument\n-x Don't leave this filesystem\n-c Cumulative total\n-d N Only depth < N\n-l Disable hardlink filter" + +#define HELP_dirname "usage: dirname PATH...\n\nShow directory portion of path." + +#define HELP_df "usage: df [-HPkhi] [-t type] [FILE...]\n\nThe \"disk free\" command shows total/used/available disk space for\neach filesystem listed on the command line, or all currently mounted\nfilesystems.\n\n-a Show all (including /proc and friends)\n-P The SUSv3 \"Pedantic\" option\n-k Sets units back to 1024 bytes (the default without -P)\n-h Human readable (K=1024)\n-H Human readable (k=1000)\n-i Show inodes instead of blocks\n-t type Display only filesystems of this type\n\nPedantic provides a slightly less useful output format dictated by Posix,\nand sets the units to 512 bytes instead of the default 1024 bytes." + +#define HELP_date "usage: date [-u] [-r FILE] [-d DATE] [+DISPLAY_FORMAT] [-D SET_FORMAT] [SET]\n\nSet/get the current date/time. With no SET shows the current date.\n\n-d Show DATE instead of current time (convert date format)\n-D +FORMAT for SET or -d (instead of MMDDhhmm[[CC]YY][.ss])\n-r Use modification time of FILE instead of current date\n-u Use UTC instead of current timezone\n\nSupported input formats:\n\nMMDDhhmm[[CC]YY][.ss] POSIX\n@UNIXTIME[.FRACTION] seconds since midnight 1970-01-01\nYYYY-MM-DD [hh:mm[:ss]] ISO 8601\nhh:mm[:ss] 24-hour time today\n\nAll input formats can be preceded by TZ=\"id\" to set the input time zone\nseparately from the output time zone. Otherwise $TZ sets both.\n\n+FORMAT specifies display format string using strftime(3) syntax:\n\n%% literal % %n newline %t tab\n%S seconds (00-60) %M minute (00-59) %m month (01-12)\n%H hour (0-23) %I hour (01-12) %p AM/PM\n%y short year (00-99) %Y year %C century\n%a short weekday name %A weekday name %u day of week (1-7, 1=mon)\n%b short month name %B month name %Z timezone name\n%j day of year (001-366) %d day of month (01-31) %e day of month ( 1-31)\n%N nanosec (output only)\n\n%U Week of year (0-53 start sunday) %W Week of year (0-53 start monday)\n%V Week of year (1-53 start monday, week < 4 days not part of this year)\n\n%F \"%Y-%m-%d\" %R \"%H:%M\" %T \"%H:%M:%S\" %z numeric timezone\n%D \"%m/%d/%y\" %r \"%I:%M:%S %p\" %h \"%b\" %s unix epoch time\n%x locale date %X locale time %c locale date/time" + +#define HELP_cut "usage: cut [-Ds] [-bcfF LIST] [-dO DELIM] [FILE...]\n\nPrint selected parts of lines from each FILE to standard output.\n\nEach selection LIST is comma separated, either numbers (counting from 1)\nor dash separated ranges (inclusive, with X- meaning to end of line and -X\nfrom start). By default selection ranges are sorted and collated, use -D\nto prevent that.\n\n-b Select bytes\n-c Select UTF-8 characters\n-C Select unicode columns\n-d Use DELIM (default is TAB for -f, run of whitespace for -F)\n-D Don't sort/collate selections or match -fF lines without delimiter\n-f Select fields (words) separated by single DELIM character\n-F Select fields separated by DELIM regex\n-O Output delimiter (default one space for -F, input delim for -f)\n-s Skip lines without delimiters" + +#define HELP_cpio "usage: cpio -{o|t|i|p DEST} [-v] [--verbose] [-F FILE] [--no-preserve-owner]\n [ignored: -mdu -H newc]\n\nCopy files into and out of a \"newc\" format cpio archive.\n\n-F FILE Use archive FILE instead of stdin/stdout\n-p DEST Copy-pass mode, copy stdin file list to directory DEST\n-i Extract from archive into file system (stdin=archive)\n-o Create archive (stdin=list of files, stdout=archive)\n-t Test files (list only, stdin=archive, stdout=list of files)\n-v Verbose\n--no-preserve-owner (don't set ownership during extract)\n--trailer Add legacy trailer (prevents concatenation)" + +#define HELP_install "usage: install [-dDpsv] [-o USER] [-g GROUP] [-m MODE] [SOURCE...] DEST\n\nCopy files and set attributes.\n\n-d Act like mkdir -p\n-D Create leading directories for DEST\n-g Make copy belong to GROUP\n-m Set permissions to MODE\n-o Make copy belong to USER\n-p Preserve timestamps\n-s Call \"strip -p\"\n-v Verbose" + +#define HELP_mv "usage: mv [-finTv] SOURCE... DEST\n\n-f Force copy by deleting destination file\n-i Interactive, prompt before overwriting existing DEST\n-n No clobber (don't overwrite DEST)\n-T DEST always treated as file, max 2 arguments\n-v Verbose" + +#define HELP_cp_preserve "--preserve takes either a comma separated list of attributes, or the first\nletter(s) of:\n\n mode - permissions (ignore umask for rwx, copy suid and sticky bit)\n ownership - user and group\n timestamps - file creation, modification, and access times.\n context - security context\n xattr - extended attributes\n all - all of the above\n\nusage: cp [--preserve=motcxa] [-adfHiLlnPpRrsTv] SOURCE... DEST\n\nCopy files from SOURCE to DEST. If more than one SOURCE, DEST must\nbe a directory.\n-v Verbose\n-T DEST always treated as file, max 2 arguments\n-s Symlink instead of copy\n-r Synonym for -R\n-R Recurse into subdirectories (DEST must be a directory)\n-p Preserve timestamps, ownership, and mode\n-P Do not follow symlinks [default]\n-n No clobber (don't overwrite DEST)\n-l Hard link instead of copy\n-L Follow all symlinks\n-i Interactive, prompt before overwriting existing DEST\n-H Follow symlinks listed on command line\n-f Delete destination files we can't write to\n-F Delete any existing destination file first (--remove-destination)\n-d Don't dereference symlinks\n-D Create leading dirs under DEST (--parents)\n-a Same as -dpr" + +#define HELP_cp "usage: cp [--preserve=motcxa] [-adfHiLlnPpRrsTv] SOURCE... DEST\n\nCopy files from SOURCE to DEST. If more than one SOURCE, DEST must\nbe a directory.\n-v Verbose\n-T DEST always treated as file, max 2 arguments\n-s Symlink instead of copy\n-r Synonym for -R\n-R Recurse into subdirectories (DEST must be a directory)\n-p Preserve timestamps, ownership, and mode\n-P Do not follow symlinks [default]\n-n No clobber (don't overwrite DEST)\n-l Hard link instead of copy\n-L Follow all symlinks\n-i Interactive, prompt before overwriting existing DEST\n-H Follow symlinks listed on command line\n-f Delete destination files we can't write to\n-F Delete any existing destination file first (--remove-destination)\n-d Don't dereference symlinks\n-D Create leading dirs under DEST (--parents)\n-a Same as -dpr\n--preserve takes either a comma separated list of attributes, or the first\nletter(s) of:\n\n mode - permissions (ignore umask for rwx, copy suid and sticky bit)\n ownership - user and group\n timestamps - file creation, modification, and access times.\n context - security context\n xattr - extended attributes\n all - all of the above" + +#define HELP_comm "usage: comm [-123] FILE1 FILE2\n\nRead FILE1 and FILE2, which should be ordered, and produce three text\ncolumns as output: lines only in FILE1; lines only in FILE2; and lines\nin both files. Filename \"-\" is a synonym for stdin.\n\n-1 Suppress the output column of lines unique to FILE1\n-2 Suppress the output column of lines unique to FILE2\n-3 Suppress the output column of lines duplicated in FILE1 and FILE2" + +#define HELP_cmp "usage: cmp [-l] [-s] FILE1 [FILE2 [SKIP1 [SKIP2]]]\n\nCompare the contents of two files. (Or stdin and file if only one given.)\n\n-l Show all differing bytes\n-s Silent" + +#define HELP_crc32 "usage: crc32 [file...]\n\nOutput crc32 checksum for each file." + +#define HELP_cksum "usage: cksum [-IPLN] [FILE...]\n\nFor each file, output crc32 checksum value, length and name of file.\nIf no files listed, copy from stdin. Filename \"-\" is a synonym for stdin.\n\n-H Hexadecimal checksum (defaults to decimal)\n-L Little endian (defaults to big endian)\n-P Pre-inversion\n-I Skip post-inversion\n-N Do not include length in CRC calculation (or output)" + +#define HELP_chmod "usage: chmod [-R] MODE FILE...\n\nChange mode of listed file[s] (recursively with -R).\n\nMODE can be (comma-separated) stanzas: [ugoa][+-=][rwxstXugo]\n\nStanzas are applied in order: For each category (u = user,\ng = group, o = other, a = all three, if none specified default is a),\nset (+), clear (-), or copy (=), r = read, w = write, x = execute.\ns = u+s = suid, g+s = sgid, o+s = sticky. (+t is an alias for o+s).\nsuid/sgid: execute as the user/group who owns the file.\nsticky: can't delete files you don't own out of this directory\nX = x for directories or if any category already has x set.\n\nOr MODE can be an octal value up to 7777 ug uuugggooo top +\nbit 1 = o+x, bit 1<<8 = u+w, 1<<11 = g+1 sstrwxrwxrwx bottom\n\nExamples:\nchmod u+w file - allow owner of \"file\" to write to it.\nchmod 744 file - user can read/write/execute, everyone else read only" + +#define HELP_chown "see: chgrp" + +#define HELP_chgrp "usage: chgrp/chown [-RHLP] [-fvh] GROUP FILE...\n\nChange group of one or more files.\n\n-f Suppress most error messages\n-h Change symlinks instead of what they point to\n-R Recurse into subdirectories (implies -h)\n-H With -R change target of symlink, follow command line symlinks\n-L With -R change target of symlink, follow all symlinks\n-P With -R change symlink, do not follow symlinks (default)\n-v Verbose" + +#define HELP_catv "usage: catv [-evt] [FILE...]\n\nDisplay nonprinting characters as escape sequences. Use M-x for\nhigh ascii characters (>127), and ^x for other nonprinting chars.\n\n-e Mark each newline with $\n-t Show tabs as ^I\n-v Don't use ^x or M-x escapes" + +#define HELP_cat "usage: cat [-etuv] [FILE...]\n\nCopy (concatenate) files to stdout. If no files listed, copy from stdin.\nFilename \"-\" is a synonym for stdin.\n\n-e Mark each newline with $\n-t Show tabs as ^I\n-u Copy one byte at a time (slow)\n-v Display nonprinting characters as escape sequences with M-x for\n high ascii characters (>127), and ^x for other nonprinting chars" + +#define HELP_cal "usage: cal [[MONTH] YEAR]\n\nPrint a calendar.\n\nWith one argument, prints all months of the specified year.\nWith two arguments, prints calendar for month and year.\n\n-h Don't highlight today" + +#define HELP_basename "usage: basename [-a] [-s SUFFIX] NAME... | NAME [SUFFIX]\n\nReturn non-directory portion of a pathname removing suffix.\n\n-a All arguments are names\n-s SUFFIX Remove suffix (implies -a)" + diff --git a/aosp/external/toybox/android/mac/generated/newtoys.h b/aosp/external/toybox/android/mac/generated/newtoys.h new file mode 100644 index 0000000000000000000000000000000000000000..6b93beabcf7d8d66d27325630e1b5adf03ac19c8 --- /dev/null +++ b/aosp/external/toybox/android/mac/generated/newtoys.h @@ -0,0 +1,303 @@ +USE_TOYBOX(NEWTOY(toybox, NULL, TOYFLAG_STAYROOT)) +USE_SH(OLDTOY(-bash, sh, 0)) +USE_SH(OLDTOY(-sh, sh, 0)) +USE_SH(OLDTOY(-toysh, sh, 0)) +USE_TRUE(OLDTOY(:, true, TOYFLAG_NOFORK|TOYFLAG_NOHELP|TOYFLAG_MAYFORK)) +USE_TEST(OLDTOY([, test, TOYFLAG_NOFORK|TOYFLAG_NOHELP)) +USE_ACPI(NEWTOY(acpi, "abctV", TOYFLAG_USR|TOYFLAG_BIN)) +USE_GROUPADD(OLDTOY(addgroup, groupadd, TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_USERADD(OLDTOY(adduser, useradd, TOYFLAG_NEEDROOT|TOYFLAG_UMASK|TOYFLAG_SBIN)) +USE_ARCH(NEWTOY(arch, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_ARP(NEWTOY(arp, "vi:nDsdap:A:H:[+Ap][!sd]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ARPING(NEWTOY(arping, "<1>1s:I:w#<0c#<0AUDbqf[+AU][+Df]", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_ASCII(NEWTOY(ascii, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_BASE64(NEWTOY(base64, "diw#<0=76[!dw]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_BASENAME(NEWTOY(basename, "^<1as:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SH(OLDTOY(bash, sh, TOYFLAG_BIN)) +USE_BC(NEWTOY(bc, "i(interactive)l(mathlib)q(quiet)s(standard)w(warn)", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_BLKID(NEWTOY(blkid, "ULs*[!LU]", TOYFLAG_BIN)) +USE_BLOCKDEV(NEWTOY(blockdev, "<1>1(setro)(setrw)(getro)(getss)(getbsz)(setbsz)#<0(getsz)(getsize)(getsize64)(getra)(setra)#<0(flushbufs)(rereadpt)",TOYFLAG_SBIN)) +USE_BOOTCHARTD(NEWTOY(bootchartd, 0, TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN)) +USE_BRCTL(NEWTOY(brctl, "<1", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_BUNZIP2(NEWTOY(bunzip2, "cftkv", TOYFLAG_USR|TOYFLAG_BIN)) +USE_BZCAT(NEWTOY(bzcat, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_CAL(NEWTOY(cal, ">2h", TOYFLAG_USR|TOYFLAG_BIN)) +USE_CAT(NEWTOY(cat, "u"USE_CAT_V("vte"), TOYFLAG_BIN)) +USE_CATV(NEWTOY(catv, USE_CATV("vte"), TOYFLAG_USR|TOYFLAG_BIN)) +USE_SH(NEWTOY(cd, ">1LP[-LP]", TOYFLAG_NOFORK)) +USE_CHATTR(NEWTOY(chattr, "?p#v#R", TOYFLAG_BIN)) +USE_CHCON(NEWTOY(chcon, "<2hvR", TOYFLAG_USR|TOYFLAG_BIN)) +USE_CHGRP(NEWTOY(chgrp, "<2hPLHRfv[-HLP]", TOYFLAG_BIN)) +USE_CHMOD(NEWTOY(chmod, "<2?vRf[-vf]", TOYFLAG_BIN)) +USE_CHOWN(OLDTOY(chown, chgrp, TOYFLAG_BIN)) +USE_CHROOT(NEWTOY(chroot, "^<1", TOYFLAG_USR|TOYFLAG_SBIN|TOYFLAG_ARGFAIL(125))) +USE_CHRT(NEWTOY(chrt, "^mp#<0iRbrfo[!ibrfo]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_CHVT(NEWTOY(chvt, "<1", TOYFLAG_USR|TOYFLAG_BIN)) +USE_CKSUM(NEWTOY(cksum, "HIPLN", TOYFLAG_BIN)) +USE_CLEAR(NEWTOY(clear, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_CMP(NEWTOY(cmp, "<1>2ls(silent)(quiet)[!ls]", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_COMM(NEWTOY(comm, "<2>2321", TOYFLAG_USR|TOYFLAG_BIN)) +USE_COUNT(NEWTOY(count, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_CP(NEWTOY(cp, "<2"USE_CP_PRESERVE("(preserve):;")"D(parents)RHLPprdaslvnF(remove-destination)fiT[-HLPd][-ni]", TOYFLAG_BIN)) +USE_CPIO(NEWTOY(cpio, "(no-preserve-owner)(trailer)mduH:p:|i|t|F:v(verbose)o|[!pio][!pot][!pF]", TOYFLAG_BIN)) +USE_CRC32(NEWTOY(crc32, 0, TOYFLAG_BIN)) +USE_CROND(NEWTOY(crond, "fbSl#<0=8d#<0L:c:[-bf][-LS][-ld]", TOYFLAG_USR|TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_CRONTAB(NEWTOY(crontab, "c:u:elr[!elr]", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_STAYROOT)) +USE_CUT(NEWTOY(cut, "b*|c*|f*|F*|C*|O(output-delimiter):d:sDn[!cbf]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_DATE(NEWTOY(date, "d:D:r:u[!dr]", TOYFLAG_BIN)) +USE_DD(NEWTOY(dd, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_DEALLOCVT(NEWTOY(deallocvt, ">1", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_NEEDROOT)) +USE_GROUPDEL(OLDTOY(delgroup, groupdel, TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_USERDEL(OLDTOY(deluser, userdel, TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_DEMO_MANY_OPTIONS(NEWTOY(demo_many_options, "ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba", TOYFLAG_BIN)) +USE_DEMO_NUMBER(NEWTOY(demo_number, "D#=3<3hdbs", TOYFLAG_BIN)) +USE_DEMO_SCANKEY(NEWTOY(demo_scankey, 0, TOYFLAG_BIN)) +USE_DEMO_UTF8TOWC(NEWTOY(demo_utf8towc, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_DEVMEM(NEWTOY(devmem, "<1>3", TOYFLAG_USR|TOYFLAG_BIN)) +USE_DF(NEWTOY(df, "HPkhit*a[-HPkh]", TOYFLAG_SBIN)) +USE_DHCP(NEWTOY(dhcp, "V:H:F:x*r:O*A#<0=20T#<0=3t#<0=3s:p:i:SBRCaovqnbf", TOYFLAG_SBIN|TOYFLAG_ROOTONLY)) +USE_DHCP6(NEWTOY(dhcp6, "r:A#<0T#<0t#<0s:p:i:SRvqnbf", TOYFLAG_SBIN|TOYFLAG_ROOTONLY)) +USE_DHCPD(NEWTOY(dhcpd, ">1P#<0>65535fi:S46[!46]", TOYFLAG_SBIN|TOYFLAG_ROOTONLY)) +USE_DIFF(NEWTOY(diff, "<2>2(color)(strip-trailing-cr)B(ignore-blank-lines)d(minimal)b(ignore-space-change)ut(expand-tabs)w(ignore-all-space)i(ignore-case)T(initial-tab)s(report-identical-files)q(brief)a(text)L(label)*S(starting-file):N(new-file)r(recursive)U(unified)#<0=3", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_DIRNAME(NEWTOY(dirname, "<1", TOYFLAG_USR|TOYFLAG_BIN)) +USE_DMESG(NEWTOY(dmesg, "w(follow)CSTtrs#<1n#c[!Ttr][!Cc][!Sw]", TOYFLAG_BIN)) +USE_DNSDOMAINNAME(NEWTOY(dnsdomainname, ">0", TOYFLAG_BIN)) +USE_DOS2UNIX(NEWTOY(dos2unix, 0, TOYFLAG_BIN)) +USE_DU(NEWTOY(du, "d#<0=-1hmlcaHkKLsx[-HL][-kKmh]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_DUMPLEASES(NEWTOY(dumpleases, ">0arf:[!ar]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ECHO(NEWTOY(echo, "^?Een[-eE]", TOYFLAG_BIN|TOYFLAG_MAYFORK)) +USE_EGREP(OLDTOY(egrep, grep, TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_EJECT(NEWTOY(eject, ">1stT[!tT]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ENV(NEWTOY(env, "^0iu*", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(125))) +USE_SH(NEWTOY(exit, 0, TOYFLAG_NOFORK)) +USE_EXPAND(NEWTOY(expand, "t*", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_EXPR(NEWTOY(expr, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_FACTOR(NEWTOY(factor, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_FALLOCATE(NEWTOY(fallocate, ">1l#|o#", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FALSE(NEWTOY(false, NULL, TOYFLAG_BIN|TOYFLAG_NOHELP|TOYFLAG_MAYFORK)) +USE_FDISK(NEWTOY(fdisk, "C#<0H#<0S#<0b#<512ul", TOYFLAG_SBIN)) +USE_FGREP(OLDTOY(fgrep, grep, TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_FILE(NEWTOY(file, "<1bhLs[!hL]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FIND(NEWTOY(find, "?^HL[-HL]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FLOCK(NEWTOY(flock, "<1>1nsux[-sux]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FMT(NEWTOY(fmt, "w#<0=75", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_FOLD(NEWTOY(fold, "bsuw#<1", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FREE(NEWTOY(free, "htgmkb[!htgmkb]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FREERAMDISK(NEWTOY(freeramdisk, "<1>1", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_FSCK(NEWTOY(fsck, "?t:ANPRTVsC#", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FSFREEZE(NEWTOY(fsfreeze, "<1>1f|u|[!fu]", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_FSTYPE(NEWTOY(fstype, "<1", TOYFLAG_BIN)) +USE_FSYNC(NEWTOY(fsync, "<1d", TOYFLAG_BIN)) +USE_FTPGET(NEWTOY(ftpget, "<2>3P:cp:u:vgslLmMdD[-gs][!gslLmMdD][!clL]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FTPPUT(OLDTOY(ftpput, ftpget, TOYFLAG_USR|TOYFLAG_BIN)) +USE_GETCONF(NEWTOY(getconf, ">2al", TOYFLAG_USR|TOYFLAG_BIN)) +USE_GETENFORCE(NEWTOY(getenforce, ">0", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_GETFATTR(NEWTOY(getfattr, "(only-values)dhn:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_GETOPT(NEWTOY(getopt, "^a(alternative)n:(name)o:(options)l*(long)(longoptions)Tu", TOYFLAG_USR|TOYFLAG_BIN)) +USE_GETTY(NEWTOY(getty, "<2t#<0H:I:l:f:iwnmLh",TOYFLAG_SBIN)) +USE_GREP(NEWTOY(grep, "(line-buffered)(color):;(exclude-dir)*S(exclude)*M(include)*ZzEFHIab(byte-offset)h(no-filename)ino(only-matching)rRsvwcl(files-with-matches)q(quiet)(silent)e*f*C#B#A#m#x[!wx][!EFw]", TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_GROUPADD(NEWTOY(groupadd, "<1>2g#<0S", TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_GROUPDEL(NEWTOY(groupdel, "<1>2", TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_GROUPS(NEWTOY(groups, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_GUNZIP(NEWTOY(gunzip, "cdfk123456789[-123456789]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_GZIP(NEWTOY(gzip, "ncdfk123456789[-123456789]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_REBOOT(OLDTOY(halt, reboot, TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_HEAD(NEWTOY(head, "?n(lines)#<0=10c(bytes)#<0qv[-nc]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_HELLO(NEWTOY(hello, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_HELP(NEWTOY(help, "ahu", TOYFLAG_BIN|TOYFLAG_MAYFORK)) +USE_HEXEDIT(NEWTOY(hexedit, "<1>1r", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_HOST(NEWTOY(host, "<1>2avt:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_HOSTID(NEWTOY(hostid, ">0", TOYFLAG_USR|TOYFLAG_BIN)) +USE_HOSTNAME(NEWTOY(hostname, ">1bdsfF:[!bdsf]", TOYFLAG_BIN)) +USE_HWCLOCK(NEWTOY(hwclock, ">0(fast)f(rtc):u(utc)l(localtime)t(systz)s(hctosys)r(show)w(systohc)[-ul][!rtsw]", TOYFLAG_SBIN)) +USE_I2CDETECT(NEWTOY(i2cdetect, ">3aFly", TOYFLAG_USR|TOYFLAG_BIN)) +USE_I2CDUMP(NEWTOY(i2cdump, "<2>2fy", TOYFLAG_USR|TOYFLAG_BIN)) +USE_I2CGET(NEWTOY(i2cget, "<3>3fy", TOYFLAG_USR|TOYFLAG_BIN)) +USE_I2CSET(NEWTOY(i2cset, "<4fy", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ICONV(NEWTOY(iconv, "cst:f:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ID(NEWTOY(id, ">1"USE_ID_Z("Z")"nGgru[!"USE_ID_Z("Z")"Ggu]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_IFCONFIG(NEWTOY(ifconfig, "^?aS", TOYFLAG_SBIN)) +USE_INIT(NEWTOY(init, "", TOYFLAG_SBIN)) +USE_INOTIFYD(NEWTOY(inotifyd, "<2", TOYFLAG_USR|TOYFLAG_BIN)) +USE_INSMOD(NEWTOY(insmod, "<1", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_INSTALL(NEWTOY(install, "<1cdDpsvm:o:g:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_IONICE(NEWTOY(ionice, "^tc#<0>3=2n#<0>7=5p#", TOYFLAG_USR|TOYFLAG_BIN)) +USE_IORENICE(NEWTOY(iorenice, "?<1>3", TOYFLAG_USR|TOYFLAG_BIN)) +USE_IOTOP(NEWTOY(iotop, ">0AaKO" "Hk*o*p*u*s#<1=7d%<100=3000m#n#<1bq", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_STAYROOT|TOYFLAG_LOCALE)) +USE_IP(NEWTOY(ip, NULL, TOYFLAG_SBIN)) +USE_IP(OLDTOY(ipaddr, ip, TOYFLAG_SBIN)) +USE_IPCRM(NEWTOY(ipcrm, "m*M*s*S*q*Q*", TOYFLAG_USR|TOYFLAG_BIN)) +USE_IPCS(NEWTOY(ipcs, "acptulsqmi#", TOYFLAG_USR|TOYFLAG_BIN)) +USE_IP(OLDTOY(iplink, ip, TOYFLAG_SBIN)) +USE_IP(OLDTOY(iproute, ip, TOYFLAG_SBIN)) +USE_IP(OLDTOY(iprule, ip, TOYFLAG_SBIN)) +USE_IP(OLDTOY(iptunnel, ip, TOYFLAG_SBIN)) +USE_KILL(NEWTOY(kill, "?ls: ", TOYFLAG_BIN|TOYFLAG_MAYFORK)) +USE_KILLALL(NEWTOY(killall, "?s:ilqvw", TOYFLAG_USR|TOYFLAG_BIN)) +USE_KILLALL5(NEWTOY(killall5, "?o*ls: [!lo][!ls]", TOYFLAG_SBIN)) +USE_KLOGD(NEWTOY(klogd, "c#<1>8n", TOYFLAG_SBIN)) +USE_LAST(NEWTOY(last, "f:W", TOYFLAG_BIN)) +USE_LINK(NEWTOY(link, "<2>2", TOYFLAG_USR|TOYFLAG_BIN)) +USE_LN(NEWTOY(ln, "<1rt:Tvnfs", TOYFLAG_BIN)) +USE_LOAD_POLICY(NEWTOY(load_policy, "<1>1", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_LOG(NEWTOY(log, "<1p:t:", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_LOGGER(NEWTOY(logger, "st:p:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_LOGIN(NEWTOY(login, ">1f:ph:", TOYFLAG_BIN|TOYFLAG_NEEDROOT)) +USE_LOGNAME(NEWTOY(logname, ">0", TOYFLAG_USR|TOYFLAG_BIN)) +USE_LOGWRAPPER(NEWTOY(logwrapper, 0, TOYFLAG_NOHELP|TOYFLAG_USR|TOYFLAG_BIN)) +USE_LOSETUP(NEWTOY(losetup, ">2S(sizelimit)#s(show)ro#j:fdcaD[!afj]", TOYFLAG_SBIN)) +USE_LS(NEWTOY(ls, "(color):;(full-time)(show-control-chars)ZgoACFHLRSabcdfhikl@mnpqrstuw#=80<0x1[-Cxm1][-Cxml][-Cxmo][-Cxmg][-cu][-ftS][-HL][!qb]", TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_LSATTR(NEWTOY(lsattr, "ldapvR", TOYFLAG_BIN)) +USE_LSMOD(NEWTOY(lsmod, NULL, TOYFLAG_SBIN)) +USE_LSOF(NEWTOY(lsof, "lp*t", TOYFLAG_USR|TOYFLAG_BIN)) +USE_LSPCI(NEWTOY(lspci, "emkn"USE_LSPCI_TEXT("@i:"), TOYFLAG_USR|TOYFLAG_BIN)) +USE_LSUSB(NEWTOY(lsusb, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_MAKEDEVS(NEWTOY(makedevs, "<1>1d:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MAN(NEWTOY(man, "k:M:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MCOOKIE(NEWTOY(mcookie, "v(verbose)V(version)", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MD5SUM(NEWTOY(md5sum, "bc(check)s(status)[!bc]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MDEV(NEWTOY(mdev, "s", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_UMASK)) +USE_MICROCOM(NEWTOY(microcom, "<1>1s:X", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MIX(NEWTOY(mix, "c:d:l#r#", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MKDIR(NEWTOY(mkdir, "<1"USE_MKDIR_Z("Z:")"vp(parent)(parents)m:", TOYFLAG_BIN|TOYFLAG_UMASK)) +USE_MKE2FS(NEWTOY(mke2fs, "<1>2g:Fnqm#N#i#b#", TOYFLAG_SBIN)) +USE_MKFIFO(NEWTOY(mkfifo, "<1"USE_MKFIFO_Z("Z:")"m:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MKNOD(NEWTOY(mknod, "<2>4m(mode):"USE_MKNOD_Z("Z:"), TOYFLAG_BIN|TOYFLAG_UMASK)) +USE_MKPASSWD(NEWTOY(mkpasswd, ">2S:m:P#=0<0", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MKSWAP(NEWTOY(mkswap, "<1>1L:", TOYFLAG_SBIN)) +USE_MKTEMP(NEWTOY(mktemp, ">1(tmpdir);:uqd(directory)p:t", TOYFLAG_BIN)) +USE_MODINFO(NEWTOY(modinfo, "<1b:k:F:0", TOYFLAG_SBIN)) +USE_MODPROBE(NEWTOY(modprobe, "alrqvsDbd*", TOYFLAG_SBIN)) +USE_MORE(NEWTOY(more, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_MOUNT(NEWTOY(mount, "?O:afnrvwt:o*[-rw]", TOYFLAG_BIN|TOYFLAG_STAYROOT)) +USE_MOUNTPOINT(NEWTOY(mountpoint, "<1qdx[-dx]", TOYFLAG_BIN)) +USE_MV(NEWTOY(mv, "<2vnF(remove-destination)fiT[-ni]", TOYFLAG_BIN)) +USE_NBD_CLIENT(OLDTOY(nbd-client, nbd_client, TOYFLAG_USR|TOYFLAG_BIN)) +USE_NBD_CLIENT(NEWTOY(nbd_client, "<3>3ns", 0)) +USE_NETCAT(OLDTOY(nc, netcat, TOYFLAG_USR|TOYFLAG_BIN)) +USE_NETCAT(NEWTOY(netcat, USE_NETCAT_LISTEN("^tlL")"w#<1W#<1p#<1>65535q#<1s:f:46uU"USE_NETCAT_LISTEN("[!tlL][!Lw]")"[!46U]", TOYFLAG_BIN)) +USE_NETSTAT(NEWTOY(netstat, "pWrxwutneal", TOYFLAG_BIN)) +USE_NICE(NEWTOY(nice, "^<1n#", TOYFLAG_BIN)) +USE_NL(NEWTOY(nl, "v#=1l#w#<0=6Eb:n:s:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_NOHUP(NEWTOY(nohup, "<1^", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(125))) +USE_NPROC(NEWTOY(nproc, "(all)", TOYFLAG_USR|TOYFLAG_BIN)) +USE_NSENTER(NEWTOY(nsenter, "<1F(no-fork)t#<1(target)i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user);", TOYFLAG_USR|TOYFLAG_BIN)) +USE_OD(NEWTOY(od, "j#vw#<1=16N#xsodcbA:t*", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ONEIT(NEWTOY(oneit, "^<1nc:p3[!pn]", TOYFLAG_SBIN)) +USE_OPENVT(NEWTOY(openvt, "c#<1>63sw", TOYFLAG_BIN|TOYFLAG_NEEDROOT)) +USE_PARTPROBE(NEWTOY(partprobe, "<1", TOYFLAG_SBIN)) +USE_PASSWD(NEWTOY(passwd, ">1a:dlu", TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN)) +USE_PASTE(NEWTOY(paste, "d:s", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_PATCH(NEWTOY(patch, ">2(no-backup-if-mismatch)(dry-run)"USE_TOYBOX_DEBUG("x")"F#g#fulp#d:i:Rs(quiet)", TOYFLAG_USR|TOYFLAG_BIN)) +USE_PGREP(NEWTOY(pgrep, "?cld:u*U*t*s*P*g*G*fnovxL:[-no]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_PIDOF(NEWTOY(pidof, "<1so:x", TOYFLAG_BIN)) +USE_PING(NEWTOY(ping, "<1>1m#t#<0>255=64c#<0=3s#<0>4088=56i%W#<0=3w#<0qf46I:[-46]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_PING(OLDTOY(ping6, ping, TOYFLAG_USR|TOYFLAG_BIN)) +USE_PIVOT_ROOT(NEWTOY(pivot_root, "<2>2", TOYFLAG_SBIN)) +USE_PKILL(NEWTOY(pkill, "?Vu*U*t*s*P*g*G*fnovxl:[-no]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_PMAP(NEWTOY(pmap, "<1xq", TOYFLAG_USR|TOYFLAG_BIN)) +USE_REBOOT(OLDTOY(poweroff, reboot, TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_PRINTENV(NEWTOY(printenv, "0(null)", TOYFLAG_BIN)) +USE_PRINTF(NEWTOY(printf, "<1?^", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_MAYFORK)) +USE_ULIMIT(OLDTOY(prlimit, ulimit, TOYFLAG_USR|TOYFLAG_BIN)) +USE_PS(NEWTOY(ps, "k(sort)*P(ppid)*aAdeflMno*O*p(pid)*s*t*Tu*U*g*G*wZ[!ol][+Ae][!oO]", TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_PWD(NEWTOY(pwd, ">0LP[-LP]", TOYFLAG_BIN|TOYFLAG_MAYFORK)) +USE_PWDX(NEWTOY(pwdx, "<1a", TOYFLAG_USR|TOYFLAG_BIN)) +USE_READAHEAD(NEWTOY(readahead, NULL, TOYFLAG_BIN)) +USE_READELF(NEWTOY(readelf, "<1(dyn-syms)adhlnp:SsWx:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_READLINK(NEWTOY(readlink, "<1nqmef(canonicalize)[-mef]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_REALPATH(NEWTOY(realpath, "<1", TOYFLAG_USR|TOYFLAG_BIN)) +USE_REBOOT(NEWTOY(reboot, "fn", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_RENICE(NEWTOY(renice, "<1gpun#|", TOYFLAG_USR|TOYFLAG_BIN)) +USE_RESET(NEWTOY(reset, 0, TOYFLAG_USR|TOYFLAG_BIN)) +USE_RESTORECON(NEWTOY(restorecon, "<1DFnRrv", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_REV(NEWTOY(rev, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_RFKILL(NEWTOY(rfkill, "<1>2", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_RM(NEWTOY(rm, "fiRrv[-fi]", TOYFLAG_BIN)) +USE_RMDIR(NEWTOY(rmdir, "<1(ignore-fail-on-non-empty)p", TOYFLAG_BIN)) +USE_RMMOD(NEWTOY(rmmod, "<1wf", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_ROUTE(NEWTOY(route, "?neA:", TOYFLAG_BIN)) +USE_RUNCON(NEWTOY(runcon, "<2", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_SED(NEWTOY(sed, "(help)(version)e*f*i:;nErz(null-data)[+Er]", TOYFLAG_BIN|TOYFLAG_LOCALE|TOYFLAG_NOHELP)) +USE_SENDEVENT(NEWTOY(sendevent, "<4>4", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_SEQ(NEWTOY(seq, "<1>3?f:s:w[!fw]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SETENFORCE(NEWTOY(setenforce, "<1>1", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_SETFATTR(NEWTOY(setfattr, "hn:|v:x:|[!xv]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SETSID(NEWTOY(setsid, "^<1wcd[!dc]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SH(NEWTOY(sh, "(noediting)(noprofile)(norc)sc:i", TOYFLAG_BIN)) +USE_SHA1SUM(NEWTOY(sha1sum, "bc(check)s(status)[!bc]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TOYBOX_LIBCRYPTO(USE_SHA224SUM(OLDTOY(sha224sum, sha1sum, TOYFLAG_USR|TOYFLAG_BIN))) +USE_TOYBOX_LIBCRYPTO(USE_SHA256SUM(OLDTOY(sha256sum, sha1sum, TOYFLAG_USR|TOYFLAG_BIN))) +USE_TOYBOX_LIBCRYPTO(USE_SHA384SUM(OLDTOY(sha384sum, sha1sum, TOYFLAG_USR|TOYFLAG_BIN))) +USE_TOYBOX_LIBCRYPTO(USE_SHA512SUM(OLDTOY(sha512sum, sha1sum, TOYFLAG_USR|TOYFLAG_BIN))) +USE_SHRED(NEWTOY(shred, "<1zxus#<1n#<1o#<0f", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SKELETON(NEWTOY(skeleton, "(walrus)(blubber):;(also):e@d*c#b:a", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SKELETON_ALIAS(NEWTOY(skeleton_alias, "b#dq", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SLEEP(NEWTOY(sleep, "<1", TOYFLAG_BIN)) +USE_SNTP(NEWTOY(sntp, ">1M :m :Sp:t#<0=1>16asdDqr#<4>17=10[!as]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_SORT(NEWTOY(sort, USE_SORT_FLOAT("g")"S:T:m" "o:k*t:" "xVbMcszdfirun", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_SPLIT(NEWTOY(split, ">2a#<1=2>9b#<1l#<1[!bl]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_STAT(NEWTOY(stat, "<1c:(format)fLt", TOYFLAG_BIN)) +USE_STRINGS(NEWTOY(strings, "t:an#=4<1fo", TOYFLAG_USR|TOYFLAG_BIN)) +USE_STTY(NEWTOY(stty, "?aF:g[!ag]", TOYFLAG_BIN)) +USE_SU(NEWTOY(su, "^lmpu:g:c:s:[!lmp]", TOYFLAG_BIN|TOYFLAG_ROOTONLY)) +USE_SULOGIN(NEWTOY(sulogin, "t#<0=0", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_SWAPOFF(NEWTOY(swapoff, "<1>1", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_SWAPON(NEWTOY(swapon, "<1>1p#<0>32767d", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) +USE_SWITCH_ROOT(NEWTOY(switch_root, "<2c:h", TOYFLAG_SBIN)) +USE_SYNC(NEWTOY(sync, NULL, TOYFLAG_BIN)) +USE_SYSCTL(NEWTOY(sysctl, "^neNqwpaA[!ap][!aq][!aw][+aA]", TOYFLAG_SBIN)) +USE_SYSLOGD(NEWTOY(syslogd,">0l#<1>8=8R:b#<0>99=1s#<0=200m#<0>71582787=20O:p:f:a:nSKLD", TOYFLAG_SBIN|TOYFLAG_STAYROOT)) +USE_TAC(NEWTOY(tac, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_TAIL(NEWTOY(tail, "?fc-n-[-cn]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TAR(NEWTOY(tar, "&(restrict)(full-time)(no-recursion)(numeric-owner)(no-same-permissions)(overwrite)(exclude)*(mode):(mtime):(group):(owner):(to-command):o(no-same-owner)p(same-permissions)k(keep-old)c(create)|h(dereference)x(extract)|t(list)|v(verbose)J(xz)j(bzip2)z(gzip)S(sparse)O(to-stdout)m(touch)X(exclude-from)*T(files-from)*C(directory):f(file):a[!txc][!jzJa]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TASKSET(NEWTOY(taskset, "<1^pa", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_STAYROOT)) +USE_TCPSVD(NEWTOY(tcpsvd, "^<3c#=30<1C:b#=20<0u:l:hEv", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TEE(NEWTOY(tee, "ia", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TELNET(NEWTOY(telnet, "<1>2", TOYFLAG_BIN)) +USE_TELNETD(NEWTOY(telnetd, "w#<0b:p#<0>65535=23f:l:FSKi[!wi]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TEST(NEWTOY(test, 0, TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_NOHELP|TOYFLAG_MAYFORK)) +USE_TFTP(NEWTOY(tftp, "<1b#<8>65464r:l:g|p|[!gp]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TFTPD(NEWTOY(tftpd, "rcu:l", TOYFLAG_BIN)) +USE_TIME(NEWTOY(time, "<1^pv", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_MAYFORK)) +USE_TIMEOUT(NEWTOY(timeout, "<2^(foreground)(preserve-status)vk:s(signal):", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(125))) +USE_TOP(NEWTOY(top, ">0O*" "Hk*o*p*u*s#<1d%<100=3000m#n#<1bq[!oO]", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_TOUCH(NEWTOY(touch, "<1acd:fmr:t:h[!dtr]", TOYFLAG_BIN)) +USE_SH(OLDTOY(toysh, sh, TOYFLAG_BIN)) +USE_TR(NEWTOY(tr, "^>2<1Ccsd[+cC]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TRACEROUTE(NEWTOY(traceroute, "<1>2i:f#<1>255=1z#<0>86400=0g*w#<0>86400=5t#<0>255=0s:q#<1>255=3p#<1>65535=33434m#<1>255=30rvndlIUF64", TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN)) +USE_TRACEROUTE(OLDTOY(traceroute6,traceroute, TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN)) +USE_TRUE(NEWTOY(true, NULL, TOYFLAG_BIN|TOYFLAG_NOHELP|TOYFLAG_MAYFORK)) +USE_TRUNCATE(NEWTOY(truncate, "<1s:|c", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TTY(NEWTOY(tty, "s", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TUNCTL(NEWTOY(tunctl, "<1>1t|d|u:T[!td]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_TCPSVD(OLDTOY(udpsvd, tcpsvd, TOYFLAG_USR|TOYFLAG_BIN)) +USE_ULIMIT(NEWTOY(ulimit, ">1P#<1SHavutsrRqpnmlifedc[-SH][!apvutsrRqnmlifedc]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_UMOUNT(NEWTOY(umount, "cndDflrat*v[!na]", TOYFLAG_BIN|TOYFLAG_STAYROOT)) +USE_UNAME(NEWTOY(uname, "oamvrns[+os]", TOYFLAG_BIN)) +USE_UNIQ(NEWTOY(uniq, "f#s#w#zicdu", TOYFLAG_USR|TOYFLAG_BIN)) +USE_UNIX2DOS(NEWTOY(unix2dos, 0, TOYFLAG_BIN)) +USE_UNLINK(NEWTOY(unlink, "<1>1", TOYFLAG_USR|TOYFLAG_BIN)) +USE_UNSHARE(NEWTOY(unshare, "<1^f(fork);r(map-root-user);i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user);", TOYFLAG_USR|TOYFLAG_BIN)) +USE_UPTIME(NEWTOY(uptime, ">0ps", TOYFLAG_USR|TOYFLAG_BIN)) +USE_USERADD(NEWTOY(useradd, "<1>2u#<0G:s:g:h:SDH", TOYFLAG_NEEDROOT|TOYFLAG_UMASK|TOYFLAG_SBIN)) +USE_USERDEL(NEWTOY(userdel, "<1>1r", TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_USLEEP(NEWTOY(usleep, "<1", TOYFLAG_BIN)) +USE_UUDECODE(NEWTOY(uudecode, ">1o:", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_UMASK)) +USE_UUENCODE(NEWTOY(uuencode, "<1>2m", TOYFLAG_USR|TOYFLAG_BIN)) +USE_UUIDGEN(NEWTOY(uuidgen, ">0r(random)", TOYFLAG_USR|TOYFLAG_BIN)) +USE_VCONFIG(NEWTOY(vconfig, "<2>4", TOYFLAG_NEEDROOT|TOYFLAG_SBIN)) +USE_VI(NEWTOY(vi, ">1s:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_VMSTAT(NEWTOY(vmstat, ">2n", TOYFLAG_BIN)) +USE_W(NEWTOY(w, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_WATCH(NEWTOY(watch, "^<1n%<100=2000tebx", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_WC(NEWTOY(wc, "mcwl", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE)) +USE_WGET(NEWTOY(wget, "(no-check-certificate)O:", TOYFLAG_USR|TOYFLAG_BIN)) +USE_WHICH(NEWTOY(which, "<1a", TOYFLAG_USR|TOYFLAG_BIN)) +USE_WHO(NEWTOY(who, "a", TOYFLAG_USR|TOYFLAG_BIN)) +USE_WHOAMI(OLDTOY(whoami, logname, TOYFLAG_USR|TOYFLAG_BIN)) +USE_XARGS(NEWTOY(xargs, "^E:P#optrn#<1(max-args)s#0[!0E]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_XXD(NEWTOY(xxd, ">1c#l#o#g#<1=2iprs#[!rs]", TOYFLAG_USR|TOYFLAG_BIN)) +USE_XZCAT(NEWTOY(xzcat, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_YES(NEWTOY(yes, NULL, TOYFLAG_USR|TOYFLAG_BIN)) +USE_ZCAT(NEWTOY(zcat, "cdfk123456789[-123456789]", TOYFLAG_USR|TOYFLAG_BIN)) diff --git a/aosp/external/toybox/android/mac/generated/tags.h b/aosp/external/toybox/android/mac/generated/tags.h new file mode 100644 index 0000000000000000000000000000000000000000..e1e4d31485815cf3db91dcd3c8846cdd79e8816b --- /dev/null +++ b/aosp/external/toybox/android/mac/generated/tags.h @@ -0,0 +1,140 @@ +#define DD_conv_fsync 0 +#define _DD_conv_fsync (1<<0) +#define DD_conv_noerror 1 +#define _DD_conv_noerror (1<<1) +#define DD_conv_notrunc 2 +#define _DD_conv_notrunc (1<<2) +#define DD_conv_sync 3 +#define _DD_conv_sync (1<<3) +#define DD_iflag_count_bytes 0 +#define _DD_iflag_count_bytes (1<<0) +#define DD_iflag_skip_bytes 1 +#define _DD_iflag_skip_bytes (1<<1) +#define DD_oflag_seek_bytes 0 +#define _DD_oflag_seek_bytes (1<<0) +#define CP_mode 0 +#define _CP_mode (1<<0) +#define CP_ownership 1 +#define _CP_ownership (1<<1) +#define CP_timestamps 2 +#define _CP_timestamps (1<<2) +#define CP_context 3 +#define _CP_context (1<<3) +#define CP_xattr 4 +#define _CP_xattr (1<<4) +#define PS_PID 0 +#define _PS_PID (1<<0) +#define PS_PPID 1 +#define _PS_PPID (1<<1) +#define PS_PRI 2 +#define _PS_PRI (1<<2) +#define PS_NI 3 +#define _PS_NI (1<<3) +#define PS_ADDR 4 +#define _PS_ADDR (1<<4) +#define PS_SZ 5 +#define _PS_SZ (1<<5) +#define PS_RSS 6 +#define _PS_RSS (1<<6) +#define PS_PGID 7 +#define _PS_PGID (1<<7) +#define PS_VSZ 8 +#define _PS_VSZ (1<<8) +#define PS_MAJFL 9 +#define _PS_MAJFL (1<<9) +#define PS_MINFL 10 +#define _PS_MINFL (1<<10) +#define PS_PR 11 +#define _PS_PR (1<<11) +#define PS_PSR 12 +#define _PS_PSR (1<<12) +#define PS_RTPRIO 13 +#define _PS_RTPRIO (1<<13) +#define PS_SCH 14 +#define _PS_SCH (1<<14) +#define PS_CPU 15 +#define _PS_CPU (1<<15) +#define PS_TID 16 +#define _PS_TID (1<<16) +#define PS_TCNT 17 +#define _PS_TCNT (1<<17) +#define PS_BIT 18 +#define _PS_BIT (1<<18) +#define PS_TTY 19 +#define _PS_TTY (1<<19) +#define PS_WCHAN 20 +#define _PS_WCHAN (1<<20) +#define PS_LABEL 21 +#define _PS_LABEL (1<<21) +#define PS_COMM 22 +#define _PS_COMM (1<<22) +#define PS_NAME 23 +#define _PS_NAME (1<<23) +#define PS_COMMAND 24 +#define _PS_COMMAND (1<<24) +#define PS_CMDLINE 25 +#define _PS_CMDLINE (1<<25) +#define PS_ARGS 26 +#define _PS_ARGS (1<<26) +#define PS_CMD 27 +#define _PS_CMD (1<<27) +#define PS_UID 28 +#define _PS_UID (1<<28) +#define PS_USER 29 +#define _PS_USER (1<<29) +#define PS_RUID 30 +#define _PS_RUID (1<<30) +#define PS_RUSER 31 +#define _PS_RUSER (1<<31) +#define PS_GID 32 +#define _PS_GID (1LL<<32) +#define PS_GROUP 33 +#define _PS_GROUP (1LL<<33) +#define PS_RGID 34 +#define _PS_RGID (1LL<<34) +#define PS_RGROUP 35 +#define _PS_RGROUP (1LL<<35) +#define PS_TIME 36 +#define _PS_TIME (1LL<<36) +#define PS_ELAPSED 37 +#define _PS_ELAPSED (1LL<<37) +#define PS_TIME_ 38 +#define _PS_TIME_ (1LL<<38) +#define PS_C 39 +#define _PS_C (1LL<<39) +#define PS__VSZ 40 +#define _PS__VSZ (1LL<<40) +#define PS__MEM 41 +#define _PS__MEM (1LL<<41) +#define PS__CPU 42 +#define _PS__CPU (1LL<<42) +#define PS_VIRT 43 +#define _PS_VIRT (1LL<<43) +#define PS_RES 44 +#define _PS_RES (1LL<<44) +#define PS_SHR 45 +#define _PS_SHR (1LL<<45) +#define PS_READ 46 +#define _PS_READ (1LL<<46) +#define PS_WRITE 47 +#define _PS_WRITE (1LL<<47) +#define PS_IO 48 +#define _PS_IO (1LL<<48) +#define PS_DREAD 49 +#define _PS_DREAD (1LL<<49) +#define PS_DWRITE 50 +#define _PS_DWRITE (1LL<<50) +#define PS_SWAP 51 +#define _PS_SWAP (1LL<<51) +#define PS_DIO 52 +#define _PS_DIO (1LL<<52) +#define PS_STIME 53 +#define _PS_STIME (1LL<<53) +#define PS_F 54 +#define _PS_F (1LL<<54) +#define PS_S 55 +#define _PS_S (1LL<<55) +#define PS_STAT 56 +#define _PS_STAT (1LL<<56) +#define PS_PCY 57 +#define _PS_PCY (1LL<<57) diff --git a/aosp/external/toybox/configure b/aosp/external/toybox/configure new file mode 100644 index 0000000000000000000000000000000000000000..4735a7e9c18b6fa2e8db1d72d8f6823bb041aafa --- /dev/null +++ b/aosp/external/toybox/configure @@ -0,0 +1,43 @@ +#!/bin/bash + +# This sets environment variables used by scripts/make.sh + +# People run ./configure out of habit, so do "defconfig" for them. + +if [ "$(basename "$0")" == configure ] +then + echo "Assuming you want 'make defconfig', but you should probably check the README." + make defconfig + exit $? +fi + +# A synonym. +[ -z "$CROSS_COMPILE" ] && CROSS_COMPILE="$CROSS" + +# CFLAGS and OPTIMIZE are different so you can add extra CFLAGS without +# disabling default optimizations +[ -z "$CFLAGS" ] && CFLAGS="-Wall -Wundef -Wno-char-subscripts -Werror=implicit-function-declaration" +# Required for our expected ABI. we're 8-bit clean thus "char" must be unsigned. +CFLAGS="$CFLAGS -funsigned-char" +[ -z "$OPTIMIZE" ] && OPTIMIZE="-Os -ffunction-sections -fdata-sections -fno-asynchronous-unwind-tables -fno-strict-aliasing" +# set ASAN=1 to enable "address sanitizer" and debuggable backtraces +[ -z "$ASAN" ] || { CFLAGS="$CFLAGS -O1 -g -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize=address"; NOSTRIP=1; } + +# We accept LDFLAGS, but by default don't have anything in it +if [ "$(uname)" != "Darwin" ] +then + [ -z "$LDOPTIMIZE" ] && LDOPTIMIZE="-Wl,--gc-sections" + LDASNEEDED="-Wl,--as-needed" +fi + +# The makefile provides defaults for these, so this only gets used if +# you call scripts/make.sh and friends directly. + +[ -z "$CC" ] && CC=cc +[ -z "$STRIP" ] && STRIP=strip + +# If HOSTCC needs CFLAGS or LDFLAGS, just add them to the variable +# ala HOSTCC="blah-cc --static" +[ -z "$HOSTCC" ] && HOSTCC=cc + +[ -z "$GENERATED" ] && GENERATED=generated diff --git a/aosp/external/toybox/kconfig/Makefile b/aosp/external/toybox/kconfig/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..d57c9df8a90fa78d13956c9e583e7bca5c4a8b15 --- /dev/null +++ b/aosp/external/toybox/kconfig/Makefile @@ -0,0 +1,77 @@ +# =========================================================================== +# Kernel configuration targets +# These targets are used from top-level makefile + +KCONFIG_TOP = Config.in +KCONFIG_PROJECT = ToyBox +obj = ./kconfig +PHONY += clean help oldconfig menuconfig config silentoldconfig \ + randconfig allyesconfig allnoconfig allmodconfig defconfig + +menuconfig: $(obj)/mconf $(KCONFIG_TOP) + $< $(KCONFIG_TOP) + +config: $(obj)/conf $(KCONFIG_TOP) + $< $(KCONFIG_TOP) + +oldconfig: $(obj)/conf $(KCONFIG_TOP) + $< -o $(KCONFIG_TOP) + +silentoldconfig: $(obj)/conf $(KCONFIG_TOP) + yes '' | $< -o $(KCONFIG_TOP) > /dev/null + +randconfig: $(obj)/conf $(KCONFIG_TOP) + $< -r $(KCONFIG_TOP) > /dev/null + +allyesconfig: $(obj)/conf $(KCONFIG_TOP) + $< -y $(KCONFIG_TOP) > /dev/null + +allnoconfig: $(obj)/conf $(KCONFIG_TOP) + $< -n $(KCONFIG_TOP) > /dev/null + +defconfig: $(obj)/conf $(KCONFIG_TOP) + $< -D /dev/null $(KCONFIG_TOP) > /dev/null + +macos_defconfig: $(obj)/conf $(KCONFIG_TOP) + KCONFIG_ALLCONFIG=$(obj)/macos_miniconfig $< -n $(KCONFIG_TOP) > /dev/null + +bsd_defconfig: $(obj)/conf $(KCONFIG_TOP) + KCONFIG_ALLCONFIG=$(obj)/freebsd_miniconfig $< -n $(KCONFIG_TOP) > /dev/null + +# Help text used by make help +help:: + @echo ' config - Update current config utilising a line-oriented program' + @echo ' menuconfig - Update current config utilising a menu based program' + @echo ' oldconfig - Update current config utilising a provided .config as base' + @echo ' silentoldconfig - Same as oldconfig, but quietly' + @echo ' randconfig - New config with random answer to all options' + @echo ' defconfig - New config with default answer to all options' + @echo ' This is the maximum sane configuration.' + @echo ' allyesconfig - New config where all options are accepted with yes' + @echo " This may not actually compile, it's a starting point" + @echo ' for further configuration (probably with menuconfig)' + @echo ' allnoconfig - New config where all options are answered with no' + @echo ' (NOP binary, starting point for further configuration)' + @echo ' macos_defconfig - Select commands known to build on macosx' + @echo ' bsd_defconfig - Select commands known to build on freebsd' + +# Cheesy build + +SHIPPED = kconfig/zconf.tab.c kconfig/lex.zconf.c kconfig/zconf.hash.c + +%.c: %.c_shipped + @ln -s $(notdir $<) $@ + +gen_config.h: .config + +kconfig/mconf: $(SHIPPED) + $(HOSTCC) -o $@ kconfig/mconf.c kconfig/zconf.tab.c \ + kconfig/lxdialog/*.c -lcurses -DCURSES_LOC="" \ + -DKBUILD_NO_NLS=1 -DPROJECT_NAME=\"$(KCONFIG_PROJECT)\" + +kconfig/conf: $(SHIPPED) + $(HOSTCC) -o $@ kconfig/conf.c kconfig/zconf.tab.c -DKBUILD_NO_NLS=1 \ + -DPROJECT_NAME=\"$(KCONFIG_PROJECT)\" + +clean:: + @rm -f $(wildcard kconfig/*zconf*.c) kconfig/conf kconfig/mconf diff --git a/aosp/external/toybox/kconfig/README b/aosp/external/toybox/kconfig/README new file mode 100644 index 0000000000000000000000000000000000000000..4a27eb7bad47090930bd179bc7fd51918061ea1c --- /dev/null +++ b/aosp/external/toybox/kconfig/README @@ -0,0 +1,29 @@ +This is a snapshot of linux 2.6.12 kconfig as washed through busybox and +further modified by Rob Landley. + +Note: The build infrastructure in this directory is still GPLv2. Cleaning +that out is a TODO item, but it doesn't affect the resulting binary. + +Way back when I tried to push my local changes to kconfig upstream +in 2005 https://lwn.net/Articles/161086/ +and 2006 http://lkml.iu.edu/hypermail/linux/kernel/0607.0/1805.html +and 2007 http://lkml.iu.edu/hypermail/linux/kernel/0707.1/1741.html +each of which spawned long "I think you should go do this and this and this +but I'm not going to lift a finger personally" threads from the kernel +developers. Twice I came back a year later to see if there was any interest +in what I _had_ done, and the third thread was the longest of the lot but +no code was merged as a result. + +*shrug* That's the linux-kernel community for you. I had an easier time +than the author of squashfs, who spent 5 years actively trying to get his code +merged, finally quitting his job to spend an unpaid year working on upstreaming +squashfs _after_ after every major Linux distro had been locally carrying it +for years. No really, here's where he wrote about it himself: + +https://lwn.net/Articles/563578/ + +This code is _going_away_. Rewriting it is low priority, but removing it is a +checklist item for the 1.0 toybox release. This directory contains the only +GPL code left in the tree, and none of its code winds up in the resulting +binary. It's just an editor that reads our Config.in files to update the top +level .config file; you can edit they by hand if you really want to. diff --git a/aosp/external/toybox/kconfig/conf.c b/aosp/external/toybox/kconfig/conf.c new file mode 100644 index 0000000000000000000000000000000000000000..72940e18250d7ae9135f3239ffcae7be80b52749 --- /dev/null +++ b/aosp/external/toybox/kconfig/conf.c @@ -0,0 +1,624 @@ +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include +#include +#include +#include +#include +#include + +#define LKC_DIRECT_LINK +#include "lkc.h" + +static void conf(struct menu *menu); +static void check_conf(struct menu *menu); + +enum { + ask_all, + ask_new, + ask_silent, + set_default, + set_yes, + set_mod, + set_no, + set_random +} input_mode = ask_all; +char *defconfig_file; + +static int indent = 1; +static int valid_stdin = 1; +static int conf_cnt; +static char line[128]; +static struct menu *rootEntry; + +static char nohelp_text[] = N_("Sorry, no help available for this option yet.\n"); + +static void strip(char *str) +{ + char *p = str; + int l; + + while ((isspace(*p))) + p++; + l = strlen(p); + if (p != str) + memmove(str, p, l + 1); + if (!l) + return; + p = str + l - 1; + while ((isspace(*p))) + *p-- = 0; +} + +static void check_stdin(void) +{ + if (!valid_stdin && input_mode == ask_silent) { + printf(_("aborted!\n\n")); + printf(_("Console input/output is redirected. ")); + printf(_("Run 'make oldconfig' to update configuration.\n\n")); + exit(1); + } +} + +static void conf_askvalue(struct symbol *sym, const char *def) +{ + enum symbol_type type = sym_get_type(sym); + tristate val; + + if (!sym_has_value(sym)) + printf("(NEW) "); + + line[0] = '\n'; + line[1] = 0; + + if (!sym_is_changable(sym)) { + printf("%s\n", def); + line[0] = '\n'; + line[1] = 0; + return; + } + + switch (input_mode) { + case set_no: + case set_mod: + case set_yes: + case set_random: + if (sym_has_value(sym)) { + printf("%s\n", def); + return; + } + break; + case ask_new: + case ask_silent: + if (sym_has_value(sym)) { + printf("%s\n", def); + return; + } + check_stdin(); + case ask_all: + fflush(stdout); + fgets(line, 128, stdin); + return; + case set_default: + printf("%s\n", def); + return; + default: + break; + } + + switch (type) { + case S_INT: + case S_HEX: + case S_STRING: + printf("%s\n", def); + return; + default: + ; + } + switch (input_mode) { + case set_yes: + if (sym_tristate_within_range(sym, yes)) { + line[0] = 'y'; + line[1] = '\n'; + line[2] = 0; + break; + } + case set_mod: + if (type == S_TRISTATE) { + if (sym_tristate_within_range(sym, mod)) { + line[0] = 'm'; + line[1] = '\n'; + line[2] = 0; + break; + } + } else { + if (sym_tristate_within_range(sym, yes)) { + line[0] = 'y'; + line[1] = '\n'; + line[2] = 0; + break; + } + } + case set_no: + if (sym_tristate_within_range(sym, no)) { + line[0] = 'n'; + line[1] = '\n'; + line[2] = 0; + break; + } + case set_random: + do { + val = (tristate)(random() % 3); + } while (!sym_tristate_within_range(sym, val)); + switch (val) { + case no: line[0] = 'n'; break; + case mod: line[0] = 'm'; break; + case yes: line[0] = 'y'; break; + } + line[1] = '\n'; + line[2] = 0; + break; + default: + break; + } + printf("%s", line); +} + +int conf_string(struct menu *menu) +{ + struct symbol *sym = menu->sym; + const char *def, *help; + + while (1) { + printf("%*s%s ", indent - 1, "", menu->prompt->text); + printf("(%s) ", sym->name); + def = sym_get_string_value(sym); + if (sym_get_string_value(sym)) + printf("[%s] ", def); + conf_askvalue(sym, def); + switch (line[0]) { + case '\n': + break; + case '?': + /* print help */ + if (line[1] == '\n') { + help = nohelp_text; + if (menu->sym->help) + help = menu->sym->help; + printf("\n%s\n", menu->sym->help); + def = NULL; + break; + } + default: + line[strlen(line)-1] = 0; + def = line; + } + if (def && sym_set_string_value(sym, def)) + return 0; + } +} + +static int conf_sym(struct menu *menu) +{ + struct symbol *sym = menu->sym; + int type; + tristate oldval, newval; + const char *help; + + while (1) { + printf("%*s%s ", indent - 1, "", menu->prompt->text); + if (sym->name) + printf("(%s) ", sym->name); + type = sym_get_type(sym); + putchar('['); + oldval = sym_get_tristate_value(sym); + switch (oldval) { + case no: + putchar('N'); + break; + case mod: + putchar('M'); + break; + case yes: + putchar('Y'); + break; + } + if (oldval != no && sym_tristate_within_range(sym, no)) + printf("/n"); + if (oldval != mod && sym_tristate_within_range(sym, mod)) + printf("/m"); + if (oldval != yes && sym_tristate_within_range(sym, yes)) + printf("/y"); + if (sym->help) + printf("/?"); + printf("] "); + conf_askvalue(sym, sym_get_string_value(sym)); + strip(line); + + switch (line[0]) { + case 'n': + case 'N': + newval = no; + if (!line[1] || !strcmp(&line[1], "o")) + break; + continue; + case 'm': + case 'M': + newval = mod; + if (!line[1]) + break; + continue; + case 'y': + case 'Y': + newval = yes; + if (!line[1] || !strcmp(&line[1], "es")) + break; + continue; + case 0: + newval = oldval; + break; + case '?': + goto help; + default: + continue; + } + if (sym_set_tristate_value(sym, newval)) + return 0; +help: + help = nohelp_text; + if (sym->help) + help = sym->help; + printf("\n%s\n", help); + } +} + +static int conf_choice(struct menu *menu) +{ + struct symbol *sym, *def_sym; + struct menu *child; + int type; + bool is_new; + + sym = menu->sym; + type = sym_get_type(sym); + is_new = !sym_has_value(sym); + if (sym_is_changable(sym)) { + conf_sym(menu); + sym_calc_value(sym); + switch (sym_get_tristate_value(sym)) { + case no: + return 1; + case mod: + return 0; + case yes: + break; + } + } else { + switch (sym_get_tristate_value(sym)) { + case no: + return 1; + case mod: + printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu)); + return 0; + case yes: + break; + } + } + + while (1) { + int cnt, def; + + printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu)); + def_sym = sym_get_choice_value(sym); + cnt = def = 0; + line[0] = 0; + for (child = menu->list; child; child = child->next) { + if (!menu_is_visible(child)) + continue; + if (!child->sym) { + printf("%*c %s\n", indent, '*', menu_get_prompt(child)); + continue; + } + cnt++; + if (child->sym == def_sym) { + def = cnt; + printf("%*c", indent, '>'); + } else + printf("%*c", indent, ' '); + printf(" %d. %s", cnt, menu_get_prompt(child)); + if (child->sym->name) + printf(" (%s)", child->sym->name); + if (!sym_has_value(child->sym)) + printf(" (NEW)"); + printf("\n"); + } + printf("%*schoice", indent - 1, ""); + if (cnt == 1) { + printf("[1]: 1\n"); + goto conf_childs; + } + printf("[1-%d", cnt); + if (sym->help) + printf("?"); + printf("]: "); + switch (input_mode) { + case ask_new: + case ask_silent: + if (!is_new) { + cnt = def; + printf("%d\n", cnt); + break; + } + check_stdin(); + case ask_all: + fflush(stdout); + fgets(line, 128, stdin); + strip(line); + if (line[0] == '?') { + printf("\n%s\n", menu->sym->help ? + menu->sym->help : nohelp_text); + continue; + } + if (!line[0]) + cnt = def; + else if (isdigit(line[0])) + cnt = atoi(line); + else + continue; + break; + case set_random: + def = (random() % cnt) + 1; + case set_default: + case set_yes: + case set_mod: + case set_no: + cnt = def; + printf("%d\n", cnt); + break; + } + + conf_childs: + for (child = menu->list; child; child = child->next) { + if (!child->sym || !menu_is_visible(child)) + continue; + if (!--cnt) + break; + } + if (!child) + continue; + if (line[strlen(line) - 1] == '?') { + printf("\n%s\n", child->sym->help ? + child->sym->help : nohelp_text); + continue; + } + sym_set_choice_value(sym, child->sym); + if (child->list) { + indent += 2; + conf(child->list); + indent -= 2; + } + return 1; + } +} + +static void conf(struct menu *menu) +{ + struct symbol *sym; + struct property *prop; + struct menu *child; + + if (!menu_is_visible(menu)) + return; + + sym = menu->sym; + prop = menu->prompt; + if (prop) { + const char *prompt; + + switch (prop->type) { + case P_MENU: + if (input_mode == ask_silent && rootEntry != menu) { + check_conf(menu); + return; + } + case P_COMMENT: + prompt = menu_get_prompt(menu); + if (prompt) + printf("%*c\n%*c %s\n%*c\n", + indent, '*', + indent, '*', prompt, + indent, '*'); + default: + ; + } + } + + if (!sym) + goto conf_childs; + + if (sym_is_choice(sym)) { + conf_choice(menu); + if (sym->curr.tri != mod) + return; + goto conf_childs; + } + + switch (sym->type) { + case S_INT: + case S_HEX: + case S_STRING: + conf_string(menu); + break; + default: + conf_sym(menu); + break; + } + +conf_childs: + if (sym) + indent += 2; + for (child = menu->list; child; child = child->next) + conf(child); + if (sym) + indent -= 2; +} + +static void check_conf(struct menu *menu) +{ + struct symbol *sym; + struct menu *child; + + if (!menu_is_visible(menu)) + return; + + sym = menu->sym; + if (sym && !sym_has_value(sym)) { + if (sym_is_changable(sym) || + (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) { + if (!conf_cnt++) + printf(_("*\n* Restart config...\n*\n")); + rootEntry = menu_get_parent_menu(menu); + conf(rootEntry); + } + } + + for (child = menu->list; child; child = child->next) + check_conf(child); +} + +int main(int ac, char **av) +{ + int i = 1; + const char *name; + struct stat tmpstat; + + if (ac > i && av[i][0] == '-') { + switch (av[i++][1]) { + case 'o': + input_mode = ask_new; + break; + case 's': + input_mode = ask_silent; + valid_stdin = isatty(0) && isatty(1) && isatty(2); + break; + case 'd': + input_mode = set_default; + break; + case 'D': + input_mode = set_default; + defconfig_file = av[i++]; + if (!defconfig_file) { + printf(_("%s: No default config file specified\n"), + av[0]); + exit(1); + } + break; + case 'n': + input_mode = set_no; + break; + case 'm': + input_mode = set_mod; + break; + case 'y': + input_mode = set_yes; + break; + case 'r': + input_mode = set_random; + srandom(time(NULL)); + break; + case 'h': + case '?': + fprintf(stderr, "See README for usage info\n"); + exit(0); + } + } + name = av[i]; + if (!name) { + printf(_("%s: Kconfig file missing\n"), av[0]); + exit(1); + } + conf_parse(name); + //zconfdump(stdout); + switch (input_mode) { + case set_default: + if (!defconfig_file) + defconfig_file = conf_get_default_confname(); + if (conf_read(defconfig_file)) { + printf("***\n" + "*** Can't find default configuration \"%s\"!\n" + "***\n", defconfig_file); + exit(1); + } + break; + case ask_silent: + if (stat(".config", &tmpstat)) { + printf(_("***\n" + "*** You have not yet configured your "PROJECT_NAME"!\n" + "***\n" + "*** Please run some configurator (e.g. \"make oldconfig\" or\n" + "*** \"make menuconfig\" or \"make xconfig\").\n" + "***\n")); + exit(1); + } + case ask_all: + case ask_new: + conf_read(NULL); + break; + case set_no: + case set_mod: + case set_yes: + case set_random: + name = getenv("KCONFIG_ALLCONFIG"); + if (name && !stat(name, &tmpstat)) { + conf_read_simple(name, S_DEF_USER); + break; + } + switch (input_mode) { + case set_no: name = "allno.config"; break; + case set_mod: name = "allmod.config"; break; + case set_yes: name = "allyes.config"; break; + case set_random: name = "allrandom.config"; break; + default: break; + } + if (!stat(name, &tmpstat)) + conf_read_simple(name, S_DEF_USER); + else if (!stat("all.config", &tmpstat)) + conf_read_simple("all.config", S_DEF_USER); + break; + default: + break; + } + + if (input_mode != ask_silent) { + rootEntry = &rootmenu; + conf(&rootmenu); + if (input_mode == ask_all) { + input_mode = ask_silent; + valid_stdin = 1; + } + } else if (sym_change_count) { + name = getenv("KCONFIG_NOSILENTUPDATE"); + if (name && *name) { + fprintf(stderr, _("\n*** "PROJECT_NAME" configuration requires explicit update.\n\n")); + return 1; + } + } else + goto skip_check; + + do { + conf_cnt = 0; + check_conf(&rootmenu); + } while (conf_cnt); + + if (!conf_write(NULL)) { +skip_check: + if (!(input_mode == ask_silent && conf_write_autoconf())) + return 0; + } + fprintf(stderr, _("\n*** Error writing "PROJECT_NAME" configuration.\n\n")); + return 1; +} diff --git a/aosp/external/toybox/kconfig/confdata.c b/aosp/external/toybox/kconfig/confdata.c new file mode 100644 index 0000000000000000000000000000000000000000..91c1ed5fe7f83efbd28cd81d3e805000248eee00 --- /dev/null +++ b/aosp/external/toybox/kconfig/confdata.c @@ -0,0 +1,806 @@ +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define LKC_DIRECT_LINK +#include "lkc.h" + +static void conf_warning(const char *fmt, ...) + __attribute__ ((format (printf, 1, 2))); + +static const char *conf_filename; +static int conf_lineno, conf_warnings, conf_unsaved; + +#ifndef conf_defname +const char conf_defname[] = "arch/$ARCH/defconfig"; +#endif + +#ifndef CONFIG_PREFIX +#define CONFIG_PREFIX "CONFIG_" +#endif + +static void conf_warning(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + fprintf(stderr, "%s:%d:warning: ", conf_filename, conf_lineno); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); + conf_warnings++; +} + +const char *conf_get_configname(void) +{ + char *name = getenv("KCONFIG_CONFIG"); + + return name ? name : ".config"; +} + +static char *conf_expand_value(const char *in) +{ + struct symbol *sym; + const char *src; + static char res_value[SYMBOL_MAXLENGTH]; + char *dst, name[SYMBOL_MAXLENGTH]; + + res_value[0] = 0; + dst = name; + while ((src = strchr(in, '$'))) { + strncat(res_value, in, src - in); + src++; + dst = name; + while (isalnum(*src) || *src == '_') + *dst++ = *src++; + *dst = 0; + sym = sym_lookup(name, 0); + sym_calc_value(sym); + strcat(res_value, sym_get_string_value(sym)); + in = src; + } + strcat(res_value, in); + + return res_value; +} + +char *conf_get_default_confname(void) +{ + struct stat buf; + static char fullname[PATH_MAX+1]; + char *env, *name; + + name = conf_expand_value(conf_defname); + env = getenv(SRCTREE); + if (env) { + sprintf(fullname, "%s/%s", env, name); + if (!stat(fullname, &buf)) + return fullname; + } + return name; +} + +int conf_read_simple(const char *name, int def) +{ + FILE *in = NULL; + char line[1024]; + char *p, *p2; + struct symbol *sym; + int i, def_flags; + + if (name) { + in = zconf_fopen(name); + } else { + struct property *prop; + + name = conf_get_configname(); + in = zconf_fopen(name); + if (in) + goto load; + sym_change_count++; + if (!sym_defconfig_list) + return 1; + + for_all_defaults(sym_defconfig_list, prop) { + if (expr_calc_value(prop->visible.expr) == no || + prop->expr->type != E_SYMBOL) + continue; + name = conf_expand_value(prop->expr->left.sym->name); + in = zconf_fopen(name); + if (in) { + printf(_("#\n" + "# using defaults found in %s\n" + "#\n"), name); + goto load; + } + } + } + if (!in) + return 1; + +load: + conf_filename = name; + conf_lineno = 0; + conf_warnings = 0; + conf_unsaved = 0; + + def_flags = SYMBOL_DEF << def; + for_all_symbols(i, sym) { + sym->flags |= SYMBOL_CHANGED; + sym->flags &= ~(def_flags|SYMBOL_VALID); + if (sym_is_choice(sym)) + sym->flags |= def_flags; + switch (sym->type) { + case S_INT: + case S_HEX: + case S_STRING: + if (sym->def[def].val) + free(sym->def[def].val); + default: + sym->def[def].val = NULL; + sym->def[def].tri = no; + } + } + + while (fgets(line, sizeof(line), in)) { + conf_lineno++; + sym = NULL; + switch (line[0]) { + case '#': + if (line[1]!=' ' || memcmp(line + 2, CONFIG_PREFIX, + strlen(CONFIG_PREFIX))) { + continue; + } + p = strchr(line + 2 + strlen(CONFIG_PREFIX), ' '); + if (!p) + continue; + *p++ = 0; + if (strncmp(p, "is not set", 10)) + continue; + if (def == S_DEF_USER) { + sym = sym_find(line + 2 + strlen(CONFIG_PREFIX)); + if (!sym) { + conf_warning("trying to assign nonexistent symbol %s", line + 2 + strlen(CONFIG_PREFIX)); + break; + } + } else { + sym = sym_lookup(line + 9, 0); + if (sym->type == S_UNKNOWN) + sym->type = S_BOOLEAN; + } + if (sym->flags & def_flags) { + conf_warning("trying to reassign symbol %s", sym->name); + break; + } + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + sym->def[def].tri = no; + sym->flags |= def_flags; + break; + default: + ; + } + break; + case 'A' ... 'Z': + if (memcmp(line, CONFIG_PREFIX, strlen(CONFIG_PREFIX))) { + conf_warning("unexpected data"); + continue; + } + p = strchr(line + strlen(CONFIG_PREFIX), '='); + if (!p) + continue; + *p++ = 0; + p2 = strchr(p, '\n'); + if (p2) { + *p2-- = 0; + if (*p2 == '\r') + *p2 = 0; + } + if (def == S_DEF_USER) { + sym = sym_find(line + strlen(CONFIG_PREFIX)); + if (!sym) { + conf_warning("trying to assign nonexistent symbol %s", line + 7); + break; + } + } else { + sym = sym_lookup(line + strlen(CONFIG_PREFIX), 0); + if (sym->type == S_UNKNOWN) + sym->type = S_OTHER; + } + if (sym->flags & def_flags) { + conf_warning("trying to reassign symbol %s", sym->name); + break; + } + switch (sym->type) { + case S_TRISTATE: + if (p[0] == 'm') { + sym->def[def].tri = mod; + sym->flags |= def_flags; + break; + } + case S_BOOLEAN: + if (p[0] == 'y') { + sym->def[def].tri = yes; + sym->flags |= def_flags; + break; + } + if (p[0] == 'n') { + sym->def[def].tri = no; + sym->flags |= def_flags; + break; + } + conf_warning("symbol value '%s' invalid for %s", p, sym->name); + break; + case S_OTHER: + if (*p != '"') { + for (p2 = p; *p2 && !isspace(*p2); p2++) + ; + sym->type = S_STRING; + goto done; + } + case S_STRING: + if (*p++ != '"') + break; + for (p2 = p; (p2 = strpbrk(p2, "\"\\")); p2++) { + if (*p2 == '"') { + *p2 = 0; + break; + } + memmove(p2, p2 + 1, strlen(p2)); + } + if (!p2) { + conf_warning("invalid string found"); + continue; + } + case S_INT: + case S_HEX: + done: + if (sym_string_valid(sym, p)) { + sym->def[def].val = strdup(p); + sym->flags |= def_flags; + } else { + conf_warning("symbol value '%s' invalid for %s", p, sym->name); + continue; + } + break; + default: + ; + } + break; + case '\r': + case '\n': + break; + default: + conf_warning("unexpected data"); + continue; + } + if (sym && sym_is_choice_value(sym)) { + struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym)); + switch (sym->def[def].tri) { + case no: + break; + case mod: + if (cs->def[def].tri == yes) { + conf_warning("%s creates inconsistent choice state", sym->name); + cs->flags &= ~def_flags; + } + break; + case yes: + if (cs->def[def].tri != no) { + conf_warning("%s creates inconsistent choice state", sym->name); + cs->flags &= ~def_flags; + } else + cs->def[def].val = sym; + break; + } + cs->def[def].tri = E_OR(cs->def[def].tri, sym->def[def].tri); + } + } + fclose(in); + + if (modules_sym) + sym_calc_value(modules_sym); + return 0; +} + +int conf_read(const char *name) +{ + struct symbol *sym; + struct property *prop; + struct expr *e; + int i, flags; + + sym_change_count = 0; + + if (conf_read_simple(name, S_DEF_USER)) + return 1; + + for_all_symbols(i, sym) { + sym_calc_value(sym); + if (sym_is_choice(sym) || (sym->flags & SYMBOL_AUTO)) + goto sym_ok; + if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) { + /* check that calculated value agrees with saved value */ + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + if (sym->def[S_DEF_USER].tri != sym_get_tristate_value(sym)) + break; + if (!sym_is_choice(sym)) + goto sym_ok; + default: + if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val)) + goto sym_ok; + break; + } + } else if (!sym_has_value(sym) && !(sym->flags & SYMBOL_WRITE)) + /* no previous value and not saved */ + goto sym_ok; + conf_unsaved++; + /* maybe print value in verbose mode... */ + sym_ok: + if (sym_has_value(sym) && !sym_is_choice_value(sym)) { + if (sym->visible == no) + sym->flags &= ~SYMBOL_DEF_USER; + switch (sym->type) { + case S_STRING: + case S_INT: + case S_HEX: + if (!sym_string_within_range(sym, sym->def[S_DEF_USER].val)) + sym->flags &= ~(SYMBOL_VALID|SYMBOL_DEF_USER); + default: + break; + } + } + if (!sym_is_choice(sym)) + continue; + prop = sym_get_choice_prop(sym); + flags = sym->flags; + for (e = prop->expr; e; e = e->left.expr) + if (e->right.sym->visible != no) + flags &= e->right.sym->flags; + sym->flags &= flags | ~SYMBOL_DEF_USER; + } + + sym_change_count += conf_warnings || conf_unsaved; + + return 0; +} + +struct menu *next_menu(struct menu *menu) +{ + if (menu->list) return menu->list; + do { + if (menu->next) { + menu = menu->next; + break; + } + } while ((menu = menu->parent)); + + return menu; +} + +#define SYMBOL_FORCEWRITE (1<<31) + +int conf_write(const char *name) +{ + FILE *out; + struct symbol *sym; + struct menu *menu; + const char *basename; + char dirname[128], tmpname[128], newname[128]; + int type, l, writetype; + const char *str; + time_t now; + int use_timestamp = 1; + char *env; + + dirname[0] = 0; + if (name && name[0]) { + struct stat st; + char *slash; + + if (!stat(name, &st) && S_ISDIR(st.st_mode)) { + strcpy(dirname, name); + strcat(dirname, "/"); + basename = conf_get_configname(); + } else if ((slash = strrchr(name, '/'))) { + int size = slash - name + 1; + memcpy(dirname, name, size); + dirname[size] = 0; + if (slash[1]) + basename = slash + 1; + else + basename = conf_get_configname(); + } else + basename = name; + } else + basename = conf_get_configname(); + + sprintf(newname, "%s%s", dirname, basename); + env = getenv("KCONFIG_OVERWRITECONFIG"); + if (!env || !*env) { + sprintf(tmpname, "%s.tmpconfig.%d", dirname, (int)getpid()); + out = fopen(tmpname, "w"); + } else { + *tmpname = 0; + out = fopen(newname, "w"); + } + if (!out) + return 1; + + sym = sym_lookup("KCONFIG_VERSION", 0); + sym_calc_value(sym); + time(&now); + env = getenv("KCONFIG_NOTIMESTAMP"); + if (env && *env) + use_timestamp = 0; + + fprintf(out, _("#\n" + "# Automatically generated make config: don't edit\n" + "# "PROJECT_NAME" version: %s\n" + "%s%s" + "#\n"), + sym_get_string_value(sym), + use_timestamp ? "# " : "", + use_timestamp ? ctime(&now) : ""); + + if (!sym_change_count) + sym_clear_all_valid(); + + // Write out all symbols (even in closed sub-menus). + if (1) { + for (menu = rootmenu.list; menu; menu = next_menu(menu)) + if (menu->sym) menu->sym->flags |= SYMBOL_FORCEWRITE; + writetype = SYMBOL_FORCEWRITE; + + // Don't write out symbols in closed menus. + + } else writetype = SYMBOL_WRITE; + + + menu = rootmenu.list; + while (menu) { + sym = menu->sym; + if (!sym) { + if (!menu_is_visible(menu)) + goto next; + str = menu_get_prompt(menu); + fprintf(out, "\n" + "#\n" + "# %s\n" + "#\n", str); + } else if (!(sym->flags & SYMBOL_CHOICE)) { + sym_calc_value(sym); + if (!(sym->flags & writetype)) + goto next; + sym->flags &= ~writetype; + type = sym->type; + if (type == S_TRISTATE) { + sym_calc_value(modules_sym); + if (modules_sym->curr.tri == no) + type = S_BOOLEAN; + } + switch (type) { + case S_BOOLEAN: + case S_TRISTATE: + switch (sym_get_tristate_value(sym)) { + case no: + fprintf(out, "# "CONFIG_PREFIX"%s is not set\n", sym->name); + break; + case mod: + fprintf(out, CONFIG_PREFIX"%s=m\n", sym->name); + break; + case yes: + fprintf(out, CONFIG_PREFIX"%s=y\n", sym->name); + break; + } + break; + case S_STRING: + str = sym_get_string_value(sym); + fprintf(out, CONFIG_PREFIX"%s=\"", sym->name); + while (1) { + l = strcspn(str, "\"\\"); + if (l) { + fwrite(str, l, 1, out); + str += l; + } + if (!*str) + break; + fprintf(out, "\\%c", *str++); + } + fputs("\"\n", out); + break; + case S_HEX: + str = sym_get_string_value(sym); + if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) { + fprintf(out, CONFIG_PREFIX"%s=%s\n", sym->name, *str ? str : "0"); + break; + } + case S_INT: + str = sym_get_string_value(sym); + fprintf(out, CONFIG_PREFIX"%s=%s\n", sym->name, *str ? str : "0"); + break; + } + } + + next: + if (writetype == SYMBOL_WRITE) { + if (menu->list) { + menu = menu->list; + continue; + } + if (menu->next) + menu = menu->next; + else while ((menu = menu->parent)) { + if (menu->next) { + menu = menu->next; + break; + } + } + } else + menu = next_menu(menu); + } + fclose(out); + + if (*tmpname) { + strcat(dirname, basename); + strcat(dirname, ".old"); + rename(newname, dirname); + if (rename(tmpname, newname)) + return 1; + } + + printf(_("#\n" + "# configuration written to %s\n" + "#\n"), newname); + + sym_change_count = 0; + + return 0; +} + +int conf_split_config(void) +{ + char *name, path[128]; + char *s, *d, c; + struct symbol *sym; + struct stat sb; + int res, i, fd; + + name = getenv("KCONFIG_AUTOCONFIG"); + if (!name) + name = "include/config/auto.conf"; + conf_read_simple(name, S_DEF_AUTO); + + if (chdir("include/config")) + return 1; + + res = 0; + for_all_symbols(i, sym) { + sym_calc_value(sym); + if ((sym->flags & SYMBOL_AUTO) || !sym->name) + continue; + if (sym->flags & SYMBOL_WRITE) { + if (sym->flags & SYMBOL_DEF_AUTO) { + /* + * symbol has old and new value, + * so compare them... + */ + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + if (sym_get_tristate_value(sym) == + sym->def[S_DEF_AUTO].tri) + continue; + break; + case S_STRING: + case S_HEX: + case S_INT: + if (!strcmp(sym_get_string_value(sym), + sym->def[S_DEF_AUTO].val)) + continue; + break; + default: + break; + } + } else { + /* + * If there is no old value, only 'no' (unset) + * is allowed as new value. + */ + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + if (sym_get_tristate_value(sym) == no) + continue; + break; + default: + break; + } + } + } else if (!(sym->flags & SYMBOL_DEF_AUTO)) + /* There is neither an old nor a new value. */ + continue; + /* else + * There is an old value, but no new value ('no' (unset) + * isn't saved in auto.conf, so the old value is always + * different from 'no'). + */ + + /* Replace all '_' and append ".h" */ + s = sym->name; + d = path; + while ((c = *s++)) { + c = tolower(c); + *d++ = (c == '_') ? '/' : c; + } + strcpy(d, ".h"); + + /* Assume directory path already exists. */ + fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd == -1) { + if (errno != ENOENT) { + res = 1; + break; + } + /* + * Create directory components, + * unless they exist already. + */ + d = path; + while ((d = strchr(d, '/'))) { + *d = 0; + if (stat(path, &sb) && mkdir(path, 0755)) { + res = 1; + goto out; + } + *d++ = '/'; + } + /* Try it again. */ + fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd == -1) { + res = 1; + break; + } + } + close(fd); + } +out: + if (chdir("../..")) + return 1; + + return res; +} + +int conf_write_autoconf(void) +{ + struct symbol *sym; + const char *str; + char *name; + FILE *out, *out_h; + time_t now; + int i, l; + + sym_clear_all_valid(); + + file_write_dep("include/config/auto.conf.cmd"); + + if (conf_split_config()) + return 1; + + out = fopen(".tmpconfig", "w"); + if (!out) + return 1; + + out_h = fopen(".tmpconfig.h", "w"); + if (!out_h) { + fclose(out); + return 1; + } + + sym = sym_lookup("KCONFIG_VERSION", 0); + sym_calc_value(sym); + time(&now); + fprintf(out, "#\n" + "# Automatically generated make config: don't edit\n" + "# "PROJECT_NAME" version: %s\n" + "# %s" + "#\n", + sym_get_string_value(sym), ctime(&now)); + fprintf(out_h, "/*\n" + " * Automatically generated C config: don't edit\n" + " * "PROJECT_NAME" version: %s\n" + " * %s" + " */\n" + // "#define AUTOCONF_INCLUDED\n" + , sym_get_string_value(sym), ctime(&now)); + + for_all_symbols(i, sym) { + sym_calc_value(sym); + if (!(sym->flags & SYMBOL_WRITE) || !sym->name) + continue; + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + switch (sym_get_tristate_value(sym)) { + case no: + break; + case mod: + fprintf(out, CONFIG_PREFIX"%s=m\n", sym->name); + fprintf(out_h, "#define CONFIG_%s_MODULE 1\n", sym->name); + break; + case yes: + fprintf(out, CONFIG_PREFIX"%s=y\n", sym->name); + fprintf(out_h, "#define "CONFIG_PREFIX"%s 1\n", sym->name); + break; + } + break; + case S_STRING: + str = sym_get_string_value(sym); + fprintf(out, CONFIG_PREFIX"%s=\"", sym->name); + fprintf(out_h, "#define "CONFIG_PREFIX"%s \"", sym->name); + while (1) { + l = strcspn(str, "\"\\"); + if (l) { + fwrite(str, l, 1, out); + fwrite(str, l, 1, out_h); + str += l; + } + if (!*str) + break; + fprintf(out, "\\%c", *str); + fprintf(out_h, "\\%c", *str); + str++; + } + fputs("\"\n", out); + fputs("\"\n", out_h); + break; + case S_HEX: + str = sym_get_string_value(sym); + if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) { + fprintf(out, CONFIG_PREFIX"%s=%s\n", sym->name, str); + fprintf(out_h, "#define "CONFIG_PREFIX"%s 0x%s\n", sym->name, str); + break; + } + case S_INT: + str = sym_get_string_value(sym); + fprintf(out, CONFIG_PREFIX"%s=%s\n", sym->name, str); + fprintf(out_h, "#define "CONFIG_PREFIX"%s %s\n", sym->name, str); + break; + default: + break; + } + } + fclose(out); + fclose(out_h); + + name = getenv("KCONFIG_AUTOHEADER"); + if (!name) + name = "include/linux/autoconf.h"; + if (rename(".tmpconfig.h", name)) + return 1; + name = getenv("KCONFIG_AUTOCONFIG"); + if (!name) + name = "include/config/auto.conf"; + /* + * This must be the last step, kbuild has a dependency on auto.conf + * and this marks the successful completion of the previous steps. + */ + if (rename(".tmpconfig", name)) + return 1; + + return 0; +} diff --git a/aosp/external/toybox/kconfig/expr.c b/aosp/external/toybox/kconfig/expr.c new file mode 100644 index 0000000000000000000000000000000000000000..6f98dbfe70cf4df2e57432e838465c33e4f4888e --- /dev/null +++ b/aosp/external/toybox/kconfig/expr.c @@ -0,0 +1,1100 @@ +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include +#include + +#define LKC_DIRECT_LINK +#include "lkc.h" + +#define DEBUG_EXPR 0 + +struct expr *expr_alloc_symbol(struct symbol *sym) +{ + struct expr *e = malloc(sizeof(*e)); + memset(e, 0, sizeof(*e)); + e->type = E_SYMBOL; + e->left.sym = sym; + return e; +} + +struct expr *expr_alloc_one(enum expr_type type, struct expr *ce) +{ + struct expr *e = malloc(sizeof(*e)); + memset(e, 0, sizeof(*e)); + e->type = type; + e->left.expr = ce; + return e; +} + +struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2) +{ + struct expr *e = malloc(sizeof(*e)); + memset(e, 0, sizeof(*e)); + e->type = type; + e->left.expr = e1; + e->right.expr = e2; + return e; +} + +struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2) +{ + struct expr *e = malloc(sizeof(*e)); + memset(e, 0, sizeof(*e)); + e->type = type; + e->left.sym = s1; + e->right.sym = s2; + return e; +} + +struct expr *expr_alloc_and(struct expr *e1, struct expr *e2) +{ + if (!e1) + return e2; + return e2 ? expr_alloc_two(E_AND, e1, e2) : e1; +} + +struct expr *expr_alloc_or(struct expr *e1, struct expr *e2) +{ + if (!e1) + return e2; + return e2 ? expr_alloc_two(E_OR, e1, e2) : e1; +} + +struct expr *expr_copy(struct expr *org) +{ + struct expr *e; + + if (!org) + return NULL; + + e = malloc(sizeof(*org)); + memcpy(e, org, sizeof(*org)); + switch (org->type) { + case E_SYMBOL: + e->left = org->left; + break; + case E_NOT: + e->left.expr = expr_copy(org->left.expr); + break; + case E_EQUAL: + case E_UNEQUAL: + e->left.sym = org->left.sym; + e->right.sym = org->right.sym; + break; + case E_AND: + case E_OR: + case E_CHOICE: + e->left.expr = expr_copy(org->left.expr); + e->right.expr = expr_copy(org->right.expr); + break; + default: + printf("can't copy type %d\n", e->type); + free(e); + e = NULL; + break; + } + + return e; +} + +void expr_free(struct expr *e) +{ + if (!e) + return; + + switch (e->type) { + case E_SYMBOL: + break; + case E_NOT: + expr_free(e->left.expr); + return; + case E_EQUAL: + case E_UNEQUAL: + break; + case E_OR: + case E_AND: + expr_free(e->left.expr); + expr_free(e->right.expr); + break; + default: + printf("how to free type %d?\n", e->type); + break; + } + free(e); +} + +static int trans_count; + +#define e1 (*ep1) +#define e2 (*ep2) + +static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct expr **ep2) +{ + if (e1->type == type) { + __expr_eliminate_eq(type, &e1->left.expr, &e2); + __expr_eliminate_eq(type, &e1->right.expr, &e2); + return; + } + if (e2->type == type) { + __expr_eliminate_eq(type, &e1, &e2->left.expr); + __expr_eliminate_eq(type, &e1, &e2->right.expr); + return; + } + if (e1->type == E_SYMBOL && e2->type == E_SYMBOL && + e1->left.sym == e2->left.sym && + (e1->left.sym == &symbol_yes || e1->left.sym == &symbol_no)) + return; + if (!expr_eq(e1, e2)) + return; + trans_count++; + expr_free(e1); expr_free(e2); + switch (type) { + case E_OR: + e1 = expr_alloc_symbol(&symbol_no); + e2 = expr_alloc_symbol(&symbol_no); + break; + case E_AND: + e1 = expr_alloc_symbol(&symbol_yes); + e2 = expr_alloc_symbol(&symbol_yes); + break; + default: + ; + } +} + +void expr_eliminate_eq(struct expr **ep1, struct expr **ep2) +{ + if (!e1 || !e2) + return; + switch (e1->type) { + case E_OR: + case E_AND: + __expr_eliminate_eq(e1->type, ep1, ep2); + default: + ; + } + if (e1->type != e2->type) switch (e2->type) { + case E_OR: + case E_AND: + __expr_eliminate_eq(e2->type, ep1, ep2); + default: + ; + } + e1 = expr_eliminate_yn(e1); + e2 = expr_eliminate_yn(e2); +} + +#undef e1 +#undef e2 + +int expr_eq(struct expr *e1, struct expr *e2) +{ + int res, old_count; + + if (e1->type != e2->type) + return 0; + switch (e1->type) { + case E_EQUAL: + case E_UNEQUAL: + return e1->left.sym == e2->left.sym && e1->right.sym == e2->right.sym; + case E_SYMBOL: + return e1->left.sym == e2->left.sym; + case E_NOT: + return expr_eq(e1->left.expr, e2->left.expr); + case E_AND: + case E_OR: + e1 = expr_copy(e1); + e2 = expr_copy(e2); + old_count = trans_count; + expr_eliminate_eq(&e1, &e2); + res = (e1->type == E_SYMBOL && e2->type == E_SYMBOL && + e1->left.sym == e2->left.sym); + expr_free(e1); + expr_free(e2); + trans_count = old_count; + return res; + case E_CHOICE: + case E_RANGE: + case E_NONE: + /* panic */; + } + + if (DEBUG_EXPR) { + expr_fprint(e1, stdout); + printf(" = "); + expr_fprint(e2, stdout); + printf(" ?\n"); + } + + return 0; +} + +struct expr *expr_eliminate_yn(struct expr *e) +{ + struct expr *tmp; + + if (e) switch (e->type) { + case E_AND: + e->left.expr = expr_eliminate_yn(e->left.expr); + e->right.expr = expr_eliminate_yn(e->right.expr); + if (e->left.expr->type == E_SYMBOL) { + if (e->left.expr->left.sym == &symbol_no) { + expr_free(e->left.expr); + expr_free(e->right.expr); + e->type = E_SYMBOL; + e->left.sym = &symbol_no; + e->right.expr = NULL; + return e; + } else if (e->left.expr->left.sym == &symbol_yes) { + free(e->left.expr); + tmp = e->right.expr; + *e = *(e->right.expr); + free(tmp); + return e; + } + } + if (e->right.expr->type == E_SYMBOL) { + if (e->right.expr->left.sym == &symbol_no) { + expr_free(e->left.expr); + expr_free(e->right.expr); + e->type = E_SYMBOL; + e->left.sym = &symbol_no; + e->right.expr = NULL; + return e; + } else if (e->right.expr->left.sym == &symbol_yes) { + free(e->right.expr); + tmp = e->left.expr; + *e = *(e->left.expr); + free(tmp); + return e; + } + } + break; + case E_OR: + e->left.expr = expr_eliminate_yn(e->left.expr); + e->right.expr = expr_eliminate_yn(e->right.expr); + if (e->left.expr->type == E_SYMBOL) { + if (e->left.expr->left.sym == &symbol_no) { + free(e->left.expr); + tmp = e->right.expr; + *e = *(e->right.expr); + free(tmp); + return e; + } else if (e->left.expr->left.sym == &symbol_yes) { + expr_free(e->left.expr); + expr_free(e->right.expr); + e->type = E_SYMBOL; + e->left.sym = &symbol_yes; + e->right.expr = NULL; + return e; + } + } + if (e->right.expr->type == E_SYMBOL) { + if (e->right.expr->left.sym == &symbol_no) { + free(e->right.expr); + tmp = e->left.expr; + *e = *(e->left.expr); + free(tmp); + return e; + } else if (e->right.expr->left.sym == &symbol_yes) { + expr_free(e->left.expr); + expr_free(e->right.expr); + e->type = E_SYMBOL; + e->left.sym = &symbol_yes; + e->right.expr = NULL; + return e; + } + } + break; + default: + ; + } + return e; +} + +/* + * bool FOO!=n => FOO + */ +struct expr *expr_trans_bool(struct expr *e) +{ + if (!e) + return NULL; + switch (e->type) { + case E_AND: + case E_OR: + case E_NOT: + e->left.expr = expr_trans_bool(e->left.expr); + e->right.expr = expr_trans_bool(e->right.expr); + break; + case E_UNEQUAL: + // FOO!=n -> FOO + if (e->left.sym->type == S_TRISTATE) { + if (e->right.sym == &symbol_no) { + e->type = E_SYMBOL; + e->right.sym = NULL; + } + } + break; + default: + ; + } + return e; +} + +/* + * e1 || e2 -> ? + */ +struct expr *expr_join_or(struct expr *e1, struct expr *e2) +{ + struct expr *tmp; + struct symbol *sym1, *sym2; + + if (expr_eq(e1, e2)) + return expr_copy(e1); + if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT) + return NULL; + if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT) + return NULL; + if (e1->type == E_NOT) { + tmp = e1->left.expr; + if (tmp->type != E_EQUAL && tmp->type != E_UNEQUAL && tmp->type != E_SYMBOL) + return NULL; + sym1 = tmp->left.sym; + } else + sym1 = e1->left.sym; + if (e2->type == E_NOT) { + if (e2->left.expr->type != E_SYMBOL) + return NULL; + sym2 = e2->left.expr->left.sym; + } else + sym2 = e2->left.sym; + if (sym1 != sym2) + return NULL; + if (sym1->type != S_BOOLEAN && sym1->type != S_TRISTATE) + return NULL; + if (sym1->type == S_TRISTATE) { + if (e1->type == E_EQUAL && e2->type == E_EQUAL && + ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) || + (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) { + // (a='y') || (a='m') -> (a!='n') + return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_no); + } + if (e1->type == E_EQUAL && e2->type == E_EQUAL && + ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) || + (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) { + // (a='y') || (a='n') -> (a!='m') + return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_mod); + } + if (e1->type == E_EQUAL && e2->type == E_EQUAL && + ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) || + (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) { + // (a='m') || (a='n') -> (a!='y') + return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_yes); + } + } + if (sym1->type == S_BOOLEAN && sym1 == sym2) { + if ((e1->type == E_NOT && e1->left.expr->type == E_SYMBOL && e2->type == E_SYMBOL) || + (e2->type == E_NOT && e2->left.expr->type == E_SYMBOL && e1->type == E_SYMBOL)) + return expr_alloc_symbol(&symbol_yes); + } + + if (DEBUG_EXPR) { + printf("optimize ("); + expr_fprint(e1, stdout); + printf(") || ("); + expr_fprint(e2, stdout); + printf(")?\n"); + } + return NULL; +} + +struct expr *expr_join_and(struct expr *e1, struct expr *e2) +{ + struct expr *tmp; + struct symbol *sym1, *sym2; + + if (expr_eq(e1, e2)) + return expr_copy(e1); + if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT) + return NULL; + if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT) + return NULL; + if (e1->type == E_NOT) { + tmp = e1->left.expr; + if (tmp->type != E_EQUAL && tmp->type != E_UNEQUAL && tmp->type != E_SYMBOL) + return NULL; + sym1 = tmp->left.sym; + } else + sym1 = e1->left.sym; + if (e2->type == E_NOT) { + if (e2->left.expr->type != E_SYMBOL) + return NULL; + sym2 = e2->left.expr->left.sym; + } else + sym2 = e2->left.sym; + if (sym1 != sym2) + return NULL; + if (sym1->type != S_BOOLEAN && sym1->type != S_TRISTATE) + return NULL; + + if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_yes) || + (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_yes)) + // (a) && (a='y') -> (a='y') + return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes); + + if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_no) || + (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_no)) + // (a) && (a!='n') -> (a) + return expr_alloc_symbol(sym1); + + if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_mod) || + (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_mod)) + // (a) && (a!='m') -> (a='y') + return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes); + + if (sym1->type == S_TRISTATE) { + if (e1->type == E_EQUAL && e2->type == E_UNEQUAL) { + // (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b' + sym2 = e1->right.sym; + if ((e2->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST)) + return sym2 != e2->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2) + : expr_alloc_symbol(&symbol_no); + } + if (e1->type == E_UNEQUAL && e2->type == E_EQUAL) { + // (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b' + sym2 = e2->right.sym; + if ((e1->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST)) + return sym2 != e1->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2) + : expr_alloc_symbol(&symbol_no); + } + if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && + ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) || + (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) + // (a!='y') && (a!='n') -> (a='m') + return expr_alloc_comp(E_EQUAL, sym1, &symbol_mod); + + if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && + ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) || + (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) + // (a!='y') && (a!='m') -> (a='n') + return expr_alloc_comp(E_EQUAL, sym1, &symbol_no); + + if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && + ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) || + (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) + // (a!='m') && (a!='n') -> (a='m') + return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes); + + if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_mod) || + (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_mod) || + (e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_yes) || + (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_yes)) + return NULL; + } + + if (DEBUG_EXPR) { + printf("optimize ("); + expr_fprint(e1, stdout); + printf(") && ("); + expr_fprint(e2, stdout); + printf(")?\n"); + } + return NULL; +} + +static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct expr **ep2) +{ +#define e1 (*ep1) +#define e2 (*ep2) + struct expr *tmp; + + if (e1->type == type) { + expr_eliminate_dups1(type, &e1->left.expr, &e2); + expr_eliminate_dups1(type, &e1->right.expr, &e2); + return; + } + if (e2->type == type) { + expr_eliminate_dups1(type, &e1, &e2->left.expr); + expr_eliminate_dups1(type, &e1, &e2->right.expr); + return; + } + if (e1 == e2) + return; + + switch (e1->type) { + case E_OR: case E_AND: + expr_eliminate_dups1(e1->type, &e1, &e1); + default: + ; + } + + switch (type) { + case E_OR: + tmp = expr_join_or(e1, e2); + if (tmp) { + expr_free(e1); expr_free(e2); + e1 = expr_alloc_symbol(&symbol_no); + e2 = tmp; + trans_count++; + } + break; + case E_AND: + tmp = expr_join_and(e1, e2); + if (tmp) { + expr_free(e1); expr_free(e2); + e1 = expr_alloc_symbol(&symbol_yes); + e2 = tmp; + trans_count++; + } + break; + default: + ; + } +#undef e1 +#undef e2 +} + +static void expr_eliminate_dups2(enum expr_type type, struct expr **ep1, struct expr **ep2) +{ +#define e1 (*ep1) +#define e2 (*ep2) + struct expr *tmp, *tmp1, *tmp2; + + if (e1->type == type) { + expr_eliminate_dups2(type, &e1->left.expr, &e2); + expr_eliminate_dups2(type, &e1->right.expr, &e2); + return; + } + if (e2->type == type) { + expr_eliminate_dups2(type, &e1, &e2->left.expr); + expr_eliminate_dups2(type, &e1, &e2->right.expr); + } + if (e1 == e2) + return; + + switch (e1->type) { + case E_OR: + expr_eliminate_dups2(e1->type, &e1, &e1); + // (FOO || BAR) && (!FOO && !BAR) -> n + tmp1 = expr_transform(expr_alloc_one(E_NOT, expr_copy(e1))); + tmp2 = expr_copy(e2); + tmp = expr_extract_eq_and(&tmp1, &tmp2); + if (expr_is_yes(tmp1)) { + expr_free(e1); + e1 = expr_alloc_symbol(&symbol_no); + trans_count++; + } + expr_free(tmp2); + expr_free(tmp1); + expr_free(tmp); + break; + case E_AND: + expr_eliminate_dups2(e1->type, &e1, &e1); + // (FOO && BAR) || (!FOO || !BAR) -> y + tmp1 = expr_transform(expr_alloc_one(E_NOT, expr_copy(e1))); + tmp2 = expr_copy(e2); + tmp = expr_extract_eq_or(&tmp1, &tmp2); + if (expr_is_no(tmp1)) { + expr_free(e1); + e1 = expr_alloc_symbol(&symbol_yes); + trans_count++; + } + expr_free(tmp2); + expr_free(tmp1); + expr_free(tmp); + break; + default: + ; + } +#undef e1 +#undef e2 +} + +struct expr *expr_eliminate_dups(struct expr *e) +{ + int oldcount; + if (!e) + return e; + + oldcount = trans_count; + while (1) { + trans_count = 0; + switch (e->type) { + case E_OR: case E_AND: + expr_eliminate_dups1(e->type, &e, &e); + expr_eliminate_dups2(e->type, &e, &e); + default: + ; + } + if (!trans_count) + break; + e = expr_eliminate_yn(e); + } + trans_count = oldcount; + return e; +} + +struct expr *expr_transform(struct expr *e) +{ + struct expr *tmp; + + if (!e) + return NULL; + switch (e->type) { + case E_EQUAL: + case E_UNEQUAL: + case E_SYMBOL: + case E_CHOICE: + break; + default: + e->left.expr = expr_transform(e->left.expr); + e->right.expr = expr_transform(e->right.expr); + } + + switch (e->type) { + case E_EQUAL: + if (e->left.sym->type != S_BOOLEAN) + break; + if (e->right.sym == &symbol_no) { + e->type = E_NOT; + e->left.expr = expr_alloc_symbol(e->left.sym); + e->right.sym = NULL; + break; + } + if (e->right.sym == &symbol_mod) { + printf("boolean symbol %s tested for 'm'? test forced to 'n'\n", e->left.sym->name); + e->type = E_SYMBOL; + e->left.sym = &symbol_no; + e->right.sym = NULL; + break; + } + if (e->right.sym == &symbol_yes) { + e->type = E_SYMBOL; + e->right.sym = NULL; + break; + } + break; + case E_UNEQUAL: + if (e->left.sym->type != S_BOOLEAN) + break; + if (e->right.sym == &symbol_no) { + e->type = E_SYMBOL; + e->right.sym = NULL; + break; + } + if (e->right.sym == &symbol_mod) { + printf("boolean symbol %s tested for 'm'? test forced to 'y'\n", e->left.sym->name); + e->type = E_SYMBOL; + e->left.sym = &symbol_yes; + e->right.sym = NULL; + break; + } + if (e->right.sym == &symbol_yes) { + e->type = E_NOT; + e->left.expr = expr_alloc_symbol(e->left.sym); + e->right.sym = NULL; + break; + } + break; + case E_NOT: + switch (e->left.expr->type) { + case E_NOT: + // !!a -> a + tmp = e->left.expr->left.expr; + free(e->left.expr); + free(e); + e = tmp; + e = expr_transform(e); + break; + case E_EQUAL: + case E_UNEQUAL: + // !a='x' -> a!='x' + tmp = e->left.expr; + free(e); + e = tmp; + e->type = e->type == E_EQUAL ? E_UNEQUAL : E_EQUAL; + break; + case E_OR: + // !(a || b) -> !a && !b + tmp = e->left.expr; + e->type = E_AND; + e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); + tmp->type = E_NOT; + tmp->right.expr = NULL; + e = expr_transform(e); + break; + case E_AND: + // !(a && b) -> !a || !b + tmp = e->left.expr; + e->type = E_OR; + e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); + tmp->type = E_NOT; + tmp->right.expr = NULL; + e = expr_transform(e); + break; + case E_SYMBOL: + if (e->left.expr->left.sym == &symbol_yes) { + // !'y' -> 'n' + tmp = e->left.expr; + free(e); + e = tmp; + e->type = E_SYMBOL; + e->left.sym = &symbol_no; + break; + } + if (e->left.expr->left.sym == &symbol_mod) { + // !'m' -> 'm' + tmp = e->left.expr; + free(e); + e = tmp; + e->type = E_SYMBOL; + e->left.sym = &symbol_mod; + break; + } + if (e->left.expr->left.sym == &symbol_no) { + // !'n' -> 'y' + tmp = e->left.expr; + free(e); + e = tmp; + e->type = E_SYMBOL; + e->left.sym = &symbol_yes; + break; + } + break; + default: + ; + } + break; + default: + ; + } + return e; +} + +int expr_contains_symbol(struct expr *dep, struct symbol *sym) +{ + if (!dep) + return 0; + + switch (dep->type) { + case E_AND: + case E_OR: + return expr_contains_symbol(dep->left.expr, sym) || + expr_contains_symbol(dep->right.expr, sym); + case E_SYMBOL: + return dep->left.sym == sym; + case E_EQUAL: + case E_UNEQUAL: + return dep->left.sym == sym || + dep->right.sym == sym; + case E_NOT: + return expr_contains_symbol(dep->left.expr, sym); + default: + ; + } + return 0; +} + +bool expr_depends_symbol(struct expr *dep, struct symbol *sym) +{ + if (!dep) + return false; + + switch (dep->type) { + case E_AND: + return expr_depends_symbol(dep->left.expr, sym) || + expr_depends_symbol(dep->right.expr, sym); + case E_SYMBOL: + return dep->left.sym == sym; + case E_EQUAL: + if (dep->left.sym == sym) { + if (dep->right.sym == &symbol_yes || dep->right.sym == &symbol_mod) + return true; + } + break; + case E_UNEQUAL: + if (dep->left.sym == sym) { + if (dep->right.sym == &symbol_no) + return true; + } + break; + default: + ; + } + return false; +} + +struct expr *expr_extract_eq_and(struct expr **ep1, struct expr **ep2) +{ + struct expr *tmp = NULL; + expr_extract_eq(E_AND, &tmp, ep1, ep2); + if (tmp) { + *ep1 = expr_eliminate_yn(*ep1); + *ep2 = expr_eliminate_yn(*ep2); + } + return tmp; +} + +struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2) +{ + struct expr *tmp = NULL; + expr_extract_eq(E_OR, &tmp, ep1, ep2); + if (tmp) { + *ep1 = expr_eliminate_yn(*ep1); + *ep2 = expr_eliminate_yn(*ep2); + } + return tmp; +} + +void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr **ep2) +{ +#define e1 (*ep1) +#define e2 (*ep2) + if (e1->type == type) { + expr_extract_eq(type, ep, &e1->left.expr, &e2); + expr_extract_eq(type, ep, &e1->right.expr, &e2); + return; + } + if (e2->type == type) { + expr_extract_eq(type, ep, ep1, &e2->left.expr); + expr_extract_eq(type, ep, ep1, &e2->right.expr); + return; + } + if (expr_eq(e1, e2)) { + *ep = *ep ? expr_alloc_two(type, *ep, e1) : e1; + expr_free(e2); + if (type == E_AND) { + e1 = expr_alloc_symbol(&symbol_yes); + e2 = expr_alloc_symbol(&symbol_yes); + } else if (type == E_OR) { + e1 = expr_alloc_symbol(&symbol_no); + e2 = expr_alloc_symbol(&symbol_no); + } + } +#undef e1 +#undef e2 +} + +struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym) +{ + struct expr *e1, *e2; + + if (!e) { + e = expr_alloc_symbol(sym); + if (type == E_UNEQUAL) + e = expr_alloc_one(E_NOT, e); + return e; + } + switch (e->type) { + case E_AND: + e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); + e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); + if (sym == &symbol_yes) + e = expr_alloc_two(E_AND, e1, e2); + if (sym == &symbol_no) + e = expr_alloc_two(E_OR, e1, e2); + if (type == E_UNEQUAL) + e = expr_alloc_one(E_NOT, e); + return e; + case E_OR: + e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); + e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); + if (sym == &symbol_yes) + e = expr_alloc_two(E_OR, e1, e2); + if (sym == &symbol_no) + e = expr_alloc_two(E_AND, e1, e2); + if (type == E_UNEQUAL) + e = expr_alloc_one(E_NOT, e); + return e; + case E_NOT: + return expr_trans_compare(e->left.expr, type == E_EQUAL ? E_UNEQUAL : E_EQUAL, sym); + case E_UNEQUAL: + case E_EQUAL: + if (type == E_EQUAL) { + if (sym == &symbol_yes) + return expr_copy(e); + if (sym == &symbol_mod) + return expr_alloc_symbol(&symbol_no); + if (sym == &symbol_no) + return expr_alloc_one(E_NOT, expr_copy(e)); + } else { + if (sym == &symbol_yes) + return expr_alloc_one(E_NOT, expr_copy(e)); + if (sym == &symbol_mod) + return expr_alloc_symbol(&symbol_yes); + if (sym == &symbol_no) + return expr_copy(e); + } + break; + case E_SYMBOL: + return expr_alloc_comp(type, e->left.sym, sym); + case E_CHOICE: + case E_RANGE: + case E_NONE: + /* panic */; + } + return NULL; +} + +tristate expr_calc_value(struct expr *e) +{ + tristate val1, val2; + const char *str1, *str2; + + if (!e) + return yes; + + switch (e->type) { + case E_SYMBOL: + sym_calc_value(e->left.sym); + return e->left.sym->curr.tri; + case E_AND: + val1 = expr_calc_value(e->left.expr); + val2 = expr_calc_value(e->right.expr); + return E_AND(val1, val2); + case E_OR: + val1 = expr_calc_value(e->left.expr); + val2 = expr_calc_value(e->right.expr); + return E_OR(val1, val2); + case E_NOT: + val1 = expr_calc_value(e->left.expr); + return E_NOT(val1); + case E_EQUAL: + sym_calc_value(e->left.sym); + sym_calc_value(e->right.sym); + str1 = sym_get_string_value(e->left.sym); + str2 = sym_get_string_value(e->right.sym); + return !strcmp(str1, str2) ? yes : no; + case E_UNEQUAL: + sym_calc_value(e->left.sym); + sym_calc_value(e->right.sym); + str1 = sym_get_string_value(e->left.sym); + str2 = sym_get_string_value(e->right.sym); + return !strcmp(str1, str2) ? no : yes; + default: + printf("expr_calc_value: %d?\n", e->type); + return no; + } +} + +int expr_compare_type(enum expr_type t1, enum expr_type t2) +{ +#if 0 + return 1; +#else + if (t1 == t2) + return 0; + switch (t1) { + case E_EQUAL: + case E_UNEQUAL: + if (t2 == E_NOT) + return 1; + case E_NOT: + if (t2 == E_AND) + return 1; + case E_AND: + if (t2 == E_OR) + return 1; + case E_OR: + if (t2 == E_CHOICE) + return 1; + case E_CHOICE: + if (t2 == 0) + return 1; + default: + return -1; + } + printf("[%dgt%d?]", t1, t2); + return 0; +#endif +} + +void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken) +{ + if (!e) { + fn(data, NULL, "y"); + return; + } + + if (expr_compare_type(prevtoken, e->type) > 0) + fn(data, NULL, "("); + switch (e->type) { + case E_SYMBOL: + if (e->left.sym->name) + fn(data, e->left.sym, e->left.sym->name); + else + fn(data, NULL, ""); + break; + case E_NOT: + fn(data, NULL, "!"); + expr_print(e->left.expr, fn, data, E_NOT); + break; + case E_EQUAL: + fn(data, e->left.sym, e->left.sym->name); + fn(data, NULL, "="); + fn(data, e->right.sym, e->right.sym->name); + break; + case E_UNEQUAL: + fn(data, e->left.sym, e->left.sym->name); + fn(data, NULL, "!="); + fn(data, e->right.sym, e->right.sym->name); + break; + case E_OR: + expr_print(e->left.expr, fn, data, E_OR); + fn(data, NULL, " || "); + expr_print(e->right.expr, fn, data, E_OR); + break; + case E_AND: + expr_print(e->left.expr, fn, data, E_AND); + fn(data, NULL, " && "); + expr_print(e->right.expr, fn, data, E_AND); + break; + case E_CHOICE: + fn(data, e->right.sym, e->right.sym->name); + if (e->left.expr) { + fn(data, NULL, " ^ "); + expr_print(e->left.expr, fn, data, E_CHOICE); + } + break; + case E_RANGE: + fn(data, NULL, "["); + fn(data, e->left.sym, e->left.sym->name); + fn(data, NULL, " "); + fn(data, e->right.sym, e->right.sym->name); + fn(data, NULL, "]"); + break; + default: + { + char buf[32]; + sprintf(buf, "", e->type); + fn(data, NULL, buf); + break; + } + } + if (expr_compare_type(prevtoken, e->type) > 0) + fn(data, NULL, ")"); +} + +static void expr_print_file_helper(void *data, struct symbol *sym, const char *str) +{ + fwrite(str, strlen(str), 1, data); +} + +void expr_fprint(struct expr *e, FILE *out) +{ + expr_print(e, expr_print_file_helper, out, E_NONE); +} + +static void expr_print_gstr_helper(void *data, struct symbol *sym, const char *str) +{ + str_append((struct gstr*)data, str); +} + +void expr_gstr_print(struct expr *e, struct gstr *gs) +{ + expr_print(e, expr_print_gstr_helper, gs, E_NONE); +} diff --git a/aosp/external/toybox/kconfig/expr.h b/aosp/external/toybox/kconfig/expr.h new file mode 100644 index 0000000000000000000000000000000000000000..6084525f604b10e9871ada2aa6ca096d5be481ff --- /dev/null +++ b/aosp/external/toybox/kconfig/expr.h @@ -0,0 +1,202 @@ +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#ifndef EXPR_H +#define EXPR_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#ifndef __cplusplus +#include +#endif + +struct file { + struct file *next; + struct file *parent; + char *name; + int lineno; + int flags; +}; + +#define FILE_BUSY 0x0001 +#define FILE_SCANNED 0x0002 +#define FILE_PRINTED 0x0004 + +typedef enum tristate { + no, mod, yes +} tristate; + +enum expr_type { + E_NONE, E_OR, E_AND, E_NOT, E_EQUAL, E_UNEQUAL, E_CHOICE, E_SYMBOL, E_RANGE +}; + +union expr_data { + struct expr *expr; + struct symbol *sym; +}; + +struct expr { + enum expr_type type; + union expr_data left, right; +}; + +#define E_OR(dep1, dep2) (((dep1)>(dep2))?(dep1):(dep2)) +#define E_AND(dep1, dep2) (((dep1)<(dep2))?(dep1):(dep2)) +#define E_NOT(dep) (2-(dep)) + +struct expr_value { + struct expr *expr; + tristate tri; +}; + +struct symbol_value { + void *val; + tristate tri; +}; + +enum symbol_type { + S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING, S_OTHER +}; + +enum { + S_DEF_USER, /* main user value */ + S_DEF_AUTO, +}; + +struct symbol { + struct symbol *next; + char *name; + char *help; + enum symbol_type type; + struct symbol_value curr; + struct symbol_value def[4]; + tristate visible; + int flags; + struct property *prop; + struct expr *dep, *dep2; + struct expr_value rev_dep; +}; + +#define for_all_symbols(i, sym) for (i = 0; i < 257; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) if (sym->type != S_OTHER) + +#define SYMBOL_CONST 0x0001 +#define SYMBOL_CHECK 0x0008 +#define SYMBOL_CHOICE 0x0010 +#define SYMBOL_CHOICEVAL 0x0020 +#define SYMBOL_PRINTED 0x0040 +#define SYMBOL_VALID 0x0080 +#define SYMBOL_OPTIONAL 0x0100 +#define SYMBOL_WRITE 0x0200 +#define SYMBOL_CHANGED 0x0400 +#define SYMBOL_AUTO 0x1000 +#define SYMBOL_CHECKED 0x2000 +#define SYMBOL_WARNED 0x8000 +#define SYMBOL_DEF 0x10000 +#define SYMBOL_DEF_USER 0x10000 +#define SYMBOL_DEF_AUTO 0x20000 +#define SYMBOL_DEF3 0x40000 +#define SYMBOL_DEF4 0x80000 + +#define SYMBOL_MAXLENGTH 256 +#define SYMBOL_HASHSIZE 257 +#define SYMBOL_HASHMASK 0xff + +enum prop_type { + P_UNKNOWN, P_PROMPT, P_COMMENT, P_MENU, P_DEFAULT, P_CHOICE, P_SELECT, P_RANGE +}; + +struct property { + struct property *next; + struct symbol *sym; + enum prop_type type; + const char *text; + struct expr_value visible; + struct expr *expr; + struct menu *menu; + struct file *file; + int lineno; +}; + +#define for_all_properties(sym, st, tok) \ + for (st = sym->prop; st; st = st->next) \ + if (st->type == (tok)) +#define for_all_defaults(sym, st) for_all_properties(sym, st, P_DEFAULT) +#define for_all_choices(sym, st) for_all_properties(sym, st, P_CHOICE) +#define for_all_prompts(sym, st) \ + for (st = sym->prop; st; st = st->next) \ + if (st->text) + +struct menu { + struct menu *next; + struct menu *parent; + struct menu *list; + struct symbol *sym; + struct property *prompt; + struct expr *dep; + unsigned int flags; + //char *help; + struct file *file; + int lineno; + void *data; +}; + +#define MENU_CHANGED 0x0001 +#define MENU_ROOT 0x0002 + +#ifndef SWIG + +extern struct file *file_list; +extern struct file *current_file; +struct file *lookup_file(const char *name); + +extern struct symbol symbol_yes, symbol_no, symbol_mod; +extern struct symbol *modules_sym; +extern struct symbol *sym_defconfig_list; +extern int cdebug; +struct expr *expr_alloc_symbol(struct symbol *sym); +struct expr *expr_alloc_one(enum expr_type type, struct expr *ce); +struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2); +struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2); +struct expr *expr_alloc_and(struct expr *e1, struct expr *e2); +struct expr *expr_alloc_or(struct expr *e1, struct expr *e2); +struct expr *expr_copy(struct expr *org); +void expr_free(struct expr *e); +int expr_eq(struct expr *e1, struct expr *e2); +void expr_eliminate_eq(struct expr **ep1, struct expr **ep2); +tristate expr_calc_value(struct expr *e); +struct expr *expr_eliminate_yn(struct expr *e); +struct expr *expr_trans_bool(struct expr *e); +struct expr *expr_eliminate_dups(struct expr *e); +struct expr *expr_transform(struct expr *e); +int expr_contains_symbol(struct expr *dep, struct symbol *sym); +bool expr_depends_symbol(struct expr *dep, struct symbol *sym); +struct expr *expr_extract_eq_and(struct expr **ep1, struct expr **ep2); +struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2); +void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr **ep2); +struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym); + +void expr_fprint(struct expr *e, FILE *out); +struct gstr; /* forward */ +void expr_gstr_print(struct expr *e, struct gstr *gs); + +static inline int expr_is_yes(struct expr *e) +{ + return !e || (e->type == E_SYMBOL && e->left.sym == &symbol_yes); +} + +static inline int expr_is_no(struct expr *e) +{ + return e && (e->type == E_SYMBOL && e->left.sym == &symbol_no); +} +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* EXPR_H */ diff --git a/aosp/external/toybox/kconfig/freebsd_miniconfig b/aosp/external/toybox/kconfig/freebsd_miniconfig new file mode 100644 index 0000000000000000000000000000000000000000..98d3c1cdcc2937c8724cbbef78b44ea9ef7c491e --- /dev/null +++ b/aosp/external/toybox/kconfig/freebsd_miniconfig @@ -0,0 +1,128 @@ +CONFIG_BASENAME=y +CONFIG_CAL=y +CONFIG_CAT=y +CONFIG_CATV=y +CONFIG_CHGRP=y +CONFIG_CHOWN=y +CONFIG_CHMOD=y +CONFIG_CKSUM=y +CONFIG_CRC32=y +CONFIG_CMP=y +CONFIG_COMM=y +CONFIG_CPIO=y +CONFIG_CUT=y +CONFIG_DATE=y +CONFIG_DIRNAME=y +CONFIG_DU=y +CONFIG_ECHO=y +CONFIG_EXPAND=y +CONFIG_FALSE=y +CONFIG_FILE=y +CONFIG_FIND=y +CONFIG_GREP=y +CONFIG_HEAD=y +CONFIG_ICONV=y +CONFIG_ID=y +CONFIG_GROUPS=y +CONFIG_LOGNAME=y +CONFIG_WHOAMI=y +CONFIG_KILL=y +CONFIG_KILLALL5=y +CONFIG_LINK=y +CONFIG_LN=y +CONFIG_LOGGER=y +CONFIG_LS=y +CONFIG_MKDIR=y +CONFIG_MKFIFO=y +CONFIG_NICE=y +CONFIG_NL=y +CONFIG_NOHUP=y +CONFIG_OD=y +CONFIG_PASTE=y +CONFIG_PATCH=y +CONFIG_PRINTF=y +CONFIG_PWD=y +CONFIG_RENICE=y +CONFIG_RM=y +CONFIG_RMDIR=y +CONFIG_SED=y +CONFIG_SLEEP=y +CONFIG_SORT=y +CONFIG_SPLIT=y +CONFIG_STRINGS=y +CONFIG_TEE=y +CONFIG_TEST=y +CONFIG_TIME=y +CONFIG_TOUCH=y +CONFIG_TRUE=y +CONFIG_TTY=y +CONFIG_UNAME=y +CONFIG_UNIQ=y +CONFIG_UNLINK=y +CONFIG_UUDECODE=y +CONFIG_UUENCODE=y +CONFIG_WC=y +CONFIG_WHO=y +CONFIG_XARGS=y +CONFIG_ACPI=y +CONFIG_ASCII=y +CONFIG_BASE64=y +CONFIG_BUNZIP2=y +CONFIG_BZCAT=y +CONFIG_CHROOT=y +CONFIG_CHRT=y +CONFIG_CHVT=y +CONFIG_CLEAR=y +CONFIG_COUNT=y +CONFIG_DOS2UNIX=y +CONFIG_UNIX2DOS=y +CONFIG_FACTOR=y +CONFIG_FALLOCATE=y +CONFIG_FLOCK=y +CONFIG_FMT=y +CONFIG_FSYNC=y +CONFIG_HELP=y +CONFIG_HELP_EXTRAS=y +CONFIG_HEXEDIT=y +CONFIG_LSMOD=y +CONFIG_LSPCI=y +CONFIG_LSPCI_TEXT=y +CONFIG_LSUSB=y +CONFIG_MAKEDEVS=y +CONFIG_MKPASSWD=y +CONFIG_MKSWAP=y +CONFIG_MODINFO=y +CONFIG_MOUNTPOINT=y +CONFIG_PMAP=y +CONFIG_PRINTENV=y +CONFIG_PWDX=y +CONFIG_READLINK=y +CONFIG_REALPATH=y +CONFIG_RESET=y +CONFIG_REV=y +CONFIG_SETSID=y +CONFIG_SHRED=y +CONFIG_SYSCTL=y +CONFIG_TAC=y +CONFIG_TIMEOUT=y +CONFIG_TRUNCATE=y +CONFIG_USLEEP=y +CONFIG_UUIDGEN=y +CONFIG_VMSTAT=y +CONFIG_WATCH=y +CONFIG_W=y +CONFIG_WHICH=y +CONFIG_XXD=y +CONFIG_YES=y +CONFIG_HOSTNAME=y +CONFIG_KILLALL=y +CONFIG_MKNOD=y +CONFIG_MKTEMP=y +CONFIG_PIDOF=y +CONFIG_SEQ=y +CONFIG_SYNC=y +CONFIG_TOYBOX_SUID=y +CONFIG_TOYBOX_FLOAT=y +CONFIG_TOYBOX_HELP=y +CONFIG_TOYBOX_HELP_DASHDASH=y +CONFIG_TOYBOX_I18N=y diff --git a/aosp/external/toybox/kconfig/lex.zconf.c_shipped b/aosp/external/toybox/kconfig/lex.zconf.c_shipped new file mode 100644 index 0000000000000000000000000000000000000000..800f8c71c407f32893020c72c14d043147e8eeb1 --- /dev/null +++ b/aosp/external/toybox/kconfig/lex.zconf.c_shipped @@ -0,0 +1,2350 @@ + +#line 3 "scripts/kconfig/lex.zconf.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 33 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +#if __STDC__ + +#define YY_USE_CONST + +#endif /* __STDC__ */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE zconfrestart(zconfin ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +extern int zconfleng; + +extern FILE *zconfin, *zconfout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up zconftext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up zconftext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, (yytext_ptr) ) + +/* The following is because we cannot portably get our hands on size_t + * (without autoconf's help, which isn't available because we want + * flex-generated scanners to compile on their own). + */ + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef unsigned int yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via zconfrestart()), so that the user can continue scanning by + * just pointing zconfin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* yy_hold_char holds the character lost when zconftext is formed. */ +static char yy_hold_char; +static int yy_n_chars; /* number of characters read into yy_ch_buf */ +int zconfleng; + +/* Points to current character in buffer. */ +static char *yy_c_buf_p = (char *) 0; +static int yy_init = 0; /* whether we need to initialize */ +static int yy_start = 0; /* start state number */ + +/* Flag which is used to allow zconfwrap()'s to do buffer switches + * instead of setting up a fresh zconfin. A bit of a hack ... + */ +static int yy_did_buffer_switch_on_eof; + +void zconfrestart (FILE *input_file ); +void zconf_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE zconf_create_buffer (FILE *file,int size ); +void zconf_delete_buffer (YY_BUFFER_STATE b ); +void zconf_flush_buffer (YY_BUFFER_STATE b ); +void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer ); +void zconfpop_buffer_state (void ); + +static void zconfensure_buffer_stack (void ); +static void zconf_load_buffer_state (void ); +static void zconf_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER zconf_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE zconf_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE zconf_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE zconf_scan_bytes (yyconst char *bytes,int len ); + +void *zconfalloc (yy_size_t ); +void *zconfrealloc (void *,yy_size_t ); +void zconffree (void * ); + +#define yy_new_buffer zconf_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + zconfensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + zconf_create_buffer(zconfin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + zconfensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + zconf_create_buffer(zconfin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define zconfwrap() 1 +#define YY_SKIP_YYWRAP + +typedef unsigned char YY_CHAR; + +FILE *zconfin = (FILE *) 0, *zconfout = (FILE *) 0; + +typedef int yy_state_type; + +extern int zconflineno; + +int zconflineno = 1; + +extern char *zconftext; +#define yytext_ptr zconftext +static yyconst flex_int16_t yy_nxt[][17] = + { + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 + }, + + { + 11, 12, 13, 14, 12, 12, 15, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12 + }, + + { + 11, 12, 13, 14, 12, 12, 15, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12 + }, + + { + 11, 16, 16, 17, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 18, 16, 16, 16 + }, + + { + 11, 16, 16, 17, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 18, 16, 16, 16 + + }, + + { + 11, 19, 20, 21, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19 + }, + + { + 11, 19, 20, 21, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19 + }, + + { + 11, 22, 22, 23, 22, 24, 22, 22, 24, 22, + 22, 22, 22, 22, 22, 25, 22 + }, + + { + 11, 22, 22, 23, 22, 24, 22, 22, 24, 22, + 22, 22, 22, 22, 22, 25, 22 + }, + + { + 11, 26, 26, 27, 28, 29, 30, 31, 29, 32, + 33, 34, 35, 35, 36, 37, 38 + + }, + + { + 11, 26, 26, 27, 28, 29, 30, 31, 29, 32, + 33, 34, 35, 35, 36, 37, 38 + }, + + { + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11 + }, + + { + 11, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12 + }, + + { + 11, -13, 39, 40, -13, -13, 41, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13 + }, + + { + 11, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14 + + }, + + { + 11, 42, 42, 43, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42 + }, + + { + 11, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16 + }, + + { + 11, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17 + }, + + { + 11, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, 44, -18, -18, -18 + }, + + { + 11, 45, 45, -19, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45 + + }, + + { + 11, -20, 46, 47, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20 + }, + + { + 11, 48, -21, -21, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48 + }, + + { + 11, 49, 49, 50, 49, -22, 49, 49, -22, 49, + 49, 49, 49, 49, 49, -22, 49 + }, + + { + 11, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23 + }, + + { + 11, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24 + + }, + + { + 11, 51, 51, 52, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51 + }, + + { + 11, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26 + }, + + { + 11, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27 + }, + + { + 11, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, 53, -28, -28 + }, + + { + 11, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29 + + }, + + { + 11, 54, 54, -30, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54 + }, + + { + 11, -31, -31, -31, -31, -31, -31, 55, -31, -31, + -31, -31, -31, -31, -31, -31, -31 + }, + + { + 11, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32 + }, + + { + 11, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33 + }, + + { + 11, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, 56, 57, 57, -34, -34, -34 + + }, + + { + 11, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, 57, 57, 57, -35, -35, -35 + }, + + { + 11, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36 + }, + + { + 11, -37, -37, 58, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37 + }, + + { + 11, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, 59 + }, + + { + 11, -39, 39, 40, -39, -39, 41, -39, -39, -39, + -39, -39, -39, -39, -39, -39, -39 + + }, + + { + 11, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40 + }, + + { + 11, 42, 42, 43, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42 + }, + + { + 11, 42, 42, 43, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42 + }, + + { + 11, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43 + }, + + { + 11, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, 44, -44, -44, -44 + + }, + + { + 11, 45, 45, -45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45 + }, + + { + 11, -46, 46, 47, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46 + }, + + { + 11, 48, -47, -47, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48 + }, + + { + 11, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48 + }, + + { + 11, 49, 49, 50, 49, -49, 49, 49, -49, 49, + 49, 49, 49, 49, 49, -49, 49 + + }, + + { + 11, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50 + }, + + { + 11, -51, -51, 52, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51 + }, + + { + 11, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52 + }, + + { + 11, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53 + }, + + { + 11, 54, 54, -54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54 + + }, + + { + 11, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55 + }, + + { + 11, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, 60, 57, 57, -56, -56, -56 + }, + + { + 11, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, 57, 57, 57, -57, -57, -57 + }, + + { + 11, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58 + }, + + { + 11, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59 + + }, + + { + 11, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, 57, 57, 57, -60, -60, -60 + }, + + } ; + +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yy_fatal_error (yyconst char msg[] ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up zconftext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + zconfleng = (size_t) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; + +#define YY_NUM_RULES 33 +#define YY_END_OF_BUFFER 34 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[61] = + { 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 34, 5, 4, 2, 3, 7, 8, 6, 32, 29, + 31, 24, 28, 27, 26, 22, 17, 13, 16, 20, + 22, 11, 12, 19, 19, 14, 22, 22, 4, 2, + 3, 3, 1, 6, 32, 29, 31, 30, 24, 23, + 26, 25, 15, 20, 9, 19, 19, 21, 10, 18 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 4, 5, 6, 1, 1, 7, 8, 9, + 10, 1, 1, 1, 11, 12, 12, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 1, 1, 1, + 14, 1, 1, 1, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 1, 15, 1, 1, 13, 1, 13, 13, 13, 13, + + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 1, 16, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +extern int zconf_flex_debug; +int zconf_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +char *zconftext; + +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include +#include +#include +#include + +#define LKC_DIRECT_LINK +#include "lkc.h" + +#define START_STRSIZE 16 + +static struct { + struct file *file; + int lineno; +} current_pos; + +static char *text; +static int text_size, text_asize; + +struct buffer { + struct buffer *parent; + YY_BUFFER_STATE state; +}; + +struct buffer *current_buf; + +static int last_ts, first_ts; + +static void zconf_endhelp(void); +static void zconf_endfile(void); + +void new_string(void) +{ + text = malloc(START_STRSIZE); + text_asize = START_STRSIZE; + text_size = 0; + *text = 0; +} + +void append_string(const char *str, int size) +{ + int new_size = text_size + size + 1; + if (new_size > text_asize) { + new_size += START_STRSIZE - 1; + new_size &= -START_STRSIZE; + text = realloc(text, new_size); + text_asize = new_size; + } + memcpy(text + text_size, str, size); + text_size += size; + text[text_size] = 0; +} + +void alloc_string(const char *str, int size) +{ + text = malloc(size + 1); + memcpy(text, str, size); + text[size] = 0; +} + +#define INITIAL 0 +#define COMMAND 1 +#define HELP 2 +#define STRING 3 +#define PARAM 4 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals (void ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int zconfwrap (void ); +#else +extern int zconfwrap (void ); +#endif +#endif + + static void yyunput (int c,char *buf_ptr ); + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (void ); +#else +static int input (void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO (void) fwrite( zconftext, zconfleng, 1, zconfout ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + errno=0; \ + while ( (result = read( fileno(zconfin), (char *) buf, max_size )) < 0 ) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(zconfin); \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int zconflex (void); + +#define YY_DECL int zconflex (void) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after zconftext and zconfleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + + int str = 0; + int ts, i; + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! zconfin ) + zconfin = stdin; + + if ( ! zconfout ) + zconfout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + zconfensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + zconf_create_buffer(zconfin,YY_BUF_SIZE ); + } + + zconf_load_buffer_state( ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of zconftext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); +yy_match: + while ( (yy_current_state = yy_nxt[yy_current_state][ yy_ec[YY_SC_TO_UI(*yy_cp)] ]) > 0 ) + ++yy_cp; + + yy_current_state = -yy_current_state; + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ +case 1: +/* rule 1 can match eol */ +case 2: +/* rule 2 can match eol */ +YY_RULE_SETUP +{ + current_file->lineno++; + return T_EOL; +} + YY_BREAK +case 3: +YY_RULE_SETUP + + YY_BREAK +case 4: +YY_RULE_SETUP +{ + BEGIN(COMMAND); +} + YY_BREAK +case 5: +YY_RULE_SETUP +{ + unput(zconftext[0]); + BEGIN(COMMAND); +} + YY_BREAK + +case 6: +YY_RULE_SETUP +{ + struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng); + BEGIN(PARAM); + current_pos.file = current_file; + current_pos.lineno = current_file->lineno; + if (id && id->flags & TF_COMMAND) { + zconflval.id = id; + return id->token; + } + alloc_string(zconftext, zconfleng); + zconflval.string = text; + return T_WORD; + } + YY_BREAK +case 7: +YY_RULE_SETUP + + YY_BREAK +case 8: +/* rule 8 can match eol */ +YY_RULE_SETUP +{ + BEGIN(INITIAL); + current_file->lineno++; + return T_EOL; + } + YY_BREAK + +case 9: +YY_RULE_SETUP +return T_AND; + YY_BREAK +case 10: +YY_RULE_SETUP +return T_OR; + YY_BREAK +case 11: +YY_RULE_SETUP +return T_OPEN_PAREN; + YY_BREAK +case 12: +YY_RULE_SETUP +return T_CLOSE_PAREN; + YY_BREAK +case 13: +YY_RULE_SETUP +return T_NOT; + YY_BREAK +case 14: +YY_RULE_SETUP +return T_EQUAL; + YY_BREAK +case 15: +YY_RULE_SETUP +return T_UNEQUAL; + YY_BREAK +case 16: +YY_RULE_SETUP +{ + str = zconftext[0]; + new_string(); + BEGIN(STRING); + } + YY_BREAK +case 17: +/* rule 17 can match eol */ +YY_RULE_SETUP +BEGIN(INITIAL); current_file->lineno++; return T_EOL; + YY_BREAK +case 18: +YY_RULE_SETUP +/* ignore */ + YY_BREAK +case 19: +YY_RULE_SETUP +{ + struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng); + if (id && id->flags & TF_PARAM) { + zconflval.id = id; + return id->token; + } + alloc_string(zconftext, zconfleng); + zconflval.string = text; + return T_WORD; + } + YY_BREAK +case 20: +YY_RULE_SETUP +/* comment */ + YY_BREAK +case 21: +/* rule 21 can match eol */ +YY_RULE_SETUP +current_file->lineno++; + YY_BREAK +case 22: +YY_RULE_SETUP + + YY_BREAK +case YY_STATE_EOF(PARAM): +{ + BEGIN(INITIAL); + } + YY_BREAK + +case 23: +/* rule 23 can match eol */ +*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */ +(yy_c_buf_p) = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up zconftext again */ +YY_RULE_SETUP +{ + append_string(zconftext, zconfleng); + zconflval.string = text; + return T_WORD_QUOTE; + } + YY_BREAK +case 24: +YY_RULE_SETUP +{ + append_string(zconftext, zconfleng); + } + YY_BREAK +case 25: +/* rule 25 can match eol */ +*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */ +(yy_c_buf_p) = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up zconftext again */ +YY_RULE_SETUP +{ + append_string(zconftext + 1, zconfleng - 1); + zconflval.string = text; + return T_WORD_QUOTE; + } + YY_BREAK +case 26: +YY_RULE_SETUP +{ + append_string(zconftext + 1, zconfleng - 1); + } + YY_BREAK +case 27: +YY_RULE_SETUP +{ + if (str == zconftext[0]) { + BEGIN(PARAM); + zconflval.string = text; + return T_WORD_QUOTE; + } else + append_string(zconftext, 1); + } + YY_BREAK +case 28: +/* rule 28 can match eol */ +YY_RULE_SETUP +{ + printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno()); + current_file->lineno++; + BEGIN(INITIAL); + return T_EOL; + } + YY_BREAK +case YY_STATE_EOF(STRING): +{ + BEGIN(INITIAL); + } + YY_BREAK + +case 29: +YY_RULE_SETUP +{ + ts = 0; + for (i = 0; i < zconfleng; i++) { + if (zconftext[i] == '\t') + ts = (ts & ~7) + 8; + else + ts++; + } + last_ts = ts; + if (first_ts) { + if (ts < first_ts) { + zconf_endhelp(); + return T_HELPTEXT; + } + ts -= first_ts; + while (ts > 8) { + append_string(" ", 8); + ts -= 8; + } + append_string(" ", ts); + } + } + YY_BREAK +case 30: +/* rule 30 can match eol */ +*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */ +(yy_c_buf_p) = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up zconftext again */ +YY_RULE_SETUP +{ + current_file->lineno++; + zconf_endhelp(); + return T_HELPTEXT; + } + YY_BREAK +case 31: +/* rule 31 can match eol */ +YY_RULE_SETUP +{ + current_file->lineno++; + append_string("\n", 1); + } + YY_BREAK +case 32: +YY_RULE_SETUP +{ + append_string(zconftext, zconfleng); + if (!first_ts) + first_ts = last_ts; + } + YY_BREAK +case YY_STATE_EOF(HELP): +{ + zconf_endhelp(); + return T_HELPTEXT; + } + YY_BREAK + +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(COMMAND): +{ + if (current_file) { + zconf_endfile(); + return T_EOL; + } + fclose(zconfin); + yyterminate(); +} + YY_BREAK +case 33: +YY_RULE_SETUP +YY_FATAL_ERROR( "flex scanner jammed" ); + YY_BREAK + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed zconfin at a new source and called + * zconflex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = zconfin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_c_buf_p); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( zconfwrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * zconftext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of zconflex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (void) +{ + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = (yytext_ptr); + register int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + zconfrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + zconfrestart(zconfin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (void) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + yy_current_state = yy_nxt[yy_current_state][(*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1)]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + register int yy_is_jam; + + yy_current_state = yy_nxt[yy_current_state][1]; + yy_is_jam = (yy_current_state <= 0); + + return yy_is_jam ? 0 : yy_current_state; +} + + static void yyunput (int c, register char * yy_bp ) +{ + register char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up zconftext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + register int number_to_move = (yy_n_chars) + 2; + register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + register char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + (yytext_ptr) = yy_bp; + (yy_hold_char) = *yy_cp; + (yy_c_buf_p) = yy_cp; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + int offset = (yy_c_buf_p) - (yytext_ptr); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + zconfrestart(zconfin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( zconfwrap( ) ) + return EOF; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve zconftext */ + (yy_hold_char) = *++(yy_c_buf_p); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void zconfrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + zconfensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + zconf_create_buffer(zconfin,YY_BUF_SIZE ); + } + + zconf_init_buffer(YY_CURRENT_BUFFER,input_file ); + zconf_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void zconf_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * zconfpop_buffer_state(); + * zconfpush_buffer_state(new_buffer); + */ + zconfensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + zconf_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (zconfwrap()) processing, but the only time this flag + * is looked at is after zconfwrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + +static void zconf_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + zconfin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE zconf_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) zconfalloc(b->yy_buf_size + 2 ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + zconf_init_buffer(b,file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with zconf_create_buffer() + * + */ + void zconf_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + zconffree((void *) b->yy_ch_buf ); + + zconffree((void *) b ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a zconfrestart() or at EOF. + */ + static void zconf_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + zconf_flush_buffer(b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then zconf_init_buffer was _probably_ + * called from zconfrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void zconf_flush_buffer (YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + zconf_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + zconfensure_buffer_stack(); + + /* This block is copied from zconf_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from zconf_switch_to_buffer. */ + zconf_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void zconfpop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + zconf_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + zconf_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void zconfensure_buffer_stack (void) +{ + int num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (yy_buffer_stack) = (struct yy_buffer_state**)zconfalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)zconfrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE zconf_scan_buffer (char * base, yy_size_t size ) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + zconf_switch_to_buffer(b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to zconflex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * zconf_scan_bytes() instead. + */ +YY_BUFFER_STATE zconf_scan_string (yyconst char * yystr ) +{ + + return zconf_scan_bytes(yystr,strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to zconflex() will + * scan from a @e copy of @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE zconf_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) zconfalloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = zconf_scan_buffer(buf,n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in zconf_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg ) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up zconftext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + zconftext[zconfleng] = (yy_hold_char); \ + (yy_c_buf_p) = zconftext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + zconfleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int zconfget_lineno (void) +{ + + return zconflineno; +} + +/** Get the input stream. + * + */ +FILE *zconfget_in (void) +{ + return zconfin; +} + +/** Get the output stream. + * + */ +FILE *zconfget_out (void) +{ + return zconfout; +} + +/** Get the length of the current token. + * + */ +int zconfget_leng (void) +{ + return zconfleng; +} + +/** Get the current token. + * + */ + +char *zconfget_text (void) +{ + return zconftext; +} + +/** Set the current line number. + * @param line_number + * + */ +void zconfset_lineno (int line_number ) +{ + + zconflineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see zconf_switch_to_buffer + */ +void zconfset_in (FILE * in_str ) +{ + zconfin = in_str ; +} + +void zconfset_out (FILE * out_str ) +{ + zconfout = out_str ; +} + +int zconfget_debug (void) +{ + return zconf_flex_debug; +} + +void zconfset_debug (int bdebug ) +{ + zconf_flex_debug = bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from zconflex_destroy(), so don't allocate here. + */ + + (yy_buffer_stack) = 0; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = (char *) 0; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + zconfin = stdin; + zconfout = stdout; +#else + zconfin = (FILE *) 0; + zconfout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * zconflex_init() + */ + return 0; +} + +/* zconflex_destroy is for both reentrant and non-reentrant scanners. */ +int zconflex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + zconf_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + zconfpop_buffer_state(); + } + + /* Destroy the stack itself. */ + zconffree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * zconflex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *zconfalloc (yy_size_t size ) +{ + return (void *) malloc( size ); +} + +void *zconfrealloc (void * ptr, yy_size_t size ) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void zconffree (void * ptr ) +{ + free( (char *) ptr ); /* see zconfrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +void zconf_starthelp(void) +{ + new_string(); + last_ts = first_ts = 0; + BEGIN(HELP); +} + +static void zconf_endhelp(void) +{ + zconflval.string = text; + BEGIN(INITIAL); +} + +/* + * Try to open specified file with following names: + * ./name + * $(srctree)/name + * The latter is used when srctree is separate from objtree + * when compiling the kernel. + * Return NULL if file is not found. + */ +FILE *zconf_fopen(const char *name) +{ + char *env, fullname[PATH_MAX+1]; + FILE *f; + + f = fopen(name, "r"); + if (!f && name[0] != '/') { + env = getenv(SRCTREE); + if (env) { + sprintf(fullname, "%s/%s", env, name); + f = fopen(fullname, "r"); + } + } + return f; +} + +void zconf_initscan(const char *name) +{ + zconfin = zconf_fopen(name); + if (!zconfin) { + printf("can't find file %s\n", name); + exit(1); + } + + current_buf = malloc(sizeof(*current_buf)); + memset(current_buf, 0, sizeof(*current_buf)); + + current_file = file_lookup(name); + current_file->lineno = 1; + current_file->flags = FILE_BUSY; +} + +void zconf_nextfile(const char *name) +{ + struct file *file = file_lookup(name); + struct buffer *buf = malloc(sizeof(*buf)); + memset(buf, 0, sizeof(*buf)); + + current_buf->state = YY_CURRENT_BUFFER; + zconfin = zconf_fopen(name); + if (!zconfin) { + printf("%s:%d: can't open file \"%s\"\n", zconf_curname(), zconf_lineno(), name); + exit(1); + } + zconf_switch_to_buffer(zconf_create_buffer(zconfin,YY_BUF_SIZE)); + buf->parent = current_buf; + current_buf = buf; + + if (file->flags & FILE_BUSY) { + printf("recursive scan (%s)?\n", name); + exit(1); + } + if (file->flags & FILE_SCANNED) { + printf("file %s already scanned?\n", name); + exit(1); + } + file->flags |= FILE_BUSY; + file->lineno = 1; + file->parent = current_file; + current_file = file; +} + +static void zconf_endfile(void) +{ + struct buffer *parent; + + current_file->flags |= FILE_SCANNED; + current_file->flags &= ~FILE_BUSY; + current_file = current_file->parent; + + parent = current_buf->parent; + if (parent) { + fclose(zconfin); + zconf_delete_buffer(YY_CURRENT_BUFFER); + zconf_switch_to_buffer(parent->state); + } + free(current_buf); + current_buf = parent; +} + +int zconf_lineno(void) +{ + return current_pos.lineno; +} + +char *zconf_curname(void) +{ + return current_pos.file ? current_pos.file->name : ""; +} + diff --git a/aosp/external/toybox/kconfig/lkc.h b/aosp/external/toybox/kconfig/lkc.h new file mode 100644 index 0000000000000000000000000000000000000000..9b629ffa10c764e591efe3f02dd0d1f61f3aaca8 --- /dev/null +++ b/aosp/external/toybox/kconfig/lkc.h @@ -0,0 +1,155 @@ +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#ifndef LKC_H +#define LKC_H + +// Make some warnings go away +#define YYENABLE_NLS 0 +#define YYLTYPE_IS_TRIVIAL 0 + +#include "expr.h" + +#ifndef KBUILD_NO_NLS +# include +#else +# define gettext(Msgid) ((const char *) (Msgid)) +# define textdomain(Domainname) ((const char *) (Domainname)) +# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname)) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef LKC_DIRECT_LINK +#define P(name,type,arg) extern type name arg +#else +#include "lkc_defs.h" +#define P(name,type,arg) extern type (*name ## _p) arg +#endif +#include "lkc_proto.h" +#undef P + +#define SRCTREE "srctree" + +#define PACKAGE "linux" +#define LOCALEDIR "/usr/share/locale" + +#define _(text) gettext(text) +#define N_(text) (text) + + +#define TF_COMMAND 0x0001 +#define TF_PARAM 0x0002 +#define TF_OPTION 0x0004 + +#define T_OPT_MODULES 1 +#define T_OPT_DEFCONFIG_LIST 2 + +struct kconf_id { + int name; + int token; + unsigned int flags; + enum symbol_type stype; +}; + +int zconfparse(void); +void zconfdump(FILE *out); + +extern int zconfdebug; +void zconf_starthelp(void); +FILE *zconf_fopen(const char *name); +void zconf_initscan(const char *name); +void zconf_nextfile(const char *name); +int zconf_lineno(void); +char *zconf_curname(void); + +/* confdata.c */ +char *conf_get_default_confname(void); + +/* kconfig_load.c */ +void kconfig_load(void); + +/* menu.c */ +void menu_init(void); +struct menu *menu_add_menu(void); +void menu_end_menu(void); +void menu_add_entry(struct symbol *sym); +void menu_end_entry(void); +void menu_add_dep(struct expr *dep); +struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *expr, struct expr *dep); +struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep); +void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep); +void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep); +void menu_add_option(int token, char *arg); +void menu_finalize(struct menu *parent); +void menu_set_type(int type); + +/* util.c */ +struct file *file_lookup(const char *name); +int file_write_dep(const char *name); + +struct gstr { + size_t len; + char *s; +}; +struct gstr str_new(void); +struct gstr str_assign(const char *s); +void str_free(struct gstr *gs); +void str_append(struct gstr *gs, const char *s); +void str_printf(struct gstr *gs, const char *fmt, ...); +const char *str_get(struct gstr *gs); + +/* symbol.c */ +void sym_init(void); +void sym_clear_all_valid(void); +void sym_set_all_changed(void); +void sym_set_changed(struct symbol *sym); +struct symbol *sym_check_deps(struct symbol *sym); +struct property *prop_alloc(enum prop_type type, struct symbol *sym); +struct symbol *prop_get_symbol(struct property *prop); + +static inline tristate sym_get_tristate_value(struct symbol *sym) +{ + return sym->curr.tri; +} + + +static inline struct symbol *sym_get_choice_value(struct symbol *sym) +{ + return (struct symbol *)sym->curr.val; +} + +static inline bool sym_set_choice_value(struct symbol *ch, struct symbol *chval) +{ + return sym_set_tristate_value(chval, yes); +} + +static inline bool sym_is_choice(struct symbol *sym) +{ + return sym->flags & SYMBOL_CHOICE ? true : false; +} + +static inline bool sym_is_choice_value(struct symbol *sym) +{ + return sym->flags & SYMBOL_CHOICEVAL ? true : false; +} + +static inline bool sym_is_optional(struct symbol *sym) +{ + return sym->flags & SYMBOL_OPTIONAL ? true : false; +} + +static inline bool sym_has_value(struct symbol *sym) +{ + return sym->flags & SYMBOL_DEF_USER ? true : false; +} + +#ifdef __cplusplus +} +#endif + +#endif /* LKC_H */ diff --git a/aosp/external/toybox/kconfig/lkc_proto.h b/aosp/external/toybox/kconfig/lkc_proto.h new file mode 100644 index 0000000000000000000000000000000000000000..a263746cfa7de239ba0513b5011b0a090a267d11 --- /dev/null +++ b/aosp/external/toybox/kconfig/lkc_proto.h @@ -0,0 +1,42 @@ + +/* confdata.c */ +P(conf_parse,void,(const char *name)); +P(conf_read,int,(const char *name)); +P(conf_read_simple,int,(const char *name, int)); +P(conf_write,int,(const char *name)); +P(conf_write_autoconf,int,(void)); + +/* menu.c */ +P(rootmenu,struct menu,); + +P(menu_is_visible,bool,(struct menu *menu)); +P(menu_get_prompt,const char *,(struct menu *menu)); +P(menu_get_root_menu,struct menu *,(struct menu *menu)); +P(menu_get_parent_menu,struct menu *,(struct menu *menu)); + +/* symbol.c */ +P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]); +P(sym_change_count,int,); + +P(sym_lookup,struct symbol *,(const char *name, int isconst)); +P(sym_find,struct symbol *,(const char *name)); +P(sym_re_search,struct symbol **,(const char *pattern)); +P(sym_type_name,const char *,(enum symbol_type type)); +P(sym_calc_value,void,(struct symbol *sym)); +P(sym_get_type,enum symbol_type,(struct symbol *sym)); +P(sym_tristate_within_range,bool,(struct symbol *sym,tristate tri)); +P(sym_set_tristate_value,bool,(struct symbol *sym,tristate tri)); +P(sym_toggle_tristate_value,tristate,(struct symbol *sym)); +P(sym_string_valid,bool,(struct symbol *sym, const char *newval)); +P(sym_string_within_range,bool,(struct symbol *sym, const char *str)); +P(sym_set_string_value,bool,(struct symbol *sym, const char *newval)); +P(sym_is_changable,bool,(struct symbol *sym)); +P(sym_get_choice_prop,struct property *,(struct symbol *sym)); +P(sym_get_default_prop,struct property *,(struct symbol *sym)); +P(sym_get_string_value,const char *,(struct symbol *sym)); + +P(prop_get_type_name,const char *,(enum prop_type type)); + +/* expr.c */ +P(expr_compare_type,int,(enum expr_type t1, enum expr_type t2)); +P(expr_print,void,(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken)); diff --git a/aosp/external/toybox/kconfig/lxdialog/BIG.FAT.WARNING b/aosp/external/toybox/kconfig/lxdialog/BIG.FAT.WARNING new file mode 100644 index 0000000000000000000000000000000000000000..a8999d82bdb3b5c00a9668de8f5da89b91c0cc08 --- /dev/null +++ b/aosp/external/toybox/kconfig/lxdialog/BIG.FAT.WARNING @@ -0,0 +1,4 @@ +This is NOT the official version of dialog. This version has been +significantly modified from the original. It is for use by the Linux +kernel configuration script. Please do not bother Savio Lam with +questions about this program. diff --git a/aosp/external/toybox/kconfig/lxdialog/check-lxdialog.sh b/aosp/external/toybox/kconfig/lxdialog/check-lxdialog.sh new file mode 100644 index 0000000000000000000000000000000000000000..120d624e672c5740faf2aa744aa7785c5edbecab --- /dev/null +++ b/aosp/external/toybox/kconfig/lxdialog/check-lxdialog.sh @@ -0,0 +1,84 @@ +#!/bin/sh +# Check ncurses compatibility + +# What library to link +ldflags() +{ + $cc -print-file-name=libncursesw.so | grep -q / + if [ $? -eq 0 ]; then + echo '-lncursesw' + exit + fi + $cc -print-file-name=libncurses.so | grep -q / + if [ $? -eq 0 ]; then + echo '-lncurses' + exit + fi + $cc -print-file-name=libcurses.so | grep -q / + if [ $? -eq 0 ]; then + echo '-lcurses' + exit + fi + exit 1 +} + +# Where is ncurses.h? +ccflags() +{ + if [ -f /usr/include/ncurses/ncurses.h ]; then + echo '-I/usr/include/ncurses -DCURSES_LOC=""' + elif [ -f /usr/include/ncurses/curses.h ]; then + echo '-I/usr/include/ncurses -DCURSES_LOC=""' + elif [ -f /usr/include/ncurses.h ]; then + echo '-DCURSES_LOC=""' + else + echo '-DCURSES_LOC=""' + fi +} + +# Temp file, try to clean up after us +tmp=.lxdialog.tmp +trap "rm -f $tmp" 0 1 2 3 15 + +# Check if we can link to ncurses +check() { + echo "main() {}" | $cc -xc - -o $tmp 2> /dev/null + if [ $? != 0 ]; then + echo " *** Unable to find the ncurses libraries." 1>&2 + echo " *** make menuconfig require the ncurses libraries" 1>&2 + echo " *** " 1>&2 + echo " *** Install ncurses (ncurses-devel) and try again" 1>&2 + echo " *** " 1>&2 + exit 1 + fi +} + +usage() { + printf "Usage: $0 [-check compiler options|-header|-library]\n" +} + +if [ $# == 0 ]; then + usage + exit 1 +fi + +cc="" +case "$1" in + "-check") + shift + cc="$@" + check + ;; + "-ccflags") + ccflags + ;; + "-ldflags") + shift + cc="$@" + ldflags + ;; + "*") + usage + exit 1 + ;; +esac diff --git a/aosp/external/toybox/kconfig/lxdialog/checklist.c b/aosp/external/toybox/kconfig/lxdialog/checklist.c new file mode 100644 index 0000000000000000000000000000000000000000..cf697080ddddd4bf47df0057f860ef681255ea29 --- /dev/null +++ b/aosp/external/toybox/kconfig/lxdialog/checklist.c @@ -0,0 +1,325 @@ +/* + * checklist.c -- implements the checklist box + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * Stuart Herbert - S.Herbert@sheffield.ac.uk: radiolist extension + * Alessandro Rubini - rubini@ipvvis.unipv.it: merged the two + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "dialog.h" + +static int list_width, check_x, item_x; + +/* + * Print list item + */ +static void print_item(WINDOW * win, int choice, int selected) +{ + int i; + + /* Clear 'residue' of last item */ + wattrset(win, dlg.menubox.atr); + wmove(win, choice, 0); + for (i = 0; i < list_width; i++) + waddch(win, ' '); + + wmove(win, choice, check_x); + wattrset(win, selected ? dlg.check_selected.atr + : dlg.check.atr); + wprintw(win, "(%c)", item_is_tag('X') ? 'X' : ' '); + + wattrset(win, selected ? dlg.tag_selected.atr : dlg.tag.atr); + mvwaddch(win, choice, item_x, item_str()[0]); + wattrset(win, selected ? dlg.item_selected.atr : dlg.item.atr); + waddstr(win, (char *)item_str() + 1); + if (selected) { + wmove(win, choice, check_x + 1); + wrefresh(win); + } +} + +/* + * Print the scroll indicators. + */ +static void print_arrows(WINDOW * win, int choice, int item_no, int scroll, + int y, int x, int height) +{ + wmove(win, y, x); + + if (scroll > 0) { + wattrset(win, dlg.uarrow.atr); + waddch(win, ACS_UARROW); + waddstr(win, "(-)"); + } else { + wattrset(win, dlg.menubox.atr); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + } + + y = y + height + 1; + wmove(win, y, x); + + if ((height < item_no) && (scroll + choice < item_no - 1)) { + wattrset(win, dlg.darrow.atr); + waddch(win, ACS_DARROW); + waddstr(win, "(+)"); + } else { + wattrset(win, dlg.menubox_border.atr); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + } +} + +/* + * Display the termination buttons + */ +static void print_buttons(WINDOW * dialog, int height, int width, int selected) +{ + int x = width / 2 - 11; + int y = height - 2; + + print_button(dialog, "Select", y, x, selected == 0); + print_button(dialog, " Help ", y, x + 14, selected == 1); + + wmove(dialog, y, x + 1 + 14 * selected); + wrefresh(dialog); +} + +/* + * Display a dialog box with a list of options that can be turned on or off + * in the style of radiolist (only one option turned on at a time). + */ +int dialog_checklist(const char *title, const char *prompt, int height, + int width, int list_height) +{ + int i, x, y, box_x, box_y; + int key = 0, button = 0, choice = 0, scroll = 0, max_choice; + WINDOW *dialog, *list; + + /* which item to highlight */ + item_foreach() { + if (item_is_tag('X')) + choice = item_n(); + if (item_is_selected()) { + choice = item_n(); + break; + } + } + +do_resize: + if (getmaxy(stdscr) < (height + 6)) + return -ERRDISPLAYTOOSMALL; + if (getmaxx(stdscr) < (width + 6)) + return -ERRDISPLAYTOOSMALL; + + max_choice = MIN(list_height, item_count()); + + /* center dialog box on screen */ + x = (COLS - width) / 2; + y = (LINES - height) / 2; + + draw_shadow(stdscr, y, x, height, width); + + dialog = newwin(height, width, y, x); + keypad(dialog, TRUE); + + draw_box(dialog, 0, 0, height, width, + dlg.dialog.atr, dlg.border.atr); + wattrset(dialog, dlg.border.atr); + mvwaddch(dialog, height - 3, 0, ACS_LTEE); + for (i = 0; i < width - 2; i++) + waddch(dialog, ACS_HLINE); + wattrset(dialog, dlg.dialog.atr); + waddch(dialog, ACS_RTEE); + + print_title(dialog, title, width); + + wattrset(dialog, dlg.dialog.atr); + print_autowrap(dialog, prompt, width - 2, 1, 3); + + list_width = width - 6; + box_y = height - list_height - 5; + box_x = (width - list_width) / 2 - 1; + + /* create new window for the list */ + list = subwin(dialog, list_height, list_width, y + box_y + 1, + x + box_x + 1); + + keypad(list, TRUE); + + /* draw a box around the list items */ + draw_box(dialog, box_y, box_x, list_height + 2, list_width + 2, + dlg.menubox_border.atr, dlg.menubox.atr); + + /* Find length of longest item in order to center checklist */ + check_x = 0; + item_foreach() + check_x = MAX(check_x, strlen(item_str()) + 4); + + check_x = (list_width - check_x) / 2; + item_x = check_x + 4; + + if (choice >= list_height) { + scroll = choice - list_height + 1; + choice -= scroll; + } + + /* Print the list */ + for (i = 0; i < max_choice; i++) { + item_set(scroll + i); + print_item(list, i, i == choice); + } + + print_arrows(dialog, choice, item_count(), scroll, + box_y, box_x + check_x + 5, list_height); + + print_buttons(dialog, height, width, 0); + + wnoutrefresh(dialog); + wnoutrefresh(list); + doupdate(); + + while (key != KEY_ESC) { + key = wgetch(dialog); + + for (i = 0; i < max_choice; i++) { + item_set(i + scroll); + if (toupper(key) == toupper(item_str()[0])) + break; + } + + if (i < max_choice || key == KEY_UP || key == KEY_DOWN || + key == '+' || key == '-') { + if (key == KEY_UP || key == '-') { + if (!choice) { + if (!scroll) + continue; + /* Scroll list down */ + if (list_height > 1) { + /* De-highlight current first item */ + item_set(scroll); + print_item(list, 0, FALSE); + scrollok(list, TRUE); + wscrl(list, -1); + scrollok(list, FALSE); + } + scroll--; + item_set(scroll); + print_item(list, 0, TRUE); + print_arrows(dialog, choice, item_count(), + scroll, box_y, box_x + check_x + 5, list_height); + + wnoutrefresh(dialog); + wrefresh(list); + + continue; /* wait for another key press */ + } else + i = choice - 1; + } else if (key == KEY_DOWN || key == '+') { + if (choice == max_choice - 1) { + if (scroll + choice >= item_count() - 1) + continue; + /* Scroll list up */ + if (list_height > 1) { + /* De-highlight current last item before scrolling up */ + item_set(scroll + max_choice - 1); + print_item(list, + max_choice - 1, + FALSE); + scrollok(list, TRUE); + wscrl(list, 1); + scrollok(list, FALSE); + } + scroll++; + item_set(scroll + max_choice - 1); + print_item(list, max_choice - 1, TRUE); + + print_arrows(dialog, choice, item_count(), + scroll, box_y, box_x + check_x + 5, list_height); + + wnoutrefresh(dialog); + wrefresh(list); + + continue; /* wait for another key press */ + } else + i = choice + 1; + } + if (i != choice) { + /* De-highlight current item */ + item_set(scroll + choice); + print_item(list, choice, FALSE); + /* Highlight new item */ + choice = i; + item_set(scroll + choice); + print_item(list, choice, TRUE); + wnoutrefresh(dialog); + wrefresh(list); + } + continue; /* wait for another key press */ + } + switch (key) { + case 'H': + case 'h': + case '?': + button = 1; + /* fall-through */ + case 'S': + case 's': + case ' ': + case '\n': + item_foreach() + item_set_selected(0); + item_set(scroll + choice); + item_set_selected(1); + delwin(list); + delwin(dialog); + return button; + case TAB: + case KEY_LEFT: + case KEY_RIGHT: + button = ((key == KEY_LEFT ? --button : ++button) < 0) + ? 1 : (button > 1 ? 0 : button); + + print_buttons(dialog, height, width, button); + wrefresh(dialog); + break; + case 'X': + case 'x': + key = KEY_ESC; + break; + case KEY_ESC: + key = on_key_esc(dialog); + break; + case KEY_RESIZE: + delwin(list); + delwin(dialog); + on_key_resize(); + goto do_resize; + } + + /* Now, update everything... */ + doupdate(); + } + delwin(list); + delwin(dialog); + return key; /* ESC pressed */ +} diff --git a/aosp/external/toybox/kconfig/lxdialog/dialog.h b/aosp/external/toybox/kconfig/lxdialog/dialog.h new file mode 100644 index 0000000000000000000000000000000000000000..fd695e1070f76de6d64f2b6d95b2b2a5fbf84a9f --- /dev/null +++ b/aosp/external/toybox/kconfig/lxdialog/dialog.h @@ -0,0 +1,224 @@ +/* + * dialog.h -- common declarations for all dialog modules + * + * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __sun__ +#define CURS_MACROS +#endif +#include CURSES_LOC + +/* + * Colors in ncurses 1.9.9e do not work properly since foreground and + * background colors are OR'd rather than separately masked. This version + * of dialog was hacked to work with ncurses 1.9.9e, making it incompatible + * with standard curses. The simplest fix (to make this work with standard + * curses) uses the wbkgdset() function, not used in the original hack. + * Turn it off if we're building with 1.9.9e, since it just confuses things. + */ +#if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE) +#define OLD_NCURSES 1 +#undef wbkgdset +#define wbkgdset(w,p) /*nothing */ +#else +#define OLD_NCURSES 0 +#endif + +#define TR(params) _tracef params + +#define KEY_ESC 27 +#define TAB 9 +#define MAX_LEN 2048 +#define BUF_SIZE (10*1024) +#define MIN(x,y) (x < y ? x : y) +#define MAX(x,y) (x > y ? x : y) + +#ifndef ACS_ULCORNER +#define ACS_ULCORNER '+' +#endif +#ifndef ACS_LLCORNER +#define ACS_LLCORNER '+' +#endif +#ifndef ACS_URCORNER +#define ACS_URCORNER '+' +#endif +#ifndef ACS_LRCORNER +#define ACS_LRCORNER '+' +#endif +#ifndef ACS_HLINE +#define ACS_HLINE '-' +#endif +#ifndef ACS_VLINE +#define ACS_VLINE '|' +#endif +#ifndef ACS_LTEE +#define ACS_LTEE '+' +#endif +#ifndef ACS_RTEE +#define ACS_RTEE '+' +#endif +#ifndef ACS_UARROW +#define ACS_UARROW '^' +#endif +#ifndef ACS_DARROW +#define ACS_DARROW 'v' +#endif + +/* error return codes */ +#define ERRDISPLAYTOOSMALL (KEY_MAX + 1) + +/* + * Color definitions + */ +struct dialog_color { + chtype atr; /* Color attribute */ + int fg; /* foreground */ + int bg; /* background */ + int hl; /* highlight this item */ +}; + +struct dialog_info { + const char *backtitle; + struct dialog_color screen; + struct dialog_color shadow; + struct dialog_color dialog; + struct dialog_color title; + struct dialog_color border; + struct dialog_color button_active; + struct dialog_color button_inactive; + struct dialog_color button_key_active; + struct dialog_color button_key_inactive; + struct dialog_color button_label_active; + struct dialog_color button_label_inactive; + struct dialog_color inputbox; + struct dialog_color inputbox_border; + struct dialog_color searchbox; + struct dialog_color searchbox_title; + struct dialog_color searchbox_border; + struct dialog_color position_indicator; + struct dialog_color menubox; + struct dialog_color menubox_border; + struct dialog_color item; + struct dialog_color item_selected; + struct dialog_color tag; + struct dialog_color tag_selected; + struct dialog_color tag_key; + struct dialog_color tag_key_selected; + struct dialog_color check; + struct dialog_color check_selected; + struct dialog_color uarrow; + struct dialog_color darrow; +}; + +/* + * Global variables + */ +extern struct dialog_info dlg; +extern char dialog_input_result[]; + +/* + * Function prototypes + */ + +/* item list as used by checklist and menubox */ +void item_reset(void); +void item_make(const char *fmt, ...); +void item_add_str(const char *fmt, ...); +void item_set_tag(char tag); +void item_set_data(void *p); +void item_set_selected(int val); +int item_activate_selected(void); +void *item_data(void); +char item_tag(void); + +/* item list manipulation for lxdialog use */ +#define MAXITEMSTR 200 +struct dialog_item { + char str[MAXITEMSTR]; /* promtp displayed */ + char tag; + void *data; /* pointer to menu item - used by menubox+checklist */ + int selected; /* Set to 1 by dialog_*() function if selected. */ +}; + +/* list of lialog_items */ +struct dialog_list { + struct dialog_item node; + struct dialog_list *next; +}; + +extern struct dialog_list *item_cur; +extern struct dialog_list item_nil; +extern struct dialog_list *item_head; + +int item_count(void); +void item_set(int n); +int item_n(void); +const char *item_str(void); +int item_is_selected(void); +int item_is_tag(char tag); +#define item_foreach() \ + for (item_cur = item_head ? item_head: item_cur; \ + item_cur && (item_cur != &item_nil); item_cur = item_cur->next) + +/* generic key handlers */ +int on_key_esc(WINDOW *win); +int on_key_resize(void); + +void init_dialog(const char *backtitle); +void reset_dialog(void); +void end_dialog(void); +void attr_clear(WINDOW * win, int height, int width, chtype attr); +void dialog_clear(void); +void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x); +void print_button(WINDOW * win, const char *label, int y, int x, int selected); +void print_title(WINDOW *dialog, const char *title, int width); +void draw_box(WINDOW * win, int y, int x, int height, int width, chtype box, + chtype border); +void draw_shadow(WINDOW * win, int y, int x, int height, int width); + +int first_alpha(const char *string, const char *exempt); +int dialog_yesno(const char *title, const char *prompt, int height, int width); +int dialog_msgbox(const char *title, const char *prompt, int height, + int width, int pause); +int dialog_textbox(const char *title, const char *file, int height, int width); +int dialog_menu(const char *title, const char *prompt, + const void *selected, int *s_scroll); +int dialog_checklist(const char *title, const char *prompt, int height, + int width, int list_height); +extern char dialog_input_result[]; +int dialog_inputbox(const char *title, const char *prompt, int height, + int width, const char *init); + +/* + * This is the base for fictitious keys, which activate + * the buttons. + * + * Mouse-generated keys are the following: + * -- the first 32 are used as numbers, in addition to '0'-'9' + * -- the lowercase are used to signal mouse-enter events (M_EVENT + 'o') + * -- uppercase chars are used to invoke the button (M_EVENT + 'O') + */ +#define M_EVENT (KEY_MAX+1) diff --git a/aosp/external/toybox/kconfig/lxdialog/inputbox.c b/aosp/external/toybox/kconfig/lxdialog/inputbox.c new file mode 100644 index 0000000000000000000000000000000000000000..05e72066b35987dfe7037f6abd2fe29a03cb016a --- /dev/null +++ b/aosp/external/toybox/kconfig/lxdialog/inputbox.c @@ -0,0 +1,238 @@ +/* + * inputbox.c -- implements the input box + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "dialog.h" + +char dialog_input_result[MAX_LEN + 1]; + +/* + * Print the termination buttons + */ +static void print_buttons(WINDOW * dialog, int height, int width, int selected) +{ + int x = width / 2 - 11; + int y = height - 2; + + print_button(dialog, " Ok ", y, x, selected == 0); + print_button(dialog, " Help ", y, x + 14, selected == 1); + + wmove(dialog, y, x + 1 + 14 * selected); + wrefresh(dialog); +} + +/* + * Display a dialog box for inputing a string + */ +int dialog_inputbox(const char *title, const char *prompt, int height, int width, + const char *init) +{ + int i, x, y, box_y, box_x, box_width; + int input_x = 0, scroll = 0, key = 0, button = -1; + char *instr = dialog_input_result; + WINDOW *dialog; + + if (!init) + instr[0] = '\0'; + else + strcpy(instr, init); + +do_resize: + if (getmaxy(stdscr) <= (height - 2)) + return -ERRDISPLAYTOOSMALL; + if (getmaxx(stdscr) <= (width - 2)) + return -ERRDISPLAYTOOSMALL; + + /* center dialog box on screen */ + x = (COLS - width) / 2; + y = (LINES - height) / 2; + + draw_shadow(stdscr, y, x, height, width); + + dialog = newwin(height, width, y, x); + keypad(dialog, TRUE); + + draw_box(dialog, 0, 0, height, width, + dlg.dialog.atr, dlg.border.atr); + wattrset(dialog, dlg.border.atr); + mvwaddch(dialog, height - 3, 0, ACS_LTEE); + for (i = 0; i < width - 2; i++) + waddch(dialog, ACS_HLINE); + wattrset(dialog, dlg.dialog.atr); + waddch(dialog, ACS_RTEE); + + print_title(dialog, title, width); + + wattrset(dialog, dlg.dialog.atr); + print_autowrap(dialog, prompt, width - 2, 1, 3); + + /* Draw the input field box */ + box_width = width - 6; + getyx(dialog, y, x); + box_y = y + 2; + box_x = (width - box_width) / 2; + draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2, + dlg.border.atr, dlg.dialog.atr); + + print_buttons(dialog, height, width, 0); + + /* Set up the initial value */ + wmove(dialog, box_y, box_x); + wattrset(dialog, dlg.inputbox.atr); + + input_x = strlen(instr); + + if (input_x >= box_width) { + scroll = input_x - box_width + 1; + input_x = box_width - 1; + for (i = 0; i < box_width - 1; i++) + waddch(dialog, instr[scroll + i]); + } else { + waddstr(dialog, instr); + } + + wmove(dialog, box_y, box_x + input_x); + + wrefresh(dialog); + + while (key != KEY_ESC) { + key = wgetch(dialog); + + if (button == -1) { /* Input box selected */ + switch (key) { + case TAB: + case KEY_UP: + case KEY_DOWN: + break; + case KEY_LEFT: + continue; + case KEY_RIGHT: + continue; + case KEY_BACKSPACE: + case 127: + if (input_x || scroll) { + wattrset(dialog, dlg.inputbox.atr); + if (!input_x) { + scroll = scroll < box_width - 1 ? 0 : scroll - (box_width - 1); + wmove(dialog, box_y, box_x); + for (i = 0; i < box_width; i++) + waddch(dialog, + instr[scroll + input_x + i] ? + instr[scroll + input_x + i] : ' '); + input_x = strlen(instr) - scroll; + } else + input_x--; + instr[scroll + input_x] = '\0'; + mvwaddch(dialog, box_y, input_x + box_x, ' '); + wmove(dialog, box_y, input_x + box_x); + wrefresh(dialog); + } + continue; + default: + if (key < 0x100 && isprint(key)) { + if (scroll + input_x < MAX_LEN) { + wattrset(dialog, dlg.inputbox.atr); + instr[scroll + input_x] = key; + instr[scroll + input_x + 1] = '\0'; + if (input_x == box_width - 1) { + scroll++; + wmove(dialog, box_y, box_x); + for (i = 0; i < box_width - 1; i++) + waddch(dialog, instr [scroll + i]); + } else { + wmove(dialog, box_y, input_x++ + box_x); + waddch(dialog, key); + } + wrefresh(dialog); + } else + flash(); /* Alarm user about overflow */ + continue; + } + } + } + switch (key) { + case 'O': + case 'o': + delwin(dialog); + return 0; + case 'H': + case 'h': + delwin(dialog); + return 1; + case KEY_UP: + case KEY_LEFT: + switch (button) { + case -1: + button = 1; /* Indicates "Cancel" button is selected */ + print_buttons(dialog, height, width, 1); + break; + case 0: + button = -1; /* Indicates input box is selected */ + print_buttons(dialog, height, width, 0); + wmove(dialog, box_y, box_x + input_x); + wrefresh(dialog); + break; + case 1: + button = 0; /* Indicates "OK" button is selected */ + print_buttons(dialog, height, width, 0); + break; + } + break; + case TAB: + case KEY_DOWN: + case KEY_RIGHT: + switch (button) { + case -1: + button = 0; /* Indicates "OK" button is selected */ + print_buttons(dialog, height, width, 0); + break; + case 0: + button = 1; /* Indicates "Cancel" button is selected */ + print_buttons(dialog, height, width, 1); + break; + case 1: + button = -1; /* Indicates input box is selected */ + print_buttons(dialog, height, width, 0); + wmove(dialog, box_y, box_x + input_x); + wrefresh(dialog); + break; + } + break; + case ' ': + case '\n': + delwin(dialog); + return (button == -1 ? 0 : button); + case 'X': + case 'x': + key = KEY_ESC; + break; + case KEY_ESC: + key = on_key_esc(dialog); + break; + case KEY_RESIZE: + delwin(dialog); + on_key_resize(); + goto do_resize; + } + } + + delwin(dialog); + return KEY_ESC; /* ESC pressed */ +} diff --git a/aosp/external/toybox/kconfig/lxdialog/menubox.c b/aosp/external/toybox/kconfig/lxdialog/menubox.c new file mode 100644 index 0000000000000000000000000000000000000000..0d83159d90127a1dad38be99edff1a0973353a33 --- /dev/null +++ b/aosp/external/toybox/kconfig/lxdialog/menubox.c @@ -0,0 +1,434 @@ +/* + * menubox.c -- implements the menu box + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcapw@cfw.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/* + * Changes by Clifford Wolf (god@clifford.at) + * + * [ 1998-06-13 ] + * + * *) A bugfix for the Page-Down problem + * + * *) Formerly when I used Page Down and Page Up, the cursor would be set + * to the first position in the menu box. Now lxdialog is a bit + * smarter and works more like other menu systems (just have a look at + * it). + * + * *) Formerly if I selected something my scrolling would be broken because + * lxdialog is re-invoked by the Menuconfig shell script, can't + * remember the last scrolling position, and just sets it so that the + * cursor is at the bottom of the box. Now it writes the temporary file + * lxdialog.scrltmp which contains this information. The file is + * deleted by lxdialog if the user leaves a submenu or enters a new + * one, but it would be nice if Menuconfig could make another "rm -f" + * just to be sure. Just try it out - you will recognise a difference! + * + * [ 1998-06-14 ] + * + * *) Now lxdialog is crash-safe against broken "lxdialog.scrltmp" files + * and menus change their size on the fly. + * + * *) If for some reason the last scrolling position is not saved by + * lxdialog, it sets the scrolling so that the selected item is in the + * middle of the menu box, not at the bottom. + * + * 02 January 1999, Michael Elizabeth Chastain (mec@shout.net) + * Reset 'scroll' to 0 if the value from lxdialog.scrltmp is bogus. + * This fixes a bug in Menuconfig where using ' ' to descend into menus + * would leave mis-synchronized lxdialog.scrltmp files lying around, + * fscanf would read in 'scroll', and eventually that value would get used. + */ + +#include "dialog.h" + +static int menu_width, item_x; + +/* + * Print menu item + */ +static void do_print_item(WINDOW * win, const char *item, int line_y, + int selected, int hotkey) +{ + int j; + char *menu_item = malloc(menu_width + 1); + + strncpy(menu_item, item, menu_width - item_x); + menu_item[menu_width - item_x] = '\0'; + j = first_alpha(menu_item, "YyNnMmHh"); + + /* Clear 'residue' of last item */ + wattrset(win, dlg.menubox.atr); + wmove(win, line_y, 0); +#if OLD_NCURSES + { + int i; + for (i = 0; i < menu_width; i++) + waddch(win, ' '); + } +#else + wclrtoeol(win); +#endif + wattrset(win, selected ? dlg.item_selected.atr : dlg.item.atr); + mvwaddstr(win, line_y, item_x, menu_item); + if (hotkey) { + wattrset(win, selected ? dlg.tag_key_selected.atr + : dlg.tag_key.atr); + mvwaddch(win, line_y, item_x + j, menu_item[j]); + } + if (selected) { + wmove(win, line_y, item_x + 1); + } + free(menu_item); + wrefresh(win); +} + +#define print_item(index, choice, selected) \ +do { \ + item_set(index); \ + do_print_item(menu, item_str(), choice, selected, !item_is_tag(':')); \ +} while (0) + +/* + * Print the scroll indicators. + */ +static void print_arrows(WINDOW * win, int item_no, int scroll, int y, int x, + int height) +{ + int cur_y, cur_x; + + getyx(win, cur_y, cur_x); + + wmove(win, y, x); + + if (scroll > 0) { + wattrset(win, dlg.uarrow.atr); + waddch(win, ACS_UARROW); + waddstr(win, "(-)"); + } else { + wattrset(win, dlg.menubox.atr); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + } + + y = y + height + 1; + wmove(win, y, x); + wrefresh(win); + + if ((height < item_no) && (scroll + height < item_no)) { + wattrset(win, dlg.darrow.atr); + waddch(win, ACS_DARROW); + waddstr(win, "(+)"); + } else { + wattrset(win, dlg.menubox_border.atr); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + } + + wmove(win, cur_y, cur_x); + wrefresh(win); +} + +/* + * Display the termination buttons. + */ +static void print_buttons(WINDOW * win, int height, int width, int selected) +{ + int x = width / 2 - 16; + int y = height - 2; + + print_button(win, "Select", y, x, selected == 0); + print_button(win, " Exit ", y, x + 12, selected == 1); + print_button(win, " Help ", y, x + 24, selected == 2); + + wmove(win, y, x + 1 + 12 * selected); + wrefresh(win); +} + +/* scroll up n lines (n may be negative) */ +static void do_scroll(WINDOW *win, int *scroll, int n) +{ + /* Scroll menu up */ + scrollok(win, TRUE); + wscrl(win, n); + scrollok(win, FALSE); + *scroll = *scroll + n; + wrefresh(win); +} + +/* + * Display a menu for choosing among a number of options + */ +int dialog_menu(const char *title, const char *prompt, + const void *selected, int *s_scroll) +{ + int i, j, x, y, box_x, box_y; + int height, width, menu_height; + int key = 0, button = 0, scroll = 0, choice = 0; + int first_item = 0, max_choice; + WINDOW *dialog, *menu; + +do_resize: + height = getmaxy(stdscr); + width = getmaxx(stdscr); + if (height < 15 || width < 65) + return -ERRDISPLAYTOOSMALL; + + height -= 4; + width -= 5; + menu_height = height - 10; + + max_choice = MIN(menu_height, item_count()); + + /* center dialog box on screen */ + x = (COLS - width) / 2; + y = (LINES - height) / 2; + + draw_shadow(stdscr, y, x, height, width); + + dialog = newwin(height, width, y, x); + keypad(dialog, TRUE); + + draw_box(dialog, 0, 0, height, width, + dlg.dialog.atr, dlg.border.atr); + wattrset(dialog, dlg.border.atr); + mvwaddch(dialog, height - 3, 0, ACS_LTEE); + for (i = 0; i < width - 2; i++) + waddch(dialog, ACS_HLINE); + wattrset(dialog, dlg.dialog.atr); + wbkgdset(dialog, dlg.dialog.atr & A_COLOR); + waddch(dialog, ACS_RTEE); + + print_title(dialog, title, width); + + wattrset(dialog, dlg.dialog.atr); + print_autowrap(dialog, prompt, width - 2, 1, 3); + + menu_width = width - 6; + box_y = height - menu_height - 5; + box_x = (width - menu_width) / 2 - 1; + + /* create new window for the menu */ + menu = subwin(dialog, menu_height, menu_width, + y + box_y + 1, x + box_x + 1); + keypad(menu, TRUE); + + /* draw a box around the menu items */ + draw_box(dialog, box_y, box_x, menu_height + 2, menu_width + 2, + dlg.menubox_border.atr, dlg.menubox.atr); + + if (menu_width >= 80) + item_x = (menu_width - 70) / 2; + else + item_x = 4; + + /* Set choice to default item */ + item_foreach() + if (selected && (selected == item_data())) + choice = item_n(); + /* get the saved scroll info */ + scroll = *s_scroll; + if ((scroll <= choice) && (scroll + max_choice > choice) && + (scroll >= 0) && (scroll + max_choice <= item_count())) { + first_item = scroll; + choice = choice - scroll; + } else { + scroll = 0; + } + if ((choice >= max_choice)) { + if (choice >= item_count() - max_choice / 2) + scroll = first_item = item_count() - max_choice; + else + scroll = first_item = choice - max_choice / 2; + choice = choice - scroll; + } + + /* Print the menu */ + for (i = 0; i < max_choice; i++) { + print_item(first_item + i, i, i == choice); + } + + wnoutrefresh(menu); + + print_arrows(dialog, item_count(), scroll, + box_y, box_x + item_x + 1, menu_height); + + print_buttons(dialog, height, width, 0); + wmove(menu, choice, item_x + 1); + wrefresh(menu); + + while (key != KEY_ESC) { + key = wgetch(menu); + + if (key < 256 && isalpha(key)) + key = tolower(key); + + if (strchr("ynmh", key)) + i = max_choice; + else { + for (i = choice + 1; i < max_choice; i++) { + item_set(scroll + i); + j = first_alpha(item_str(), "YyNnMmHh"); + if (key == tolower(item_str()[j])) + break; + } + if (i == max_choice) + for (i = 0; i < max_choice; i++) { + item_set(scroll + i); + j = first_alpha(item_str(), "YyNnMmHh"); + if (key == tolower(item_str()[j])) + break; + } + } + + if (i < max_choice || + key == KEY_UP || key == KEY_DOWN || + key == '-' || key == '+' || + key == KEY_PPAGE || key == KEY_NPAGE) { + /* Remove highligt of current item */ + print_item(scroll + choice, choice, FALSE); + + if (key == KEY_UP || key == '-') { + if (choice < 2 && scroll) { + /* Scroll menu down */ + do_scroll(menu, &scroll, -1); + + print_item(scroll, 0, FALSE); + } else + choice = MAX(choice - 1, 0); + + } else if (key == KEY_DOWN || key == '+') { + print_item(scroll+choice, choice, FALSE); + + if ((choice > max_choice - 3) && + (scroll + max_choice < item_count())) { + /* Scroll menu up */ + do_scroll(menu, &scroll, 1); + + print_item(scroll+max_choice - 1, + max_choice - 1, FALSE); + } else + choice = MIN(choice + 1, max_choice - 1); + + } else if (key == KEY_PPAGE) { + scrollok(menu, TRUE); + for (i = 0; (i < max_choice); i++) { + if (scroll > 0) { + do_scroll(menu, &scroll, -1); + print_item(scroll, 0, FALSE); + } else { + if (choice > 0) + choice--; + } + } + + } else if (key == KEY_NPAGE) { + for (i = 0; (i < max_choice); i++) { + if (scroll + max_choice < item_count()) { + do_scroll(menu, &scroll, 1); + print_item(scroll+max_choice-1, + max_choice - 1, FALSE); + } else { + if (choice + 1 < max_choice) + choice++; + } + } + } else + choice = i; + + print_item(scroll + choice, choice, TRUE); + + print_arrows(dialog, item_count(), scroll, + box_y, box_x + item_x + 1, menu_height); + + wnoutrefresh(dialog); + wrefresh(menu); + + continue; /* wait for another key press */ + } + + switch (key) { + case KEY_LEFT: + case TAB: + case KEY_RIGHT: + button = ((key == KEY_LEFT ? --button : ++button) < 0) + ? 2 : (button > 2 ? 0 : button); + + print_buttons(dialog, height, width, button); + wrefresh(menu); + break; + case ' ': + case 's': + case 'y': + case 'n': + case 'm': + case '/': + /* save scroll info */ + *s_scroll = scroll; + delwin(menu); + delwin(dialog); + item_set(scroll + choice); + item_set_selected(1); + switch (key) { + case 's': + return 3; + case 'y': + return 3; + case 'n': + return 4; + case 'm': + return 5; + case ' ': + return 6; + case '/': + return 7; + } + return 0; + case 'h': + case '?': + button = 2; + case '\n': + *s_scroll = scroll; + delwin(menu); + delwin(dialog); + item_set(scroll + choice); + item_set_selected(1); + return button; + case 'e': + case 'x': + key = KEY_ESC; + break; + case KEY_ESC: + key = on_key_esc(menu); + break; + case KEY_RESIZE: + on_key_resize(); + delwin(menu); + delwin(dialog); + goto do_resize; + } + } + delwin(menu); + delwin(dialog); + return key; /* ESC pressed */ +} diff --git a/aosp/external/toybox/kconfig/lxdialog/textbox.c b/aosp/external/toybox/kconfig/lxdialog/textbox.c new file mode 100644 index 0000000000000000000000000000000000000000..fabfc1ad789d674f5f91637cba70cbfc335431d0 --- /dev/null +++ b/aosp/external/toybox/kconfig/lxdialog/textbox.c @@ -0,0 +1,391 @@ +/* + * textbox.c -- implements the text box + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "dialog.h" + +static void back_lines(int n); +static void print_page(WINDOW * win, int height, int width); +static void print_line(WINDOW * win, int row, int width); +static char *get_line(void); +static void print_position(WINDOW * win); + +static int hscroll; +static int begin_reached, end_reached, page_length; +static const char *buf; +static const char *page; + +/* + * refresh window content + */ +static void refresh_text_box(WINDOW *dialog, WINDOW *box, int boxh, int boxw, + int cur_y, int cur_x) +{ + print_page(box, boxh, boxw); + print_position(dialog); + wmove(dialog, cur_y, cur_x); /* Restore cursor position */ + wrefresh(dialog); +} + + +/* + * Display text from a file in a dialog box. + */ +int dialog_textbox(const char *title, const char *tbuf, + int initial_height, int initial_width) +{ + int i, x, y, cur_x, cur_y, key = 0; + int height, width, boxh, boxw; + int passed_end; + WINDOW *dialog, *box; + + begin_reached = 1; + end_reached = 0; + page_length = 0; + hscroll = 0; + buf = tbuf; + page = buf; /* page is pointer to start of page to be displayed */ + +do_resize: + getmaxyx(stdscr, height, width); + if (height < 8 || width < 8) + return -ERRDISPLAYTOOSMALL; + if (initial_height != 0) + height = initial_height; + else + if (height > 4) + height -= 4; + else + height = 0; + if (initial_width != 0) + width = initial_width; + else + if (width > 5) + width -= 5; + else + width = 0; + + /* center dialog box on screen */ + x = (COLS - width) / 2; + y = (LINES - height) / 2; + + draw_shadow(stdscr, y, x, height, width); + + dialog = newwin(height, width, y, x); + keypad(dialog, TRUE); + + /* Create window for box region, used for scrolling text */ + boxh = height - 4; + boxw = width - 2; + box = subwin(dialog, boxh, boxw, y + 1, x + 1); + wattrset(box, dlg.dialog.atr); + wbkgdset(box, dlg.dialog.atr & A_COLOR); + + keypad(box, TRUE); + + /* register the new window, along with its borders */ + draw_box(dialog, 0, 0, height, width, + dlg.dialog.atr, dlg.border.atr); + + wattrset(dialog, dlg.border.atr); + mvwaddch(dialog, height - 3, 0, ACS_LTEE); + for (i = 0; i < width - 2; i++) + waddch(dialog, ACS_HLINE); + wattrset(dialog, dlg.dialog.atr); + wbkgdset(dialog, dlg.dialog.atr & A_COLOR); + waddch(dialog, ACS_RTEE); + + print_title(dialog, title, width); + + print_button(dialog, " Exit ", height - 2, width / 2 - 4, TRUE); + wnoutrefresh(dialog); + getyx(dialog, cur_y, cur_x); /* Save cursor position */ + + /* Print first page of text */ + attr_clear(box, boxh, boxw, dlg.dialog.atr); + refresh_text_box(dialog, box, boxh, boxw, cur_y, cur_x); + + while ((key != KEY_ESC) && (key != '\n')) { + key = wgetch(dialog); + switch (key) { + case 'E': /* Exit */ + case 'e': + case 'X': + case 'x': + delwin(box); + delwin(dialog); + return 0; + case 'g': /* First page */ + case KEY_HOME: + if (!begin_reached) { + begin_reached = 1; + page = buf; + refresh_text_box(dialog, box, boxh, boxw, + cur_y, cur_x); + } + break; + case 'G': /* Last page */ + case KEY_END: + + end_reached = 1; + /* point to last char in buf */ + page = buf + strlen(buf); + back_lines(boxh); + refresh_text_box(dialog, box, boxh, boxw, + cur_y, cur_x); + break; + case 'K': /* Previous line */ + case 'k': + case KEY_UP: + if (!begin_reached) { + back_lines(page_length + 1); + + /* We don't call print_page() here but use + * scrolling to ensure faster screen update. + * However, 'end_reached' and 'page_length' + * should still be updated, and 'page' should + * point to start of next page. This is done + * by calling get_line() in the following + * 'for' loop. */ + scrollok(box, TRUE); + wscrl(box, -1); /* Scroll box region down one line */ + scrollok(box, FALSE); + page_length = 0; + passed_end = 0; + for (i = 0; i < boxh; i++) { + if (!i) { + /* print first line of page */ + print_line(box, 0, boxw); + wnoutrefresh(box); + } else + /* Called to update 'end_reached' and 'page' */ + get_line(); + if (!passed_end) + page_length++; + if (end_reached && !passed_end) + passed_end = 1; + } + + print_position(dialog); + wmove(dialog, cur_y, cur_x); /* Restore cursor position */ + wrefresh(dialog); + } + break; + case 'B': /* Previous page */ + case 'b': + case KEY_PPAGE: + if (begin_reached) + break; + back_lines(page_length + boxh); + refresh_text_box(dialog, box, boxh, boxw, + cur_y, cur_x); + break; + case 'J': /* Next line */ + case 'j': + case KEY_DOWN: + if (!end_reached) { + begin_reached = 0; + scrollok(box, TRUE); + scroll(box); /* Scroll box region up one line */ + scrollok(box, FALSE); + print_line(box, boxh - 1, boxw); + wnoutrefresh(box); + print_position(dialog); + wmove(dialog, cur_y, cur_x); /* Restore cursor position */ + wrefresh(dialog); + } + break; + case KEY_NPAGE: /* Next page */ + case ' ': + if (end_reached) + break; + + begin_reached = 0; + refresh_text_box(dialog, box, boxh, boxw, + cur_y, cur_x); + break; + case '0': /* Beginning of line */ + case 'H': /* Scroll left */ + case 'h': + case KEY_LEFT: + if (hscroll <= 0) + break; + + if (key == '0') + hscroll = 0; + else + hscroll--; + /* Reprint current page to scroll horizontally */ + back_lines(page_length); + refresh_text_box(dialog, box, boxh, boxw, + cur_y, cur_x); + break; + case 'L': /* Scroll right */ + case 'l': + case KEY_RIGHT: + if (hscroll >= MAX_LEN) + break; + hscroll++; + /* Reprint current page to scroll horizontally */ + back_lines(page_length); + refresh_text_box(dialog, box, boxh, boxw, + cur_y, cur_x); + break; + case KEY_ESC: + key = on_key_esc(dialog); + break; + case KEY_RESIZE: + back_lines(height); + delwin(box); + delwin(dialog); + on_key_resize(); + goto do_resize; + } + } + delwin(box); + delwin(dialog); + return key; /* ESC pressed */ +} + +/* + * Go back 'n' lines in text. Called by dialog_textbox(). + * 'page' will be updated to point to the desired line in 'buf'. + */ +static void back_lines(int n) +{ + int i; + + begin_reached = 0; + /* Go back 'n' lines */ + for (i = 0; i < n; i++) { + if (*page == '\0') { + if (end_reached) { + end_reached = 0; + continue; + } + } + if (page == buf) { + begin_reached = 1; + return; + } + page--; + do { + if (page == buf) { + begin_reached = 1; + return; + } + page--; + } while (*page != '\n'); + page++; + } +} + +/* + * Print a new page of text. Called by dialog_textbox(). + */ +static void print_page(WINDOW * win, int height, int width) +{ + int i, passed_end = 0; + + page_length = 0; + for (i = 0; i < height; i++) { + print_line(win, i, width); + if (!passed_end) + page_length++; + if (end_reached && !passed_end) + passed_end = 1; + } + wnoutrefresh(win); +} + +/* + * Print a new line of text. Called by dialog_textbox() and print_page(). + */ +static void print_line(WINDOW * win, int row, int width) +{ + int y, x; + char *line; + + line = get_line(); + line += MIN(strlen(line), hscroll); /* Scroll horizontally */ + wmove(win, row, 0); /* move cursor to correct line */ + waddch(win, ' '); + waddnstr(win, line, MIN(strlen(line), width - 2)); + + getyx(win, y, x); + /* Clear 'residue' of previous line */ +#if OLD_NCURSES + { + int i; + for (i = 0; i < width - x; i++) + waddch(win, ' '); + } +#else + wclrtoeol(win); +#endif +} + +/* + * Return current line of text. Called by dialog_textbox() and print_line(). + * 'page' should point to start of current line before calling, and will be + * updated to point to start of next line. + */ +static char *get_line(void) +{ + int i = 0; + static char line[MAX_LEN + 1]; + + end_reached = 0; + while (*page != '\n') { + if (*page == '\0') { + if (!end_reached) { + end_reached = 1; + break; + } + } else if (i < MAX_LEN) + line[i++] = *(page++); + else { + /* Truncate lines longer than MAX_LEN characters */ + if (i == MAX_LEN) + line[i++] = '\0'; + page++; + } + } + if (i <= MAX_LEN) + line[i] = '\0'; + if (!end_reached) + page++; /* move pass '\n' */ + + return line; +} + +/* + * Print current position + */ +static void print_position(WINDOW * win) +{ + int percent; + + wattrset(win, dlg.position_indicator.atr); + wbkgdset(win, dlg.position_indicator.atr & A_COLOR); + percent = (page - buf) * 100 / strlen(buf); + wmove(win, getmaxy(win) - 3, getmaxx(win) - 9); + wprintw(win, "(%3d%%)", percent); +} diff --git a/aosp/external/toybox/kconfig/lxdialog/util.c b/aosp/external/toybox/kconfig/lxdialog/util.c new file mode 100644 index 0000000000000000000000000000000000000000..ebc781b493d7c8a86ca7d95bae7f943bbb5430a9 --- /dev/null +++ b/aosp/external/toybox/kconfig/lxdialog/util.c @@ -0,0 +1,642 @@ +/* + * util.c + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "dialog.h" + +struct dialog_info dlg; + +static void set_mono_theme(void) +{ + dlg.screen.atr = A_NORMAL; + dlg.shadow.atr = A_NORMAL; + dlg.dialog.atr = A_NORMAL; + dlg.title.atr = A_BOLD; + dlg.border.atr = A_NORMAL; + dlg.button_active.atr = A_REVERSE; + dlg.button_inactive.atr = A_DIM; + dlg.button_key_active.atr = A_REVERSE; + dlg.button_key_inactive.atr = A_BOLD; + dlg.button_label_active.atr = A_REVERSE; + dlg.button_label_inactive.atr = A_NORMAL; + dlg.inputbox.atr = A_NORMAL; + dlg.inputbox_border.atr = A_NORMAL; + dlg.searchbox.atr = A_NORMAL; + dlg.searchbox_title.atr = A_BOLD; + dlg.searchbox_border.atr = A_NORMAL; + dlg.position_indicator.atr = A_BOLD; + dlg.menubox.atr = A_NORMAL; + dlg.menubox_border.atr = A_NORMAL; + dlg.item.atr = A_NORMAL; + dlg.item_selected.atr = A_REVERSE; + dlg.tag.atr = A_BOLD; + dlg.tag_selected.atr = A_REVERSE; + dlg.tag_key.atr = A_BOLD; + dlg.tag_key_selected.atr = A_REVERSE; + dlg.check.atr = A_BOLD; + dlg.check_selected.atr = A_REVERSE; + dlg.uarrow.atr = A_BOLD; + dlg.darrow.atr = A_BOLD; +} + +#define DLG_COLOR(dialog, f, b, h) \ +do { \ + dlg.dialog.fg = (f); \ + dlg.dialog.bg = (b); \ + dlg.dialog.hl = (h); \ +} while (0) + +static void set_classic_theme(void) +{ + DLG_COLOR(screen, COLOR_CYAN, COLOR_BLUE, true); + DLG_COLOR(shadow, COLOR_BLACK, COLOR_BLACK, true); + DLG_COLOR(dialog, COLOR_BLACK, COLOR_WHITE, false); + DLG_COLOR(title, COLOR_YELLOW, COLOR_WHITE, true); + DLG_COLOR(border, COLOR_WHITE, COLOR_WHITE, true); + DLG_COLOR(button_active, COLOR_WHITE, COLOR_BLUE, true); + DLG_COLOR(button_inactive, COLOR_BLACK, COLOR_WHITE, false); + DLG_COLOR(button_key_active, COLOR_WHITE, COLOR_BLUE, true); + DLG_COLOR(button_key_inactive, COLOR_RED, COLOR_WHITE, false); + DLG_COLOR(button_label_active, COLOR_YELLOW, COLOR_BLUE, true); + DLG_COLOR(button_label_inactive, COLOR_BLACK, COLOR_WHITE, true); + DLG_COLOR(inputbox, COLOR_BLACK, COLOR_WHITE, false); + DLG_COLOR(inputbox_border, COLOR_BLACK, COLOR_WHITE, false); + DLG_COLOR(searchbox, COLOR_BLACK, COLOR_WHITE, false); + DLG_COLOR(searchbox_title, COLOR_YELLOW, COLOR_WHITE, true); + DLG_COLOR(searchbox_border, COLOR_WHITE, COLOR_WHITE, true); + DLG_COLOR(position_indicator, COLOR_YELLOW, COLOR_WHITE, true); + DLG_COLOR(menubox, COLOR_BLACK, COLOR_WHITE, false); + DLG_COLOR(menubox_border, COLOR_WHITE, COLOR_WHITE, true); + DLG_COLOR(item, COLOR_BLACK, COLOR_WHITE, false); + DLG_COLOR(item_selected, COLOR_WHITE, COLOR_BLUE, true); + DLG_COLOR(tag, COLOR_YELLOW, COLOR_WHITE, true); + DLG_COLOR(tag_selected, COLOR_YELLOW, COLOR_BLUE, true); + DLG_COLOR(tag_key, COLOR_YELLOW, COLOR_WHITE, true); + DLG_COLOR(tag_key_selected, COLOR_YELLOW, COLOR_BLUE, true); + DLG_COLOR(check, COLOR_BLACK, COLOR_WHITE, false); + DLG_COLOR(check_selected, COLOR_WHITE, COLOR_BLUE, true); + DLG_COLOR(uarrow, COLOR_GREEN, COLOR_WHITE, true); + DLG_COLOR(darrow, COLOR_GREEN, COLOR_WHITE, true); +} + +static void set_blackbg_theme(void) +{ + DLG_COLOR(screen, COLOR_RED, COLOR_BLACK, true); + DLG_COLOR(shadow, COLOR_BLACK, COLOR_BLACK, false); + DLG_COLOR(dialog, COLOR_WHITE, COLOR_BLACK, false); + DLG_COLOR(title, COLOR_RED, COLOR_BLACK, false); + DLG_COLOR(border, COLOR_BLACK, COLOR_BLACK, true); + + DLG_COLOR(button_active, COLOR_YELLOW, COLOR_RED, false); + DLG_COLOR(button_inactive, COLOR_YELLOW, COLOR_BLACK, false); + DLG_COLOR(button_key_active, COLOR_YELLOW, COLOR_RED, true); + DLG_COLOR(button_key_inactive, COLOR_RED, COLOR_BLACK, false); + DLG_COLOR(button_label_active, COLOR_WHITE, COLOR_RED, false); + DLG_COLOR(button_label_inactive, COLOR_BLACK, COLOR_BLACK, true); + + DLG_COLOR(inputbox, COLOR_YELLOW, COLOR_BLACK, false); + DLG_COLOR(inputbox_border, COLOR_YELLOW, COLOR_BLACK, false); + + DLG_COLOR(searchbox, COLOR_YELLOW, COLOR_BLACK, false); + DLG_COLOR(searchbox_title, COLOR_YELLOW, COLOR_BLACK, true); + DLG_COLOR(searchbox_border, COLOR_BLACK, COLOR_BLACK, true); + + DLG_COLOR(position_indicator, COLOR_RED, COLOR_BLACK, false); + + DLG_COLOR(menubox, COLOR_YELLOW, COLOR_BLACK, false); + DLG_COLOR(menubox_border, COLOR_BLACK, COLOR_BLACK, true); + + DLG_COLOR(item, COLOR_WHITE, COLOR_BLACK, false); + DLG_COLOR(item_selected, COLOR_WHITE, COLOR_RED, false); + + DLG_COLOR(tag, COLOR_RED, COLOR_BLACK, false); + DLG_COLOR(tag_selected, COLOR_YELLOW, COLOR_RED, true); + DLG_COLOR(tag_key, COLOR_RED, COLOR_BLACK, false); + DLG_COLOR(tag_key_selected, COLOR_YELLOW, COLOR_RED, true); + + DLG_COLOR(check, COLOR_YELLOW, COLOR_BLACK, false); + DLG_COLOR(check_selected, COLOR_YELLOW, COLOR_RED, true); + + DLG_COLOR(uarrow, COLOR_RED, COLOR_BLACK, false); + DLG_COLOR(darrow, COLOR_RED, COLOR_BLACK, false); +} + +static void set_bluetitle_theme(void) +{ + set_classic_theme(); + DLG_COLOR(title, COLOR_BLUE, COLOR_WHITE, true); + DLG_COLOR(button_key_active, COLOR_YELLOW, COLOR_BLUE, true); + DLG_COLOR(button_label_active, COLOR_WHITE, COLOR_BLUE, true); + DLG_COLOR(searchbox_title, COLOR_BLUE, COLOR_WHITE, true); + DLG_COLOR(position_indicator, COLOR_BLUE, COLOR_WHITE, true); + DLG_COLOR(tag, COLOR_BLUE, COLOR_WHITE, true); + DLG_COLOR(tag_key, COLOR_BLUE, COLOR_WHITE, true); + +} + +/* + * Select color theme + */ +static int set_theme(const char *theme) +{ + int use_color = 1; + if (!theme) + set_bluetitle_theme(); + else if (strcmp(theme, "classic") == 0) + set_classic_theme(); + else if (strcmp(theme, "bluetitle") == 0) + set_bluetitle_theme(); + else if (strcmp(theme, "blackbg") == 0) + set_blackbg_theme(); + else if (strcmp(theme, "mono") == 0) + use_color = 0; + + return use_color; +} + +static void init_one_color(struct dialog_color *color) +{ + static int pair = 0; + + pair++; + init_pair(pair, color->fg, color->bg); + if (color->hl) + color->atr = A_BOLD | COLOR_PAIR(pair); + else + color->atr = COLOR_PAIR(pair); +} + +static void init_dialog_colors(void) +{ + init_one_color(&dlg.screen); + init_one_color(&dlg.shadow); + init_one_color(&dlg.dialog); + init_one_color(&dlg.title); + init_one_color(&dlg.border); + init_one_color(&dlg.button_active); + init_one_color(&dlg.button_inactive); + init_one_color(&dlg.button_key_active); + init_one_color(&dlg.button_key_inactive); + init_one_color(&dlg.button_label_active); + init_one_color(&dlg.button_label_inactive); + init_one_color(&dlg.inputbox); + init_one_color(&dlg.inputbox_border); + init_one_color(&dlg.searchbox); + init_one_color(&dlg.searchbox_title); + init_one_color(&dlg.searchbox_border); + init_one_color(&dlg.position_indicator); + init_one_color(&dlg.menubox); + init_one_color(&dlg.menubox_border); + init_one_color(&dlg.item); + init_one_color(&dlg.item_selected); + init_one_color(&dlg.tag); + init_one_color(&dlg.tag_selected); + init_one_color(&dlg.tag_key); + init_one_color(&dlg.tag_key_selected); + init_one_color(&dlg.check); + init_one_color(&dlg.check_selected); + init_one_color(&dlg.uarrow); + init_one_color(&dlg.darrow); +} + +/* + * Setup for color display + */ +static void color_setup(const char *theme) +{ + if (set_theme(theme)) { + if (has_colors()) { /* Terminal supports color? */ + start_color(); + init_dialog_colors(); + } + } + else + { + set_mono_theme(); + } +} + +/* + * Set window to attribute 'attr' + */ +void attr_clear(WINDOW * win, int height, int width, chtype attr) +{ + int i, j; + + wattrset(win, attr); + for (i = 0; i < height; i++) { + wmove(win, i, 0); + for (j = 0; j < width; j++) + waddch(win, ' '); + } + touchwin(win); +} + +void dialog_clear(void) +{ + attr_clear(stdscr, LINES, COLS, dlg.screen.atr); + /* Display background title if it exists ... - SLH */ + if (dlg.backtitle != NULL) { + int i; + + wattrset(stdscr, dlg.screen.atr); + mvwaddstr(stdscr, 0, 1, (char *)dlg.backtitle); + wmove(stdscr, 1, 1); + for (i = 1; i < COLS - 1; i++) + waddch(stdscr, ACS_HLINE); + } + wnoutrefresh(stdscr); +} + +/* + * Do some initialization for dialog + */ +void init_dialog(const char *backtitle) +{ + dlg.backtitle = backtitle; + color_setup(getenv("MENUCONFIG_COLOR")); +} + +void reset_dialog(void) +{ + initscr(); /* Init curses */ + keypad(stdscr, TRUE); + cbreak(); + noecho(); + dialog_clear(); +} + +/* + * End using dialog functions. + */ +void end_dialog(void) +{ + endwin(); +} + +/* Print the title of the dialog. Center the title and truncate + * tile if wider than dialog (- 2 chars). + **/ +void print_title(WINDOW *dialog, const char *title, int width) +{ + if (title) { + int tlen = MIN(width - 2, strlen(title)); + wattrset(dialog, dlg.title.atr); + mvwaddch(dialog, 0, (width - tlen) / 2 - 1, ' '); + mvwaddnstr(dialog, 0, (width - tlen)/2, title, tlen); + waddch(dialog, ' '); + } +} + +/* + * Print a string of text in a window, automatically wrap around to the + * next line if the string is too long to fit on one line. Newline + * characters '\n' are replaced by spaces. We start on a new line + * if there is no room for at least 4 nonblanks following a double-space. + */ +void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x) +{ + int newl, cur_x, cur_y; + int i, prompt_len, room, wlen; + char tempstr[MAX_LEN + 1], *word, *sp, *sp2; + + strcpy(tempstr, prompt); + + prompt_len = strlen(tempstr); + + /* + * Remove newlines + */ + for (i = 0; i < prompt_len; i++) { + if (tempstr[i] == '\n') + tempstr[i] = ' '; + } + + if (prompt_len <= width - x * 2) { /* If prompt is short */ + wmove(win, y, (width - prompt_len) / 2); + waddstr(win, tempstr); + } else { + cur_x = x; + cur_y = y; + newl = 1; + word = tempstr; + while (word && *word) { + sp = index(word, ' '); + if (sp) + *sp++ = 0; + + /* Wrap to next line if either the word does not fit, + or it is the first word of a new sentence, and it is + short, and the next word does not fit. */ + room = width - cur_x; + wlen = strlen(word); + if (wlen > room || + (newl && wlen < 4 && sp + && wlen + 1 + strlen(sp) > room + && (!(sp2 = index(sp, ' ')) + || wlen + 1 + (sp2 - sp) > room))) { + cur_y++; + cur_x = x; + } + wmove(win, cur_y, cur_x); + waddstr(win, word); + getyx(win, cur_y, cur_x); + cur_x++; + if (sp && *sp == ' ') { + cur_x++; /* double space */ + while (*++sp == ' ') ; + newl = 1; + } else + newl = 0; + word = sp; + } + } +} + +/* + * Print a button + */ +void print_button(WINDOW * win, const char *label, int y, int x, int selected) +{ + int i, temp; + + wmove(win, y, x); + wattrset(win, selected ? dlg.button_active.atr + : dlg.button_inactive.atr); + waddstr(win, "<"); + temp = strspn(label, " "); + label += temp; + wattrset(win, selected ? dlg.button_label_active.atr + : dlg.button_label_inactive.atr); + for (i = 0; i < temp; i++) + waddch(win, ' '); + wattrset(win, selected ? dlg.button_key_active.atr + : dlg.button_key_inactive.atr); + waddch(win, label[0]); + wattrset(win, selected ? dlg.button_label_active.atr + : dlg.button_label_inactive.atr); + waddstr(win, (char *)label + 1); + wattrset(win, selected ? dlg.button_active.atr + : dlg.button_inactive.atr); + waddstr(win, ">"); + wmove(win, y, x + temp + 1); +} + +/* + * Draw a rectangular box with line drawing characters + */ +void +draw_box(WINDOW * win, int y, int x, int height, int width, + chtype box, chtype border) +{ + int i, j; + + wattrset(win, 0); + for (i = 0; i < height; i++) { + wmove(win, y + i, x); + for (j = 0; j < width; j++) + if (!i && !j) + waddch(win, border | ACS_ULCORNER); + else if (i == height - 1 && !j) + waddch(win, border | ACS_LLCORNER); + else if (!i && j == width - 1) + waddch(win, box | ACS_URCORNER); + else if (i == height - 1 && j == width - 1) + waddch(win, box | ACS_LRCORNER); + else if (!i) + waddch(win, border | ACS_HLINE); + else if (i == height - 1) + waddch(win, box | ACS_HLINE); + else if (!j) + waddch(win, border | ACS_VLINE); + else if (j == width - 1) + waddch(win, box | ACS_VLINE); + else + waddch(win, box | ' '); + } +} + +/* + * Draw shadows along the right and bottom edge to give a more 3D look + * to the boxes + */ +void draw_shadow(WINDOW * win, int y, int x, int height, int width) +{ + int i; + + if (has_colors()) { /* Whether terminal supports color? */ + wattrset(win, dlg.shadow.atr); + wmove(win, y + height, x + 2); + for (i = 0; i < width; i++) + waddch(win, winch(win) & A_CHARTEXT); + for (i = y + 1; i < y + height + 1; i++) { + wmove(win, i, x + width); + waddch(win, winch(win) & A_CHARTEXT); + waddch(win, winch(win) & A_CHARTEXT); + } + wnoutrefresh(win); + } +} + +/* + * Return the position of the first alphabetic character in a string. + */ +int first_alpha(const char *string, const char *exempt) +{ + int i, in_paren = 0, c; + + for (i = 0; i < strlen(string); i++) { + c = tolower(string[i]); + + if (strchr("<[(", c)) + ++in_paren; + if (strchr(">])", c) && in_paren > 0) + --in_paren; + + if ((!in_paren) && isalpha(c) && strchr(exempt, c) == 0) + return i; + } + + return 0; +} + +/* + * ncurses uses ESC to detect escaped char sequences. This resutl in + * a small timeout before ESC is actually delivered to the application. + * lxdialog suggest which is correctly translated to two + * times esc. But then we need to ignore the second esc to avoid stepping + * out one menu too much. Filter away all escaped key sequences since + * keypad(FALSE) turn off ncurses support for escape sequences - and thats + * needed to make notimeout() do as expected. + */ +int on_key_esc(WINDOW *win) +{ + int key; + int key2; + int key3; + + nodelay(win, TRUE); + keypad(win, FALSE); + key = wgetch(win); + key2 = wgetch(win); + do { + key3 = wgetch(win); + } while (key3 != ERR); + nodelay(win, FALSE); + keypad(win, TRUE); + if (key == KEY_ESC && key2 == ERR) + return KEY_ESC; + else if (key != ERR && key != KEY_ESC && key2 == ERR) + ungetch(key); + + return -1; +} + +/* redraw screen in new size */ +int on_key_resize(void) +{ + dialog_clear(); + return KEY_RESIZE; +} + +struct dialog_list *item_cur; +struct dialog_list item_nil; +struct dialog_list *item_head; + +void item_reset(void) +{ + struct dialog_list *p, *next; + + for (p = item_head; p; p = next) { + next = p->next; + free(p); + } + item_head = NULL; + item_cur = &item_nil; +} + +void item_make(const char *fmt, ...) +{ + va_list ap; + struct dialog_list *p = malloc(sizeof(*p)); + + if (item_head) + item_cur->next = p; + else + item_head = p; + item_cur = p; + memset(p, 0, sizeof(*p)); + + va_start(ap, fmt); + vsnprintf(item_cur->node.str, sizeof(item_cur->node.str), fmt, ap); + va_end(ap); +} + +void item_add_str(const char *fmt, ...) +{ + va_list ap; + size_t avail; + + avail = sizeof(item_cur->node.str) - strlen(item_cur->node.str); + + va_start(ap, fmt); + vsnprintf(item_cur->node.str + strlen(item_cur->node.str), + avail, fmt, ap); + item_cur->node.str[sizeof(item_cur->node.str) - 1] = '\0'; + va_end(ap); +} + +void item_set_tag(char tag) +{ + item_cur->node.tag = tag; +} +void item_set_data(void *ptr) +{ + item_cur->node.data = ptr; +} + +void item_set_selected(int val) +{ + item_cur->node.selected = val; +} + +int item_activate_selected(void) +{ + item_foreach() + if (item_is_selected()) + return 1; + return 0; +} + +void *item_data(void) +{ + return item_cur->node.data; +} + +char item_tag(void) +{ + return item_cur->node.tag; +} + +int item_count(void) +{ + int n = 0; + struct dialog_list *p; + + for (p = item_head; p; p = p->next) + n++; + return n; +} + +void item_set(int n) +{ + int i = 0; + item_foreach() + if (i++ == n) + return; +} + +int item_n(void) +{ + int n = 0; + struct dialog_list *p; + + for (p = item_head; p; p = p->next) { + if (p == item_cur) + return n; + n++; + } + return 0; +} + +const char *item_str(void) +{ + return item_cur->node.str; +} + +int item_is_selected(void) +{ + return (item_cur->node.selected != 0); +} + +int item_is_tag(char tag) +{ + return (item_cur->node.tag == tag); +} diff --git a/aosp/external/toybox/kconfig/lxdialog/yesno.c b/aosp/external/toybox/kconfig/lxdialog/yesno.c new file mode 100644 index 0000000000000000000000000000000000000000..ee0a04e3e012ecd4ba119cd153d96a08ded7b2a2 --- /dev/null +++ b/aosp/external/toybox/kconfig/lxdialog/yesno.c @@ -0,0 +1,114 @@ +/* + * yesno.c -- implements the yes/no box + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "dialog.h" + +/* + * Display termination buttons + */ +static void print_buttons(WINDOW * dialog, int height, int width, int selected) +{ + int x = width / 2 - 10; + int y = height - 2; + + print_button(dialog, " Yes ", y, x, selected == 0); + print_button(dialog, " No ", y, x + 13, selected == 1); + + wmove(dialog, y, x + 1 + 13 * selected); + wrefresh(dialog); +} + +/* + * Display a dialog box with two buttons - Yes and No + */ +int dialog_yesno(const char *title, const char *prompt, int height, int width) +{ + int i, x, y, key = 0, button = 0; + WINDOW *dialog; + +do_resize: + if (getmaxy(stdscr) < (height + 4)) + return -ERRDISPLAYTOOSMALL; + if (getmaxx(stdscr) < (width + 4)) + return -ERRDISPLAYTOOSMALL; + + /* center dialog box on screen */ + x = (COLS - width) / 2; + y = (LINES - height) / 2; + + draw_shadow(stdscr, y, x, height, width); + + dialog = newwin(height, width, y, x); + keypad(dialog, TRUE); + + draw_box(dialog, 0, 0, height, width, + dlg.dialog.atr, dlg.border.atr); + wattrset(dialog, dlg.border.atr); + mvwaddch(dialog, height - 3, 0, ACS_LTEE); + for (i = 0; i < width - 2; i++) + waddch(dialog, ACS_HLINE); + wattrset(dialog, dlg.dialog.atr); + waddch(dialog, ACS_RTEE); + + print_title(dialog, title, width); + + wattrset(dialog, dlg.dialog.atr); + print_autowrap(dialog, prompt, width - 2, 1, 3); + + print_buttons(dialog, height, width, 0); + + while (key != KEY_ESC) { + key = wgetch(dialog); + switch (key) { + case 'Y': + case 'y': + delwin(dialog); + return 0; + case 'N': + case 'n': + delwin(dialog); + return 1; + + case TAB: + case KEY_LEFT: + case KEY_RIGHT: + button = ((key == KEY_LEFT ? --button : ++button) < 0) ? 1 : (button > 1 ? 0 : button); + + print_buttons(dialog, height, width, button); + wrefresh(dialog); + break; + case ' ': + case '\n': + delwin(dialog); + return button; + case KEY_ESC: + key = on_key_esc(dialog); + break; + case KEY_RESIZE: + delwin(dialog); + on_key_resize(); + goto do_resize; + } + } + + delwin(dialog); + return key; /* ESC pressed */ +} diff --git a/aosp/external/toybox/kconfig/macos_miniconfig b/aosp/external/toybox/kconfig/macos_miniconfig new file mode 100644 index 0000000000000000000000000000000000000000..b9bf6a3a2bbb0f469a069d3fa6ca7a8c0b231e57 --- /dev/null +++ b/aosp/external/toybox/kconfig/macos_miniconfig @@ -0,0 +1,118 @@ +CONFIG_BASENAME=y +CONFIG_CAL=y +CONFIG_CAT=y +CONFIG_CAT_V=y +CONFIG_CATV=y +CONFIG_CHGRP=y +CONFIG_CHOWN=y +CONFIG_CHMOD=y +CONFIG_CKSUM=y +CONFIG_CRC32=y +CONFIG_CMP=y +CONFIG_COMM=y +CONFIG_CP=y +CONFIG_CP_PRESERVE=y +CONFIG_CPIO=y +CONFIG_CUT=y +CONFIG_DATE=y +CONFIG_DIRNAME=y +CONFIG_DU=y +CONFIG_ECHO=y +CONFIG_ENV=y +CONFIG_EXPAND=y +CONFIG_FALLOCATE=y +CONFIG_FALSE=y +CONFIG_FILE=y +CONFIG_FIND=y +CONFIG_GETCONF=y +CONFIG_GREP=y +CONFIG_HEAD=y +CONFIG_ICONV=y +CONFIG_ID=y +CONFIG_GROUPS=y +CONFIG_LOGNAME=y +CONFIG_WHOAMI=y +CONFIG_KILL=y +CONFIG_KILLALL5=y +CONFIG_LINK=y +CONFIG_LN=y +CONFIG_LOGGER=y +CONFIG_LS=y +CONFIG_MKDIR=y +CONFIG_MKFIFO=y +CONFIG_MKTEMP=y +CONFIG_MV=y +CONFIG_NICE=y +CONFIG_NL=y +CONFIG_NOHUP=y +CONFIG_OD=y +CONFIG_PASTE=y +CONFIG_PATCH=y +CONFIG_PRINTF=y +CONFIG_PWD=y +CONFIG_RENICE=y +CONFIG_RM=y +CONFIG_RMDIR=y +CONFIG_SED=y +CONFIG_SLEEP=y +CONFIG_SORT=y +CONFIG_SPLIT=y +CONFIG_STAT=y +CONFIG_STRINGS=y +CONFIG_TAR=y +CONFIG_TEE=y +CONFIG_TEST=y +CONFIG_TIME=y +CONFIG_TOUCH=y +CONFIG_TRUE=y +CONFIG_TTY=y +CONFIG_UNAME=y +CONFIG_UNIQ=y +CONFIG_UNLINK=y +CONFIG_UUDECODE=y +CONFIG_UUENCODE=y +CONFIG_WC=y +CONFIG_WHO=y +CONFIG_XARGS=y +CONFIG_ASCII=y +CONFIG_BASE64=y +CONFIG_CLEAR=y +CONFIG_COUNT=y +CONFIG_DOS2UNIX=y +CONFIG_UNIX2DOS=y +CONFIG_FACTOR=y +CONFIG_FLOCK=y +CONFIG_FMT=y +CONFIG_HELP=y +CONFIG_HEXEDIT=y +CONFIG_PRINTENV=y +CONFIG_PWDX=y +CONFIG_READLINK=y +CONFIG_REALPATH=y +CONFIG_REV=y +CONFIG_SETSID=y +CONFIG_TAC=y +CONFIG_TIMEOUT=y +CONFIG_TRUNCATE=y +CONFIG_USLEEP=y +CONFIG_UUIDGEN=y +CONFIG_WATCH=y +CONFIG_W=y +CONFIG_WHICH=y +CONFIG_XXD=y +CONFIG_YES=y +CONFIG_FTPGET=y +CONFIG_FTPPUT=y +CONFIG_MICROCOM=y +CONFIG_NETCAT=y +CONFIG_NETCAT_LISTEN=y +CONFIG_HOSTNAME=y +CONFIG_MD5SUM=y +CONFIG_SHA1SUM=y +CONFIG_SEQ=y +CONFIG_TAIL=y +CONFIG_TOYBOX_SUID=y +CONFIG_TOYBOX_FLOAT=y +CONFIG_TOYBOX_HELP=y +CONFIG_TOYBOX_HELP_DASHDASH=y +CONFIG_TOYBOX_I18N=y diff --git a/aosp/external/toybox/kconfig/mconf.c b/aosp/external/toybox/kconfig/mconf.c new file mode 100644 index 0000000000000000000000000000000000000000..c2acdc0a46422ec91e30b46995bc7369f1a2a922 --- /dev/null +++ b/aosp/external/toybox/kconfig/mconf.c @@ -0,0 +1,919 @@ +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + * + * Introduced single menu mode (show all sub-menus in one large tree). + * 2002-11-06 Petr Baudis + * + * i18n, 2005, Arnaldo Carvalho de Melo + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define LKC_DIRECT_LINK +#include "lkc.h" +#include "lxdialog/dialog.h" + +static char menu_backtitle[128]; +static const char mconf_readme[] = N_( +"Overview\n" +"--------\n" +"Some features may be built directly into the project.\n" +"Some may be made into loadable runtime modules. Some features\n" +"may be completely removed altogether. There are also certain\n" +"parameters which are not really features, but must be\n" +"entered in as decimal or hexadecimal numbers or possibly text.\n" +"\n" +"Menu items beginning with [*], or [ ] represent features\n" +"configured to be built in, modularized or removed respectively.\n" +"Pointed brackets <> represent module capable features.\n" +"\n" +"To change any of these features, highlight it with the cursor\n" +"keys and press to build it in, to make it a module or\n" +" to removed it. You may also press the to cycle\n" +"through the available options (ie. Y->N->M->Y).\n" +"\n" +"Some additional keyboard hints:\n" +"\n" +"Menus\n" +"----------\n" +"o Use the Up/Down arrow keys (cursor keys) to highlight the item\n" +" you wish to change or submenu wish to select and press .\n" +" Submenus are designated by \"--->\".\n" +"\n" +" Shortcut: Press the option's highlighted letter (hotkey).\n" +" Pressing a hotkey more than once will sequence\n" +" through all visible items which use that hotkey.\n" +"\n" +" You may also use the and keys to scroll\n" +" unseen options into view.\n" +"\n" +"o To exit a menu use the cursor keys to highlight the button\n" +" and press .\n" +"\n" +" Shortcut: Press or or if there is no hotkey\n" +" using those letters. You may press a single , but\n" +" there is a delayed response which you may find annoying.\n" +"\n" +" Also, the and cursor keys will cycle between and\n" +" \n" +"\n" +"\n" +"Data Entry\n" +"-----------\n" +"o Enter the requested information and press \n" +" If you are entering hexadecimal values, it is not necessary to\n" +" add the '0x' prefix to the entry.\n" +"\n" +"o For help, use the or cursor keys to highlight the help option\n" +" and press . You can try as well.\n" +"\n" +"\n" +"Text Box (Help Window)\n" +"--------\n" +"o Use the cursor keys to scroll up/down/left/right. The VI editor\n" +" keys h,j,k,l function here as do and for those\n" +" who are familiar with less and lynx.\n" +"\n" +"o Press , , or to exit.\n" +"\n" +"\n" +"Alternate Configuration Files\n" +"-----------------------------\n" +"Menuconfig supports the use of alternate configuration files for\n" +"those who, for various reasons, find it necessary to switch\n" +"between different configurations.\n" +"\n" +"At the end of the main menu you will find two options. One is\n" +"for saving the current configuration to a file of your choosing.\n" +"The other option is for loading a previously saved alternate\n" +"configuration.\n" +"\n" +"Even if you don't use alternate configuration files, but you\n" +"find during a Menuconfig session that you have completely messed\n" +"up your settings, you may use the \"Load Alternate...\" option to\n" +"restore your previously saved settings from \".config\" without\n" +"restarting Menuconfig.\n" +"\n" +"Other information\n" +"-----------------\n" +"If you use Menuconfig in an XTERM window make sure you have your\n" +"$TERM variable set to point to a xterm definition which supports color.\n" +"Otherwise, Menuconfig will look rather bad. Menuconfig will not\n" +"display correctly in a RXVT window because rxvt displays only one\n" +"intensity of color, bright.\n" +"\n" +"Menuconfig will display larger menus on screens or xterms which are\n" +"set to display more than the standard 25 row by 80 column geometry.\n" +"In order for this to work, the \"stty size\" command must be able to\n" +"display the screen's current row and column geometry. I STRONGLY\n" +"RECOMMEND that you make sure you do NOT have the shell variables\n" +"LINES and COLUMNS exported into your environment. Some distributions\n" +"export those variables via /etc/profile. Some ncurses programs can\n" +"become confused when those variables (LINES & COLUMNS) don't reflect\n" +"the true screen size.\n" +"\n" +"Optional personality available\n" +"------------------------------\n" +"If you prefer to have all of the options listed in a single\n" +"menu, rather than the default multimenu hierarchy, run the menuconfig\n" +"with MENUCONFIG_MODE environment variable set to single_menu. Example:\n" +"\n" +"make MENUCONFIG_MODE=single_menu menuconfig\n" +"\n" +" will then unroll the appropriate category, or enfold it if it\n" +"is already unrolled.\n" +"\n" +"Note that this mode can eventually be a little more CPU expensive\n" +"(especially with a larger number of unrolled categories) than the\n" +"default mode.\n" +"\n" +"Different color themes available\n" +"--------------------------------\n" +"It is possible to select different color themes using the variable\n" +"MENUCONFIG_COLOR. To select a theme use:\n" +"\n" +"make MENUCONFIG_COLOR= menuconfig\n" +"\n" +"Available themes are\n" +" mono => selects colors suitable for monochrome displays\n" +" blackbg => selects a color scheme with black background\n" +" classic => theme with blue background. The classic look\n" +" bluetitle => a LCD friendly version of classic. (default)\n" +"\n"), +menu_instructions[] = N_( + "Arrow keys navigate the menu. " + " selects submenus --->. " + "Highlighted letters are hotkeys. " + "Pressing includes, excludes, modularizes features. " + "Press to exit, for Help, for Search. " + "Legend: [*] built-in [ ] excluded module < > module capable"), +radiolist_instructions[] = N_( + "Use the arrow keys to navigate this window or " + "press the hotkey of the item you wish to select " + "followed by the . " + "Press for additional information about this option."), +inputbox_instructions_int[] = N_( + "Please enter a decimal value. " + "Fractions will not be accepted. " + "Use the key to move from the input field to the buttons below it."), +inputbox_instructions_hex[] = N_( + "Please enter a hexadecimal value. " + "Use the key to move from the input field to the buttons below it."), +inputbox_instructions_string[] = N_( + "Please enter a string value. " + "Use the key to move from the input field to the buttons below it."), +setmod_text[] = N_( + "This feature depends on another which has been configured as a module.\n" + "As a result, this feature will be built as a module."), +nohelp_text[] = N_( + "There is no help available for this option.\n"), +load_config_text[] = N_( + "Enter the name of the configuration file you wish to load. " + "Accept the name shown to restore the configuration you " + "last retrieved. Leave blank to abort."), +load_config_help[] = N_( + "\n" + "For various reasons, one may wish to keep several different\n" + "configurations available on a single machine.\n" + "\n" + "If you have saved a previous configuration in a file other than the\n" + "default, entering the name of the file here will allow you\n" + "to modify that configuration.\n" + "\n" + "If you are uncertain, then you have probably never used alternate\n" + "configuration files. You should therefor leave this blank to abort.\n"), +save_config_text[] = N_( + "Enter a filename to which this configuration should be saved " + "as an alternate. Leave blank to abort."), +save_config_help[] = N_( + "\n" + "For various reasons, one may wish to keep different\n" + "configurations available on a single machine.\n" + "\n" + "Entering a file name here will allow you to later retrieve, modify\n" + "and use the current configuration as an alternate to whatever\n" + "configuration options you have selected at that time.\n" + "\n" + "If you are uncertain what all this means then you should probably\n" + "leave this blank.\n"), +search_help[] = N_( + "\n" + "Search for CONFIG_ symbols and display their relations.\n" + "Regular expressions are allowed.\n" + "Example: search for \"^FOO\"\n" + "Result:\n" + "-----------------------------------------------------------------\n" + "Symbol: FOO [=m]\n" + "Prompt: Foo bus is used to drive the bar HW\n" + "Defined at drivers/pci/Kconfig:47\n" + "Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n" + "Location:\n" + " -> Bus options (PCI, PCMCIA, EISA, MCA, ISA)\n" + " -> PCI support (PCI [=y])\n" + " -> PCI access mode ( [=y])\n" + "Selects: LIBCRC32\n" + "Selected by: BAR\n" + "-----------------------------------------------------------------\n" + "o The line 'Prompt:' shows the text used in the menu structure for\n" + " this CONFIG_ symbol\n" + "o The 'Defined at' line tell at what file / line number the symbol\n" + " is defined\n" + "o The 'Depends on:' line tell what symbols needs to be defined for\n" + " this symbol to be visible in the menu (selectable)\n" + "o The 'Location:' lines tell where in the menu structure this symbol\n" + " is located\n" + " A location followed by a [=y] indicate that this is a selectable\n" + " menu item - and current value is displayed inside brackets.\n" + "o The 'Selects:' line tell what symbol will be automatically\n" + " selected if this symbol is selected (y or m)\n" + "o The 'Selected by' line tell what symbol has selected this symbol\n" + "\n" + "Only relevant lines are shown.\n" + "\n\n" + "Search examples:\n" + "Examples: USB => find all CONFIG_ symbols containing USB\n" + " ^USB => find all CONFIG_ symbols starting with USB\n" + " USB$ => find all CONFIG_ symbols ending with USB\n" + "\n"); + +static char filename[PATH_MAX+1] = ".config"; +static int indent; +static struct termios ios_org; +static int rows = 0, cols = 0; +static struct menu *current_menu; +static int child_count; +static int single_menu_mode; + +static void conf(struct menu *menu); +static void conf_choice(struct menu *menu); +static void conf_string(struct menu *menu); +static void conf_load(void); +static void conf_save(void); +static void show_textbox(const char *title, const char *text, int r, int c); +static void show_helptext(const char *title, const char *text); +static void show_help(struct menu *menu); + +static void init_wsize(void) +{ + struct winsize ws; + char *env; + + if (!ioctl(STDIN_FILENO, TIOCGWINSZ, &ws)) { + rows = ws.ws_row; + cols = ws.ws_col; + } + + if (!rows) { + env = getenv("LINES"); + if (env) + rows = atoi(env); + if (!rows) + rows = 24; + } + if (!cols) { + env = getenv("COLUMNS"); + if (env) + cols = atoi(env); + if (!cols) + cols = 80; + } + + if (rows < 19 || cols < 80) { + fprintf(stderr, N_("Your display is too small to run Menuconfig!\n")); + fprintf(stderr, N_("It must be at least 19 lines by 80 columns.\n")); + exit(1); + } + + rows -= 4; + cols -= 5; +} + +static void get_prompt_str(struct gstr *r, struct property *prop) +{ + int i, j; + struct menu *submenu[8], *menu; + + str_printf(r, "Prompt: %s\n", prop->text); + str_printf(r, " Defined at %s:%d\n", prop->menu->file->name, + prop->menu->lineno); + if (!expr_is_yes(prop->visible.expr)) { + str_append(r, " Depends on: "); + expr_gstr_print(prop->visible.expr, r); + str_append(r, "\n"); + } + menu = prop->menu->parent; + for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent) + submenu[i++] = menu; + if (i > 0) { + str_printf(r, " Location:\n"); + for (j = 4; --i >= 0; j += 2) { + menu = submenu[i]; + str_printf(r, "%*c-> %s", j, ' ', menu_get_prompt(menu)); + if (menu->sym) { + str_printf(r, " (%s [=%s])", menu->sym->name ? + menu->sym->name : "", + sym_get_string_value(menu->sym)); + } + str_append(r, "\n"); + } + } +} + +static void get_symbol_str(struct gstr *r, struct symbol *sym) +{ + bool hit; + struct property *prop; + + str_printf(r, "Symbol: %s [=%s]\n", sym->name, + sym_get_string_value(sym)); + for_all_prompts(sym, prop) + get_prompt_str(r, prop); + hit = false; + for_all_properties(sym, prop, P_SELECT) { + if (!hit) { + str_append(r, " Selects: "); + hit = true; + } else + str_printf(r, " && "); + expr_gstr_print(prop->expr, r); + } + if (hit) + str_append(r, "\n"); + if (sym->rev_dep.expr) { + str_append(r, " Selected by: "); + expr_gstr_print(sym->rev_dep.expr, r); + str_append(r, "\n"); + } + str_append(r, "\n\n"); +} + +static struct gstr get_relations_str(struct symbol **sym_arr) +{ + struct symbol *sym; + struct gstr res = str_new(); + int i; + + for (i = 0; sym_arr && (sym = sym_arr[i]); i++) + get_symbol_str(&res, sym); + if (!i) + str_append(&res, "No matches found.\n"); + return res; +} + +static void search_conf(void) +{ + struct symbol **sym_arr; + struct gstr res; + int dres; +again: + dialog_clear(); + dres = dialog_inputbox(_("Search Configuration Parameter"), + _("Enter CONFIG_ (sub)string to search for (omit CONFIG_)"), + 10, 75, ""); + switch (dres) { + case 0: + break; + case 1: + show_helptext(_("Search Configuration"), search_help); + goto again; + default: + return; + } + + sym_arr = sym_re_search(dialog_input_result); + res = get_relations_str(sym_arr); + free(sym_arr); + show_textbox(_("Search Results"), str_get(&res), 0, 0); + str_free(&res); +} + +static void build_conf(struct menu *menu) +{ + struct symbol *sym; + struct property *prop; + struct menu *child; + int type, tmp, doint = 2; + tristate val; + char ch; + + if (!menu_is_visible(menu)) + return; + + sym = menu->sym; + prop = menu->prompt; + if (!sym) { + if (prop && menu != current_menu) { + const char *prompt = menu_get_prompt(menu); + switch (prop->type) { + case P_MENU: + child_count++; + if (single_menu_mode) { + item_make("%s%*c%s", + menu->data ? "-->" : "++>", + indent + 1, ' ', prompt); + } else + item_make(" %*c%s --->", indent + 1, ' ', prompt); + + item_set_tag('m'); + item_set_data(menu); + if (single_menu_mode && menu->data) + goto conf_childs; + return; + default: + if (prompt) { + child_count++; + item_make("---%*c%s", indent + 1, ' ', prompt); + item_set_tag(':'); + item_set_data(menu); + } + } + } else + doint = 0; + goto conf_childs; + } + + type = sym_get_type(sym); + if (sym_is_choice(sym)) { + struct symbol *def_sym = sym_get_choice_value(sym); + struct menu *def_menu = NULL; + + child_count++; + for (child = menu->list; child; child = child->next) { + if (menu_is_visible(child) && child->sym == def_sym) + def_menu = child; + } + + val = sym_get_tristate_value(sym); + if (sym_is_changable(sym)) { + switch (type) { + case S_BOOLEAN: + item_make("[%c]", val == no ? ' ' : '*'); + break; + case S_TRISTATE: + switch (val) { + case yes: ch = '*'; break; + case mod: ch = 'M'; break; + default: ch = ' '; break; + } + item_make("<%c>", ch); + break; + } + item_set_tag('t'); + item_set_data(menu); + } else { + item_make(" "); + item_set_tag(def_menu ? 't' : ':'); + item_set_data(menu); + } + + item_add_str("%*c%s", indent + 1, ' ', menu_get_prompt(menu)); + if (val == yes) { + if (def_menu) { + item_add_str(" (%s)", menu_get_prompt(def_menu)); + item_add_str(" --->"); + if (def_menu->list) { + indent += 2; + build_conf(def_menu); + indent -= 2; + } + } + return; + } + } else { + if (menu == current_menu) { + item_make("---%*c%s", indent + 1, ' ', menu_get_prompt(menu)); + item_set_tag(':'); + item_set_data(menu); + goto conf_childs; + } + child_count++; + val = sym_get_tristate_value(sym); + if (sym_is_choice_value(sym) && val == yes) { + item_make(" "); + item_set_tag(':'); + item_set_data(menu); + } else { + switch (type) { + case S_BOOLEAN: + if (sym_is_changable(sym)) + item_make("[%c]", val == no ? ' ' : '*'); + else + item_make("---"); + item_set_tag('t'); + item_set_data(menu); + break; + case S_TRISTATE: + switch (val) { + case yes: ch = '*'; break; + case mod: ch = 'M'; break; + default: ch = ' '; break; + } + if (sym_is_changable(sym)) + item_make("<%c>", ch); + else + item_make("---"); + item_set_tag('t'); + item_set_data(menu); + break; + default: + tmp = 2 + strlen(sym_get_string_value(sym)); /* () = 2 */ + item_make("(%s)", sym_get_string_value(sym)); + tmp = indent - tmp + 4; + if (tmp < 0) + tmp = 0; + item_add_str("%*c%s%s", tmp, ' ', menu_get_prompt(menu), + (sym_has_value(sym) || !sym_is_changable(sym)) ? + "" : " (NEW)"); + item_set_tag('s'); + item_set_data(menu); + goto conf_childs; + } + } + item_add_str("%*c%s%s", indent + 1, ' ', menu_get_prompt(menu), + (sym_has_value(sym) || !sym_is_changable(sym)) ? + "" : " (NEW)"); + if (menu->prompt->type == P_MENU) { + item_add_str(" --->"); + return; + } + } + +conf_childs: + indent += doint; + for (child = menu->list; child; child = child->next) + build_conf(child); + indent -= doint; +} + +static void conf(struct menu *menu) +{ + struct menu *submenu; + const char *prompt = menu_get_prompt(menu); + struct symbol *sym; + struct menu *active_menu = NULL; + int res; + int s_scroll = 0; + + while (1) { + item_reset(); + current_menu = menu; + build_conf(menu); + if (!child_count) + break; + if (menu == &rootmenu) { + item_make("--- "); + item_set_tag(':'); + item_make(_(" Load an Alternate Configuration File")); + item_set_tag('L'); + item_make(_(" Save an Alternate Configuration File")); + item_set_tag('S'); + } + dialog_clear(); + res = dialog_menu(prompt ? prompt : _("Main Menu"), + _(menu_instructions), + active_menu, &s_scroll); + if (res == 1 || res == KEY_ESC || res == -ERRDISPLAYTOOSMALL) + break; + if (!item_activate_selected()) + continue; + if (!item_tag()) + continue; + + submenu = item_data(); + active_menu = item_data(); + if (submenu) + sym = submenu->sym; + else + sym = NULL; + + switch (res) { + case 0: + switch (item_tag()) { + case 'm': + if (single_menu_mode) + submenu->data = (void *) (long) !submenu->data; + else + conf(submenu); + break; + case 't': + if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes) + conf_choice(submenu); + else if (submenu->prompt->type == P_MENU) + conf(submenu); + break; + case 's': + conf_string(submenu); + break; + case 'L': + conf_load(); + break; + case 'S': + conf_save(); + break; + } + break; + case 2: + if (sym) + show_help(submenu); + else + show_helptext("README", _(mconf_readme)); + break; + case 3: + if (item_is_tag('t')) { + if (sym_set_tristate_value(sym, yes)) + break; + if (sym_set_tristate_value(sym, mod)) + show_textbox(NULL, setmod_text, 6, 74); + } + break; + case 4: + if (item_is_tag('t')) + sym_set_tristate_value(sym, no); + break; + case 5: + if (item_is_tag('t')) + sym_set_tristate_value(sym, mod); + break; + case 6: + if (item_is_tag('t')) + sym_toggle_tristate_value(sym); + else if (item_is_tag('m')) + conf(submenu); + break; + case 7: + search_conf(); + break; + } + } +} + +static void show_textbox(const char *title, const char *text, int r, int c) +{ + dialog_clear(); + dialog_textbox(title, text, r, c); +} + +static void show_helptext(const char *title, const char *text) +{ + show_textbox(title, text, 0, 0); +} + +static void show_help(struct menu *menu) +{ + struct gstr help = str_new(); + struct symbol *sym = menu->sym; + + if (sym->help) + { + if (sym->name) { + str_printf(&help, "CONFIG_%s:\n\n", sym->name); + str_append(&help, _(sym->help)); + str_append(&help, "\n"); + } + } else { + str_append(&help, nohelp_text); + } + get_symbol_str(&help, sym); + show_helptext(menu_get_prompt(menu), str_get(&help)); + str_free(&help); +} + +static void conf_choice(struct menu *menu) +{ + const char *prompt = menu_get_prompt(menu); + struct menu *child; + struct symbol *active; + + active = sym_get_choice_value(menu->sym); + while (1) { + int res; + int selected; + item_reset(); + + current_menu = menu; + for (child = menu->list; child; child = child->next) { + if (!menu_is_visible(child)) + continue; + item_make("%s", menu_get_prompt(child)); + item_set_data(child); + if (child->sym == active) + item_set_selected(1); + if (child->sym == sym_get_choice_value(menu->sym)) + item_set_tag('X'); + } + dialog_clear(); + res = dialog_checklist(prompt ? prompt : _("Main Menu"), + _(radiolist_instructions), + 15, 70, 6); + selected = item_activate_selected(); + switch (res) { + case 0: + if (selected) { + child = item_data(); + sym_set_tristate_value(child->sym, yes); + } + return; + case 1: + if (selected) { + child = item_data(); + show_help(child); + active = child->sym; + } else + show_help(menu); + break; + case KEY_ESC: + return; + case -ERRDISPLAYTOOSMALL: + return; + } + } +} + +static void conf_string(struct menu *menu) +{ + const char *prompt = menu_get_prompt(menu); + + while (1) { + int res; + char *heading; + + switch (sym_get_type(menu->sym)) { + case S_INT: + heading = (char *)_(inputbox_instructions_int); + break; + case S_HEX: + heading = (char *)_(inputbox_instructions_hex); + break; + case S_STRING: + heading = (char *)_(inputbox_instructions_string); + break; + default: + heading = "Internal mconf error!"; + } + dialog_clear(); + res = dialog_inputbox(prompt ? prompt : _("Main Menu"), + heading, 10, 75, + sym_get_string_value(menu->sym)); + switch (res) { + case 0: + if (sym_set_string_value(menu->sym, dialog_input_result)) + return; + show_textbox(NULL, _("You have made an invalid entry."), 5, 43); + break; + case 1: + show_help(menu); + break; + case KEY_ESC: + return; + } + } +} + +static void conf_load(void) +{ + + while (1) { + int res; + dialog_clear(); + res = dialog_inputbox(NULL, load_config_text, + 11, 55, filename); + switch(res) { + case 0: + if (!dialog_input_result[0]) + return; + if (!conf_read(dialog_input_result)) + return; + show_textbox(NULL, _("File does not exist!"), 5, 38); + break; + case 1: + show_helptext(_("Load Alternate Configuration"), load_config_help); + break; + case KEY_ESC: + return; + } + } +} + +static void conf_save(void) +{ + while (1) { + int res; + dialog_clear(); + res = dialog_inputbox(NULL, save_config_text, + 11, 55, filename); + switch(res) { + case 0: + if (!dialog_input_result[0]) + return; + if (!conf_write(dialog_input_result)) + return; + show_textbox(NULL, _("Can't create file! Probably a nonexistent directory."), 5, 60); + break; + case 1: + show_helptext(_("Save Alternate Configuration"), save_config_help); + break; + case KEY_ESC: + return; + } + } +} + +static void conf_cleanup(void) +{ + tcsetattr(1, TCSAFLUSH, &ios_org); +} + +int main(int ac, char **av) +{ + struct symbol *sym; + char *mode; + int res; + + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); + + conf_parse(av[1] ? av[1] : ""); + conf_read(NULL); + + sym = sym_lookup("KERNELVERSION", 0); + sym_calc_value(sym); + sprintf(menu_backtitle, _(PROJECT_NAME" v%s Configuration"), + sym_get_string_value(sym)); + + mode = getenv("MENUCONFIG_MODE"); + if (mode) { + if (!strcasecmp(mode, "single_menu")) + single_menu_mode = 1; + } + + tcgetattr(1, &ios_org); + atexit(conf_cleanup); + init_wsize(); + reset_dialog(); + init_dialog(menu_backtitle); + do { + conf(&rootmenu); + dialog_clear(); + res = dialog_yesno(NULL, + _("Do you wish to save your " + "new "PROJECT_NAME" configuration?\n" + " to continue."), + 6, 60); + } while (res == KEY_ESC); + end_dialog(); + if (res == 0) { + if (conf_write(NULL)) { + fprintf(stderr, _("\n\n" + "Error writing "PROJECT_NAME" configuration.\n" + "Your configuration changes were NOT saved." + "\n\n")); + return 1; + } + printf(_("\n\n" + "*** End of "PROJECT_NAME" configuration.\n" + "*** Execute 'make' to build, or try 'make help'." + "\n\n")); + } else { + fprintf(stderr, _("\n\n" + "Your configuration changes were NOT saved." + "\n\n")); + } + + return 0; +} diff --git a/aosp/external/toybox/kconfig/menu.c b/aosp/external/toybox/kconfig/menu.c new file mode 100644 index 0000000000000000000000000000000000000000..c86c27f2c76135f4b69d4f24149f6559e72370fb --- /dev/null +++ b/aosp/external/toybox/kconfig/menu.c @@ -0,0 +1,419 @@ +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include + +#define LKC_DIRECT_LINK +#include "lkc.h" + +struct menu rootmenu; +static struct menu **last_entry_ptr; + +struct file *file_list; +struct file *current_file; + +static void menu_warn(struct menu *menu, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + fprintf(stderr, "%s:%d:warning: ", menu->file->name, menu->lineno); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); +} + +static void prop_warn(struct property *prop, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + fprintf(stderr, "%s:%d:warning: ", prop->file->name, prop->lineno); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); +} + +void menu_init(void) +{ + current_entry = current_menu = &rootmenu; + last_entry_ptr = &rootmenu.list; +} + +void menu_add_entry(struct symbol *sym) +{ + struct menu *menu; + + menu = malloc(sizeof(*menu)); + memset(menu, 0, sizeof(*menu)); + menu->sym = sym; + menu->parent = current_menu; + menu->file = current_file; + menu->lineno = zconf_lineno(); + + *last_entry_ptr = menu; + last_entry_ptr = &menu->next; + current_entry = menu; +} + +void menu_end_entry(void) +{ +} + +struct menu *menu_add_menu(void) +{ + menu_end_entry(); + last_entry_ptr = ¤t_entry->list; + return current_menu = current_entry; +} + +void menu_end_menu(void) +{ + last_entry_ptr = ¤t_menu->next; + current_menu = current_menu->parent; +} + +struct expr *menu_check_dep(struct expr *e) +{ + if (!e) + return e; + + switch (e->type) { + case E_NOT: + e->left.expr = menu_check_dep(e->left.expr); + break; + case E_OR: + case E_AND: + e->left.expr = menu_check_dep(e->left.expr); + e->right.expr = menu_check_dep(e->right.expr); + break; + case E_SYMBOL: + /* change 'm' into 'm' && MODULES */ + if (e->left.sym == &symbol_mod) + return expr_alloc_and(e, expr_alloc_symbol(modules_sym)); + break; + default: + break; + } + return e; +} + +void menu_add_dep(struct expr *dep) +{ + current_entry->dep = expr_alloc_and(current_entry->dep, menu_check_dep(dep)); +} + +void menu_set_type(int type) +{ + struct symbol *sym = current_entry->sym; + + if (sym->type == type) + return; + if (sym->type == S_UNKNOWN) { + sym->type = type; + return; + } + menu_warn(current_entry, "type of '%s' redefined from '%s' to '%s'", + sym->name ? sym->name : "", + sym_type_name(sym->type), sym_type_name(type)); +} + +struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *expr, struct expr *dep) +{ + struct property *prop = prop_alloc(type, current_entry->sym); + + prop->menu = current_entry; + prop->expr = expr; + prop->visible.expr = menu_check_dep(dep); + + if (prompt) { + if (isspace(*prompt)) { + prop_warn(prop, "leading whitespace ignored"); + while (isspace(*prompt)) + prompt++; + } + if (current_entry->prompt) + prop_warn(prop, "prompt redefined"); + current_entry->prompt = prop; + } + prop->text = prompt; + + return prop; +} + +struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep) +{ + return menu_add_prop(type, prompt, NULL, dep); +} + +void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep) +{ + menu_add_prop(type, NULL, expr, dep); +} + +void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep) +{ + menu_add_prop(type, NULL, expr_alloc_symbol(sym), dep); +} + +void menu_add_option(int token, char *arg) +{ + struct property *prop; + + switch (token) { + case T_OPT_MODULES: + prop = prop_alloc(P_DEFAULT, modules_sym); + prop->expr = expr_alloc_symbol(current_entry->sym); + break; + case T_OPT_DEFCONFIG_LIST: + if (!sym_defconfig_list) + sym_defconfig_list = current_entry->sym; + else if (sym_defconfig_list != current_entry->sym) + zconf_error("trying to redefine defconfig symbol"); + break; + } +} + +static int menu_range_valid_sym(struct symbol *sym, struct symbol *sym2) +{ + return sym2->type == S_INT || sym2->type == S_HEX || + (sym2->type == S_UNKNOWN && sym_string_valid(sym, sym2->name)); +} + +void sym_check_prop(struct symbol *sym) +{ + struct property *prop; + struct symbol *sym2; + for (prop = sym->prop; prop; prop = prop->next) { + switch (prop->type) { + case P_DEFAULT: + if ((sym->type == S_STRING || sym->type == S_INT || sym->type == S_HEX) && + prop->expr->type != E_SYMBOL) + prop_warn(prop, + "default for config symbol '%'" + " must be a single symbol", sym->name); + break; + case P_SELECT: + sym2 = prop_get_symbol(prop); + if (sym->type != S_BOOLEAN && sym->type != S_TRISTATE) + prop_warn(prop, + "config symbol '%s' uses select, but is " + "not boolean or tristate", sym->name); + else if (sym2->type == S_UNKNOWN) + prop_warn(prop, + "'select' used by config symbol '%s' " + "refer to undefined symbol '%s'", + sym->name, sym2->name); + else if (sym2->type != S_BOOLEAN && sym2->type != S_TRISTATE) + prop_warn(prop, + "'%s' has wrong type. 'select' only " + "accept arguments of boolean and " + "tristate type", sym2->name); + break; + case P_RANGE: + if (sym->type != S_INT && sym->type != S_HEX) + prop_warn(prop, "range is only allowed " + "for int or hex symbols"); + if (!menu_range_valid_sym(sym, prop->expr->left.sym) || + !menu_range_valid_sym(sym, prop->expr->right.sym)) + prop_warn(prop, "range is invalid"); + break; + default: + ; + } + } +} + +void menu_finalize(struct menu *parent) +{ + struct menu *menu, *last_menu; + struct symbol *sym; + struct property *prop; + struct expr *parentdep, *basedep, *dep, *dep2, **ep; + + sym = parent->sym; + if (parent->list) { + if (sym && sym_is_choice(sym)) { + /* find the first choice value and find out choice type */ + for (menu = parent->list; menu; menu = menu->next) { + if (menu->sym) { + current_entry = parent; + menu_set_type(menu->sym->type); + current_entry = menu; + menu_set_type(sym->type); + break; + } + } + parentdep = expr_alloc_symbol(sym); + } else if (parent->prompt) + parentdep = parent->prompt->visible.expr; + else + parentdep = parent->dep; + + for (menu = parent->list; menu; menu = menu->next) { + basedep = expr_transform(menu->dep); + basedep = expr_alloc_and(expr_copy(parentdep), basedep); + basedep = expr_eliminate_dups(basedep); + menu->dep = basedep; + if (menu->sym) + prop = menu->sym->prop; + else + prop = menu->prompt; + for (; prop; prop = prop->next) { + if (prop->menu != menu) + continue; + dep = expr_transform(prop->visible.expr); + dep = expr_alloc_and(expr_copy(basedep), dep); + dep = expr_eliminate_dups(dep); + if (menu->sym && menu->sym->type != S_TRISTATE) + dep = expr_trans_bool(dep); + prop->visible.expr = dep; + if (prop->type == P_SELECT) { + struct symbol *es = prop_get_symbol(prop); + es->rev_dep.expr = expr_alloc_or(es->rev_dep.expr, + expr_alloc_and(expr_alloc_symbol(menu->sym), expr_copy(dep))); + } + } + } + for (menu = parent->list; menu; menu = menu->next) + menu_finalize(menu); + } else if (sym) { + basedep = parent->prompt ? parent->prompt->visible.expr : NULL; + basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no); + basedep = expr_eliminate_dups(expr_transform(basedep)); + last_menu = NULL; + for (menu = parent->next; menu; menu = menu->next) { + dep = menu->prompt ? menu->prompt->visible.expr : menu->dep; + if (!expr_contains_symbol(dep, sym)) + break; + if (expr_depends_symbol(dep, sym)) + goto next; + dep = expr_trans_compare(dep, E_UNEQUAL, &symbol_no); + dep = expr_eliminate_dups(expr_transform(dep)); + dep2 = expr_copy(basedep); + expr_eliminate_eq(&dep, &dep2); + expr_free(dep); + if (!expr_is_yes(dep2)) { + expr_free(dep2); + break; + } + expr_free(dep2); + next: + menu_finalize(menu); + menu->parent = parent; + last_menu = menu; + } + if (last_menu) { + parent->list = parent->next; + parent->next = last_menu->next; + last_menu->next = NULL; + } + } + for (menu = parent->list; menu; menu = menu->next) { + if (sym && sym_is_choice(sym) && menu->sym) { + menu->sym->flags |= SYMBOL_CHOICEVAL; + if (!menu->prompt) + menu_warn(menu, "choice value must have a prompt"); + for (prop = menu->sym->prop; prop; prop = prop->next) { + if (prop->type == P_PROMPT && prop->menu != menu) { + prop_warn(prop, "choice values " + "currently only support a " + "single prompt"); + } + if (prop->type == P_DEFAULT) + prop_warn(prop, "defaults for choice " + "values not supported"); + } + current_entry = menu; + menu_set_type(sym->type); + menu_add_symbol(P_CHOICE, sym, NULL); + prop = sym_get_choice_prop(sym); + for (ep = &prop->expr; *ep; ep = &(*ep)->left.expr) + ; + *ep = expr_alloc_one(E_CHOICE, NULL); + (*ep)->right.sym = menu->sym; + } + if (menu->list && (!menu->prompt || !menu->prompt->text)) { + for (last_menu = menu->list; ; last_menu = last_menu->next) { + last_menu->parent = parent; + if (!last_menu->next) + break; + } + last_menu->next = menu->next; + menu->next = menu->list; + menu->list = NULL; + } + } + + if (sym && !(sym->flags & SYMBOL_WARNED)) { + if (sym->type == S_UNKNOWN) + menu_warn(parent, "config symbol defined without type"); + + if (sym_is_choice(sym) && !parent->prompt) + menu_warn(parent, "choice must have a prompt"); + + /* Check properties connected to this symbol */ + sym_check_prop(sym); + sym->flags |= SYMBOL_WARNED; + } + + if (sym && !sym_is_optional(sym) && parent->prompt) { + sym->rev_dep.expr = expr_alloc_or(sym->rev_dep.expr, + expr_alloc_and(parent->prompt->visible.expr, + expr_alloc_symbol(&symbol_mod))); + } +} + +bool menu_is_visible(struct menu *menu) +{ + struct menu *child; + struct symbol *sym; + tristate visible; + + if (!menu->prompt) + return false; + sym = menu->sym; + if (sym) { + sym_calc_value(sym); + visible = menu->prompt->visible.tri; + } else + visible = menu->prompt->visible.tri = expr_calc_value(menu->prompt->visible.expr); + + if (visible != no) + return true; + if (!sym || sym_get_tristate_value(menu->sym) == no) + return false; + + for (child = menu->list; child; child = child->next) + if (menu_is_visible(child)) + return true; + return false; +} + +const char *menu_get_prompt(struct menu *menu) +{ + if (menu->prompt) + return _(menu->prompt->text); + else if (menu->sym) + return _(menu->sym->name); + return NULL; +} + +struct menu *menu_get_root_menu(struct menu *menu) +{ + return &rootmenu; +} + +struct menu *menu_get_parent_menu(struct menu *menu) +{ + enum prop_type type; + + for (; menu != &rootmenu; menu = menu->parent) { + type = menu->prompt ? menu->prompt->type : 0; + if (type == P_MENU) + break; + } + return menu; +} + diff --git a/aosp/external/toybox/kconfig/symbol.c b/aosp/external/toybox/kconfig/symbol.c new file mode 100644 index 0000000000000000000000000000000000000000..6dbed0e54b1ccc9127d1c1d7418299b8e6763af9 --- /dev/null +++ b/aosp/external/toybox/kconfig/symbol.c @@ -0,0 +1,884 @@ +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include +#include +#include +#include + +#define LKC_DIRECT_LINK +#include "lkc.h" + +struct symbol symbol_yes = { + .name = "y", + .curr = { "y", yes }, + .flags = SYMBOL_CONST|SYMBOL_VALID, +}, symbol_mod = { + .name = "m", + .curr = { "m", mod }, + .flags = SYMBOL_CONST|SYMBOL_VALID, +}, symbol_no = { + .name = "n", + .curr = { "n", no }, + .flags = SYMBOL_CONST|SYMBOL_VALID, +}, symbol_empty = { + .name = "", + .curr = { "", no }, + .flags = SYMBOL_VALID, +}; + +int sym_change_count; +struct symbol *sym_defconfig_list; +struct symbol *modules_sym; +tristate modules_val; + +void sym_add_default(struct symbol *sym, const char *def) +{ + struct property *prop = prop_alloc(P_DEFAULT, sym); + + prop->expr = expr_alloc_symbol(sym_lookup(def, 1)); +} + +void sym_init(void) +{ + struct symbol *sym; + struct utsname uts; + char *p; + static bool inited = false; + + if (inited) + return; + inited = true; + + uname(&uts); + +/* + sym = sym_lookup("ARCH", 0); + sym->type = S_STRING; + sym->flags |= SYMBOL_AUTO; + p = getenv("ARCH"); + if (p) + sym_add_default(sym, p); +*/ + + sym = sym_lookup("KERNELVERSION", 0); + sym->type = S_STRING; + sym->flags |= SYMBOL_AUTO; + p = getenv("KERNELVERSION"); + if (p) + sym_add_default(sym, p); + + sym = sym_lookup("UNAME_RELEASE", 0); + sym->type = S_STRING; + sym->flags |= SYMBOL_AUTO; + sym_add_default(sym, uts.release); +} + +enum symbol_type sym_get_type(struct symbol *sym) +{ + enum symbol_type type = sym->type; + + if (type == S_TRISTATE) { + if (sym_is_choice_value(sym) && sym->visible == yes) + type = S_BOOLEAN; + else if (modules_val == no) + type = S_BOOLEAN; + } + return type; +} + +const char *sym_type_name(enum symbol_type type) +{ + switch (type) { + case S_BOOLEAN: + return "boolean"; + case S_TRISTATE: + return "tristate"; + case S_INT: + return "integer"; + case S_HEX: + return "hex"; + case S_STRING: + return "string"; + case S_UNKNOWN: + return "unknown"; + case S_OTHER: + break; + } + return "???"; +} + +struct property *sym_get_choice_prop(struct symbol *sym) +{ + struct property *prop; + + for_all_choices(sym, prop) + return prop; + return NULL; +} + +struct property *sym_get_default_prop(struct symbol *sym) +{ + struct property *prop; + + for_all_defaults(sym, prop) { + prop->visible.tri = expr_calc_value(prop->visible.expr); + if (prop->visible.tri != no) + return prop; + } + return NULL; +} + +struct property *sym_get_range_prop(struct symbol *sym) +{ + struct property *prop; + + for_all_properties(sym, prop, P_RANGE) { + prop->visible.tri = expr_calc_value(prop->visible.expr); + if (prop->visible.tri != no) + return prop; + } + return NULL; +} + +static int sym_get_range_val(struct symbol *sym, int base) +{ + sym_calc_value(sym); + switch (sym->type) { + case S_INT: + base = 10; + break; + case S_HEX: + base = 16; + break; + default: + break; + } + return strtol(sym->curr.val, NULL, base); +} + +static void sym_validate_range(struct symbol *sym) +{ + struct property *prop; + int base, val, val2; + char str[64]; + + switch (sym->type) { + case S_INT: + base = 10; + break; + case S_HEX: + base = 16; + break; + default: + return; + } + prop = sym_get_range_prop(sym); + if (!prop) + return; + val = strtol(sym->curr.val, NULL, base); + val2 = sym_get_range_val(prop->expr->left.sym, base); + if (val >= val2) { + val2 = sym_get_range_val(prop->expr->right.sym, base); + if (val <= val2) + return; + } + if (sym->type == S_INT) + sprintf(str, "%d", val2); + else + sprintf(str, "0x%x", val2); + sym->curr.val = strdup(str); +} + +static void sym_calc_visibility(struct symbol *sym) +{ + struct property *prop; + tristate tri; + + /* any prompt visible? */ + tri = no; + for_all_prompts(sym, prop) { + prop->visible.tri = expr_calc_value(prop->visible.expr); + tri = E_OR(tri, prop->visible.tri); + } + if (tri == mod && (sym->type != S_TRISTATE || modules_val == no)) + tri = yes; + if (sym->visible != tri) { + sym->visible = tri; + sym_set_changed(sym); + } + if (sym_is_choice_value(sym)) + return; + tri = no; + if (sym->rev_dep.expr) + tri = expr_calc_value(sym->rev_dep.expr); + if (tri == mod && sym_get_type(sym) == S_BOOLEAN) + tri = yes; + if (sym->rev_dep.tri != tri) { + sym->rev_dep.tri = tri; + sym_set_changed(sym); + } +} + +static struct symbol *sym_calc_choice(struct symbol *sym) +{ + struct symbol *def_sym; + struct property *prop; + struct expr *e; + + /* is the user choice visible? */ + def_sym = sym->def[S_DEF_USER].val; + if (def_sym) { + sym_calc_visibility(def_sym); + if (def_sym->visible != no) + return def_sym; + } + + /* any of the defaults visible? */ + for_all_defaults(sym, prop) { + prop->visible.tri = expr_calc_value(prop->visible.expr); + if (prop->visible.tri == no) + continue; + def_sym = prop_get_symbol(prop); + sym_calc_visibility(def_sym); + if (def_sym->visible != no) + return def_sym; + } + + /* just get the first visible value */ + prop = sym_get_choice_prop(sym); + for (e = prop->expr; e; e = e->left.expr) { + def_sym = e->right.sym; + sym_calc_visibility(def_sym); + if (def_sym->visible != no) + return def_sym; + } + + /* no choice? reset tristate value */ + sym->curr.tri = no; + return NULL; +} + +void sym_calc_value(struct symbol *sym) +{ + struct symbol_value newval, oldval; + struct property *prop; + struct expr *e; + + if (!sym) + return; + + if (sym->flags & SYMBOL_VALID) + return; + sym->flags |= SYMBOL_VALID; + + oldval = sym->curr; + + switch (sym->type) { + case S_INT: + case S_HEX: + case S_STRING: + newval = symbol_empty.curr; + break; + case S_BOOLEAN: + case S_TRISTATE: + newval = symbol_no.curr; + break; + default: + sym->curr.val = sym->name; + sym->curr.tri = no; + return; + } + if (!sym_is_choice_value(sym)) + sym->flags &= ~SYMBOL_WRITE; + + sym_calc_visibility(sym); + + /* set default if recursively called */ + sym->curr = newval; + + switch (sym_get_type(sym)) { + case S_BOOLEAN: + case S_TRISTATE: + if (sym_is_choice_value(sym) && sym->visible == yes) { + prop = sym_get_choice_prop(sym); + newval.tri = (prop_get_symbol(prop)->curr.val == sym) ? yes : no; + } else if (E_OR(sym->visible, sym->rev_dep.tri) != no) { + sym->flags |= SYMBOL_WRITE; + if (sym_has_value(sym)) + newval.tri = sym->def[S_DEF_USER].tri; + else if (!sym_is_choice(sym)) { + prop = sym_get_default_prop(sym); + if (prop) + newval.tri = expr_calc_value(prop->expr); + } + newval.tri = E_OR(E_AND(newval.tri, sym->visible), sym->rev_dep.tri); + } else if (!sym_is_choice(sym)) { + prop = sym_get_default_prop(sym); + if (prop) { + sym->flags |= SYMBOL_WRITE; + newval.tri = expr_calc_value(prop->expr); + } + } + if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN) + newval.tri = yes; + break; + case S_STRING: + case S_HEX: + case S_INT: + if (sym->visible != no) { + sym->flags |= SYMBOL_WRITE; + if (sym_has_value(sym)) { + newval.val = sym->def[S_DEF_USER].val; + break; + } + } + prop = sym_get_default_prop(sym); + if (prop) { + struct symbol *ds = prop_get_symbol(prop); + if (ds) { + sym->flags |= SYMBOL_WRITE; + sym_calc_value(ds); + newval.val = ds->curr.val; + } + } + break; + default: + ; + } + + sym->curr = newval; + if (sym_is_choice(sym) && newval.tri == yes) + sym->curr.val = sym_calc_choice(sym); + sym_validate_range(sym); + + if (memcmp(&oldval, &sym->curr, sizeof(oldval))) { + sym_set_changed(sym); + if (modules_sym == sym) { + sym_set_all_changed(); + modules_val = modules_sym->curr.tri; + } + } + + if (sym_is_choice(sym)) { + int flags = sym->flags & (SYMBOL_CHANGED | SYMBOL_WRITE); + prop = sym_get_choice_prop(sym); + for (e = prop->expr; e; e = e->left.expr) { + e->right.sym->flags |= flags; + if (flags & SYMBOL_CHANGED) + sym_set_changed(e->right.sym); + } + } +} + +void sym_clear_all_valid(void) +{ + struct symbol *sym; + int i; + + for_all_symbols(i, sym) + sym->flags &= ~SYMBOL_VALID; + sym_change_count++; + if (modules_sym) + sym_calc_value(modules_sym); +} + +void sym_set_changed(struct symbol *sym) +{ + struct property *prop; + + sym->flags |= SYMBOL_CHANGED; + for (prop = sym->prop; prop; prop = prop->next) { + if (prop->menu) + prop->menu->flags |= MENU_CHANGED; + } +} + +void sym_set_all_changed(void) +{ + struct symbol *sym; + int i; + + for_all_symbols(i, sym) + sym_set_changed(sym); +} + +bool sym_tristate_within_range(struct symbol *sym, tristate val) +{ + int type = sym_get_type(sym); + + if (sym->visible == no) + return false; + + if (type != S_BOOLEAN && type != S_TRISTATE) + return false; + + if (type == S_BOOLEAN && val == mod) + return false; + if (sym->visible <= sym->rev_dep.tri) + return false; + if (sym_is_choice_value(sym) && sym->visible == yes) + return val == yes; + return val >= sym->rev_dep.tri && val <= sym->visible; +} + +bool sym_set_tristate_value(struct symbol *sym, tristate val) +{ + tristate oldval = sym_get_tristate_value(sym); + + if (oldval != val && !sym_tristate_within_range(sym, val)) + return false; + + if (!(sym->flags & SYMBOL_DEF_USER)) { + sym->flags |= SYMBOL_DEF_USER; + sym_set_changed(sym); + } + /* + * setting a choice value also resets the new flag of the choice + * symbol and all other choice values. + */ + if (sym_is_choice_value(sym) && val == yes) { + struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym)); + struct property *prop; + struct expr *e; + + cs->def[S_DEF_USER].val = sym; + cs->flags |= SYMBOL_DEF_USER; + prop = sym_get_choice_prop(cs); + for (e = prop->expr; e; e = e->left.expr) { + if (e->right.sym->visible != no) + e->right.sym->flags |= SYMBOL_DEF_USER; + } + } + + sym->def[S_DEF_USER].tri = val; + if (oldval != val) + sym_clear_all_valid(); + + return true; +} + +tristate sym_toggle_tristate_value(struct symbol *sym) +{ + tristate oldval, newval; + + oldval = newval = sym_get_tristate_value(sym); + do { + switch (newval) { + case no: + newval = mod; + break; + case mod: + newval = yes; + break; + case yes: + newval = no; + break; + } + if (sym_set_tristate_value(sym, newval)) + break; + } while (oldval != newval); + return newval; +} + +bool sym_string_valid(struct symbol *sym, const char *str) +{ + signed char ch; + + switch (sym->type) { + case S_STRING: + return true; + case S_INT: + ch = *str++; + if (ch == '-') + ch = *str++; + if (!isdigit(ch)) + return false; + if (ch == '0' && *str != 0) + return false; + while ((ch = *str++)) { + if (!isdigit(ch)) + return false; + } + return true; + case S_HEX: + if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X')) + str += 2; + ch = *str++; + do { + if (!isxdigit(ch)) + return false; + } while ((ch = *str++)); + return true; + case S_BOOLEAN: + case S_TRISTATE: + switch (str[0]) { + case 'y': case 'Y': + case 'm': case 'M': + case 'n': case 'N': + return true; + } + return false; + default: + return false; + } +} + +bool sym_string_within_range(struct symbol *sym, const char *str) +{ + struct property *prop; + int val; + + switch (sym->type) { + case S_STRING: + return sym_string_valid(sym, str); + case S_INT: + if (!sym_string_valid(sym, str)) + return false; + prop = sym_get_range_prop(sym); + if (!prop) + return true; + val = strtol(str, NULL, 10); + return val >= sym_get_range_val(prop->expr->left.sym, 10) && + val <= sym_get_range_val(prop->expr->right.sym, 10); + case S_HEX: + if (!sym_string_valid(sym, str)) + return false; + prop = sym_get_range_prop(sym); + if (!prop) + return true; + val = strtol(str, NULL, 16); + return val >= sym_get_range_val(prop->expr->left.sym, 16) && + val <= sym_get_range_val(prop->expr->right.sym, 16); + case S_BOOLEAN: + case S_TRISTATE: + switch (str[0]) { + case 'y': case 'Y': + return sym_tristate_within_range(sym, yes); + case 'm': case 'M': + return sym_tristate_within_range(sym, mod); + case 'n': case 'N': + return sym_tristate_within_range(sym, no); + } + return false; + default: + return false; + } +} + +bool sym_set_string_value(struct symbol *sym, const char *newval) +{ + const char *oldval; + char *val; + int size; + + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + switch (newval[0]) { + case 'y': case 'Y': + return sym_set_tristate_value(sym, yes); + case 'm': case 'M': + return sym_set_tristate_value(sym, mod); + case 'n': case 'N': + return sym_set_tristate_value(sym, no); + } + return false; + default: + ; + } + + if (!sym_string_within_range(sym, newval)) + return false; + + if (!(sym->flags & SYMBOL_DEF_USER)) { + sym->flags |= SYMBOL_DEF_USER; + sym_set_changed(sym); + } + + oldval = sym->def[S_DEF_USER].val; + size = strlen(newval) + 1; + if (sym->type == S_HEX && (newval[0] != '0' || (newval[1] != 'x' && newval[1] != 'X'))) { + size += 2; + sym->def[S_DEF_USER].val = val = malloc(size); + *val++ = '0'; + *val++ = 'x'; + } else if (!oldval || strcmp(oldval, newval)) + sym->def[S_DEF_USER].val = val = malloc(size); + else + return true; + + strcpy(val, newval); + free((void *)oldval); + sym_clear_all_valid(); + + return true; +} + +const char *sym_get_string_value(struct symbol *sym) +{ + tristate val; + + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + val = sym_get_tristate_value(sym); + switch (val) { + case no: + return "n"; + case mod: + return "m"; + case yes: + return "y"; + } + break; + default: + ; + } + return (const char *)sym->curr.val; +} + +bool sym_is_changable(struct symbol *sym) +{ + return sym->visible > sym->rev_dep.tri; +} + +struct symbol *sym_lookup(const char *name, int isconst) +{ + struct symbol *symbol; + const char *ptr; + char *new_name; + int hash = 0; + + if (name) { + if (name[0] && !name[1]) { + switch (name[0]) { + case 'y': return &symbol_yes; + case 'm': return &symbol_mod; + case 'n': return &symbol_no; + } + } + for (ptr = name; *ptr; ptr++) + hash += *ptr; + hash &= 0xff; + + for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) { + if (!strcmp(symbol->name, name)) { + if ((isconst && symbol->flags & SYMBOL_CONST) || + (!isconst && !(symbol->flags & SYMBOL_CONST))) + return symbol; + } + } + new_name = strdup(name); + } else { + new_name = NULL; + hash = 256; + } + + symbol = malloc(sizeof(*symbol)); + memset(symbol, 0, sizeof(*symbol)); + symbol->name = new_name; + symbol->type = S_UNKNOWN; + if (isconst) + symbol->flags |= SYMBOL_CONST; + + symbol->next = symbol_hash[hash]; + symbol_hash[hash] = symbol; + + return symbol; +} + +struct symbol *sym_find(const char *name) +{ + struct symbol *symbol = NULL; + const char *ptr; + int hash = 0; + + if (!name) + return NULL; + + if (name[0] && !name[1]) { + switch (name[0]) { + case 'y': return &symbol_yes; + case 'm': return &symbol_mod; + case 'n': return &symbol_no; + } + } + for (ptr = name; *ptr; ptr++) + hash += *ptr; + hash &= 0xff; + + for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) { + if (!strcmp(symbol->name, name) && + !(symbol->flags & SYMBOL_CONST)) + break; + } + + return symbol; +} + +struct symbol **sym_re_search(const char *pattern) +{ + struct symbol *sym, **sym_arr = NULL; + int i, cnt, size; + regex_t re; + + cnt = size = 0; + /* Skip if empty */ + if (strlen(pattern) == 0) + return NULL; + if (regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB|REG_ICASE)) + return NULL; + + for_all_symbols(i, sym) { + if (sym->flags & SYMBOL_CONST || !sym->name) + continue; + if (regexec(&re, sym->name, 0, NULL, 0)) + continue; + if (cnt + 1 >= size) { + void *tmp = sym_arr; + size += 16; + sym_arr = realloc(sym_arr, size * sizeof(struct symbol *)); + if (!sym_arr) { + free(tmp); + return NULL; + } + } + sym_arr[cnt++] = sym; + } + if (sym_arr) + sym_arr[cnt] = NULL; + regfree(&re); + + return sym_arr; +} + + +struct symbol *sym_check_deps(struct symbol *sym); + +static struct symbol *sym_check_expr_deps(struct expr *e) +{ + struct symbol *sym; + + if (!e) + return NULL; + switch (e->type) { + case E_OR: + case E_AND: + sym = sym_check_expr_deps(e->left.expr); + if (sym) + return sym; + return sym_check_expr_deps(e->right.expr); + case E_NOT: + return sym_check_expr_deps(e->left.expr); + case E_EQUAL: + case E_UNEQUAL: + sym = sym_check_deps(e->left.sym); + if (sym) + return sym; + return sym_check_deps(e->right.sym); + case E_SYMBOL: + return sym_check_deps(e->left.sym); + default: + break; + } + printf("Oops! How to check %d?\n", e->type); + return NULL; +} + +struct symbol *sym_check_deps(struct symbol *sym) +{ + struct symbol *sym2; + struct property *prop; + + if (sym->flags & SYMBOL_CHECK) { + printf("Warning! Found recursive dependency: %s", sym->name); + return sym; + } + if (sym->flags & SYMBOL_CHECKED) + return NULL; + + sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED); + sym2 = sym_check_expr_deps(sym->rev_dep.expr); + if (sym2) + goto out; + + for (prop = sym->prop; prop; prop = prop->next) { + if (prop->type == P_CHOICE || prop->type == P_SELECT) + continue; + sym2 = sym_check_expr_deps(prop->visible.expr); + if (sym2) + goto out; + if (prop->type != P_DEFAULT || sym_is_choice(sym)) + continue; + sym2 = sym_check_expr_deps(prop->expr); + if (sym2) + goto out; + } +out: + if (sym2) { + printf(" %s", sym->name); + if (sym2 == sym) { + printf("\n"); + sym2 = NULL; + } + } + sym->flags &= ~SYMBOL_CHECK; + return sym2; +} + +struct property *prop_alloc(enum prop_type type, struct symbol *sym) +{ + struct property *prop; + struct property **propp; + + prop = malloc(sizeof(*prop)); + memset(prop, 0, sizeof(*prop)); + prop->type = type; + prop->sym = sym; + prop->file = current_file; + prop->lineno = zconf_lineno(); + + /* append property to the prop list of symbol */ + if (sym) { + for (propp = &sym->prop; *propp; propp = &(*propp)->next) + ; + *propp = prop; + } + + return prop; +} + +struct symbol *prop_get_symbol(struct property *prop) +{ + if (prop->expr && (prop->expr->type == E_SYMBOL || + prop->expr->type == E_CHOICE)) + return prop->expr->left.sym; + return NULL; +} + +const char *prop_get_type_name(enum prop_type type) +{ + switch (type) { + case P_PROMPT: + return "prompt"; + case P_COMMENT: + return "comment"; + case P_MENU: + return "menu"; + case P_DEFAULT: + return "default"; + case P_CHOICE: + return "choice"; + case P_SELECT: + return "select"; + case P_RANGE: + return "range"; + case P_UNKNOWN: + break; + } + return "unknown"; +} diff --git a/aosp/external/toybox/kconfig/util.c b/aosp/external/toybox/kconfig/util.c new file mode 100644 index 0000000000000000000000000000000000000000..e3f28b9d59f4723347cc3c941adcfaa7305e119f --- /dev/null +++ b/aosp/external/toybox/kconfig/util.c @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2002-2005 Roman Zippel + * Copyright (C) 2002-2005 Sam Ravnborg + * + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include "lkc.h" + +/* file already present in list? If not add it */ +struct file *file_lookup(const char *name) +{ + struct file *file; + + for (file = file_list; file; file = file->next) { + if (!strcmp(name, file->name)) + return file; + } + + file = malloc(sizeof(*file)); + memset(file, 0, sizeof(*file)); + file->name = strdup(name); + file->next = file_list; + file_list = file; + return file; +} + +/* write a dependency file as used by kbuild to track dependencies */ +int file_write_dep(const char *name) +{ + struct file *file; + FILE *out; + + if (!name) + name = ".kconfig.d"; + out = fopen("..config.tmp", "w"); + if (!out) + return 1; + fprintf(out, "deps_config := \\\n"); + for (file = file_list; file; file = file->next) { + if (file->next) + fprintf(out, "\t%s \\\n", file->name); + else + fprintf(out, "\t%s\n", file->name); + } + fprintf(out, "\ninclude/config/auto.conf: \\\n" + "\t$(deps_config)\n\n" + "$(deps_config): ;\n"); + fclose(out); + rename("..config.tmp", name); + return 0; +} + + +/* Allocate initial growable sting */ +struct gstr str_new(void) +{ + struct gstr gs; + gs.s = malloc(sizeof(char) * 64); + gs.len = 16; + strcpy(gs.s, "\0"); + return gs; +} + +/* Allocate and assign growable string */ +struct gstr str_assign(const char *s) +{ + struct gstr gs; + gs.s = strdup(s); + gs.len = strlen(s) + 1; + return gs; +} + +/* Free storage for growable string */ +void str_free(struct gstr *gs) +{ + if (gs->s) + free(gs->s); + gs->s = NULL; + gs->len = 0; +} + +/* Append to growable string */ +void str_append(struct gstr *gs, const char *s) +{ + size_t l = strlen(gs->s) + strlen(s) + 1; + if (l > gs->len) { + gs->s = realloc(gs->s, l); + gs->len = l; + } + strcat(gs->s, s); +} + +/* Append printf formatted string to growable string */ +void str_printf(struct gstr *gs, const char *fmt, ...) +{ + va_list ap; + char s[10000]; /* big enough... */ + va_start(ap, fmt); + vsnprintf(s, sizeof(s), fmt, ap); + str_append(gs, s); + va_end(ap); +} + +/* Retrieve value of growable string */ +const char *str_get(struct gstr *gs) +{ + return gs->s; +} + diff --git a/aosp/external/toybox/kconfig/zconf.hash.c_shipped b/aosp/external/toybox/kconfig/zconf.hash.c_shipped new file mode 100644 index 0000000000000000000000000000000000000000..1fffcbbf541841193fa7e952ed4e373bc6bfd411 --- /dev/null +++ b/aosp/external/toybox/kconfig/zconf.hash.c_shipped @@ -0,0 +1,239 @@ +/* ANSI-C code produced by gperf version 3.0.1 */ +/* Command-line: gperf */ +/* Computed positions: -k'1,3' */ + +#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) +/* The character set is not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to ." +#endif + +struct kconf_id; +/* maximum key range = 45, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +kconf_id_hash (register const char *str, register unsigned int len) +{ + static unsigned char asso_values[] = + { + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 25, 30, 15, + 0, 15, 0, 47, 5, 15, 47, 47, 30, 20, + 5, 0, 25, 15, 0, 0, 10, 35, 47, 47, + 5, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47 + }; + register int hval = len; + + switch (hval) + { + default: + hval += asso_values[(unsigned char)str[2]]; + /*FALLTHROUGH*/ + case 2: + case 1: + hval += asso_values[(unsigned char)str[0]]; + break; + } + return hval; +} + +struct kconf_id_strings_t + { + char kconf_id_strings_str2[sizeof("on")]; + char kconf_id_strings_str6[sizeof("string")]; + char kconf_id_strings_str7[sizeof("default")]; + char kconf_id_strings_str8[sizeof("def_bool")]; + char kconf_id_strings_str10[sizeof("range")]; + char kconf_id_strings_str11[sizeof("def_boolean")]; + char kconf_id_strings_str12[sizeof("def_tristate")]; + char kconf_id_strings_str13[sizeof("hex")]; + char kconf_id_strings_str14[sizeof("defconfig_list")]; + char kconf_id_strings_str16[sizeof("option")]; + char kconf_id_strings_str17[sizeof("if")]; + char kconf_id_strings_str18[sizeof("optional")]; + char kconf_id_strings_str20[sizeof("endif")]; + char kconf_id_strings_str21[sizeof("choice")]; + char kconf_id_strings_str22[sizeof("endmenu")]; + char kconf_id_strings_str23[sizeof("requires")]; + char kconf_id_strings_str24[sizeof("endchoice")]; + char kconf_id_strings_str26[sizeof("config")]; + char kconf_id_strings_str27[sizeof("modules")]; + char kconf_id_strings_str28[sizeof("int")]; + char kconf_id_strings_str29[sizeof("menu")]; + char kconf_id_strings_str31[sizeof("prompt")]; + char kconf_id_strings_str32[sizeof("depends")]; + char kconf_id_strings_str33[sizeof("tristate")]; + char kconf_id_strings_str34[sizeof("bool")]; + char kconf_id_strings_str35[sizeof("menuconfig")]; + char kconf_id_strings_str36[sizeof("select")]; + char kconf_id_strings_str37[sizeof("boolean")]; + char kconf_id_strings_str39[sizeof("help")]; + char kconf_id_strings_str41[sizeof("source")]; + char kconf_id_strings_str42[sizeof("comment")]; + char kconf_id_strings_str43[sizeof("mainmenu")]; + char kconf_id_strings_str46[sizeof("enable")]; + }; +static struct kconf_id_strings_t kconf_id_strings_contents = + { + "on", + "string", + "default", + "def_bool", + "range", + "def_boolean", + "def_tristate", + "hex", + "defconfig_list", + "option", + "if", + "optional", + "endif", + "choice", + "endmenu", + "requires", + "endchoice", + "config", + "modules", + "int", + "menu", + "prompt", + "depends", + "tristate", + "bool", + "menuconfig", + "select", + "boolean", + "help", + "source", + "comment", + "mainmenu", + "enable" + }; +#define kconf_id_strings ((const char *) &kconf_id_strings_contents) +struct kconf_id * +kconf_id_lookup (register const char *str, register unsigned int len) +{ + enum + { + TOTAL_KEYWORDS = 33, + MIN_WORD_LENGTH = 2, + MAX_WORD_LENGTH = 14, + MIN_HASH_VALUE = 2, + MAX_HASH_VALUE = 46 + }; + + static struct kconf_id wordlist[] = + { + {-1}, {-1}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str2, T_ON, TF_PARAM}, + {-1}, {-1}, {-1}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str6, T_TYPE, TF_COMMAND, S_STRING}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str7, T_DEFAULT, TF_COMMAND, S_UNKNOWN}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str8, T_DEFAULT, TF_COMMAND, S_BOOLEAN}, + {-1}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str10, T_RANGE, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str11, T_DEFAULT, TF_COMMAND, S_BOOLEAN}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str12, T_DEFAULT, TF_COMMAND, S_TRISTATE}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str13, T_TYPE, TF_COMMAND, S_HEX}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str14, T_OPT_DEFCONFIG_LIST,TF_OPTION}, + {-1}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str16, T_OPTION, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str17, T_IF, TF_COMMAND|TF_PARAM}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str18, T_OPTIONAL, TF_COMMAND}, + {-1}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str20, T_ENDIF, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str21, T_CHOICE, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str22, T_ENDMENU, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str23, T_REQUIRES, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str24, T_ENDCHOICE, TF_COMMAND}, + {-1}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str26, T_CONFIG, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str27, T_OPT_MODULES, TF_OPTION}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str28, T_TYPE, TF_COMMAND, S_INT}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str29, T_MENU, TF_COMMAND}, + {-1}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str31, T_PROMPT, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str32, T_DEPENDS, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str33, T_TYPE, TF_COMMAND, S_TRISTATE}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str34, T_TYPE, TF_COMMAND, S_BOOLEAN}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str35, T_MENUCONFIG, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str36, T_SELECT, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str37, T_TYPE, TF_COMMAND, S_BOOLEAN}, + {-1}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str39, T_HELP, TF_COMMAND}, + {-1}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str41, T_SOURCE, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str42, T_COMMENT, TF_COMMAND}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str43, T_MAINMENU, TF_COMMAND}, + {-1}, {-1}, + {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str46, T_SELECT, TF_COMMAND} + }; + + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = kconf_id_hash (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + { + register int o = wordlist[key].name; + if (o >= 0) + { + register const char *s = o + kconf_id_strings; + + if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0') + return &wordlist[key]; + } + } + } + return 0; +} + diff --git a/aosp/external/toybox/kconfig/zconf.tab.c_shipped b/aosp/external/toybox/kconfig/zconf.tab.c_shipped new file mode 100644 index 0000000000000000000000000000000000000000..34ccabdd9e6a91415dac2140b45186f1ebdf0bb7 --- /dev/null +++ b/aosp/external/toybox/kconfig/zconf.tab.c_shipped @@ -0,0 +1,2345 @@ +/* A Bison parser, made by GNU Bison 2.1. */ + +/* Skeleton parser for Yacc-like parsing with Bison, + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* Written by Richard Stallman by simplifying the original so called + ``semantic'' parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.1" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + +/* Substitute the variable and function names. */ +#define yyparse zconfparse +#define yylex zconflex +#define yyerror zconferror +#define yylval zconflval +#define yychar zconfchar +#define yydebug zconfdebug +#define yynerrs zconfnerrs + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + T_MAINMENU = 258, + T_MENU = 259, + T_ENDMENU = 260, + T_SOURCE = 261, + T_CHOICE = 262, + T_ENDCHOICE = 263, + T_COMMENT = 264, + T_CONFIG = 265, + T_MENUCONFIG = 266, + T_HELP = 267, + T_HELPTEXT = 268, + T_IF = 269, + T_ENDIF = 270, + T_DEPENDS = 271, + T_REQUIRES = 272, + T_OPTIONAL = 273, + T_PROMPT = 274, + T_TYPE = 275, + T_DEFAULT = 276, + T_SELECT = 277, + T_RANGE = 278, + T_OPTION = 279, + T_ON = 280, + T_WORD = 281, + T_WORD_QUOTE = 282, + T_UNEQUAL = 283, + T_CLOSE_PAREN = 284, + T_OPEN_PAREN = 285, + T_EOL = 286, + T_OR = 287, + T_AND = 288, + T_EQUAL = 289, + T_NOT = 290 + }; +#endif +/* Tokens. */ +#define T_MAINMENU 258 +#define T_MENU 259 +#define T_ENDMENU 260 +#define T_SOURCE 261 +#define T_CHOICE 262 +#define T_ENDCHOICE 263 +#define T_COMMENT 264 +#define T_CONFIG 265 +#define T_MENUCONFIG 266 +#define T_HELP 267 +#define T_HELPTEXT 268 +#define T_IF 269 +#define T_ENDIF 270 +#define T_DEPENDS 271 +#define T_REQUIRES 272 +#define T_OPTIONAL 273 +#define T_PROMPT 274 +#define T_TYPE 275 +#define T_DEFAULT 276 +#define T_SELECT 277 +#define T_RANGE 278 +#define T_OPTION 279 +#define T_ON 280 +#define T_WORD 281 +#define T_WORD_QUOTE 282 +#define T_UNEQUAL 283 +#define T_CLOSE_PAREN 284 +#define T_OPEN_PAREN 285 +#define T_EOL 286 +#define T_OR 287 +#define T_AND 288 +#define T_EQUAL 289 +#define T_NOT 290 + + + + +/* Copy the first part of user declarations. */ + + +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include +#include +#include +#include +#include + +#define LKC_DIRECT_LINK +#include "lkc.h" + +#include "zconf.hash.c" + +#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt) + +#define PRINTD 0x0001 +#define DEBUG_PARSE 0x0002 + +int cdebug = PRINTD; + +extern int zconflex(void); +static void zconfprint(const char *err, ...); +static void zconf_error(const char *err, ...); +static void zconferror(const char *err); +static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken); + +struct symbol *symbol_hash[257]; + +static struct menu *current_menu, *current_entry; + +#define YYDEBUG 0 +#if YYDEBUG +#define YYERROR_VERBOSE +#endif + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) + +typedef union YYSTYPE { + char *string; + struct file *file; + struct symbol *symbol; + struct expr *expr; + struct menu *menu; + struct kconf_id *id; +} YYSTYPE; +/* Line 196 of yacc.c. */ + +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 219 of yacc.c. */ + + +#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) +# define YYSIZE_T __SIZE_TYPE__ +#endif +#if ! defined (YYSIZE_T) && defined (size_t) +# define YYSIZE_T size_t +#endif +#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus)) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +#endif +#if ! defined (YYSIZE_T) +# define YYSIZE_T unsigned int +#endif + +#ifndef YY_ +# if YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +#if ! defined (yyoverflow) || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# else +# define YYSTACK_ALLOC alloca +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYINCLUDED_STDLIB_H +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1) +# endif +# ifdef __cplusplus +extern "C" { +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \ + && (defined (__STDC__) || defined (__cplusplus))) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \ + && (defined (__STDC__) || defined (__cplusplus))) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifdef __cplusplus +} +# endif +# endif +#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ + + +#if (! defined (yyoverflow) \ + && (! defined (__cplusplus) \ + || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + short int yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined (__GNUC__) && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (0) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) + +#endif + +#if defined (__STDC__) || defined (__cplusplus) + typedef signed char yysigned_char; +#else + typedef short int yysigned_char; +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 3 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 275 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 36 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 45 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 110 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 183 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 290 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const unsigned char yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const unsigned short int yyprhs[] = +{ + 0, 0, 3, 5, 6, 9, 12, 15, 20, 23, + 28, 33, 37, 39, 41, 43, 45, 47, 49, 51, + 53, 55, 57, 59, 61, 63, 67, 70, 74, 77, + 81, 84, 85, 88, 91, 94, 97, 100, 103, 107, + 112, 117, 122, 128, 132, 133, 137, 138, 141, 144, + 147, 149, 153, 154, 157, 160, 163, 166, 169, 174, + 178, 181, 186, 187, 190, 194, 196, 200, 201, 204, + 207, 210, 214, 217, 219, 223, 224, 227, 230, 233, + 237, 241, 244, 247, 250, 251, 254, 257, 260, 265, + 269, 273, 274, 277, 279, 281, 284, 287, 290, 292, + 295, 296, 299, 301, 305, 309, 313, 316, 320, 324, + 326 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yysigned_char yyrhs[] = +{ + 37, 0, -1, 38, -1, -1, 38, 40, -1, 38, + 54, -1, 38, 65, -1, 38, 3, 75, 77, -1, + 38, 76, -1, 38, 26, 1, 31, -1, 38, 39, + 1, 31, -1, 38, 1, 31, -1, 16, -1, 19, + -1, 20, -1, 22, -1, 18, -1, 23, -1, 21, + -1, 31, -1, 60, -1, 69, -1, 43, -1, 45, + -1, 67, -1, 26, 1, 31, -1, 1, 31, -1, + 10, 26, 31, -1, 42, 46, -1, 11, 26, 31, + -1, 44, 46, -1, -1, 46, 47, -1, 46, 48, + -1, 46, 73, -1, 46, 71, -1, 46, 41, -1, + 46, 31, -1, 20, 74, 31, -1, 19, 75, 78, + 31, -1, 21, 79, 78, 31, -1, 22, 26, 78, + 31, -1, 23, 80, 80, 78, 31, -1, 24, 49, + 31, -1, -1, 49, 26, 50, -1, -1, 34, 75, + -1, 7, 31, -1, 51, 55, -1, 76, -1, 52, + 57, 53, -1, -1, 55, 56, -1, 55, 73, -1, + 55, 71, -1, 55, 31, -1, 55, 41, -1, 19, + 75, 78, 31, -1, 20, 74, 31, -1, 18, 31, + -1, 21, 26, 78, 31, -1, -1, 57, 40, -1, + 14, 79, 77, -1, 76, -1, 58, 61, 59, -1, + -1, 61, 40, -1, 61, 65, -1, 61, 54, -1, + 4, 75, 31, -1, 62, 72, -1, 76, -1, 63, + 66, 64, -1, -1, 66, 40, -1, 66, 65, -1, + 66, 54, -1, 6, 75, 31, -1, 9, 75, 31, + -1, 68, 72, -1, 12, 31, -1, 70, 13, -1, + -1, 72, 73, -1, 72, 31, -1, 72, 41, -1, + 16, 25, 79, 31, -1, 16, 79, 31, -1, 17, + 79, 31, -1, -1, 75, 78, -1, 26, -1, 27, + -1, 5, 31, -1, 8, 31, -1, 15, 31, -1, + 31, -1, 77, 31, -1, -1, 14, 79, -1, 80, + -1, 80, 34, 80, -1, 80, 28, 80, -1, 30, + 79, 29, -1, 35, 79, -1, 79, 32, 79, -1, + 79, 33, 79, -1, 26, -1, 27, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const unsigned short int yyrline[] = +{ + 0, 105, 105, 107, 109, 110, 111, 112, 113, 114, + 115, 119, 123, 123, 123, 123, 123, 123, 123, 127, + 128, 129, 130, 131, 132, 136, 137, 143, 151, 157, + 165, 175, 177, 178, 179, 180, 181, 182, 185, 193, + 199, 209, 215, 221, 224, 226, 237, 238, 243, 252, + 257, 265, 268, 270, 271, 272, 273, 274, 277, 283, + 294, 300, 310, 312, 317, 325, 333, 336, 338, 339, + 340, 345, 352, 357, 365, 368, 370, 371, 372, 375, + 383, 390, 397, 403, 410, 412, 413, 414, 417, 422, + 427, 435, 437, 442, 443, 446, 447, 448, 452, 453, + 456, 457, 460, 461, 462, 463, 464, 465, 466, 469, + 470 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "T_MAINMENU", "T_MENU", "T_ENDMENU", + "T_SOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT", "T_CONFIG", + "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS", + "T_REQUIRES", "T_OPTIONAL", "T_PROMPT", "T_TYPE", "T_DEFAULT", + "T_SELECT", "T_RANGE", "T_OPTION", "T_ON", "T_WORD", "T_WORD_QUOTE", + "T_UNEQUAL", "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_EOL", "T_OR", "T_AND", + "T_EQUAL", "T_NOT", "$accept", "input", "stmt_list", "option_name", + "common_stmt", "option_error", "config_entry_start", "config_stmt", + "menuconfig_entry_start", "menuconfig_stmt", "config_option_list", + "config_option", "symbol_option", "symbol_option_list", + "symbol_option_arg", "choice", "choice_entry", "choice_end", + "choice_stmt", "choice_option_list", "choice_option", "choice_block", + "if_entry", "if_end", "if_stmt", "if_block", "menu", "menu_entry", + "menu_end", "menu_stmt", "menu_block", "source_stmt", "comment", + "comment_stmt", "help_start", "help", "depends_list", "depends", + "prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr", "symbol", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const unsigned short int yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const unsigned char yyr1[] = +{ + 0, 36, 37, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 39, 39, 39, 39, 39, 39, 39, 40, + 40, 40, 40, 40, 40, 41, 41, 42, 43, 44, + 45, 46, 46, 46, 46, 46, 46, 46, 47, 47, + 47, 47, 47, 48, 49, 49, 50, 50, 51, 52, + 53, 54, 55, 55, 55, 55, 55, 55, 56, 56, + 56, 56, 57, 57, 58, 59, 60, 61, 61, 61, + 61, 62, 63, 64, 65, 66, 66, 66, 66, 67, + 68, 69, 70, 71, 72, 72, 72, 72, 73, 73, + 73, 74, 74, 75, 75, 76, 76, 76, 77, 77, + 78, 78, 79, 79, 79, 79, 79, 79, 79, 80, + 80 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const unsigned char yyr2[] = +{ + 0, 2, 1, 0, 2, 2, 2, 4, 2, 4, + 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 2, 3, 2, 3, + 2, 0, 2, 2, 2, 2, 2, 2, 3, 4, + 4, 4, 5, 3, 0, 3, 0, 2, 2, 2, + 1, 3, 0, 2, 2, 2, 2, 2, 4, 3, + 2, 4, 0, 2, 3, 1, 3, 0, 2, 2, + 2, 3, 2, 1, 3, 0, 2, 2, 2, 3, + 3, 2, 2, 2, 0, 2, 2, 2, 4, 3, + 3, 0, 2, 1, 1, 2, 2, 2, 1, 2, + 0, 2, 1, 3, 3, 3, 2, 3, 3, 1, + 1 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const unsigned char yydefact[] = +{ + 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 12, 16, 13, 14, + 18, 15, 17, 0, 19, 0, 4, 31, 22, 31, + 23, 52, 62, 5, 67, 20, 84, 75, 6, 24, + 84, 21, 8, 11, 93, 94, 0, 0, 95, 0, + 48, 96, 0, 0, 0, 109, 110, 0, 0, 0, + 102, 97, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 98, 7, 71, 79, 80, 27, 29, 0, + 106, 0, 0, 64, 0, 0, 9, 10, 0, 0, + 0, 0, 0, 91, 0, 0, 0, 44, 0, 37, + 36, 32, 33, 0, 35, 34, 0, 0, 91, 0, + 56, 57, 53, 55, 54, 63, 51, 50, 68, 70, + 66, 69, 65, 86, 87, 85, 76, 78, 74, 77, + 73, 99, 105, 107, 108, 104, 103, 26, 82, 0, + 0, 0, 100, 0, 100, 100, 100, 0, 0, 0, + 83, 60, 100, 0, 100, 0, 89, 90, 0, 0, + 38, 92, 0, 0, 100, 46, 43, 25, 0, 59, + 0, 88, 101, 39, 40, 41, 0, 0, 45, 58, + 61, 42, 47 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const short int yydefgoto[] = +{ + -1, 1, 2, 25, 26, 100, 27, 28, 29, 30, + 64, 101, 102, 148, 178, 31, 32, 116, 33, 66, + 112, 67, 34, 120, 35, 68, 36, 37, 128, 38, + 70, 39, 40, 41, 103, 104, 69, 105, 143, 144, + 42, 73, 159, 59, 60 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -135 +static const short int yypact[] = +{ + -135, 2, 170, -135, -14, 56, 56, -8, 56, 24, + 67, 56, 7, 14, 62, 97, -135, -135, -135, -135, + -135, -135, -135, 156, -135, 166, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, 138, 151, -135, 152, + -135, -135, 163, 167, 176, -135, -135, 62, 62, 185, + -19, -135, 188, 190, 42, 103, 194, 85, 70, 222, + 70, 132, -135, 191, -135, -135, -135, -135, -135, 127, + -135, 62, 62, 191, 104, 104, -135, -135, 193, 203, + 9, 62, 56, 56, 62, 161, 104, -135, 196, -135, + -135, -135, -135, 233, -135, -135, 204, 56, 56, 221, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, 219, -135, -135, -135, -135, -135, 62, + 209, 212, 240, 224, 240, -1, 240, 104, 41, 225, + -135, -135, 240, 226, 240, 218, -135, -135, 62, 227, + -135, -135, 228, 229, 240, 230, -135, -135, 231, -135, + 232, -135, 112, -135, -135, -135, 234, 56, -135, -135, + -135, -135, -135 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const short int yypgoto[] = +{ + -135, -135, -135, -135, 94, -45, -135, -135, -135, -135, + 237, -135, -135, -135, -135, -135, -135, -135, -54, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, 1, + -135, -135, -135, -135, -135, 195, 235, -44, 159, -5, + 98, 210, -134, -53, -77 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -82 +static const short int yytable[] = +{ + 46, 47, 3, 49, 79, 80, 52, 135, 136, 84, + 161, 162, 163, 158, 119, 85, 127, 43, 168, 147, + 170, 111, 114, 48, 124, 125, 124, 125, 133, 134, + 176, 81, 82, 53, 139, 55, 56, 140, 141, 57, + 54, 145, -28, 88, 58, -28, -28, -28, -28, -28, + -28, -28, -28, -28, 89, 50, -28, -28, 90, 91, + -28, 92, 93, 94, 95, 96, 97, 165, 98, 121, + 164, 129, 166, 99, 6, 7, 8, 9, 10, 11, + 12, 13, 44, 45, 14, 15, 155, 142, 55, 56, + 7, 8, 57, 10, 11, 12, 13, 58, 51, 14, + 15, 24, 152, -30, 88, 172, -30, -30, -30, -30, + -30, -30, -30, -30, -30, 89, 24, -30, -30, 90, + 91, -30, 92, 93, 94, 95, 96, 97, 61, 98, + 55, 56, -81, 88, 99, -81, -81, -81, -81, -81, + -81, -81, -81, -81, 81, 82, -81, -81, 90, 91, + -81, -81, -81, -81, -81, -81, 132, 62, 98, 81, + 82, 115, 118, 123, 126, 117, 122, 63, 130, 72, + -2, 4, 182, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 74, 75, 14, 15, 16, 146, 17, 18, + 19, 20, 21, 22, 76, 88, 23, 149, 77, -49, + -49, 24, -49, -49, -49, -49, 89, 78, -49, -49, + 90, 91, 106, 107, 108, 109, 72, 81, 82, 86, + 98, 87, 131, 88, 137, 110, -72, -72, -72, -72, + -72, -72, -72, -72, 138, 151, -72, -72, 90, 91, + 156, 81, 82, 157, 81, 82, 150, 154, 98, 171, + 81, 82, 82, 123, 158, 160, 167, 169, 173, 174, + 175, 113, 179, 180, 177, 181, 65, 153, 0, 83, + 0, 0, 0, 0, 0, 71 +}; + +static const short int yycheck[] = +{ + 5, 6, 0, 8, 57, 58, 11, 84, 85, 28, + 144, 145, 146, 14, 68, 34, 70, 31, 152, 96, + 154, 66, 66, 31, 69, 69, 71, 71, 81, 82, + 164, 32, 33, 26, 25, 26, 27, 90, 91, 30, + 26, 94, 0, 1, 35, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 31, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 26, 26, 68, + 147, 70, 31, 31, 4, 5, 6, 7, 8, 9, + 10, 11, 26, 27, 14, 15, 139, 92, 26, 27, + 5, 6, 30, 8, 9, 10, 11, 35, 31, 14, + 15, 31, 107, 0, 1, 158, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 31, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 31, 26, + 26, 27, 0, 1, 31, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 32, 33, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 29, 1, 26, 32, + 33, 67, 68, 31, 70, 67, 68, 1, 70, 31, + 0, 1, 177, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 31, 31, 14, 15, 16, 26, 18, 19, + 20, 21, 22, 23, 31, 1, 26, 1, 31, 5, + 6, 31, 8, 9, 10, 11, 12, 31, 14, 15, + 16, 17, 18, 19, 20, 21, 31, 32, 33, 31, + 26, 31, 31, 1, 31, 31, 4, 5, 6, 7, + 8, 9, 10, 11, 31, 31, 14, 15, 16, 17, + 31, 32, 33, 31, 32, 33, 13, 26, 26, 31, + 32, 33, 33, 31, 14, 31, 31, 31, 31, 31, + 31, 66, 31, 31, 34, 31, 29, 108, -1, 59, + -1, -1, -1, -1, -1, 40 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const unsigned char yystos[] = +{ + 0, 37, 38, 0, 1, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 14, 15, 16, 18, 19, 20, + 21, 22, 23, 26, 31, 39, 40, 42, 43, 44, + 45, 51, 52, 54, 58, 60, 62, 63, 65, 67, + 68, 69, 76, 31, 26, 27, 75, 75, 31, 75, + 31, 31, 75, 26, 26, 26, 27, 30, 35, 79, + 80, 31, 1, 1, 46, 46, 55, 57, 61, 72, + 66, 72, 31, 77, 31, 31, 31, 31, 31, 79, + 79, 32, 33, 77, 28, 34, 31, 31, 1, 12, + 16, 17, 19, 20, 21, 22, 23, 24, 26, 31, + 41, 47, 48, 70, 71, 73, 18, 19, 20, 21, + 31, 41, 56, 71, 73, 40, 53, 76, 40, 54, + 59, 65, 76, 31, 41, 73, 40, 54, 64, 65, + 76, 31, 29, 79, 79, 80, 80, 31, 31, 25, + 79, 79, 75, 74, 75, 79, 26, 80, 49, 1, + 13, 31, 75, 74, 26, 79, 31, 31, 14, 78, + 31, 78, 78, 78, 80, 26, 31, 31, 78, 31, + 78, 31, 79, 31, 31, 31, 78, 34, 50, 31, + 31, 31, 75 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (0) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (N) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (0) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (YYLEX_PARAM) +#else +# define YYLEX yylex () +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yysymprint (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_stack_print (short int *bottom, short int *top) +#else +static void +yy_stack_print (bottom, top) + short int *bottom; + short int *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (/* Nothing. */; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_reduce_print (int yyrule) +#else +static void +yy_reduce_print (yyrule) + int yyrule; +#endif +{ + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ", + yyrule - 1, yylno); + /* Print the symbols being reduced, and their result. */ + for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) + YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]); + YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]); +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (Rule); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined (__GLIBC__) && defined (_STRING_H) +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +static YYSIZE_T +# if defined (__STDC__) || defined (__cplusplus) +yystrlen (const char *yystr) +# else +yystrlen (yystr) + const char *yystr; +# endif +{ + const char *yys = yystr; + + while (*yys++ != '\0') + continue; + + return yys - yystr - 1; +} +# endif +# endif + +# ifndef yystpcpy +# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +static char * +# if defined (__STDC__) || defined (__cplusplus) +yystpcpy (char *yydest, const char *yysrc) +# else +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +# endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + size_t yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +#endif /* YYERROR_VERBOSE */ + + + +#if YYDEBUG +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) +#else +static void +yysymprint (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; + + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# endif + switch (yytype) + { + default: + break; + } + YYFPRINTF (yyoutput, ")"); +} + +#endif /* ! YYDEBUG */ +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yymsg, yytype, yyvaluep) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; + + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + case 52: /* "choice_entry" */ + + { + fprintf(stderr, "%s:%d: missing end statement for this entry\n", + (yyvaluep->menu)->file->name, (yyvaluep->menu)->lineno); + if (current_menu == (yyvaluep->menu)) + menu_end_menu(); +}; + + break; + case 58: /* "if_entry" */ + + { + fprintf(stderr, "%s:%d: missing end statement for this entry\n", + (yyvaluep->menu)->file->name, (yyvaluep->menu)->lineno); + if (current_menu == (yyvaluep->menu)) + menu_end_menu(); +}; + + break; + case 63: /* "menu_entry" */ + + { + fprintf(stderr, "%s:%d: missing end statement for this entry\n", + (yyvaluep->menu)->file->name, (yyvaluep->menu)->lineno); + if (current_menu == (yyvaluep->menu)) + menu_end_menu(); +}; + + break; + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM); +# else +int yyparse (); +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + +/* The look-ahead symbol. */ +int yychar; + +/* The semantic value of the look-ahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM) +# else +int yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int +yyparse (void) +#else +int +yyparse () + ; +#endif +#endif +{ + + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + short int yyssa[YYINITDEPTH]; + short int *yyss = yyssa; + short int *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; + + + +#define YYPOPSTACK (yyvsp--, yyssp--) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* When reducing, the number of symbols on the RHS of the reduced + rule. */ + int yylen; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. + */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + short int *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + short int *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + +/* Do appropriate processing given the current state. */ +/* Read a look-ahead token if we need one and don't already have one. */ +/* yyresume: */ + + /* First try to decide what to do without reference to look-ahead token. */ + + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a look-ahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Shift the look-ahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the token being shifted unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + *++yyvsp = yylval; + + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + yystate = yyn; + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 8: + + { zconf_error("unexpected end statement"); ;} + break; + + case 9: + + { zconf_error("unknown statement \"%s\"", (yyvsp[-2].string)); ;} + break; + + case 10: + + { + zconf_error("unexpected option \"%s\"", kconf_id_strings + (yyvsp[-2].id)->name); +;} + break; + + case 11: + + { zconf_error("invalid statement"); ;} + break; + + case 25: + + { zconf_error("unknown option \"%s\"", (yyvsp[-2].string)); ;} + break; + + case 26: + + { zconf_error("invalid option"); ;} + break; + + case 27: + + { + struct symbol *sym = sym_lookup((yyvsp[-1].string), 0); + sym->flags |= SYMBOL_OPTIONAL; + menu_add_entry(sym); + printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), (yyvsp[-1].string)); +;} + break; + + case 28: + + { + menu_end_entry(); + printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 29: + + { + struct symbol *sym = sym_lookup((yyvsp[-1].string), 0); + sym->flags |= SYMBOL_OPTIONAL; + menu_add_entry(sym); + printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), (yyvsp[-1].string)); +;} + break; + + case 30: + + { + if (current_entry->prompt) + current_entry->prompt->type = P_MENU; + else + zconfprint("warning: menuconfig statement without prompt"); + menu_end_entry(); + printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 38: + + { + menu_set_type((yyvsp[-2].id)->stype); + printd(DEBUG_PARSE, "%s:%d:type(%u)\n", + zconf_curname(), zconf_lineno(), + (yyvsp[-2].id)->stype); +;} + break; + + case 39: + + { + menu_add_prompt(P_PROMPT, (yyvsp[-2].string), (yyvsp[-1].expr)); + printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 40: + + { + menu_add_expr(P_DEFAULT, (yyvsp[-2].expr), (yyvsp[-1].expr)); + if ((yyvsp[-3].id)->stype != S_UNKNOWN) + menu_set_type((yyvsp[-3].id)->stype); + printd(DEBUG_PARSE, "%s:%d:default(%u)\n", + zconf_curname(), zconf_lineno(), + (yyvsp[-3].id)->stype); +;} + break; + + case 41: + + { + menu_add_symbol(P_SELECT, sym_lookup((yyvsp[-2].string), 0), (yyvsp[-1].expr)); + printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 42: + + { + menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,(yyvsp[-3].symbol), (yyvsp[-2].symbol)), (yyvsp[-1].expr)); + printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 45: + + { + struct kconf_id *id = kconf_id_lookup((yyvsp[-1].string), strlen((yyvsp[-1].string))); + if (id && id->flags & TF_OPTION) + menu_add_option(id->token, (yyvsp[0].string)); + else + zconfprint("warning: ignoring unknown option %s", (yyvsp[-1].string)); + free((yyvsp[-1].string)); +;} + break; + + case 46: + + { (yyval.string) = NULL; ;} + break; + + case 47: + + { (yyval.string) = (yyvsp[0].string); ;} + break; + + case 48: + + { + struct symbol *sym = sym_lookup(NULL, 0); + sym->flags |= SYMBOL_CHOICE; + menu_add_entry(sym); + menu_add_expr(P_CHOICE, NULL, NULL); + printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 49: + + { + (yyval.menu) = menu_add_menu(); +;} + break; + + case 50: + + { + if (zconf_endtoken((yyvsp[0].id), T_CHOICE, T_ENDCHOICE)) { + menu_end_menu(); + printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno()); + } +;} + break; + + case 58: + + { + menu_add_prompt(P_PROMPT, (yyvsp[-2].string), (yyvsp[-1].expr)); + printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 59: + + { + if ((yyvsp[-2].id)->stype == S_BOOLEAN || (yyvsp[-2].id)->stype == S_TRISTATE) { + menu_set_type((yyvsp[-2].id)->stype); + printd(DEBUG_PARSE, "%s:%d:type(%u)\n", + zconf_curname(), zconf_lineno(), + (yyvsp[-2].id)->stype); + } else + YYERROR; +;} + break; + + case 60: + + { + current_entry->sym->flags |= SYMBOL_OPTIONAL; + printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 61: + + { + if ((yyvsp[-3].id)->stype == S_UNKNOWN) { + menu_add_symbol(P_DEFAULT, sym_lookup((yyvsp[-2].string), 0), (yyvsp[-1].expr)); + printd(DEBUG_PARSE, "%s:%d:default\n", + zconf_curname(), zconf_lineno()); + } else + YYERROR; +;} + break; + + case 64: + + { + printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno()); + menu_add_entry(NULL); + menu_add_dep((yyvsp[-1].expr)); + (yyval.menu) = menu_add_menu(); +;} + break; + + case 65: + + { + if (zconf_endtoken((yyvsp[0].id), T_IF, T_ENDIF)) { + menu_end_menu(); + printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno()); + } +;} + break; + + case 71: + + { + menu_add_entry(NULL); + menu_add_prompt(P_MENU, (yyvsp[-1].string), NULL); + printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 72: + + { + (yyval.menu) = menu_add_menu(); +;} + break; + + case 73: + + { + if (zconf_endtoken((yyvsp[0].id), T_MENU, T_ENDMENU)) { + menu_end_menu(); + printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno()); + } +;} + break; + + case 79: + + { + printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), (yyvsp[-1].string)); + zconf_nextfile((yyvsp[-1].string)); +;} + break; + + case 80: + + { + menu_add_entry(NULL); + menu_add_prompt(P_COMMENT, (yyvsp[-1].string), NULL); + printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 81: + + { + menu_end_entry(); +;} + break; + + case 82: + + { + printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno()); + zconf_starthelp(); +;} + break; + + case 83: + + { + current_entry->sym->help = (yyvsp[0].string); +;} + break; + + case 88: + + { + menu_add_dep((yyvsp[-1].expr)); + printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 89: + + { + menu_add_dep((yyvsp[-1].expr)); + printd(DEBUG_PARSE, "%s:%d:depends\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 90: + + { + menu_add_dep((yyvsp[-1].expr)); + printd(DEBUG_PARSE, "%s:%d:requires\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 92: + + { + menu_add_prompt(P_PROMPT, (yyvsp[-1].string), (yyvsp[0].expr)); +;} + break; + + case 95: + + { (yyval.id) = (yyvsp[-1].id); ;} + break; + + case 96: + + { (yyval.id) = (yyvsp[-1].id); ;} + break; + + case 97: + + { (yyval.id) = (yyvsp[-1].id); ;} + break; + + case 100: + + { (yyval.expr) = NULL; ;} + break; + + case 101: + + { (yyval.expr) = (yyvsp[0].expr); ;} + break; + + case 102: + + { (yyval.expr) = expr_alloc_symbol((yyvsp[0].symbol)); ;} + break; + + case 103: + + { (yyval.expr) = expr_alloc_comp(E_EQUAL, (yyvsp[-2].symbol), (yyvsp[0].symbol)); ;} + break; + + case 104: + + { (yyval.expr) = expr_alloc_comp(E_UNEQUAL, (yyvsp[-2].symbol), (yyvsp[0].symbol)); ;} + break; + + case 105: + + { (yyval.expr) = (yyvsp[-1].expr); ;} + break; + + case 106: + + { (yyval.expr) = expr_alloc_one(E_NOT, (yyvsp[0].expr)); ;} + break; + + case 107: + + { (yyval.expr) = expr_alloc_two(E_OR, (yyvsp[-2].expr), (yyvsp[0].expr)); ;} + break; + + case 108: + + { (yyval.expr) = expr_alloc_two(E_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); ;} + break; + + case 109: + + { (yyval.symbol) = sym_lookup((yyvsp[0].string), 0); free((yyvsp[0].string)); ;} + break; + + case 110: + + { (yyval.symbol) = sym_lookup((yyvsp[0].string), 1); free((yyvsp[0].string)); ;} + break; + + + default: break; + } + +/* Line 1126 of yacc.c. */ + + + yyvsp -= yylen; + yyssp -= yylen; + + + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if YYERROR_VERBOSE + yyn = yypact[yystate]; + + if (YYPACT_NINF < yyn && yyn < YYLAST) + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + char *yymsg = 0; +# define YYERROR_VERBOSE_ARGS_MAXIMUM 5 + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +#if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +#endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= yysize1 < yysize; + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= yysize1 < yysize; + yysize = yysize1; + + if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM) + yymsg = (char *) YYSTACK_ALLOC (yysize); + if (yymsg) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yymsg; + int yyi = 0; + while ((*yyp = *yyf)) + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + yyerror (yymsg); + YYSTACK_FREE (yymsg); + } + else + { + yyerror (YY_("syntax error")); + goto yyexhaustedlab; + } + } + else +#endif /* YYERROR_VERBOSE */ + yyerror (YY_("syntax error")); + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse look-ahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", yytoken, &yylval); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse look-ahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (0) + goto yyerrorlab; + +yyvsp -= yylen; + yyssp -= yylen; + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", yystos[yystate], yyvsp); + YYPOPSTACK; + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + *++yyvsp = yylval; + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp); + YYPOPSTACK; + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif + return yyresult; +} + + + + + +void conf_parse(const char *name) +{ + struct symbol *sym; + int i; + + zconf_initscan(name); + + sym_init(); + menu_init(); + modules_sym = sym_lookup(NULL, 0); + modules_sym->type = S_BOOLEAN; + modules_sym->flags |= SYMBOL_AUTO; + rootmenu.prompt = menu_add_prompt(P_MENU, PROJECT_NAME" Configuration", NULL); + +#if YYDEBUG + if (getenv("ZCONF_DEBUG")) + zconfdebug = 1; +#endif + zconfparse(); + if (zconfnerrs) + exit(1); + if (!modules_sym->prop) { + struct property *prop; + + prop = prop_alloc(P_DEFAULT, modules_sym); + prop->expr = expr_alloc_symbol(sym_lookup("MODULES", 0)); + } + menu_finalize(&rootmenu); + for_all_symbols(i, sym) { + sym_check_deps(sym); + } + + sym_change_count = 1; +} + +const char *zconf_tokenname(int token) +{ + switch (token) { + case T_MENU: return "menu"; + case T_ENDMENU: return "endmenu"; + case T_CHOICE: return "choice"; + case T_ENDCHOICE: return "endchoice"; + case T_IF: return "if"; + case T_ENDIF: return "endif"; + case T_DEPENDS: return "depends"; + } + return ""; +} + +static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken) +{ + if (id->token != endtoken) { + zconf_error("unexpected '%s' within %s block", + kconf_id_strings + id->name, zconf_tokenname(starttoken)); + zconfnerrs++; + return false; + } + if (current_menu->file != current_file) { + zconf_error("'%s' in different file than '%s'", + kconf_id_strings + id->name, zconf_tokenname(starttoken)); + fprintf(stderr, "%s:%d: location of the '%s'\n", + current_menu->file->name, current_menu->lineno, + zconf_tokenname(starttoken)); + zconfnerrs++; + return false; + } + return true; +} + +static void zconfprint(const char *err, ...) +{ + va_list ap; + + fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno()); + va_start(ap, err); + vfprintf(stderr, err, ap); + va_end(ap); + fprintf(stderr, "\n"); +} + +static void zconf_error(const char *err, ...) +{ + va_list ap; + + zconfnerrs++; + fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno()); + va_start(ap, err); + vfprintf(stderr, err, ap); + va_end(ap); + fprintf(stderr, "\n"); +} + +static void zconferror(const char *err) +{ +#if YYDEBUG + fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err); +#endif +} + +void print_quoted_string(FILE *out, const char *str) +{ + const char *p; + int len; + + putc('"', out); + while ((p = strchr(str, '"'))) { + len = p - str; + if (len) + fprintf(out, "%.*s", len, str); + fputs("\\\"", out); + str = p + 1; + } + fputs(str, out); + putc('"', out); +} + +void print_symbol(FILE *out, struct menu *menu) +{ + struct symbol *sym = menu->sym; + struct property *prop; + + if (sym_is_choice(sym)) + fprintf(out, "choice\n"); + else + fprintf(out, "config %s\n", sym->name); + switch (sym->type) { + case S_BOOLEAN: + fputs(" boolean\n", out); + break; + case S_TRISTATE: + fputs(" tristate\n", out); + break; + case S_STRING: + fputs(" string\n", out); + break; + case S_INT: + fputs(" integer\n", out); + break; + case S_HEX: + fputs(" hex\n", out); + break; + default: + fputs(" ???\n", out); + break; + } + for (prop = sym->prop; prop; prop = prop->next) { + if (prop->menu != menu) + continue; + switch (prop->type) { + case P_PROMPT: + fputs(" prompt ", out); + print_quoted_string(out, prop->text); + if (!expr_is_yes(prop->visible.expr)) { + fputs(" if ", out); + expr_fprint(prop->visible.expr, out); + } + fputc('\n', out); + break; + case P_DEFAULT: + fputs( " default ", out); + expr_fprint(prop->expr, out); + if (!expr_is_yes(prop->visible.expr)) { + fputs(" if ", out); + expr_fprint(prop->visible.expr, out); + } + fputc('\n', out); + break; + case P_CHOICE: + fputs(" #choice value\n", out); + break; + default: + fprintf(out, " unknown prop %d!\n", prop->type); + break; + } + } + if (sym->help) { + int len = strlen(sym->help); + while (sym->help[--len] == '\n') + sym->help[len] = 0; + fprintf(out, " help\n%s\n", sym->help); + } + fputc('\n', out); +} + +void zconfdump(FILE *out) +{ + struct property *prop; + struct symbol *sym; + struct menu *menu; + + menu = rootmenu.list; + while (menu) { + if ((sym = menu->sym)) + print_symbol(out, menu); + else if ((prop = menu->prompt)) { + switch (prop->type) { + case P_COMMENT: + fputs("\ncomment ", out); + print_quoted_string(out, prop->text); + fputs("\n", out); + break; + case P_MENU: + fputs("\nmenu ", out); + print_quoted_string(out, prop->text); + fputs("\n", out); + break; + default: + ; + } + if (!expr_is_yes(prop->visible.expr)) { + fputs(" depends ", out); + expr_fprint(prop->visible.expr, out); + fputc('\n', out); + } + fputs("\n", out); + } + + if (menu->list) + menu = menu->list; + else if (menu->next) + menu = menu->next; + else while ((menu = menu->parent)) { + if (menu->prompt && menu->prompt->type == P_MENU) + fputs("\nendmenu\n", out); + if (menu->next) { + menu = menu->next; + break; + } + } + } +} + +#include "lex.zconf.c" +#include "util.c" +#include "confdata.c" +#include "expr.c" +#include "symbol.c" +#include "menu.c" + + diff --git a/aosp/external/toybox/lib/args.c b/aosp/external/toybox/lib/args.c new file mode 100644 index 0000000000000000000000000000000000000000..89c82ca7736dfc020ac14cfaa976abdf37b6fd3f --- /dev/null +++ b/aosp/external/toybox/lib/args.c @@ -0,0 +1,504 @@ +/* args.c - Command line argument parsing. + * + * Copyright 2006 Rob Landley + */ + +// NOTE: If option parsing segfaults, switch on TOYBOX_DEBUG in menuconfig to +// add syntax checks to option string parsing which aren't needed in the final +// code (since get_opt string is hardwired and should be correct when you ship) + +#include "toys.h" + +// Design goals: +// Don't use getopt() out of libc. +// Don't permute original arguments (screwing up ps/top output). +// Integrated --long options "(noshort)a(along)b(blong1)(blong2)" + +/* This uses a getopt-like option string, but not getopt() itself. We call + * it the get_opt string. + * + * Each option in the get_opt string corresponds to a bit position in the + * return value. The rightmost argument is (1<<0), the next to last is (1<<1) + * and so on. If the option isn't seen in argv[], its bit remains 0. + * + * Options which have an argument fill in the corresponding slot in the global + * union "this" (see generated/globals.h), which it treats as an array of longs + * (note that sizeof(long)==sizeof(pointer) is guaranteed by LP64). + * + * You don't have to free the option strings, which point into the environment + * space. List objects should be freed by main() when command_main() returns. + * + * Example: + * Calling get_optflags() when toys.which->options="ab:c:d" and + * argv = ["command", "-b", "fruit", "-d", "walrus"] results in: + * + * Changes to struct toys: + * toys.optflags = 5 (I.E. 0101 so -b = 4 | -d = 1) + * toys.optargs[0] = "walrus" (leftover argument) + * toys.optargs[1] = NULL (end of list) + * toys.optc = 1 (there was 1 leftover argument) + * + * Changes to union this: + * this[0]=NULL (because -c didn't get an argument this time) + * this[1]="fruit" (argument to -b) + */ + +// What you can put in a get_opt string: +// Any otherwise unused character (all letters, unprefixed numbers) specify +// an option that sets a flag. The bit value is the same as the binary digit +// if you string the option characters together in order. +// So in "abcdefgh" a = 128, h = 1 +// +// Suffixes specify that this option takes an argument (stored in GLOBALS): +// Note that pointer and long are always the same size, even on 64 bit. +// : string argument, keep most recent if more than one +// * string argument, appended to a struct arg_list linked list. +// # signed long argument +// HIGH - die if greater than HIGH +// =DEFAULT - value if not specified +// - signed long argument defaulting to negative (say + for positive) +// . double precision floating point argument (with CFG_TOYBOX_FLOAT) +// Chop this option out with USE_TOYBOX_FLOAT() in option string +// Same HIGH=DEFAULT as # +// @ occurrence counter (which is a long) +// % time offset in milliseconds with optional s/m/h/d suffix +// (longopt) +// | this is required. If more than one marked, only one required. +// ; long option's argument is optional (can only be supplied with --opt=) +// ^ Stop parsing after encountering this argument +// " " (space char) the "plus an argument" must be separate +// I.E. "-j 3" not "-j3". So "kill -stop" != "kill -s top" +// +// At the beginning of the get_opt string (before any options): +// ^ stop at first nonoption argument +// <0 die if less than # leftover arguments (default 0) +// >9 die if > # leftover arguments (default MAX_INT) +// ? Allow unknown arguments (pass them through to command). +// & first arg has imaginary dash (ala tar/ps/ar) which sets FLAGS_NODASH +// +// At the end: [groups] of previously seen options +// - Only one in group (switch off) [-abc] means -ab=-b, -ba=-a, -abc=-c +// + Synonyms (switch on all) [+abc] means -ab=-abc, -c=-abc +// ! More than one in group is error [!abc] means -ab calls error_exit() +// primarily useful if you can switch things back off again. +// +// You may use octal escapes with the high bit (127) set to use a control +// character as an option flag. For example, \300 would be the option -@ + +// Notes from getopt man page +// - and -- cannot be arguments. +// -- force end of arguments +// - is a synonym for stdin in file arguments +// -abcd means -a -b -c -d (but if -b takes an argument, then it's -a -b cd) + +// Linked list of all known options (option string parsed into this). +// Hangs off getoptflagstate, freed at end of option parsing. +struct opts { + struct opts *next; + long *arg; // Pointer into union "this" to store arguments at. + int c; // Argument character to match + int flags; // |=1, ^=2, " "=4, ;=8 + unsigned long long dex[3]; // bits to disable/enable/exclude in toys.optflags + char type; // Type of arguments to store union "this" + union { + long l; + FLOAT f; + } val[3]; // low, high, default - range of allowed values +}; + +// linked list of long options. (Hangs off getoptflagstate, free at end of +// option parsing, details about flag to set and global slot to fill out +// stored in related short option struct, but if opt->c = -1 the long option +// is "bare" (has no corresponding short option). +struct longopts { + struct longopts *next; + struct opts *opt; + char *str; + int len; +}; + +// State during argument parsing. +struct getoptflagstate +{ + int argc, minargs, maxargs; + char *arg; + struct opts *opts; + struct longopts *longopts; + int noerror, nodash_now, stopearly; + unsigned excludes, requires; +}; + +// Use getoptflagstate to parse one command line option from argv +static int gotflag(struct getoptflagstate *gof, struct opts *opt) +{ + int type; + + // Did we recognize this option? + if (!opt) { + if (gof->noerror) return 1; + help_exit("Unknown option '%s'", gof->arg); + } + + // Might enabling this switch off something else? + if (toys.optflags & opt->dex[0]) { + struct opts *clr; + unsigned long long i = 1; + + // Forget saved argument for flag we switch back off + for (clr=gof->opts, i=1; clr; clr = clr->next, i<<=1) + if (clr->arg && (i & toys.optflags & opt->dex[0])) *clr->arg = 0; + toys.optflags &= ~opt->dex[0]; + } + + // Set flags + toys.optflags |= opt->dex[1]; + gof->excludes |= opt->dex[2]; + if (opt->flags&2) gof->stopearly=2; + + if (toys.optflags & gof->excludes) { + struct opts *bad; + unsigned i = 1; + + for (bad=gof->opts, i=1; bad ;bad = bad->next, i<<=1) { + if (opt == bad || !(i & toys.optflags)) continue; + if (toys.optflags & bad->dex[2]) break; + } + if (bad) help_exit("No '%c' with '%c'", opt->c, bad->c); + } + + // Does this option take an argument? + if (!gof->arg) { + if (opt->flags & 8) return 0; + gof->arg = ""; + } else gof->arg++; + type = opt->type; + + if (type == '@') ++*(opt->arg); + else if (type) { + char *arg = gof->arg; + + // Handle "-xblah" and "-x blah", but also a third case: "abxc blah" + // to make "tar xCjfv blah1 blah2 thingy" work like + // "tar -x -C blah1 -j -f blah2 -v thingy" + + if (gof->nodash_now || (!arg[0] && !(opt->flags & 8))) + arg = toys.argv[++gof->argc]; + if (!arg) { + char *s = "Missing argument to "; + struct longopts *lo; + + if (opt->c != -1) help_exit("%s-%c", s, opt->c); + + for (lo = gof->longopts; lo->opt != opt; lo = lo->next); + help_exit("%s--%.*s", s, lo->len, lo->str); + } + + if (type == ':') *(opt->arg) = (long)arg; + else if (type == '*') { + struct arg_list **list; + + list = (struct arg_list **)opt->arg; + while (*list) list=&((*list)->next); + *list = xzalloc(sizeof(struct arg_list)); + (*list)->arg = arg; + } else if (type == '#' || type == '-') { + long l = atolx(arg); + if (type == '-' && !ispunct(*arg)) l*=-1; + if (l < opt->val[0].l) help_exit("-%c < %ld", opt->c, opt->val[0].l); + if (l > opt->val[1].l) help_exit("-%c > %ld", opt->c, opt->val[1].l); + + *(opt->arg) = l; + } else if (CFG_TOYBOX_FLOAT && type == '.') { + FLOAT *f = (FLOAT *)(opt->arg); + + *f = strtod(arg, &arg); + if (opt->val[0].l != LONG_MIN && *f < opt->val[0].f) + help_exit("-%c < %lf", opt->c, (double)opt->val[0].f); + if (opt->val[1].l != LONG_MAX && *f > opt->val[1].f) + help_exit("-%c > %lf", opt->c, (double)opt->val[1].f); + } else if (type=='%') *(opt->arg) = xparsemillitime(arg); + + if (!gof->nodash_now) gof->arg = ""; + } + + return 0; +} + +// Parse this command's options string into struct getoptflagstate, which +// includes a struct opts linked list in reverse order (I.E. right-to-left) +void parse_optflaglist(struct getoptflagstate *gof) +{ + char *options = toys.which->options; + long *nextarg = (long *)&this; + struct opts *new = 0; + int idx; + + // Parse option format string + memset(gof, 0, sizeof(struct getoptflagstate)); + gof->maxargs = INT_MAX; + if (!options) return; + + // Parse leading special behavior indicators + for (;;) { + if (*options == '^') gof->stopearly++; + else if (*options == '<') gof->minargs=*(++options)-'0'; + else if (*options == '>') gof->maxargs=*(++options)-'0'; + else if (*options == '?') gof->noerror++; + else if (*options == '&') gof->nodash_now = 1; + else break; + options++; + } + + // Parse option string into a linked list of options with attributes. + + if (!*options) gof->stopearly++; + while (*options) { + char *temp; + + // Option groups come after all options are defined + if (*options == '[') break; + + // Allocate a new list entry when necessary + if (!new) { + new = xzalloc(sizeof(struct opts)); + new->next = gof->opts; + gof->opts = new; + new->val[0].l = LONG_MIN; + new->val[1].l = LONG_MAX; + } + // Each option must start with "(" or an option character. (Bare + // longopts only come at the start of the string.) + if (*options == '(' && new->c != -1) { + char *end; + struct longopts *lo; + + // Find the end of the longopt + for (end = ++options; *end && *end != ')'; end++); + if (CFG_TOYBOX_DEBUG && !*end) error_exit("(longopt) didn't end"); + + // init a new struct longopts + lo = xmalloc(sizeof(struct longopts)); + lo->next = gof->longopts; + lo->opt = new; + lo->str = options; + lo->len = end-options; + gof->longopts = lo; + options = ++end; + + // Mark this struct opt as used, even when no short opt. + if (!new->c) new->c = -1; + + continue; + + // If this is the start of a new option that wasn't a longopt, + + } else if (strchr(":*#@.-%", *options)) { + if (CFG_TOYBOX_DEBUG && new->type) + error_exit("multiple types %c:%c%c", new->c, new->type, *options); + new->type = *options; + } else if (-1 != (idx = stridx("|^ ;", *options))) new->flags |= 1<=", *options))) { + if (new->type == '#' || new->type == '%') { + long l = strtol(++options, &temp, 10); + if (temp != options) new->val[idx].l = l; + } else if (CFG_TOYBOX_FLOAT && new->type == '.') { + FLOAT f = strtod(++options, &temp); + if (temp != options) new->val[idx].f = f; + } else error_exit("<>= only after .#%%"); + options = --temp; + + // At this point, we've hit the end of the previous option. The + // current character is the start of a new option. If we've already + // assigned an option to this struct, loop to allocate a new one. + // (It'll get back here afterwards and fall through to next else.) + } else if (new->c) { + new = 0; + continue; + + // Claim this option, loop to see what's after it. + } else new->c = 127&*options; + + options++; + } + + // Initialize enable/disable/exclude masks and pointers to store arguments. + // (This goes right to left so we need the whole list before we can start.) + idx = 0; + for (new = gof->opts; new; new = new->next) { + unsigned long long u = 1L<c == 1) new->c = 0; + new->dex[1] = u; + if (new->flags & 1) gof->requires |= u; + if (new->type) { + new->arg = (void *)nextarg; + *(nextarg++) = new->val[2].l; + } + } + + // Parse trailing group indicators + while (*options) { + unsigned bits = 0; + + if (CFG_TOYBOX_DEBUG && *options != '[') error_exit("trailing %s", options); + + idx = stridx("-+!", *++options); + if (CFG_TOYBOX_DEBUG && idx == -1) error_exit("[ needs +-!"); + if (CFG_TOYBOX_DEBUG && (options[1] == ']' || !options[1])) + error_exit("empty []"); + + // Don't advance past ] but do process it once in loop. + while (*options++ != ']') { + struct opts *opt; + int i; + + if (CFG_TOYBOX_DEBUG && !*options) error_exit("[ without ]"); + // Find this option flag (in previously parsed struct opt) + for (i=0, opt = gof->opts; ; i++, opt = opt->next) { + if (*options == ']') { + if (!opt) break; + if (bits&(1<dex[idx] |= bits&~(1<c == *options) { + bits |= 1<flags >> 24; + + // Allocate memory for optargs + saveflags = 0; + while (toys.argv[saveflags++]); + toys.optargs = xzalloc(sizeof(char *)*saveflags); + + parse_optflaglist(&gof); + + if (toys.argv[1] && toys.argv[1][0] == '-') gof.nodash_now = 0; + + // Iterate through command line arguments, skipping argv[0] + for (gof.argc=1; toys.argv[gof.argc]; gof.argc++) { + gof.arg = toys.argv[gof.argc]; + catch = NULL; + + // Parse this argument + if (gof.stopearly>1) goto notflag; + + if (gof.argc>1 || *gof.arg=='-') gof.nodash_now = 0; + + // Various things with dashes + if (*gof.arg == '-') { + + // Handle - + if (!gof.arg[1]) goto notflag; + gof.arg++; + if (*gof.arg=='-') { + struct longopts *lo; + + gof.arg++; + // Handle -- + if (!*gof.arg) { + gof.stopearly += 2; + continue; + } + + // do we match a known --longopt? + for (lo = gof.longopts; lo; lo = lo->next) { + if (!strncmp(gof.arg, lo->str, lo->len)) { + if (!gof.arg[lo->len]) gof.arg = 0; + else if (gof.arg[lo->len] == '=' && lo->opt->type) + gof.arg += lo->len; + else continue; + // It's a match. + catch = lo->opt; + break; + } + } + + // Should we handle this --longopt as a non-option argument? + if (!lo && gof.noerror) { + gof.arg -= 2; + goto notflag; + } + + // Long option parsed, handle option. + gotflag(&gof, catch); + continue; + } + + // Handle things that don't start with a dash. + } else { + if (gof.nodash_now) toys.optflags |= FLAGS_NODASH; + else goto notflag; + } + + // At this point, we have the args part of -args. Loop through + // each entry (could be -abc meaning -a -b -c) + saveflags = toys.optflags; + while (*gof.arg) { + + // Identify next option char. + for (catch = gof.opts; catch; catch = catch->next) + if (*gof.arg == catch->c) + if (!((catch->flags&4) && gof.arg[1])) break; + + // Handle option char (advancing past what was used) + if (gotflag(&gof, catch) ) { + toys.optflags = saveflags; + gof.arg = toys.argv[gof.argc]; + goto notflag; + } + } + continue; + + // Not a flag, save value in toys.optargs[] +notflag: + if (gof.stopearly) gof.stopearly++; + toys.optargs[toys.optc++] = toys.argv[gof.argc]; + } + + // Sanity check + if (toys.optcgof.maxargs) + help_exit("Max %d argument%s", gof.maxargs, letters[!(gof.maxargs-1)]); + if (gof.requires && !(gof.requires & toys.optflags)) { + struct opts *req; + char needs[32], *s = needs; + + for (req = gof.opts; req; req = req->next) + if (req->flags & 1) *(s++) = req->c; + *s = 0; + + help_exit("Needs %s-%s", s[1] ? "one of " : "", needs); + } + + toys.exitval = 0; + + if (CFG_TOYBOX_FREE) { + llist_traverse(gof.opts, free); + llist_traverse(gof.longopts, free); + } +} diff --git a/aosp/external/toybox/lib/commas.c b/aosp/external/toybox/lib/commas.c new file mode 100644 index 0000000000000000000000000000000000000000..22676847f34b26b758431df0907659bc47bcc52d --- /dev/null +++ b/aosp/external/toybox/lib/commas.c @@ -0,0 +1,119 @@ +/* commas.c - Deal with comma separated lists + * + * Copyright 2018 Rob Landley + */ + +#include "toys.h" + +// Traverse arg_list of csv, calling callback on each value +void comma_args(struct arg_list *al, void *data, char *err, + char *(*callback)(void *data, char *str, int len)) +{ + char *next, *arg; + int len; + + if (CFG_TOYBOX_DEBUG && !err) err = "INTERNAL"; + + while (al) { + arg = al->arg; + while ((next = comma_iterate(&arg, &len))) + if ((next = callback(data, next, len))) + error_exit("%s '%s'\n%*c", err, al->arg, + (int)(5+strlen(toys.which->name)+strlen(err)+next-al->arg), '^'); + al = al->next; + } +} + +// Realloc *old with oldstring,newstring + +void comma_collate(char **old, char *new) +{ + char *temp, *atold = *old; + + // Only add a comma if old string didn't end with one + if (atold && *atold) { + char *comma = ","; + + if (atold[strlen(atold)-1] == ',') comma = ""; + temp = xmprintf("%s%s%s", atold, comma, new); + } else temp = xstrdup(new); + free (atold); + *old = temp; +} + +// iterate through strings in a comma separated list. +// returns start of next entry or NULL if none +// sets *len to length of entry (not including comma) +// advances *list to start of next entry +char *comma_iterate(char **list, int *len) +{ + char *start = *list, *end; + + if (!*list || !**list) return 0; + + if (!(end = strchr(*list, ','))) { + *len = strlen(*list); + *list = 0; + } else *list += (*len = end-start)+1; + + return start; +} + +// Check all instances of opt and "no"opt in optlist, return true if opt +// found and last instance wasn't no. If clean, remove each instance from list. +int comma_scan(char *optlist, char *opt, int clean) +{ + int optlen = strlen(opt), len, no, got = 0; + + if (optlist) for (;;) { + char *s = comma_iterate(&optlist, &len); + + if (!s) break; + no = 2*(*s == 'n' && s[1] == 'o'); + if (optlen == len-no && !strncmp(opt, s+no, optlen)) { + got = !no; + if (clean) { + if (optlist) memmove(s, optlist, strlen(optlist)+1); + else *s = 0; + } + } + } + + return got; +} + +// return true if all scanlist options enabled in optlist +int comma_scanall(char *optlist, char *scanlist) +{ + int i = 1; + + while (scanlist && *scanlist) { + char *opt = comma_iterate(&scanlist, &i), *s = xstrndup(opt, i); + + i = comma_scan(optlist, s, 0); + free(s); + if (!i) break; + } + + return i; +} + +// Returns true and removes `opt` from `optlist` if present, false otherwise. +// Doesn't have the magic "no" behavior of comma_scan. +int comma_remove(char *optlist, char *opt) +{ + int optlen = strlen(opt), len, got = 0; + + if (optlist) for (;;) { + char *s = comma_iterate(&optlist, &len); + + if (!s) break; + if (optlen == len && !strncmp(opt, s, optlen)) { + got = 1; + if (optlist) memmove(s, optlist, strlen(optlist)+1); + else *s = 0; + } + } + + return got; +} diff --git a/aosp/external/toybox/lib/deflate.c b/aosp/external/toybox/lib/deflate.c new file mode 100644 index 0000000000000000000000000000000000000000..eebcd3de9385256db6392fc593699009406f8096 --- /dev/null +++ b/aosp/external/toybox/lib/deflate.c @@ -0,0 +1,485 @@ +/* deflate.c - deflate/inflate code for gzip and friends + * + * Copyright 2014 Rob Landley + * + * See RFCs 1950 (zlib), 1951 (deflate), and 1952 (gzip) + * LSB 4.1 has gzip, gunzip, and zcat + * + * TODO: zip -d DIR -x LIST -list -quiet -no overwrite -overwrite -p to stdout + */ + +#include "toys.h" + +struct deflate { + // Huffman codes: base offset and extra bits tables (length and distance) + char lenbits[29], distbits[30]; + unsigned short lenbase[29], distbase[30]; + void *fixdisthuff, *fixlithuff; + + // CRC + void (*crcfunc)(struct deflate *dd, char *data, int len); + unsigned crctable[256], crc; + + + // Tables only used for deflation + unsigned short *hashhead, *hashchain; + + // Compressed data buffer (extra space malloced at end) + unsigned pos, len; + int infd, outfd; + char data[]; +}; + +// little endian bit buffer +struct bitbuf { + int fd, bitpos, len, max; + char buf[]; +}; + +// malloc a struct bitbuf +struct bitbuf *bitbuf_init(int fd, int size) +{ + struct bitbuf *bb = xzalloc(sizeof(struct bitbuf)+size); + + bb->max = size; + bb->fd = fd; + + return bb; +} + +// Advance bitpos without the overhead of recording bits +// Loads more data when input buffer empty +void bitbuf_skip(struct bitbuf *bb, int bits) +{ + int pos = bb->bitpos + bits, len = bb->len << 3; + + while (pos >= len) { + pos -= len; + len = (bb->len = read(bb->fd, bb->buf, bb->max)) << 3; + if (bb->len < 1) perror_exit("inflate EOF"); + } + bb->bitpos = pos; +} + +// Optimized single bit inlined version +static inline int bitbuf_bit(struct bitbuf *bb) +{ + int bufpos = bb->bitpos>>3; + + if (bufpos == bb->len) { + bitbuf_skip(bb, 0); + bufpos = 0; + } + + return (bb->buf[bufpos]>>(bb->bitpos++&7))&1; +} + +// Fetch the next X bits from the bitbuf, little endian +unsigned bitbuf_get(struct bitbuf *bb, int bits) +{ + int result = 0, offset = 0; + + while (bits) { + int click = bb->bitpos >> 3, blow, blen; + + // Load more data if buffer empty + if (click == bb->len) bitbuf_skip(bb, click = 0); + + // grab bits from next byte + blow = bb->bitpos & 7; + blen = 8-blow; + if (blen > bits) blen = bits; + result |= ((bb->buf[click] >> blow) & ((1<bitpos += blen; + } + + return result; +} + +void bitbuf_flush(struct bitbuf *bb) +{ + if (!bb->bitpos) return; + + xwrite(bb->fd, bb->buf, (bb->bitpos+7)>>3); + memset(bb->buf, 0, bb->max); + bb->bitpos = 0; +} + +void bitbuf_put(struct bitbuf *bb, int data, int len) +{ + while (len) { + int click = bb->bitpos >> 3, blow, blen; + + // Flush buffer if necessary + if (click == bb->max) { + bitbuf_flush(bb); + click = 0; + } + blow = bb->bitpos & 7; + blen = 8-blow; + if (blen > len) blen = len; + bb->buf[click] |= data << blow; + bb->bitpos += blen; + data >>= blen; + len -= blen; + } +} + +static void output_byte(struct deflate *dd, char sym) +{ + int pos = dd->pos++ & 32767; + + dd->data[pos] = sym; + + if (pos == 32767) { + xwrite(dd->outfd, dd->data, 32768); + if (dd->crcfunc) dd->crcfunc(dd, dd->data, 32768); + } +} + +// Huffman coding uses bits to traverse a binary tree to a leaf node, +// By placing frequently occurring symbols at shorter paths, frequently +// used symbols may be represented in fewer bits than uncommon symbols. +// (length[0] isn't used but code's clearer if it's there.) + +struct huff { + unsigned short length[16]; // How many symbols have this bit length? + unsigned short symbol[288]; // sorted by bit length, then ascending order +}; + +// Create simple huffman tree from array of bit lengths. + +// The symbols in the huffman trees are sorted (first by bit length +// of the code to reach them, then by symbol number). This means that given +// the bit length of each symbol, we can construct a unique tree. +static void len2huff(struct huff *huff, char bitlen[], int len) +{ + int offset[16]; + int i; + + // Count number of codes at each bit length + memset(huff, 0, sizeof(struct huff)); + for (i = 0; ilength[bitlen[i]]++; + + // Sort symbols by bit length, then symbol. Get list of starting positions + // for each group, then write each symbol to next position within its group. + *huff->length = *offset = 0; + for (i = 1; i<16; i++) offset[i] = offset[i-1] + huff->length[i-1]; + for (i = 0; isymbol[offset[bitlen[i]]++] = i; +} + +// Fetch and decode next huffman coded symbol from bitbuf. +// This takes advantage of the sorting to navigate the tree as an array: +// each time we fetch a bit we have all the codes at that bit level in +// order with no gaps. +static unsigned huff_and_puff(struct bitbuf *bb, struct huff *huff) +{ + unsigned short *length = huff->length; + int start = 0, offset = 0; + + // Traverse through the bit lengths until our code is in this range + for (;;) { + offset = (offset << 1) | bitbuf_bit(bb); + start += *++length; + if ((offset -= *length) < 0) break; + if ((length - huff->length) & 16) error_exit("bad symbol"); + } + + return huff->symbol[start + offset]; +} + +// Decompress deflated data from bitbuf to dd->outfd. +static void inflate(struct deflate *dd, struct bitbuf *bb) +{ + dd->crc = ~0; + // repeat until spanked + for (;;) { + int final, type; + + final = bitbuf_get(bb, 1); + type = bitbuf_get(bb, 2); + + if (type == 3) error_exit("bad type"); + + // Uncompressed block? + if (!type) { + int len, nlen; + + // Align to byte, read length + bitbuf_skip(bb, (8-bb->bitpos)&7); + len = bitbuf_get(bb, 16); + nlen = bitbuf_get(bb, 16); + if (len != (0xffff & ~nlen)) error_exit("bad len"); + + // Dump literal output data + while (len) { + int pos = bb->bitpos >> 3, bblen = bb->len - pos; + char *p = bb->buf+pos; + + // dump bytes until done or end of current bitbuf contents + if (bblen > len) bblen = len; + pos = bblen; + while (pos--) output_byte(dd, *(p++)); + bitbuf_skip(bb, bblen << 3); + len -= bblen; + } + + // Compressed block + } else { + struct huff *disthuff, *lithuff; + + // Dynamic huffman codes? + if (type == 2) { + struct huff *h2 = ((struct huff *)libbuf)+1; + int i, litlen, distlen, hufflen; + char *hufflen_order = "\x10\x11\x12\0\x08\x07\x09\x06\x0a\x05\x0b" + "\x04\x0c\x03\x0d\x02\x0e\x01\x0f", *bits; + + // The huffman trees are stored as a series of bit lengths + litlen = bitbuf_get(bb, 5)+257; // max 288 + distlen = bitbuf_get(bb, 5)+1; // max 32 + hufflen = bitbuf_get(bb, 4)+4; // max 19 + + // The literal and distance codes are themselves compressed, in + // a complicated way: an array of bit lengths (hufflen many + // entries, each 3 bits) is used to fill out an array of 19 entries + // in a magic order, leaving the rest 0. Then make a tree out of it: + memset(bits = libbuf+1, 0, 19); + for (i=0; i>1)) + 3 + (len<<2); + memset(bits+i, bits[i-1] * !(sym&3), len); + i += len; + } + } + if (i > litlen+distlen) error_exit("bad tree"); + + len2huff(lithuff = h2, bits, litlen); + len2huff(disthuff = ((struct huff *)libbuf)+2, bits+litlen, distlen); + + // Static huffman codes + } else { + lithuff = dd->fixlithuff; + disthuff = dd->fixdisthuff; + } + + // Use huffman tables to decode block of compressed symbols + for (;;) { + int sym = huff_and_puff(bb, lithuff); + + // Literal? + if (sym < 256) output_byte(dd, sym); + + // Copy range? + else if (sym > 256) { + int len, dist; + + sym -= 257; + len = dd->lenbase[sym] + bitbuf_get(bb, dd->lenbits[sym]); + sym = huff_and_puff(bb, disthuff); + dist = dd->distbase[sym] + bitbuf_get(bb, dd->distbits[sym]); + sym = dd->pos & 32767; + + while (len--) output_byte(dd, dd->data[(dd->pos-dist) & 32767]); + + // End of block + } else break; + } + } + + // Was that the last block? + if (final) break; + } + + if (dd->pos & 32767) { + xwrite(dd->outfd, dd->data, dd->pos&32767); + if (dd->crcfunc) dd->crcfunc(dd, dd->data, dd->pos&32767); + } +} + +// Deflate from dd->infd to bitbuf +// For deflate, dd->len = input read, dd->pos = input consumed +static void deflate(struct deflate *dd, struct bitbuf *bb) +{ + char *data = dd->data; + int len, final = 0; + + dd->crc = ~0; + + while (!final) { + // Read next half-window of data if we haven't hit EOF yet. + len = readall(dd->infd, data+(dd->len&32768), 32768); + if (len < 0) perror_exit("read"); // todo: add filename + if (len != 32768) final++; + if (dd->crcfunc) dd->crcfunc(dd, data+(dd->len&32768), len); + // dd->len += len; crcfunc advances len TODO + + // store block as literal + bitbuf_put(bb, final, 1); + bitbuf_put(bb, 0, 1); + + bitbuf_put(bb, 0, (8-bb->bitpos)&7); + bitbuf_put(bb, len, 16); + bitbuf_put(bb, 0xffff & ~len, 16); + + // repeat until spanked + while (dd->pos != dd->len) { + unsigned pos = dd->pos&65535; + + bitbuf_put(bb, data[pos], 8); + + // need to refill buffer? + if (!(32767 & ++dd->pos) && !final) break; + } + } + bitbuf_flush(bb); +} + +// Allocate memory for deflate/inflate. +static struct deflate *init_deflate(int compress) +{ + int i, n = 1; + struct deflate *dd = xmalloc(sizeof(struct deflate)+32768*(compress ? 4 : 1)); + + memset(dd, 0, sizeof(struct deflate)); + // decompress needs 32k history, compress adds 64k hashhead and 32k hashchain + if (compress) { + dd->hashhead = (unsigned short *)(dd->data+65536); + dd->hashchain = (unsigned short *)(dd->data+65536+32768); + } + + // Calculate lenbits, lenbase, distbits, distbase + *dd->lenbase = 3; + for (i = 0; ilenbits)-1; i++) { + if (i>4) { + if (!(i&3)) { + dd->lenbits[i]++; + n <<= 1; + } + if (i == 27) n--; + else dd->lenbits[i+1] = dd->lenbits[i]; + } + dd->lenbase[i+1] = n + dd->lenbase[i]; + } + n = 0; + for (i = 0; idistbits); i++) { + dd->distbase[i] = 1<distbase[i] += dd->distbase[i-1]; + if (i>3 && !(i&1)) n++; + dd->distbits[i] = n; + } + +// TODO layout and lifetime of this? + // Init fixed huffman tables + for (i=0; i<288; i++) libbuf[i] = 8 + (i>143) - ((i>255)<<1) + (i>279); + len2huff(dd->fixlithuff = ((struct huff *)libbuf)+3, libbuf, 288); + memset(libbuf, 5, 30); + len2huff(dd->fixdisthuff = ((struct huff *)libbuf)+4, libbuf, 30); + + return dd; +} + +// Return true/false whether we consumed a gzip header. +static int is_gzip(struct bitbuf *bb) +{ + int flags; + + // Confirm signature + if (bitbuf_get(bb, 24) != 0x088b1f || (flags = bitbuf_get(bb, 8)) > 31) + return 0; + bitbuf_skip(bb, 6*8); + + // Skip extra, name, comment, header CRC fields + if (flags & 4) bitbuf_skip(bb, 16); + if (flags & 8) while (bitbuf_get(bb, 8)); + if (flags & 16) while (bitbuf_get(bb, 8)); + if (flags & 2) bitbuf_skip(bb, 16); + + return 1; +} + +void gzip_crc(struct deflate *dd, char *data, int len) +{ + int i; + unsigned crc, *crc_table = dd->crctable; + + crc = dd->crc; + for (i=0; i>8); + dd->crc = crc; + dd->len += len; +} + +long long gzip_fd(int infd, int outfd) +{ + struct bitbuf *bb = bitbuf_init(outfd, 4096); + struct deflate *dd = init_deflate(1); + long long rc; + + // Header from RFC 1952 section 2.2: + // 2 ID bytes (1F, 8b), gzip method byte (8=deflate), FLAG byte (none), + // 4 byte MTIME (zeroed), Extra Flags (2=maximum compression), + // Operating System (FF=unknown) + + dd->infd = infd; + xwrite(bb->fd, "\x1f\x8b\x08\0\0\0\0\0\x02\xff", 10); + + // Little endian crc table + crc_init(dd->crctable, 1); + dd->crcfunc = gzip_crc; + + deflate(dd, bb); + + // tail: crc32, len32 + + bitbuf_put(bb, 0, (8-bb->bitpos)&7); + bitbuf_put(bb, ~dd->crc, 32); + bitbuf_put(bb, dd->len, 32); + rc = dd->len; + + bitbuf_flush(bb); + free(bb); + free(dd); + + return rc; +} + +long long gunzip_fd(int infd, int outfd) +{ + struct bitbuf *bb = bitbuf_init(infd, 4096); + struct deflate *dd = init_deflate(0); + long long rc; + + if (!is_gzip(bb)) error_exit("not gzip"); + dd->outfd = outfd; + + // Little endian crc table + crc_init(dd->crctable, 1); + dd->crcfunc = gzip_crc; + + inflate(dd, bb); + + // tail: crc32, len32 + + bitbuf_skip(bb, (8-bb->bitpos)&7); + if (~dd->crc != bitbuf_get(bb, 32) || dd->len != bitbuf_get(bb, 32)) + error_exit("bad crc"); + + rc = dd->len; + free(bb); + free(dd); + + return rc; +} diff --git a/aosp/external/toybox/lib/dirtree.c b/aosp/external/toybox/lib/dirtree.c new file mode 100644 index 0000000000000000000000000000000000000000..f4cc620dd5aaaf5e16194775e6b4058ef8b60c99 --- /dev/null +++ b/aosp/external/toybox/lib/dirtree.c @@ -0,0 +1,204 @@ +/* dirtree.c - Functions for dealing with directory trees. + * + * Copyright 2007 Rob Landley + */ + +#include "toys.h" + +int isdotdot(char *name) +{ + if (name[0]=='.' && (!name[1] || (name[1]=='.' && !name[2]))) return 1; + + return 0; +} + +// Default callback, filters out "." and ".." except at top level. + +int dirtree_notdotdot(struct dirtree *catch) +{ + // Should we skip "." and ".."? + return (!catch->parent||!isdotdot(catch->name)) + *(DIRTREE_SAVE|DIRTREE_RECURSE); +} + +// Create a dirtree node from a path, with stat and symlink info. +// (This doesn't open directory filehandles yet so as not to exhaust the +// filehandle space on large trees, dirtree_handle_callback() does that.) + +struct dirtree *dirtree_add_node(struct dirtree *parent, char *name, int flags) +{ + struct dirtree *dt = 0; + struct stat st; + int len = 0, linklen = 0, statless = 0; + + if (name) { + // open code fd = because haven't got node to call dirtree_parentfd() on yet + int fd = parent ? parent->dirfd : AT_FDCWD, + sym = AT_SYMLINK_NOFOLLOW*!(flags&DIRTREE_SYMFOLLOW); + + // stat dangling symlinks + if (fstatat(fd, name, &st, sym)) { + // If we got ENOENT without NOFOLLOW, try again with NOFOLLOW. + if (errno!=ENOENT || sym || fstatat(fd, name, &st, AT_SYMLINK_NOFOLLOW)) { + if (flags&DIRTREE_STATLESS) statless++; + else goto error; + } + } + if (!statless && S_ISLNK(st.st_mode)) { + if (0>(linklen = readlinkat(fd, name, libbuf, 4095))) goto error; + libbuf[linklen++]=0; + } + len = strlen(name); + } + + // Allocate/populate return structure + dt = xmalloc((len = sizeof(struct dirtree)+len+1)+linklen); + memset(dt, 0, statless ? offsetof(struct dirtree, again) + : offsetof(struct dirtree, st)); + dt->parent = parent; + dt->again = statless ? 2 : 0; + if (!statless) memcpy(&dt->st, &st, sizeof(struct stat)); + strcpy(dt->name, name ? name : ""); + if (linklen) dt->symlink = memcpy(len+(char *)dt, libbuf, linklen); + + return dt; + +error: + if (!(flags&DIRTREE_SHUTUP) && !isdotdot(name)) { + char *path = parent ? dirtree_path(parent, 0) : ""; + + perror_msg("%s%s%s", path, parent ? "/" : "", name); + if (parent) free(path); + } + if (parent) parent->symlink = (char *)1; + free(dt); + return 0; +} + +// Return path to this node, assembled recursively. + +// Initial call can pass in NULL to plen, or point to an int initialized to 0 +// to return the length of the path, or a value greater than 0 to allocate +// extra space if you want to append your own text to the string. + +char *dirtree_path(struct dirtree *node, int *plen) +{ + char *path; + int len; + + if (!node) { + path = xmalloc(*plen); + *plen = 0; + return path; + } + + len = (plen ? *plen : 0)+strlen(node->name)+1; + path = dirtree_path(node->parent, &len); + if (len && path[len-1] != '/') path[len++]='/'; + len = stpcpy(path+len, node->name) - path; + if (plen) *plen = len; + + return path; +} + +int dirtree_parentfd(struct dirtree *node) +{ + return node->parent ? node->parent->dirfd : AT_FDCWD; +} + +// Handle callback for a node in the tree. Returns saved node(s) if +// callback returns DIRTREE_SAVE, otherwise frees consumed nodes and +// returns NULL. If !callback return top node unchanged. +// If !new return DIRTREE_ABORTVAL + +struct dirtree *dirtree_handle_callback(struct dirtree *new, + int (*callback)(struct dirtree *node)) +{ + int flags; + + if (!new) return DIRTREE_ABORTVAL; + if (!callback) return new; + flags = callback(new); + + if (S_ISDIR(new->st.st_mode) && (flags & (DIRTREE_RECURSE|DIRTREE_COMEAGAIN))) + flags = dirtree_recurse(new, callback, + openat(dirtree_parentfd(new), new->name, O_CLOEXEC), flags); + + // If this had children, it was callback's job to free them already. + if (!(flags & DIRTREE_SAVE)) { + free(new); + new = 0; + } + + return (flags & DIRTREE_ABORT)==DIRTREE_ABORT ? DIRTREE_ABORTVAL : new; +} + +// Recursively read/process children of directory node, filtering through +// callback(). Uses and closes supplied ->dirfd. + +int dirtree_recurse(struct dirtree *node, + int (*callback)(struct dirtree *node), int dirfd, int flags) +{ + struct dirtree *new, **ddt = &(node->child); + struct dirent *entry; + DIR *dir; + + node->dirfd = dirfd; + if (node->dirfd == -1 || !(dir = fdopendir(node->dirfd))) { + if (!(flags & DIRTREE_SHUTUP)) { + char *path = dirtree_path(node, 0); + perror_msg_raw(path); + free(path); + } + close(node->dirfd); + + return flags; + } + + // according to the fddir() man page, the filehandle in the DIR * can still + // be externally used by things that don't lseek() it. + + // The extra parentheses are to shut the stupid compiler up. + while ((entry = readdir(dir))) { + if ((flags&DIRTREE_PROC) && !isdigit(*entry->d_name)) continue; + if (!(new = dirtree_add_node(node, entry->d_name, flags))) continue; + if (!new->st.st_blksize && !new->st.st_mode) + new->st.st_mode = entry->d_type<<12; + new = dirtree_handle_callback(new, callback); + if (new == DIRTREE_ABORTVAL) break; + if (new) { + *ddt = new; + ddt = &((*ddt)->next); + } + } + + if (flags & DIRTREE_COMEAGAIN) { + node->again |= 1; + flags = callback(node); + } + + // This closes filehandle as well, so note it + closedir(dir); + node->dirfd = -1; + + return flags; +} + +// Create dirtree from path, using callback to filter nodes. If !callback +// return just the top node. Use dirtree_notdotdot callback to allocate a +// tree of struct dirtree nodes and return pointer to root node for later +// processing. +// Returns DIRTREE_ABORTVAL if path didn't exist (use DIRTREE_SHUTUP to handle +// error message yourself). + +struct dirtree *dirtree_flagread(char *path, int flags, + int (*callback)(struct dirtree *node)) +{ + return dirtree_handle_callback(dirtree_add_node(0, path, flags), callback); +} + +// Common case +struct dirtree *dirtree_read(char *path, int (*callback)(struct dirtree *node)) +{ + return dirtree_flagread(path, 0, callback); +} diff --git a/aosp/external/toybox/lib/env.c b/aosp/external/toybox/lib/env.c new file mode 100644 index 0000000000000000000000000000000000000000..614a504ca3d5949c671ff3ba2a12cea666b2907d --- /dev/null +++ b/aosp/external/toybox/lib/env.c @@ -0,0 +1,131 @@ +// Can't trust libc not to leak enviornment variable memory, so... + +#include "toys.h" + +// In libc, populated by start code, used by getenv() and exec() and friends. +extern char **environ; + +// Returns the number of bytes taken by the environment variables. For use +// when calculating the maximum bytes of environment+argument data that can +// be passed to exec for find(1) and xargs(1). +long environ_bytes() +{ + long bytes = sizeof(char *); + char **ev; + + for (ev = environ; *ev; ev++) bytes += sizeof(char *) + strlen(*ev) + 1; + + return bytes; +} + +// This will clear the inherited environment if called first thing. +// Use this instead of envc so we keep track of what needs to be freed. +void xclearenv(void) +{ + if (toys.envc) { + int i; + + for (i = 0; environ[i]; i++) if (i>=toys.envc) free(environ[i]); + } else environ = xmalloc(256*sizeof(char *)); + toys.envc = 1; + *environ = 0; +} + +// Frees entries we set earlier. Use with libc getenv but not setenv/putenv. +// if name has an equals and !val, act like putenv (name=val must be malloced!) +// if !val unset name. (Name with = and val is an error) +void xsetmyenv(int *envc, char ***env, char *name, char *val) +{ + unsigned i, len, ec; + char *new; + + // If we haven't snapshot initial environment state yet, do so now. + if (!*envc) { + // envc is size +1 so even if env empty it's nonzero after initialization + while ((*env)[(*envc)++]); + memcpy(new = xmalloc(((*envc|0xff)+1)*sizeof(char *)), *env, + *envc*sizeof(char *)); + *env = (void *)new; + } + + new = strchr(name, '='); + if (new) { + len = new-name; + if (val) error_exit("xsetenv %s to %s", name, val); + new = name; + } else { + len = strlen(name); + if (val) new = xmprintf("%s=%s", name, val); + } + + ec = (*envc)-1; // compensate for size +1 above + for (i = 0; (*env)[i]; i++) { + // Drop old entry, freeing as appropriate. Assumes no duplicates. + if (!memcmp(name, (*env)[i], len) && (*env)[i][len]=='=') { + if (i>=ec) free((*env)[i]); + else { + // move old entries down, add at end of old data + *envc = ec--; + for (; new ? i + */ + +#define SYSLOG_NAMES +#include "toys.h" + +void verror_msg(char *msg, int err, va_list va) +{ + char *s = ": %s"; + + fprintf(stderr, "%s: ", toys.which->name); + if (msg) vfprintf(stderr, msg, va); + else s+=2; + if (err>0) fprintf(stderr, s, strerror(err)); + if (err<0 && CFG_TOYBOX_HELP) + fprintf(stderr, " (see \"%s --help\")", toys.which->name); + if (msg || err) putc('\n', stderr); + if (!toys.exitval) toys.exitval++; +} + +// These functions don't collapse together because of the va_stuff. + +void error_msg(char *msg, ...) +{ + va_list va; + + va_start(va, msg); + verror_msg(msg, 0, va); + va_end(va); +} + +void perror_msg(char *msg, ...) +{ + va_list va; + + va_start(va, msg); + verror_msg(msg, errno, va); + va_end(va); +} + +// Die with an error message. +void error_exit(char *msg, ...) +{ + va_list va; + + va_start(va, msg); + verror_msg(msg, 0, va); + va_end(va); + + xexit(); +} + +// Die with an error message and strerror(errno) +void perror_exit(char *msg, ...) +{ + // Die silently if our pipeline exited. + if (errno != EPIPE) { + va_list va; + + va_start(va, msg); + verror_msg(msg, errno, va); + va_end(va); + } + + xexit(); +} + +// Exit with an error message after showing help text. +void help_exit(char *msg, ...) +{ + va_list va; + + if (!msg) show_help(stdout, 1); + else { + va_start(va, msg); + verror_msg(msg, -1, va); + va_end(va); + } + + xexit(); +} + +// If you want to explicitly disable the printf() behavior (because you're +// printing user-supplied data, or because android's static checker produces +// false positives for 'char *s = x ? "blah1" : "blah2"; printf(s);' and it's +// -Werror there for policy reasons). +void error_msg_raw(char *msg) +{ + error_msg("%s", msg); +} + +void perror_msg_raw(char *msg) +{ + perror_msg("%s", msg); +} + +void error_exit_raw(char *msg) +{ + error_exit("%s", msg); +} + +void perror_exit_raw(char *msg) +{ + perror_exit("%s", msg); +} + +// Keep reading until full or EOF +ssize_t readall(int fd, void *buf, size_t len) +{ + size_t count = 0; + + while (count0 means this much +// left after input skipped. +off_t lskip(int fd, off_t offset) +{ + off_t cur = lseek(fd, 0, SEEK_CUR); + + if (cur != -1) { + off_t end = lseek(fd, 0, SEEK_END) - cur; + + if (end > 0 && end < offset) return offset - end; + end = offset+cur; + if (end == lseek(fd, end, SEEK_SET)) return 0; + perror_exit("lseek"); + } + + while (offset>0) { + int try = offset>sizeof(libbuf) ? sizeof(libbuf) : offset, or; + + or = readall(fd, libbuf, try); + if (or < 0) perror_exit("lskip to %lld", (long long)offset); + else offset -= or; + if (or < try) break; + } + + return offset; +} + +// flags: +// MKPATHAT_MKLAST make last dir (with mode lastmode, else skips last part) +// MKPATHAT_MAKE make leading dirs (it's ok if they already exist) +// MKPATHAT_VERBOSE Print what got created to stderr +// returns 0 = path ok, 1 = error +int mkpathat(int atfd, char *dir, mode_t lastmode, int flags) +{ + struct stat buf; + char *s; + + // mkdir -p one/two/three is not an error if the path already exists, + // but is if "three" is a file. The others we dereference and catch + // not-a-directory along the way, but the last one we must explicitly + // test for. Might as well do it up front. + + if (!fstatat(atfd, dir, &buf, 0) && !S_ISDIR(buf.st_mode)) { + errno = EEXIST; + return 1; + } + + for (s = dir; ;s++) { + char save = 0; + mode_t mode = (0777&~toys.old_umask)|0300; + + // find next '/', but don't try to mkdir "" at start of absolute path + if (*s == '/' && (flags&MKPATHAT_MAKE) && s != dir) { + save = *s; + *s = 0; + } else if (*s) continue; + + // Use the mode from the -m option only for the last directory. + if (!save) { + if (flags&MKPATHAT_MKLAST) mode = lastmode; + else break; + } + + if (mkdirat(atfd, dir, mode)) { + if (!(flags&MKPATHAT_MAKE) || errno != EEXIST) return 1; + } else if (flags&MKPATHAT_VERBOSE) + fprintf(stderr, "%s: created directory '%s'\n", toys.which->name, dir); + + if (!(*s = save)) break; + } + + return 0; +} + +// The common case +int mkpath(char *dir) +{ + return mkpathat(AT_FDCWD, dir, 0, MKPATHAT_MAKE); +} + +// Split a path into linked list of components, tracking head and tail of list. +// Assigns head of list to *list, returns address of ->next entry to extend list +// Filters out // entries with no contents. +struct string_list **splitpath(char *path, struct string_list **list) +{ + char *new = path; + + *list = 0; + do { + int len; + + if (*path && *path != '/') continue; + len = path-new; + if (len > 0) { + *list = xmalloc(sizeof(struct string_list) + len + 1); + (*list)->next = 0; + memcpy((*list)->str, new, len); + (*list)->str[len] = 0; + list = &(*list)->next; + } + new = path+1; + } while (*path++); + + return list; +} + +// Find all file in a colon-separated path with access type "type" (generally +// X_OK or R_OK). Returns a list of absolute paths to each file found, in +// order. + +struct string_list *find_in_path(char *path, char *filename) +{ + struct string_list *rlist = NULL, **prlist=&rlist; + char *cwd; + + if (!path) return 0; + + cwd = xgetcwd(); + for (;;) { + char *res, *next = strchr(path, ':'); + int len = next ? next-path : strlen(path); + struct string_list *rnext; + struct stat st; + + rnext = xmalloc(sizeof(void *) + strlen(filename) + + (len ? len : strlen(cwd)) + 2); + if (!len) sprintf(rnext->str, "%s/%s", cwd, filename); + else { + memcpy(res = rnext->str, path, len); + res += len; + *(res++) = '/'; + strcpy(res, filename); + } + + // Confirm it's not a directory. + if (!stat(rnext->str, &st) && S_ISREG(st.st_mode)) { + *prlist = rnext; + rnext->next = NULL; + prlist = &(rnext->next); + } else free(rnext); + + if (!next) break; + path += len; + path++; + } + free(cwd); + + return rlist; +} + +long long estrtol(char *str, char **end, int base) +{ + errno = 0; + + return strtoll(str, end, base); +} + +long long xstrtol(char *str, char **end, int base) +{ + long long l = estrtol(str, end, base); + + if (errno) perror_exit_raw(str); + + return l; +} + +// atol() with the kilo/mega/giga/tera/peta/exa extensions, plus word and block. +// (zetta and yotta don't fit in 64 bits.) +long long atolx(char *numstr) +{ + char *c = numstr, *suffixes="cwbkmgtpe", *end; + long long val; + + val = xstrtol(numstr, &c, 0); + if (c != numstr && *c && (end = strchr(suffixes, tolower(*c)))) { + int shift = end-suffixes-2; + ++c; + if (shift==-1) val *= 2; + else if (!shift) val *= 512; + else if (shift>0) { + if (*c && tolower(*c++)=='d') while (shift--) val *= 1000; + else val *= 1LL<<(shift*10); + } + } + while (isspace(*c)) c++; + if (c==numstr || *c) error_exit("not integer: %s", numstr); + + return val; +} + +long long atolx_range(char *numstr, long long low, long long high) +{ + long long val = atolx(numstr); + + if (val < low) error_exit("%lld < %lld", val, low); + if (val > high) error_exit("%lld > %lld", val, high); + + return val; +} + +int stridx(char *haystack, char needle) +{ + char *off; + + if (!needle) return -1; + off = strchr(haystack, needle); + if (!off) return -1; + + return off-haystack; +} + +// Convert utf8 sequence to a unicode wide character +int utf8towc(wchar_t *wc, char *str, unsigned len) +{ + unsigned result, mask, first; + char *s, c; + + // fast path ASCII + if (len && *str<128) return !!(*wc = *str); + + result = first = *(s = str++); + if (result<0xc2 || result>0xf4) return -1; + for (mask = 6; (first&0xc0)==0xc0; mask += 5, first <<= 1) { + if (!--len) return -2; + if (((c = *(str++))&0xc0) != 0x80) return -1; + result = (result<<6)|(c&0x3f); + } + result &= (1<0x10ffff || (result>=0xd800 && result<=0xdfff)) return -1; + *wc = result; + + return str-s; +} + +char *strlower(char *s) +{ + char *try, *new; + + if (!CFG_TOYBOX_I18N) { + try = new = xstrdup(s); + for (; *s; s++) *(new++) = tolower(*s); + } else { + // I can't guarantee the string _won't_ expand during reencoding, so...? + try = new = xmalloc(strlen(s)*2+1); + + while (*s) { + wchar_t c; + int len = utf8towc(&c, s, MB_CUR_MAX); + + if (len < 1) *(new++) = *(s++); + else { + s += len; + // squash title case too + c = towlower(c); + + // if we had a valid utf8 sequence, convert it to lower case, and can't + // encode back to utf8, something is wrong with your libc. But just + // in case somebody finds an exploit... + len = wcrtomb(new, c, 0); + if (len < 1) error_exit("bad utf8 %x", (int)c); + new += len; + } + } + *new = 0; + } + + return try; +} + +// strstr but returns pointer after match +char *strafter(char *haystack, char *needle) +{ + char *s = strstr(haystack, needle); + + return s ? s+strlen(needle) : s; +} + +// Remove trailing \n +char *chomp(char *s) +{ + char *p = strrchr(s, '\n'); + + if (p && !p[1]) *p = 0; + return s; +} + +int unescape(char c) +{ + char *from = "\\abefnrtv", *to = "\\\a\b\033\f\n\r\t\v"; + int idx = stridx(from, c); + + return (idx == -1) ? 0 : to[idx]; +} + +// If string ends with suffix return pointer to start of suffix in string, +// else NULL +char *strend(char *str, char *suffix) +{ + long a = strlen(str), b = strlen(suffix); + + if (a>b && !strcmp(str += a-b, suffix)) return str; + + return 0; +} + +// If *a starts with b, advance *a past it and return 1, else return 0; +int strstart(char **a, char *b) +{ + char *c = *a; + + while (*b && *c == *b) b++, c++; + if (!*b) *a = c; + + return !*b; +} + +// If *a starts with b, advance *a past it and return 1, else return 0; +int strcasestart(char **a, char *b) +{ + int len = strlen(b), i = !strncasecmp(*a, b, len); + + if (i) *a += len; + + return i; +} + +// Return how long the file at fd is, if there's any way to determine it. +off_t fdlength(int fd) +{ + struct stat st; + off_t base = 0, range = 1, expand = 1, old; + + if (!fstat(fd, &st) && S_ISREG(st.st_mode)) return st.st_size; + + // If the ioctl works for this, return it. + // TODO: is blocksize still always 512, or do we stat for it? + // unsigned int size; + // if (ioctl(fd, BLKGETSIZE, &size) >= 0) return size*512L; + + // If not, do a binary search for the last location we can read. (Some + // block devices don't do BLKGETSIZE right.) This should probably have + // a CONFIG option... + + // If not, do a binary search for the last location we can read. + + old = lseek(fd, 0, SEEK_CUR); + do { + char temp; + off_t pos = base + range / 2; + + if (lseek(fd, pos, 0)>=0 && read(fd, &temp, 1)==1) { + off_t delta = (pos + 1) - base; + + base += delta; + if (expand) range = (expand <<= 1) - base; + else range -= delta; + } else { + expand = 0; + range = pos - base; + } + } while (range > 0); + + lseek(fd, old, SEEK_SET); + + return base; +} + +char *readfd(int fd, char *ibuf, off_t *plen) +{ + off_t len, rlen; + char *buf, *rbuf; + + // Unsafe to probe for size with a supplied buffer, don't ever do that. + if (CFG_TOYBOX_DEBUG && (ibuf ? !*plen : *plen)) error_exit("bad readfileat"); + + // If we dunno the length, probe it. If we can't probe, start with 1 page. + if (!*plen) { + if ((len = fdlength(fd))>0) *plen = len; + else len = 4096; + } else len = *plen-1; + + if (!ibuf) buf = xmalloc(len+1); + else buf = ibuf; + + for (rbuf = buf;;) { + rlen = readall(fd, rbuf, len); + if (*plen || rlentv_nsec + offset, secs = nano/1000000000; + + ts->tv_sec += secs; + nano %= 1000000000; + if (nano<0) { + ts->tv_sec--; + nano += 1000000000; + } + ts->tv_nsec = nano; +} + +// return difference between two timespecs in nanosecs +long long nanodiff(struct timespec *old, struct timespec *new) +{ + return (new->tv_sec - old->tv_sec)*1000000000LL+(new->tv_nsec - old->tv_nsec); +} + +// return 1<>= 1; + + return i-1; +} + +// Inefficient, but deals with unaligned access +int64_t peek_le(void *ptr, unsigned size) +{ + int64_t ret = 0; + char *c = ptr; + int i; + + for (i=0; i>= 8; + } +} + +void poke_be(void *ptr, long long val, unsigned size) +{ + char *c = ptr + size; + + while (size--) { + *--c = val&255; + val >>=8; + } +} + +void poke(void *ptr, long long val, unsigned size) +{ + (IS_BIG_ENDIAN ? poke_be : poke_le)(ptr, val, size); +} + +// Iterate through an array of files, opening each one and calling a function +// on that filehandle and name. The special filename "-" means stdin if +// flags is O_RDONLY, stdout otherwise. An empty argument list calls +// function() on just stdin/stdout. +// +// Note: pass O_CLOEXEC to automatically close filehandles when function() +// returns, otherwise filehandles must be closed by function(). +// pass WARN_ONLY to produce warning messages about files it couldn't +// open/create, and skip them. Otherwise function is called with fd -1. +void loopfiles_rw(char **argv, int flags, int permissions, + void (*function)(int fd, char *name)) +{ + int fd, failok = !(flags&WARN_ONLY); + + flags &= ~WARN_ONLY; + + // If no arguments, read from stdin. + if (!*argv) function((flags & O_ACCMODE) != O_RDONLY ? 1 : 0, "-"); + else do { + // Filename "-" means read from stdin. + // Inability to open a file prints a warning, but doesn't exit. + + if (!strcmp(*argv, "-")) fd = 0; + else if (0>(fd = notstdio(open(*argv, flags, permissions))) && !failok) { + perror_msg_raw(*argv); + continue; + } + function(fd, *argv); + if ((flags & O_CLOEXEC) && fd) close(fd); + } while (*++argv); +} + +// Call loopfiles_rw with O_RDONLY|O_CLOEXEC|WARN_ONLY (common case) +void loopfiles(char **argv, void (*function)(int fd, char *name)) +{ + loopfiles_rw(argv, O_RDONLY|O_CLOEXEC|WARN_ONLY, 0, function); +} + +// glue to call dl_lines() from loopfiles +static void (*do_lines_bridge)(char **pline, long len); +static void loopfile_lines_bridge(int fd, char *name) +{ + do_lines(fd, '\n', do_lines_bridge); +} + +void loopfiles_lines(char **argv, void (*function)(char **pline, long len)) +{ + do_lines_bridge = function; + // No O_CLOEXEC because we need to call fclose. + loopfiles_rw(argv, O_RDONLY|WARN_ONLY, 0, loopfile_lines_bridge); +} + +// Slow, but small. +char *get_line(int fd) +{ + char c, *buf = NULL; + long len = 0; + + for (;;) { + if (1>read(fd, &c, 1)) break; + if (!(len & 63)) buf=xrealloc(buf, len+65); + if ((buf[len++]=c) == '\n') break; + } + if (buf) { + buf[len]=0; + if (buf[--len]=='\n') buf[len]=0; + } + + return buf; +} + +int wfchmodat(int fd, char *name, mode_t mode) +{ + int rc = fchmodat(fd, name, mode, 0); + + if (rc) { + perror_msg("chmod '%s' to %04o", name, mode); + toys.exitval=1; + } + return rc; +} + +static char *tempfile2zap; +static void tempfile_handler(void) +{ + if (1 < (long)tempfile2zap) unlink(tempfile2zap); +} + +// Open a temporary file to copy an existing file into. +int copy_tempfile(int fdin, char *name, char **tempname) +{ + struct stat statbuf; + int fd = xtempfile(name, tempname), ignored __attribute__((__unused__)); + + // Record tempfile for exit cleanup if interrupted + if (!tempfile2zap) sigatexit(tempfile_handler); + tempfile2zap = *tempname; + + // Set permissions of output file. + if (!fstat(fdin, &statbuf)) fchmod(fd, statbuf.st_mode); + + // We chmod before chown, which strips the suid bit. Caller has to explicitly + // switch it back on if they want to keep suid. + + // Suppress warn-unused-result. Both gcc and clang clutch their pearls about + // this but it's _supposed_ to fail when we're not root. + ignored = fchown(fd, statbuf.st_uid, statbuf.st_gid); + + return fd; +} + +// Abort the copy and delete the temporary file. +void delete_tempfile(int fdin, int fdout, char **tempname) +{ + close(fdin); + close(fdout); + if (*tempname) unlink(*tempname); + tempfile2zap = (char *)1; + free(*tempname); + *tempname = NULL; +} + +// Copy the rest of the data and replace the original with the copy. +void replace_tempfile(int fdin, int fdout, char **tempname) +{ + char *temp = xstrdup(*tempname); + + temp[strlen(temp)-6]=0; + if (fdin != -1) { + xsendfile(fdin, fdout); + xclose(fdin); + } + xclose(fdout); + xrename(*tempname, temp); + tempfile2zap = (char *)1; + free(*tempname); + free(temp); + *tempname = NULL; +} + +// Create a 256 entry CRC32 lookup table. + +void crc_init(unsigned int *crc_table, int little_endian) +{ + unsigned int i; + + // Init the CRC32 table (big endian) + for (i=0; i<256; i++) { + unsigned int j, c = little_endian ? i : i<<24; + for (j=8; j; j--) + if (little_endian) c = (c&1) ? (c>>1)^0xEDB88320 : c>>1; + else c=c&0x80000000 ? (c<<1)^0x04c11db7 : (c<<1); + crc_table[i] = c; + } +} + +// Init base64 table + +void base64_init(char *p) +{ + int i; + + for (i = 'A'; i != ':'; i++) { + if (i == 'Z'+1) i = 'a'; + if (i == 'z'+1) i = '0'; + *(p++) = i; + } + *(p++) = '+'; + *(p++) = '/'; +} + +int yesno(int def) +{ + return fyesno(stdin, def); +} + +int fyesno(FILE *in, int def) +{ + char buf; + + fprintf(stderr, " (%c/%c):", def ? 'Y' : 'y', def ? 'n' : 'N'); + fflush(stderr); + while (fread(&buf, 1, 1, in)) { + int new; + + // The letter changes the value, the newline (or space) returns it. + if (isspace(buf)) break; + if (-1 != (new = stridx("ny", tolower(buf)))) def = new; + } + + return def; +} + +// Handler that sets toys.signal, and writes to toys.signalfd if set +void generic_signal(int sig) +{ + if (toys.signalfd) { + char c = sig; + + writeall(toys.signalfd, &c, 1); + } + toys.signal = sig; +} + +void exit_signal(int sig) +{ + if (sig) toys.exitval = sig|128; + xexit(); +} + +// Install the same handler on every signal that defaults to killing the +// process, calling the handler on the way out. Calling multiple times +// adds the handlers to a list, to be called in order. +void sigatexit(void *handler) +{ + xsignal_all_killers(handler ? exit_signal : SIG_DFL); + + if (handler) { + struct arg_list *al = xmalloc(sizeof(struct arg_list)); + + al->next = toys.xexit; + al->arg = handler; + toys.xexit = al; + } else { + llist_traverse(toys.xexit, free); + toys.xexit = 0; + } +} + +// Output a nicely formatted 80-column table of all the signals. +void list_signals() +{ + int i = 0, count = 0; + char *name; + + for (; i<=NSIG; i++) { + if ((name = num_to_sig(i))) { + printf("%2d) SIG%-9s", i, name); + if (++count % 5 == 0) putchar('\n'); + } + } + putchar('\n'); +} + +// premute mode bits based on posix mode strings. +mode_t string_to_mode(char *modestr, mode_t mode) +{ + char *whos = "ogua", *hows = "=+-", *whats = "xwrstX", *whys = "ogu", + *s, *str = modestr; + mode_t extrabits = mode & ~(07777); + + // Handle octal mode + if (isdigit(*str)) { + mode = estrtol(str, &s, 8); + if (errno || *s || (mode & ~(07777))) goto barf; + + return mode | extrabits; + } + + // Gaze into the bin of permission... + for (;;) { + int i, j, dowho, dohow, dowhat, amask; + + dowho = dohow = dowhat = amask = 0; + + // Find the who, how, and what stanzas, in that order + while (*str && (s = strchr(whos, *str))) { + dowho |= 1<<(s-whos); + str++; + } + // If who isn't specified, like "a" but honoring umask. + if (!dowho) { + dowho = 8; + umask(amask = umask(0)); + } + + if (!*str || !(s = strchr(hows, *str))) goto barf; + if (!(dohow = *(str++))) goto barf; + + while (*str && (s = strchr(whats, *str))) { + dowhat |= 1<<(s-whats); + str++; + } + + // Convert X to x for directory or if already executable somewhere + if ((dowhat&32) && (S_ISDIR(mode) || (mode&0111))) dowhat |= 1; + + // Copy mode from another category? + if (!dowhat && *str && (s = strchr(whys, *str))) { + dowhat = (mode>>(3*(s-whys)))&7; + str++; + } + + // Are we ready to do a thing yet? + if (*str && *(str++) != ',') goto barf; + + // Loop through what=xwrs and who=ogu to apply bits to the mode. + for (i=0; i<4; i++) { + for (j=0; j<3; j++) { + mode_t bit = 0; + int where = 1<<((3*i)+j); + + if (amask & where) continue; + + // Figure out new value at this location + if (i == 3) { + // suid and sticky + if (!j) bit = dowhat&16; // o+s = t + else if ((dowhat&8) && (dowho&(8|(1<d_name); + char *cmd = 0, *comm = 0, **cur; + off_t len; + + if (!u) continue; + + // Comm is original name of executable (argv[0] could be #! interpreter) + // but it's limited to 15 characters + if (scripts) { + sprintf(libbuf, "/proc/%u/comm", u); + len = sizeof(libbuf); + if (!(comm = readfileat(AT_FDCWD, libbuf, libbuf, &len)) || !len) + continue; + if (libbuf[len-1] == '\n') libbuf[--len] = 0; + } + + for (cur = names; *cur; cur++) { + struct stat st1, st2; + char *bb = getbasename(*cur); + off_t len = strlen(bb); + + // Fast path: only matching a filename (no path) that fits in comm. + // `len` must be 14 or less because with a full 15 bytes we don't + // know whether the name fit or was truncated. + if (scripts && len<=14 && bb==*cur && !strcmp(comm, bb)) goto match; + + // If we have a path to existing file only match if same inode + if (bb!=*cur && !stat(*cur, &st1)) { + char buf[32]; + + sprintf(buf, "/proc/%u/exe", u); + if (stat(buf, &st2)) continue; + if (st1.st_dev != st2.st_dev || st1.st_ino != st2.st_ino) continue; + goto match; + } + + // Nope, gotta read command line to confirm + if (!cmd) { + sprintf(cmd = libbuf+16, "/proc/%u/cmdline", u); + len = sizeof(libbuf)-17; + if (!(cmd = readfileat(AT_FDCWD, cmd, cmd, &len))) continue; + // readfile only guarantees one null terminator and we need two + // (yes the kernel should do this for us, don't care) + cmd[len] = 0; + } + if (!strcmp(bb, getbasename(cmd))) goto match; + if (scripts && !strcmp(bb, getbasename(cmd+strlen(cmd)+1))) goto match; + continue; +match: + if (callback(u, *cur)) break; + } + } + closedir(dp); +} + +// display first "dgt" many digits of number plus unit (kilo-exabytes) +int human_readable_long(char *buf, unsigned long long num, int dgt, int style) +{ + unsigned long long snap = 0; + int len, unit, divisor = (style&HR_1000) ? 1000 : 1024; + + // Divide rounding up until we have 3 or fewer digits. Since the part we + // print is decimal, the test is 999 even when we divide by 1024. + // We can't run out of units because 1<<64 is 18 exabytes. + for (unit = 0; snprintf(0, 0, "%llu", num)>dgt; unit++) + num = ((snap = num)+(divisor/2))/divisor; + len = sprintf(buf, "%llu", num); + if (unit && len == 1) { + // Redo rounding for 1.2M case, this works with and without HR_1000. + num = snap/divisor; + snap -= num*divisor; + snap = ((snap*100)+50)/divisor; + snap /= 10; + len = sprintf(buf, "%llu.%llu", num, snap); + } + if (style & HR_SPACE) buf[len++] = ' '; + if (unit) { + unit = " kMGTPE"[unit]; + + if (!(style&HR_1000)) unit = toupper(unit); + buf[len++] = unit; + } else if (style & HR_B) buf[len++] = 'B'; + buf[len] = 0; + + return len; +} + +// Give 3 digit estimate + units ala 999M or 1.7T +int human_readable(char *buf, unsigned long long num, int style) +{ + return human_readable_long(buf, num, 3, style); +} + +// The qsort man page says you can use alphasort, the posix committee +// disagreed, and doubled down: http://austingroupbugs.net/view.php?id=142 +// So just do our own. (The const is entirely to humor the stupid compiler.) +int qstrcmp(const void *a, const void *b) +{ + return strcmp(*(char **)a, *(char **)b); +} + +// See https://tools.ietf.org/html/rfc4122, specifically section 4.4 +// "Algorithms for Creating a UUID from Truly Random or Pseudo-Random +// Numbers". +void create_uuid(char *uuid) +{ + // "Set all the ... bits to randomly (or pseudo-randomly) chosen values". + xgetrandom(uuid, 16, 0); + + // "Set the four most significant bits ... of the time_hi_and_version + // field to the 4-bit version number [4]". + uuid[6] = (uuid[6] & 0x0F) | 0x40; + // "Set the two most significant bits (bits 6 and 7) of + // clock_seq_hi_and_reserved to zero and one, respectively". + uuid[8] = (uuid[8] & 0x3F) | 0x80; +} + +char *show_uuid(char *uuid) +{ + char *out = libbuf; + int i; + + for (i=0; i<16; i++) out+=sprintf(out, "-%02x"+!(0x550&(1<next) + if (list->pw.pw_uid == uid) return &(list->pw); + + for (;;) { + list = xrealloc(list, size *= 2); + errno = getpwuid_r(uid, &list->pw, sizeof(*list)+(char *)list, + size-sizeof(*list), &temp); + if (errno != ERANGE) break; + } + + if (!temp) { + free(list); + + return 0; + } + list->next = pwuidbuf; + pwuidbuf = list; + + return &list->pw; +} + +// Return cached group entries. +struct group *bufgetgrgid(gid_t gid) +{ + struct grgidbuf_list { + struct grgidbuf_list *next; + struct group gr; + } *list = 0; + struct group *temp; + static struct grgidbuf_list *grgidbuf; + unsigned size = 256; + + for (list = grgidbuf; list; list = list->next) + if (list->gr.gr_gid == gid) return &(list->gr); + + for (;;) { + list = xrealloc(list, size *= 2); + errno = getgrgid_r(gid, &list->gr, sizeof(*list)+(char *)list, + size-sizeof(*list), &temp); + if (errno != ERANGE) break; + } + if (!temp) { + free(list); + + return 0; + } + list->next = grgidbuf; + grgidbuf = list; + + return &list->gr; +} + +// Always null terminates, returns 0 for failure, len for success +int readlinkat0(int dirfd, char *path, char *buf, int len) +{ + if (!len) return 0; + + len = readlinkat(dirfd, path, buf, len-1); + if (len<0) len = 0; + buf[len] = 0; + + return len; +} + +int readlink0(char *path, char *buf, int len) +{ + return readlinkat0(AT_FDCWD, path, buf, len); +} + +// Do regex matching with len argument to handle embedded NUL bytes in string +int regexec0(regex_t *preg, char *string, long len, int nmatch, + regmatch_t *pmatch, int eflags) +{ + regmatch_t backup; + + if (!nmatch) pmatch = &backup; + pmatch->rm_so = 0; + pmatch->rm_eo = len; + return regexec(preg, string, nmatch, pmatch, eflags|REG_STARTEND); +} + +// Return user name or string representation of number, returned buffer +// lasts until next call. +char *getusername(uid_t uid) +{ + struct passwd *pw = bufgetpwuid(uid); + static char unum[12]; + + sprintf(unum, "%u", (unsigned)uid); + return pw ? pw->pw_name : unum; +} + +// Return group name or string representation of number, returned buffer +// lasts until next call. +char *getgroupname(gid_t gid) +{ + struct group *gr = bufgetgrgid(gid); + static char gnum[12]; + + sprintf(gnum, "%u", (unsigned)gid); + return gr ? gr->gr_name : gnum; +} + +// Iterate over lines in file, calling function. Function can write 0 to +// the line pointer if they want to keep it, or 1 to terminate processing, +// otherwise line is freed. Passed file descriptor is closed at the end. +// At EOF calls function(0, 0) +void do_lines(int fd, char delim, void (*call)(char **pline, long len)) +{ + FILE *fp = fd ? xfdopen(fd, "r") : stdin; + + for (;;) { + char *line = 0; + ssize_t len; + + len = getdelim(&line, (void *)&len, delim, fp); + if (len > 0) { + call(&line, len); + if (line == (void *)1) break; + free(line); + } else break; + } + call(0, 0); + + if (fd) fclose(fp); +} + +// Return unix time in milliseconds +long long millitime(void) +{ + struct timespec ts; + + clock_gettime(CLOCK_MONOTONIC, &ts); + return ts.tv_sec*1000+ts.tv_nsec/1000000; +} + +// Formats `ts` in ISO format ("2018-06-28 15:08:58.846386216 -0700"). +char *format_iso_time(char *buf, size_t len, struct timespec *ts) +{ + char *s = buf; + + s += strftime(s, len, "%F %T", localtime(&(ts->tv_sec))); + s += sprintf(s, ".%09ld ", ts->tv_nsec); + s += strftime(s, len-strlen(buf), "%z", localtime(&(ts->tv_sec))); + + return buf; +} + +// Syslog with the openlog/closelog, autodetecting daemon status via no tty + +void loggit(int priority, char *format, ...) +{ + int i, facility = LOG_DAEMON; + va_list va; + + for (i = 0; i<3; i++) if (isatty(i)) facility = LOG_AUTH; + openlog(toys.which->name, LOG_PID, facility); + va_start(va, format); + vsyslog(priority, format, va); + va_end(va); + closelog(); +} + +// Calculate tar packet checksum, with cksum field treated as 8 spaces +unsigned tar_cksum(void *data) +{ + unsigned i, cksum = 8*' '; + + for (i = 0; i<500; i += (i==147) ? 9 : 1) cksum += ((char *)data)[i]; + + return cksum; +} + +// is this a valid tar header? +int is_tar_header(void *pkt) +{ + char *p = pkt; + int i = 0; + + if (p[257] && memcmp("ustar", p+257, 5)) return 0; + if (p[148] != '0' && p[148] != ' ') return 0; + sscanf(p+148, "%8o", &i); + + return i && tar_cksum(pkt) == i; +} + +char *elf_arch_name(int type) +{ + int i; + // Values from include/linux/elf-em.h (plus arch/*/include/asm/elf.h) + // Names are linux/arch/ directory (sometimes before 32/64 bit merges) + struct {int val; char *name;} types[] = {{0x9026, "alpha"}, {93, "arc"}, + {195, "arcv2"}, {40, "arm"}, {183, "arm64"}, {0x18ad, "avr32"}, + {247, "bpf"}, {106, "blackfin"}, {140, "c6x"}, {23, "cell"}, {76, "cris"}, + {252, "csky"}, {0x5441, "frv"}, {46, "h8300"}, {164, "hexagon"}, + {50, "ia64"}, {88, "m32r"}, {0x9041, "m32r"}, {4, "m68k"}, {174, "metag"}, + {189, "microblaze"}, {0xbaab, "microblaze-old"}, {8, "mips"}, + {10, "mips-old"}, {89, "mn10300"}, {0xbeef, "mn10300-old"}, {113, "nios2"}, + {92, "openrisc"}, {0x8472, "openrisc-old"}, {15, "parisc"}, {20, "ppc"}, + {21, "ppc64"}, {243, "riscv"}, {22, "s390"}, {0xa390, "s390-old"}, + {135, "score"}, {42, "sh"}, {2, "sparc"}, {18, "sparc8+"}, {43, "sparc9"}, + {188, "tile"}, {191, "tilegx"}, {3, "386"}, {6, "486"}, {62, "x86-64"}, + {94, "xtensa"}, {0xabc7, "xtensa-old"} + }; + + for (i = 0; i + */ + +struct ptr_len { + void *ptr; + long len; +}; + +struct str_len { + char *str; + long len; +}; + +// llist.c + +// All these list types can be handled by the same code because first element +// is always next pointer, so next = (mytype *)&struct. (The payloads are +// named differently to catch using the wrong type early.) + +struct string_list { + struct string_list *next; + char str[0]; +}; + +struct arg_list { + struct arg_list *next; + char *arg; +}; + +struct double_list { + struct double_list *next, *prev; + char *data; +}; + +struct num_cache { + struct num_cache *next; + long long num; + char data[]; +}; + +void llist_free_arg(void *node); +void llist_free_double(void *node); +void llist_traverse(void *list, void (*using)(void *node)); +void *llist_pop(void *list); // actually void **list +void *dlist_pop(void *list); // actually struct double_list **list +void *dlist_lpop(void *list); // also struct double_list **list +void dlist_add_nomalloc(struct double_list **list, struct double_list *new); +struct double_list *dlist_add(struct double_list **list, char *data); +void *dlist_terminate(void *list); +struct num_cache *get_num_cache(struct num_cache *cache, long long num); +struct num_cache *add_num_cache(struct num_cache **cache, long long num, + void *data, int len); + +// args.c +#define FLAGS_NODASH (1LL<<63) +void get_optflags(void); + +// dirtree.c + +// Values returnable from callback function (bitfield, or them together) +// Default with no callback is 0 + +// Add this node to the tree +#define DIRTREE_SAVE 1 +// Recurse into children +#define DIRTREE_RECURSE 2 +// Call again after handling all children of this directory +// (Ignored for non-directories, sets linklen = -1 before second call.) +#define DIRTREE_COMEAGAIN 4 +// Follow symlinks to directories +#define DIRTREE_SYMFOLLOW 8 +// Don't warn about failure to stat +#define DIRTREE_SHUTUP 16 +// Breadth first traversal, conserves filehandles at the expense of memory +#define DIRTREE_BREADTH 32 +// skip non-numeric entries +#define DIRTREE_PROC 64 +// Return files we can't stat +#define DIRTREE_STATLESS 128 +// Don't look at any more files in this directory. +#define DIRTREE_ABORT 256 + +#define DIRTREE_ABORTVAL ((struct dirtree *)1) + +struct dirtree { + struct dirtree *next, *parent, *child; + long extra; // place for user to store their stuff (can be pointer) + char *symlink; + int dirfd; + struct stat st; + char again; + char name[]; +}; + +int isdotdot(char *name); +struct dirtree *dirtree_add_node(struct dirtree *p, char *name, int flags); +char *dirtree_path(struct dirtree *node, int *plen); +int dirtree_notdotdot(struct dirtree *catch); +int dirtree_parentfd(struct dirtree *node); +int dirtree_recurse(struct dirtree *node, int (*callback)(struct dirtree *node), + int dirfd, int symfollow); +struct dirtree *dirtree_flagread(char *path, int flags, + int (*callback)(struct dirtree *node)); +struct dirtree *dirtree_read(char *path, int (*callback)(struct dirtree *node)); + +// help.c + +void show_help(FILE *out, int full); + +// Tell xopen and friends to print warnings but return -1 as necessary +// The largest O_BLAH flag so far is arch/alpha's O_PATH at 0x800000 so +// plenty of headroom. +#define WARN_ONLY (1<<31) + +// xwrap.c +void xstrncpy(char *dest, char *src, size_t size); +void xstrncat(char *dest, char *src, size_t size); +void _xexit(void) __attribute__((__noreturn__)); +void xexit(void) __attribute__((__noreturn__)); +void *xmmap(void *addr, size_t length, int prot, int flags, int fd, off_t off); +void *xmalloc(size_t size); +void *xzalloc(size_t size); +void *xrealloc(void *ptr, size_t size); +char *xstrndup(char *s, size_t n); +char *xstrdup(char *s); +void *xmemdup(void *s, long len); +char *xmprintf(char *format, ...) printf_format; +void xprintf(char *format, ...) printf_format; +void xputsl(char *s, int len); +void xputsn(char *s); +void xputs(char *s); +void xputc(char c); +void xflush(int flush); +void xexec(char **argv); +pid_t xpopen_setup(char **argv, int *pipes, void (*callback)(void)); +pid_t xpopen_both(char **argv, int *pipes); +int xwaitpid(pid_t pid); +int xpclose_both(pid_t pid, int *pipes); +pid_t xpopen(char **argv, int *pipe, int isstdout); +pid_t xpclose(pid_t pid, int pipe); +int xrun(char **argv); +int xpspawn(char **argv, int*pipes); +void xaccess(char *path, int flags); +void xunlink(char *path); +void xrename(char *from, char *to); +int xtempfile(char *name, char **tempname); +int xcreate(char *path, int flags, int mode); +int xopen(char *path, int flags); +int xcreate_stdio(char *path, int flags, int mode); +int xopen_stdio(char *path, int flags); +int openro(char *path, int flags); +int xopenro(char *path); +void xpipe(int *pp); +void xclose(int fd); +int xdup(int fd); +int notstdio(int fd); +FILE *xfdopen(int fd, char *mode); +FILE *xfopen(char *path, char *mode); +size_t xread(int fd, void *buf, size_t len); +void xreadall(int fd, void *buf, size_t len); +void xwrite(int fd, void *buf, size_t len); +off_t xlseek(int fd, off_t offset, int whence); +char *xreadfile(char *name, char *buf, off_t len); +int xioctl(int fd, int request, void *data); +char *xgetcwd(void); +void xstat(char *path, struct stat *st); +char *xabspath(char *path, int exact); +void xchdir(char *path); +void xchroot(char *path); +struct passwd *xgetpwuid(uid_t uid); +struct group *xgetgrgid(gid_t gid); +struct passwd *xgetpwnam(char *name); +struct group *xgetgrnam(char *name); +unsigned xgetuid(char *name); +unsigned xgetgid(char *name); +void xsetuser(struct passwd *pwd); +char *xreadlink(char *name); +double xstrtod(char *s); +long xparsetime(char *arg, long units, long *fraction); +long long xparsemillitime(char *arg); +void xpidfile(char *name); +void xregcomp(regex_t *preg, char *rexec, int cflags); +char *xtzset(char *new); +void xsignal_flags(int signal, void *handler, int flags); +void xsignal(int signal, void *handler); +time_t xvali_date(struct tm *tm, char *str); +void xparsedate(char *str, time_t *t, unsigned *nano, int endian); +char *xgetline(FILE *fp, int *len); + +// lib.c +void verror_msg(char *msg, int err, va_list va); +void error_msg(char *msg, ...) printf_format; +void perror_msg(char *msg, ...) printf_format; +void error_exit(char *msg, ...) printf_format __attribute__((__noreturn__)); +void perror_exit(char *msg, ...) printf_format __attribute__((__noreturn__)); +void help_exit(char *msg, ...) printf_format __attribute__((__noreturn__)); +void error_msg_raw(char *msg); +void perror_msg_raw(char *msg); +void error_exit_raw(char *msg); +void perror_exit_raw(char *msg); +ssize_t readall(int fd, void *buf, size_t len); +ssize_t writeall(int fd, void *buf, size_t len); +off_t lskip(int fd, off_t offset); +#define MKPATHAT_MKLAST 1 +#define MKPATHAT_MAKE 2 +#define MKPATHAT_VERBOSE 4 +int mkpathat(int atfd, char *dir, mode_t lastmode, int flags); +int mkpath(char *dir); +struct string_list **splitpath(char *path, struct string_list **list); +char *readfd(int fd, char *ibuf, off_t *plen); +char *readfileat(int dirfd, char *name, char *buf, off_t *len); +char *readfile(char *name, char *buf, off_t len); +void msleep(long milliseconds); +void nanomove(struct timespec *ts, long long offset); +long long nanodiff(struct timespec *old, struct timespec *new); +int highest_bit(unsigned long l); +int64_t peek_le(void *ptr, unsigned size); +int64_t peek_be(void *ptr, unsigned size); +int64_t peek(void *ptr, unsigned size); +void poke_le(void *ptr, long long val, unsigned size); +void poke_be(void *ptr, long long val, unsigned size); +void poke(void *ptr, long long val, unsigned size); +struct string_list *find_in_path(char *path, char *filename); +long long estrtol(char *str, char **end, int base); +long long xstrtol(char *str, char **end, int base); +long long atolx(char *c); +long long atolx_range(char *numstr, long long low, long long high); +int stridx(char *haystack, char needle); +int utf8towc(wchar_t *wc, char *str, unsigned len); +char *strlower(char *s); +char *strafter(char *haystack, char *needle); +char *chomp(char *s); +int unescape(char c); +char *strend(char *str, char *suffix); +int strstart(char **a, char *b); +int strcasestart(char **a, char *b); +off_t fdlength(int fd); +void loopfiles_rw(char **argv, int flags, int permissions, + void (*function)(int fd, char *name)); +void loopfiles(char **argv, void (*function)(int fd, char *name)); +void loopfiles_lines(char **argv, void (*function)(char **pline, long len)); +long long sendfile_len(int in, int out, long long len, long long *consumed); +long long xsendfile_len(int in, int out, long long len); +void xsendfile_pad(int in, int out, long long len); +long long xsendfile(int in, int out); +int wfchmodat(int rc, char *name, mode_t mode); +int copy_tempfile(int fdin, char *name, char **tempname); +void delete_tempfile(int fdin, int fdout, char **tempname); +void replace_tempfile(int fdin, int fdout, char **tempname); +void crc_init(unsigned int *crc_table, int little_endian); +void base64_init(char *p); +int yesno(int def); +int fyesno(FILE *fp, int def); +int qstrcmp(const void *a, const void *b); +void create_uuid(char *uuid); +char *show_uuid(char *uuid); +char *next_printf(char *s, char **start); +struct passwd *bufgetpwuid(uid_t uid); +struct group *bufgetgrgid(gid_t gid); +int readlinkat0(int dirfd, char *path, char *buf, int len); +int readlink0(char *path, char *buf, int len); +int regexec0(regex_t *preg, char *string, long len, int nmatch, + regmatch_t pmatch[], int eflags); +char *getusername(uid_t uid); +char *getgroupname(gid_t gid); +void do_lines(int fd, char delim, void (*call)(char **pline, long len)); +long long millitime(void); +char *format_iso_time(char *buf, size_t len, struct timespec *ts); +void reset_env(struct passwd *p, int clear); +void loggit(int priority, char *format, ...); +unsigned tar_cksum(void *data); +int is_tar_header(void *pkt); +char *elf_arch_name(int type); + +#define HR_SPACE 1 // Space between number and units +#define HR_B 2 // Use "B" for single byte units +#define HR_1000 4 // Use decimal instead of binary units +int human_readable_long(char *buf, unsigned long long num, int dgt, int style); +int human_readable(char *buf, unsigned long long num, int style); + +// env.c + +long environ_bytes(); +void xsetenv(char *name, char *val); +void xunsetenv(char *name); +void xclearenv(void); + +// linestack.c + +struct linestack { + long len, max; + struct ptr_len idx[]; +}; + +void linestack_addstack(struct linestack **lls, struct linestack *throw, + long pos); +void linestack_insert(struct linestack **lls, long pos, char *line, long len); +void linestack_append(struct linestack **lls, char *line); +struct linestack *linestack_load(char *name); +int crunch_escape(FILE *out, int cols, int wc); +int crunch_rev_escape(FILE *out, int cols, int wc); +int crunch_str(char **str, int width, FILE *out, char *escmore, + int (*escout)(FILE *out, int cols, int wc)); +int draw_str(char *start, int width); +int utf8len(char *str); +int utf8skip(char *str, int width); +int draw_trim_esc(char *str, int padto, int width, char *escmore, + int (*escout)(FILE *out, int cols,int wc)); +int draw_trim(char *str, int padto, int width); + +// tty.c +int tty_fd(void); +int terminal_size(unsigned *xx, unsigned *yy); +int terminal_probesize(unsigned *xx, unsigned *yy); +#define KEY_UP 0 +#define KEY_DOWN 1 +#define KEY_RIGHT 2 +#define KEY_LEFT 3 +#define KEY_PGUP 4 +#define KEY_PGDN 5 +#define KEY_HOME 6 +#define KEY_END 7 +#define KEY_INSERT 8 +#define KEY_DELETE 9 +#define KEY_FN 10 // F1 = KEY_FN+1, F2 = KEY_FN+2, ... +#define KEY_SHIFT (1<<16) +#define KEY_CTRL (1<<17) +#define KEY_ALT (1<<18) +int scan_key(char *scratch, int timeout_ms); +int scan_key_getsize(char *scratch, int timeout_ms, unsigned *xx, unsigned *yy); +int set_terminal(int fd, int raw, int speed, struct termios *old); +void xset_terminal(int fd, int raw, int speed, struct termios *old); +void tty_esc(char *s); +void tty_jump(int x, int y); +void tty_reset(void); +void tty_sigreset(int i); +void start_redraw(unsigned *width, unsigned *height); + +// net.c + +union socksaddr { + struct sockaddr s; + struct sockaddr_in in; + struct sockaddr_in6 in6; +}; + +int xsocket(int domain, int type, int protocol); +void xsetsockopt(int fd, int level, int opt, void *val, socklen_t len); +struct addrinfo *xgetaddrinfo(char *host, char *port, int family, int socktype, + int protocol, int flags); +void xbind(int fd, const struct sockaddr *sa, socklen_t len); +void xconnect(int fd, const struct sockaddr *sa, socklen_t len); +int xconnectany(struct addrinfo *ai); +int xbindany(struct addrinfo *ai); +int xpoll(struct pollfd *fds, int nfds, int timeout); +int pollinate(int in1, int in2, int out1, int out2, int timeout, int shutdown_timeout); +char *ntop(struct sockaddr *sa); +void xsendto(int sockfd, void *buf, size_t len, struct sockaddr *dest); +int xrecvwait(int fd, char *buf, int len, union socksaddr *sa, int timeout); + +// password.c +int get_salt(char *salt, char * algo); + +// commas.c +void comma_args(struct arg_list *al, void *data, char *err, + char *(*callback)(void *data, char *str, int len)); +void comma_collate(char **old, char *new); +char *comma_iterate(char **list, int *len); +int comma_scan(char *optlist, char *opt, int clean); +int comma_scanall(char *optlist, char *scanlist); +int comma_remove(char *optlist, char *opt); + +// deflate.c + +long long gzip_fd(int infd, int outfd); +long long gunzip_fd(int infd, int outfd); + +// getmountlist.c +struct mtab_list { + struct mtab_list *next, *prev; + struct stat stat; + struct statvfs statvfs; + char *dir; + char *device; + char *opts; + char type[0]; +}; + +int mountlist_istype(struct mtab_list *ml, char *typelist); +struct mtab_list *xgetmountlist(char *path); + +// signal + +void generic_signal(int signal); +void exit_signal(int signal); +void sigatexit(void *handler); +void list_signals(); + +mode_t string_to_mode(char *mode_str, mode_t base); +void mode_to_string(mode_t mode, char *buf); +char *getbasename(char *name); +char *fileunderdir(char *file, char *dir); +char *relative_path(char *from, char *to); +void names_to_pid(char **names, int (*callback)(pid_t pid, char *name), + int scripts); + +pid_t __attribute__((returns_twice)) xvforkwrap(pid_t pid); +#define XVFORK() xvforkwrap(vfork()) + +// Wrapper to make xfuncs() return (via siglongjmp) instead of exiting. +// Assigns true/false "did it exit" value to first argument. +#define WOULD_EXIT(y, x) do { sigjmp_buf _noexit; \ + int _noexit_res; \ + toys.rebound = &_noexit; \ + _noexit_res = sigsetjmp(_noexit, 1); \ + if (!_noexit_res) do {x;} while(0); \ + toys.rebound = 0; \ + y = _noexit_res; \ +} while(0) + +// Wrapper that discards true/false "did it exit" value. +#define NOEXIT(x) WOULD_EXIT(_noexit_res, x) + +#define minof(a, b) ({typeof(a) aa = (a); typeof(b) bb = (b); aabb ? aa : bb;}) + +// Functions in need of further review/cleanup +#include "lib/pending.h" diff --git a/aosp/external/toybox/lib/linestack.c b/aosp/external/toybox/lib/linestack.c new file mode 100644 index 0000000000000000000000000000000000000000..0fc83e6b6a56ba3bdb7d7eb401b5270d844e9b90 --- /dev/null +++ b/aosp/external/toybox/lib/linestack.c @@ -0,0 +1,198 @@ +#include "toys.h" + +// The design idea here is indexing a big blob of (potentially mmaped) data +// instead of copying the data into a zillion seperate malloc()s. + +// A linestack is an array of struct ptr_len, with a currently used len +// and max tracking the memory allocation. This indexes existing string data, +// the lifetime of which is tracked externally. + +// Insert one stack into another before position in old stack. +// (Does not copy contents of strings, just shuffles index array contents.) +void linestack_addstack(struct linestack **lls, struct linestack *throw, + long pos) +{ + struct linestack *catch = *lls; + + if (CFG_TOYBOX_DEBUG) + if (pos > catch->len) error_exit("linestack_addstack past end."); + + // Make a hole, allocating more space if necessary. + if (catch->len+throw->len >= catch->max) { + // New size rounded up to next multiple of 64, allocate and copy start. + catch->max = ((catch->len+throw->len)|63)+1; + *lls = xmalloc(sizeof(struct linestack)+catch->max*sizeof(struct ptr_len)); + memcpy(*lls, catch, sizeof(struct linestack)+pos*sizeof(struct ptr_len)); + } + + // Copy end (into new allocation if necessary) + if (pos != catch->len) + memmove((*lls)->idx+pos+throw->len, catch->idx+pos, + (catch->len-pos)*sizeof(struct ptr_len)); + + // Cleanup if we had to realloc. + if (catch != *lls) { + free(catch); + catch = *lls; + } + + // Copy new chunk we made space for + memcpy(catch->idx+pos, throw->idx, throw->len*sizeof(struct ptr_len)); + catch->len += throw->len; +} + +// Insert one line/len into a linestack at pos +void linestack_insert(struct linestack **lls, long pos, char *line, long len) +{ + // alloca() was in 32V and Turbo C for DOS, but isn't in posix or c99. + // This allocates enough memory for the linestack to have one ptr_len. + // (Even if a compiler adds gratuitous padidng that just makes it bigger.) + struct { + struct ptr_len pl; + struct linestack ls; + } ls; + + ls.ls.len = ls.ls.max = 1; + ls.ls.idx[0].ptr = line; + ls.ls.idx[0].len = len; + linestack_addstack(lls, &ls.ls, pos); +} + +void linestack_append(struct linestack **lls, char *line) +{ + linestack_insert(lls, (*lls)->len, line, strlen(line)); +} + +struct linestack *linestack_load(char *name) +{ + FILE *fp = fopen(name, "r"); + struct linestack *ls; + + if (!fp) return 0; + + ls = xzalloc(sizeof(struct linestack)); + + for (;;) { + char *line = 0; + ssize_t len; + + if ((len = getline(&line, (void *)&len, fp))<1) break; + if (line[len-1]=='\n') len--; + linestack_insert(&ls, ls->len, line, len); + } + fclose(fp); + + return ls; +} + +// Show width many columns, negative means from right edge, out=0 just measure +// if escout, send it unprintable chars, otherwise pass through raw data. +// Returns width in columns, moves *str to end of data consumed. +int crunch_str(char **str, int width, FILE *out, char *escmore, + int (*escout)(FILE *out, int cols, int wc)) +{ + int columns = 0, col, bytes; + char *start, *end; + + for (end = start = *str; *end; columns += col, end += bytes) { + wchar_t wc; + + if ((bytes = utf8towc(&wc, end, 4))>0 && (col = wcwidth(wc))>=0) { + if (!escmore || wc>255 || !strchr(escmore, wc)) { + if (width-columns if invalid UTF8, U+XXXX if UTF8 !iswprint() +int crunch_escape(FILE *out, int cols, int wc) +{ + char buf[11]; + int rc; + + if (wc<' ') rc = sprintf(buf, "^%c", '@'+wc); + else if (wc<256) rc = sprintf(buf, "<%02X>", wc); + else rc = sprintf(buf, "U+%04X", wc); + + if (rc > cols) buf[rc = cols] = 0; + if (out) fputs(buf, out); + + return rc; +} + +// Display "standard" escapes in reverse video. +int crunch_rev_escape(FILE *out, int cols, int wc) +{ + int rc; + + tty_esc("7m"); + rc = crunch_escape(out, cols, wc); + tty_esc("27m"); + + return rc; +} + +// Write width chars at start of string to strdout with standard escapes +// Returns length in columns so caller can pad it out with spaces. +int draw_str(char *start, int width) +{ + return crunch_str(&start, width, stdout, 0, crunch_rev_escape); +} + +// Return utf8 columns +int utf8len(char *str) +{ + return crunch_str(&str, INT_MAX, 0, 0, crunch_rev_escape); +} + +// Return bytes used by (up to) this many columns +int utf8skip(char *str, int width) +{ + char *s = str; + + crunch_str(&s, width, 0, 0, crunch_rev_escape); + + return s-str; +} + +// Print utf8 to stdout with standard escapes, trimmed to width and padded +// out to padto. If padto<0 left justify. Returns columns printed +int draw_trim_esc(char *str, int padto, int width, char *escmore, + int (*escout)(FILE *out, int cols, int wc)) +{ + int apad = abs(padto), len = utf8len(str); + + if (padto>=0 && len>width) str += utf8skip(str, len-width); + if (len>width) len = width; + + // Left pad if right justified + if (padto>0 && apad>len) printf("%*s", apad-len, ""); + crunch_str(&str, len, stdout, 0, crunch_rev_escape); + if (padto<0 && apad>len) printf("%*s", apad-len, ""); + + return (apad > len) ? apad : len; +} + +// draw_trim_esc() with default escape +int draw_trim(char *str, int padto, int width) +{ + return draw_trim_esc(str, padto, width, 0, 0); +} diff --git a/aosp/external/toybox/lib/llist.c b/aosp/external/toybox/lib/llist.c new file mode 100644 index 0000000000000000000000000000000000000000..45fe014d5c19878938e6f879424ea004bcf77cf2 --- /dev/null +++ b/aosp/external/toybox/lib/llist.c @@ -0,0 +1,148 @@ +/* llist.c - Linked list functions + * + * Linked list structures have a next pointer as their first element. + */ + +#include "toys.h" + +// Callback function to free data pointer of double_list or arg_list + +void llist_free_arg(void *node) +{ + struct arg_list *d = node; + + free(d->arg); + free(d); +} + +void llist_free_double(void *node) +{ + struct double_list *d = node; + + free(d->data); + free(d); +} + +// Call a function (such as free()) on each element of a linked list. +void llist_traverse(void *list, void (*using)(void *node)) +{ + void *old = list; + + while (list) { + void *pop = llist_pop(&list); + using(pop); + + // End doubly linked list too. + if (old == list) break; + } +} + +// Return the first item from the list, advancing the list (which must be called +// as &list) +void *llist_pop(void *list) +{ + // I'd use a void ** for the argument, and even accept the typecast in all + // callers as documentation you need the &, except the stupid compiler + // would then scream about type-punned pointers. Screw it. + void **llist = (void **)list; + void **next = (void **)*llist; + *llist = *next; + + return (void *)next; +} + +// Remove first item from &list and return it +void *dlist_pop(void *list) +{ + struct double_list **pdlist = (struct double_list **)list, *dlist = *pdlist; + + if (!dlist) return 0; + if (dlist->next == dlist) *pdlist = 0; + else { + if (dlist->next) dlist->next->prev = dlist->prev; + if (dlist->prev) dlist->prev->next = dlist->next; + *pdlist = dlist->next; + } + + return dlist; +} + +// remove last item from &list and return it (stack pop) +void *dlist_lpop(void *list) +{ + struct double_list *dl = *(struct double_list **)list; + void *v = 0; + + if (dl) { + dl = dl->prev; + v = dlist_pop(&dl); + if (!dl) *(void **)list = 0; + } + + return v; +} + +void dlist_add_nomalloc(struct double_list **list, struct double_list *new) +{ + if (*list) { + new->next = *list; + new->prev = (*list)->prev; + (*list)->prev->next = new; + (*list)->prev = new; + } else *list = new->next = new->prev = new; +} + + +// Add an entry to the end of a doubly linked list +struct double_list *dlist_add(struct double_list **list, char *data) +{ + struct double_list *new = xmalloc(sizeof(struct double_list)); + + new->data = data; + dlist_add_nomalloc(list, new); + + return new; +} + +// Terminate circular list for traversal in either direction. Returns end *. +void *dlist_terminate(void *list) +{ + struct double_list *end = list; + + if (!end || !end->prev) return 0; + + end = end->prev; + end->next->prev = 0; + end->next = 0; + + return end; +} + +// Find num in cache +struct num_cache *get_num_cache(struct num_cache *cache, long long num) +{ + while (cache) { + if (num==cache->num) return cache; + cache = cache->next; + } + + return 0; +} + +// Uniquely add num+data to cache. Updates *cache, returns pointer to existing +// entry if it was already there. +struct num_cache *add_num_cache(struct num_cache **cache, long long num, + void *data, int len) +{ + struct num_cache *old = get_num_cache(*cache, num); + + if (old) return old; + + old = xzalloc(sizeof(struct num_cache)+len); + old->next = *cache; + old->num = num; + memcpy(old->data, data, len); + *cache = old; + + return 0; +} diff --git a/aosp/external/toybox/lib/lsm.h b/aosp/external/toybox/lib/lsm.h new file mode 100644 index 0000000000000000000000000000000000000000..88bf347046488d484a32a9497c66028b1fbcb695 --- /dev/null +++ b/aosp/external/toybox/lib/lsm.h @@ -0,0 +1,115 @@ +/* lsm.h - header file for lib directory + * + * Copyright 2015 Rob Landley + */ + +#if CFG_TOYBOX_SELINUX +#include +#else +#define is_selinux_enabled() 0 +#define setfscreatecon(...) (-1) +#define getcon(...) (-1) +#define getfilecon(...) (-1) +#define lgetfilecon(...) (-1) +#define fgetfilecon(...) (-1) +#define setfilecon(...) (-1) +#define lsetfilecon(...) (-1) +#define fsetfilecon(...) (-1) +#endif + +#if CFG_TOYBOX_SMACK +#include +#include +#else +#ifndef XATTR_NAME_SMACK +#define XATTR_NAME_SMACK 0 +#endif +#define smack_smackfs_path(...) (-1) +#define smack_new_label_from_self(...) (-1) +#define smack_new_label_from_path(...) (-1) +#define smack_new_label_from_file(...) (-1) +#define smack_set_label_for_self(...) (-1) +#define smack_set_label_for_path(...) (-1) +#define smack_set_label_for_file(...) (-1) +#endif + +// This turns into "return 0" when no LSM and lets code optimize out. +static inline int lsm_enabled(void) +{ + if (CFG_TOYBOX_SMACK) return !!smack_smackfs_path(); + else return is_selinux_enabled() == 1; +} + +static inline char *lsm_name(void) +{ + if (CFG_TOYBOX_SMACK) return "Smack"; + if (CFG_TOYBOX_SELINUX) return "SELinux"; + + return "LSM"; +} + +// Fetch this process's lsm context +static inline char *lsm_context(void) +{ + int ok = 0; + char *result = 0; + + if (CFG_TOYBOX_SMACK) ok = smack_new_label_from_self(&result) > 0; + else ok = getcon(&result) == 0; + + return ok ? result : strdup("?"); +} + +// Set default label to apply to newly created stuff (NULL to clear it) +static inline int lsm_set_create(char *context) +{ + if (CFG_TOYBOX_SMACK) return smack_set_label_for_self(context); + else return setfscreatecon(context); +} + +// Label a file, following symlinks +static inline int lsm_set_context(char *filename, char *context) +{ + if (CFG_TOYBOX_SMACK) + return smack_set_label_for_path(filename, XATTR_NAME_SMACK, 1, context); + else return setfilecon(filename, context); +} + +// Label a file, don't follow symlinks +static inline int lsm_lset_context(char *filename, char *context) +{ + if (CFG_TOYBOX_SMACK) + return smack_set_label_for_path(filename, XATTR_NAME_SMACK, 0, context); + else return lsetfilecon(filename, context); +} + +// Label a file by filehandle +static inline int lsm_fset_context(int file, char *context) +{ + if (CFG_TOYBOX_SMACK) + return smack_set_label_for_file(file, XATTR_NAME_SMACK, context); + else return fsetfilecon(file, context); +} + +// returns -1 in case of error or else the length of the context */ +// context can be NULL to get the length only */ +static inline int lsm_get_context(char *filename, char **context) +{ + if (CFG_TOYBOX_SMACK) + return smack_new_label_from_path(filename, XATTR_NAME_SMACK, 1, context); + else return getfilecon(filename, context); +} + +static inline int lsm_lget_context(char *filename, char **context) +{ + if (CFG_TOYBOX_SMACK) + return smack_new_label_from_path(filename, XATTR_NAME_SMACK, 0, context); + else return lgetfilecon(filename, context); +} + +static inline int lsm_fget_context(int file, char **context) +{ + if (CFG_TOYBOX_SMACK) + return smack_new_label_from_file(file, XATTR_NAME_SMACK, context); + return fgetfilecon(file, context); +} diff --git a/aosp/external/toybox/lib/net.c b/aosp/external/toybox/lib/net.c new file mode 100644 index 0000000000000000000000000000000000000000..023544447b35f1497163abef8daee65e79f66f19 --- /dev/null +++ b/aosp/external/toybox/lib/net.c @@ -0,0 +1,172 @@ +#include "toys.h" + +int xsocket(int domain, int type, int protocol) +{ + int fd = socket(domain, type, protocol); + + if (fd < 0) perror_exit("socket %x %x", type, protocol); + fcntl(fd, F_SETFD, FD_CLOEXEC); + + return fd; +} + +void xsetsockopt(int fd, int level, int opt, void *val, socklen_t len) +{ + if (-1 == setsockopt(fd, level, opt, val, len)) perror_exit("setsockopt"); +} + +// if !host bind to all local interfaces +struct addrinfo *xgetaddrinfo(char *host, char *port, int family, int socktype, + int protocol, int flags) +{ + struct addrinfo info, *ai; + int rc; + + memset(&info, 0, sizeof(struct addrinfo)); + info.ai_family = family; + info.ai_socktype = socktype; + info.ai_protocol = protocol; + info.ai_flags = flags; + if (!host) info.ai_flags |= AI_PASSIVE; + + rc = getaddrinfo(host, port, &info, &ai); + if (rc || !ai) + error_exit("%s%s%s: %s", host ? host : "*", port ? ":" : "", + port ? port : "", rc ? gai_strerror(rc) : "not found"); + + return ai; +} + +static int xconnbind(struct addrinfo *ai_arg, int dobind) +{ + struct addrinfo *ai; + int fd = -1, one = 1; + + // Try all the returned addresses. Report errors if last entry can't connect. + for (ai = ai_arg; ai; ai = ai->ai_next) { + fd = (ai->ai_next ? socket : xsocket)(ai->ai_family, ai->ai_socktype, + ai->ai_protocol); + xsetsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)); + if (!(dobind ? bind : connect)(fd, ai->ai_addr, ai->ai_addrlen)) break; + else if (!ai->ai_next) perror_exit_raw(dobind ? "bind" : "connect"); + close(fd); + } + freeaddrinfo(ai_arg); + + return fd; +} + +int xconnectany(struct addrinfo *ai) +{ + return xconnbind(ai, 0); +} + + +int xbindany(struct addrinfo *ai) +{ + return xconnbind(ai, 1); +} + +void xbind(int fd, const struct sockaddr *sa, socklen_t len) +{ + if (bind(fd, sa, len)) perror_exit("bind"); +} + +void xconnect(int fd, const struct sockaddr *sa, socklen_t len) +{ + if (connect(fd, sa, len)) perror_exit("connect"); +} + +int xpoll(struct pollfd *fds, int nfds, int timeout) +{ + int i; + long long now, then = timeout>0 ? millitime() : 0; + + for (;;) { + if (0<=(i = poll(fds, nfds, timeout)) || toys.signal) return i; + if (errno != EINTR && errno != ENOMEM) perror_exit("xpoll"); + else { + now = millitime(); + timeout -= now-then; + then = now; + } + } +} + +// Loop forwarding data from in1 to out1 and in2 to out2, handling +// half-connection shutdown. timeouts return if no data for X ms. +// Returns 0: both closed, 1 shutdown_timeout, 2 timeout +int pollinate(int in1, int in2, int out1, int out2, int timeout, int shutdown_timeout) +{ + struct pollfd pollfds[2]; + int i, pollcount = 2; + + memset(pollfds, 0, 2*sizeof(struct pollfd)); + pollfds[0].events = pollfds[1].events = POLLIN; + pollfds[0].fd = in1; + pollfds[1].fd = in2; + + // Poll loop copying data from each fd to the other one. + for (;;) { + if (!xpoll(pollfds, pollcount, timeout)) return pollcount; + + for (i=0; isa_family == AF_INET) addr = &((struct sockaddr_in *)sa)->sin_addr; + else addr = &((struct sockaddr_in6 *)sa)->sin6_addr; + + inet_ntop(sa->sa_family, addr, libbuf, sizeof(libbuf)); + + return libbuf; +} + +void xsendto(int sockfd, void *buf, size_t len, struct sockaddr *dest) +{ + int rc = sendto(sockfd, buf, len, 0, dest, + dest->sa_family == AF_INET ? sizeof(struct sockaddr_in) : + sizeof(struct sockaddr_in6)); + + if (rc != len) perror_exit("sendto"); +} + +// xrecvfrom with timeout in milliseconds +int xrecvwait(int fd, char *buf, int len, union socksaddr *sa, int timeout) +{ + socklen_t sl = sizeof(*sa); + + if (timeout >= 0) { + struct pollfd pfd; + + pfd.fd = fd; + pfd.events = POLLIN; + if (!xpoll(&pfd, 1, timeout)) return 0; + } + + len = recvfrom(fd, buf, len, 0, (void *)sa, &sl); + if (len<0) perror_exit("recvfrom"); + + return len; +} diff --git a/aosp/external/toybox/lib/password.c b/aosp/external/toybox/lib/password.c new file mode 100644 index 0000000000000000000000000000000000000000..432905cc441370944e9ed8f66e69c968087c3d24 --- /dev/null +++ b/aosp/external/toybox/lib/password.c @@ -0,0 +1,200 @@ +/* password.c - password read/update helper functions. + * + * Copyright 2012 Ashwini Kumar + * + * TODO: cleanup + */ + +#include "toys.h" +#include + +// generate ID prefix and random salt for given encryption algorithm. +int get_salt(char *salt, char *algo) +{ + struct { + char *type, id, len; + } al[] = {{"des", 0, 2}, {"md5", 1, 8}, {"sha256", 5, 16}, {"sha512", 6, 16}}; + int i; + + for (i = 0; i < ARRAY_LEN(al); i++) { + if (!strcmp(algo, al[i].type)) { + int len = al[i].len; + char *s = salt; + + if (al[i].id) s += sprintf(s, "$%c$", '0'+al[i].id); + + // Read appropriate number of random bytes for salt + xgetrandom(libbuf, ((len*6)+7)/8, 0); + + // Grab 6 bit chunks and convert to characters in ./0-9a-zA-Z + for (i=0; i> (bitpos&7)) & 0x3f; + bits += 46; + if (bits > 57) bits += 7; + if (bits > 90) bits += 6; + + s[i] = bits; + } + salt[len] = 0; + + return s-salt; + } + } + + return -1; +} + +// Prompt with mesg, read password into buf, return 0 for success 1 for fail +int read_password(char *buf, int buflen, char *mesg) +{ + struct termios oldtermio; + struct sigaction sa, oldsa; + int i, ret = 1; + + // NOP signal handler to return from the read. Use sigaction() instead + // of xsignal() because we want to restore the old handler afterwards. + memset(&sa, 0, sizeof(sa)); + sa.sa_handler = generic_signal; + sigaction(SIGINT, &sa, &oldsa); + + tcflush(0, TCIFLUSH); + xset_terminal(0, 1, 0, &oldtermio); + + xprintf("%s", mesg); + + for (i=0; i < buflen-1; i++) { + if ((ret = read(0, buf+i, 1)) < 0 || (!ret && !i)) { + i = 0; + ret = 1; + + break; + } else if (!ret || buf[i] == '\n' || buf[i] == '\r') { + ret = 0; + + break; + } else if (buf[i] == 8 || buf[i] == 127) i -= i ? 2 : 1; + } + + // Restore terminal/signal state, terminate string + sigaction(SIGINT, &oldsa, NULL); + tcsetattr(0, TCSANOW, &oldtermio); + buf[i] = 0; + xputc('\n'); + + return ret; +} + +static char *get_nextcolon(char *line, int cnt) +{ + while (cnt--) { + if (!(line = strchr(line, ':'))) error_exit("Invalid Entry\n"); + line++; //jump past the colon + } + return line; +} + +/*update_password is used by multiple utilities to update /etc/passwd, + * /etc/shadow, /etc/group and /etc/gshadow files, + * which are used as user, group databeses + * entry can be + * 1. encrypted password, when updating user password. + * 2. complete entry for user details, when creating new user + * 3. group members comma',' separated list, when adding user to group + * 4. complete entry for group details, when creating new group + * 5. entry = NULL, delete the named entry user/group + */ +int update_password(char *filename, char* username, char* entry) +{ + char *filenamesfx = NULL, *namesfx = NULL, *shadow = NULL, + *sfx = NULL, *line = NULL; + FILE *exfp, *newfp; + int ret = -1, found = 0, n; + struct flock lock; + size_t allocated_length; + + shadow = strstr(filename, "shadow"); + filenamesfx = xmprintf("%s+", filename); + sfx = strchr(filenamesfx, '+'); + + exfp = fopen(filename, "r+"); + if (!exfp) { + perror_msg("Couldn't open file %s",filename); + goto free_storage; + } + + *sfx = '-'; + unlink(filenamesfx); + ret = link(filename, filenamesfx); + if (ret < 0) error_msg("can't create backup file"); + + *sfx = '+'; + lock.l_type = F_WRLCK; + lock.l_whence = SEEK_SET; + lock.l_start = 0; + lock.l_len = 0; + + ret = fcntl(fileno(exfp), F_SETLK, &lock); + if (ret < 0) perror_msg("Couldn't lock file %s",filename); + + lock.l_type = F_UNLCK; //unlocking at a later stage + + newfp = fopen(filenamesfx, "w+"); + if (!newfp) { + error_msg("couldn't open file for writing"); + ret = -1; + fclose(exfp); + goto free_storage; + } + + ret = 0; + namesfx = xmprintf("%s:",username); + while ((n = getline(&line, &allocated_length, exfp)) > 0) { + line[n-1] = 0; + if (strncmp(line, namesfx, strlen(namesfx))) + fprintf(newfp, "%s\n", line); + else if (entry) { + char *current_ptr = NULL; + + found = 1; + if (!strcmp(toys.which->name, "passwd")) { + fprintf(newfp, "%s%s:",namesfx, entry); + current_ptr = get_nextcolon(line, 2); //past passwd + if (shadow) { + fprintf(newfp, "%u:",(unsigned)(time(NULL))/(24*60*60)); + current_ptr = get_nextcolon(current_ptr, 1); + fprintf(newfp, "%s\n",current_ptr); + } else fprintf(newfp, "%s\n",current_ptr); + } else if (!strcmp(toys.which->name, "groupadd") || + !strcmp(toys.which->name, "addgroup") || + !strcmp(toys.which->name, "delgroup") || + !strcmp(toys.which->name, "groupdel")){ + current_ptr = get_nextcolon(line, 3); //past gid/admin list + *current_ptr = '\0'; + fprintf(newfp, "%s", line); + fprintf(newfp, "%s\n", entry); + } + } + } + free(line); + free(namesfx); + if (!found && entry) fprintf(newfp, "%s\n", entry); + fcntl(fileno(exfp), F_SETLK, &lock); + fclose(exfp); + + errno = 0; + fflush(newfp); + fsync(fileno(newfp)); + fclose(newfp); + rename(filenamesfx, filename); + if (errno) { + perror_msg("File Writing/Saving failed: "); + unlink(filenamesfx); + ret = -1; + } + +free_storage: + free(filenamesfx); + return ret; +} diff --git a/aosp/external/toybox/lib/pending.h b/aosp/external/toybox/lib/pending.h new file mode 100644 index 0000000000000000000000000000000000000000..3c563947f5c01db9817e6a38dc48cfb8f98a0690 --- /dev/null +++ b/aosp/external/toybox/lib/pending.h @@ -0,0 +1,13 @@ +// pending.h - header for pending.c + +// password.c +#define MAX_SALT_LEN 20 //3 for id, 16 for key, 1 for '\0' +int read_password(char * buff, int buflen, char* mesg); +int update_password(char *filename, char* username, char* encrypted); + +// lib.c +// This should be switched to posix-2008 getline() +char *get_line(int fd); + + +// TODO this goes away when lib/password.c cleaned up diff --git a/aosp/external/toybox/lib/portability.c b/aosp/external/toybox/lib/portability.c new file mode 100644 index 0000000000000000000000000000000000000000..28aaf824ba1d2f919ed84afbd4081ba9a0b9002f --- /dev/null +++ b/aosp/external/toybox/lib/portability.c @@ -0,0 +1,577 @@ +/* portability.c - code to workaround the deficiencies of various platforms. + * + * Copyright 2012 Rob Landley + * Copyright 2012 Georgi Chorbadzhiyski + */ + +#include "toys.h" + +// We can't fork() on nommu systems, and vfork() requires an exec() or exit() +// before resuming the parent (because they share a heap until then). And no, +// we can't implement our own clone() call that does the equivalent of fork() +// because nommu heaps use physical addresses so if we copy the heap all our +// pointers are wrong. (You need an mmu in order to map two heaps to the same +// address range without interfering with each other.) In the absence of +// a portable way to tell malloc() to start a new heap without freeing the old +// one, you pretty much need the exec().) + +// So we exec ourselves (via /proc/self/exe, if anybody knows a way to +// re-exec self without depending on the filesystem, I'm all ears), +// and use the arguments to signal reentry. + +#if CFG_TOYBOX_FORK +pid_t xfork(void) +{ + pid_t pid = fork(); + + if (pid < 0) perror_exit("fork"); + + return pid; +} +#endif + +int xgetrandom(void *buf, unsigned buflen, unsigned flags) +{ + int fd; + +#if CFG_TOYBOX_GETRANDOM + if (buflen == getrandom(buf, buflen, flags&~WARN_ONLY)) return 1; + if (errno!=ENOSYS && !(flags&WARN_ONLY)) perror_exit("getrandom"); +#endif + fd = xopen(flags ? "/dev/random" : "/dev/urandom",O_RDONLY|(flags&WARN_ONLY)); + if (fd == -1) return 0; + xreadall(fd, buf, buflen); + close(fd); + + return 1; +} + +// Get list of mounted filesystems, including stat and statvfs info. +// Returns a reversed list, which is good for finding overmounts and such. + +#if defined(__APPLE__) || defined(__FreeBSD__) + +#include + +struct mtab_list *xgetmountlist(char *path) +{ + struct mtab_list *mtlist = 0, *mt; + struct statfs *entries; + int i, count; + + if (path) error_exit("xgetmountlist"); + if ((count = getmntinfo(&entries, 0)) == 0) perror_exit("getmntinfo"); + + // The "test" part of the loop is done before the first time through and + // again after each "increment", so putting the actual load there avoids + // duplicating it. If the load was NULL, the loop stops. + + for (i = 0; i < count; ++i) { + struct statfs *me = &entries[i]; + + mt = xzalloc(sizeof(struct mtab_list) + strlen(me->f_fstypename) + + strlen(me->f_mntonname) + strlen(me->f_mntfromname) + strlen("") + 4); + dlist_add_nomalloc((void *)&mtlist, (void *)mt); + + // Collect details about mounted filesystem. + // Don't report errors, just leave data zeroed. + stat(me->f_mntonname, &(mt->stat)); + statvfs(me->f_mntonname, &(mt->statvfs)); + + // Remember information from struct statfs. + mt->dir = stpcpy(mt->type, me->f_fstypename)+1; + mt->device = stpcpy(mt->dir, me->f_mntonname)+1; + mt->opts = stpcpy(mt->device, me->f_mntfromname)+1; + strcpy(mt->opts, ""); /* TODO: reverse from f_flags? */ + } + + return mtlist; +} + +#else + +#include + +static void octal_deslash(char *s) +{ + char *o = s; + + while (*s) { + if (*s == '\\') { + int i, oct = 0; + + for (i = 1; i < 4; i++) { + if (!isdigit(s[i])) break; + oct = (oct<<3)+s[i]-'0'; + } + if (i == 4) { + *o++ = oct; + s += i; + continue; + } + } + *o++ = *s++; + } + + *o = 0; +} + +// Check if this type matches list. +// Odd syntax: typelist all yes = if any, typelist all no = if none. + +int mountlist_istype(struct mtab_list *ml, char *typelist) +{ + int len, skip; + char *t; + + if (!typelist) return 1; + + skip = strncmp(typelist, "no", 2); + + for (;;) { + if (!(t = comma_iterate(&typelist, &len))) break; + if (!skip) { + // If one -t starts with "no", the rest must too + if (strncmp(t, "no", 2)) error_exit("bad typelist"); + if (!strncmp(t+2, ml->type, len-2)) { + skip = 1; + break; + } + } else if (!strncmp(t, ml->type, len) && !ml->type[len]) { + skip = 0; + break; + } + } + + return !skip; +} + +struct mtab_list *xgetmountlist(char *path) +{ + struct mtab_list *mtlist = 0, *mt; + struct mntent *me; + FILE *fp; + char *p = path ? path : "/proc/mounts"; + + if (!(fp = setmntent(p, "r"))) perror_exit("bad %s", p); + + // The "test" part of the loop is done before the first time through and + // again after each "increment", so putting the actual load there avoids + // duplicating it. If the load was NULL, the loop stops. + + while ((me = getmntent(fp))) { + mt = xzalloc(sizeof(struct mtab_list) + strlen(me->mnt_fsname) + + strlen(me->mnt_dir) + strlen(me->mnt_type) + strlen(me->mnt_opts) + 4); + dlist_add_nomalloc((void *)&mtlist, (void *)mt); + + // Collect details about mounted filesystem + // Don't report errors, just leave data zeroed + if (!path) { + stat(me->mnt_dir, &(mt->stat)); + statvfs(me->mnt_dir, &(mt->statvfs)); + } + + // Remember information from /proc/mounts + mt->dir = stpcpy(mt->type, me->mnt_type)+1; + mt->device = stpcpy(mt->dir, me->mnt_dir)+1; + mt->opts = stpcpy(mt->device, me->mnt_fsname)+1; + strcpy(mt->opts, me->mnt_opts); + + octal_deslash(mt->dir); + octal_deslash(mt->device); + } + endmntent(fp); + + return mtlist; +} + +#endif + +#ifdef __APPLE__ + +#include + +struct xnotify *xnotify_init(int max) +{ + struct xnotify *not = xzalloc(sizeof(struct xnotify)); + + not->max = max; + if ((not->kq = kqueue()) == -1) perror_exit("kqueue"); + not->paths = xmalloc(max * sizeof(char *)); + not->fds = xmalloc(max * sizeof(int)); + + return not; +} + +int xnotify_add(struct xnotify *not, int fd, char *path) +{ + struct kevent event; + + if (not->count == not->max) error_exit("xnotify_add overflow"); + EV_SET(&event, fd, EVFILT_VNODE, EV_ADD|EV_CLEAR, NOTE_WRITE, 0, NULL); + if (kevent(not->kq, &event, 1, NULL, 0, NULL) == -1 || event.flags & EV_ERROR) + return -1; + not->paths[not->count] = path; + not->fds[not->count++] = fd; + + return 0; +} + +int xnotify_wait(struct xnotify *not, char **path) +{ + struct kevent event; + int i; + + for (;;) { + if (kevent(not->kq, NULL, 0, &event, 1, NULL) != -1) { + // We get the fd for free, but still have to search for the path. + for (i = 0; icount; i++) if (not->fds[i]==event.ident) { + *path = not->paths[i]; + + return event.ident; + } + } + } +} + +#else + +#include + +struct xnotify *xnotify_init(int max) +{ + struct xnotify *not = xzalloc(sizeof(struct xnotify)); + + not->max = max; + if ((not->kq = inotify_init()) < 0) perror_exit("inotify_init"); + not->paths = xmalloc(max * sizeof(char *)); + not->fds = xmalloc(max * 2 * sizeof(int)); + + return not; +} + +int xnotify_add(struct xnotify *not, int fd, char *path) +{ + int i = 2*not->count; + + if (not->max == not->count) error_exit("xnotify_add overflow"); + if ((not->fds[i] = inotify_add_watch(not->kq, path, IN_MODIFY))==-1) + return -1; + not->fds[i+1] = fd; + not->paths[not->count++] = path; + + return 0; +} + +int xnotify_wait(struct xnotify *not, char **path) +{ + struct inotify_event ev; + int i; + + for (;;) { + if (sizeof(ev)!=read(not->kq, &ev, sizeof(ev))) perror_exit("inotify"); + + for (i = 0; icount; i++) if (ev.wd==not->fds[2*i]) { + *path = not->paths[i]; + + return not->fds[2*i+1]; + } + } +} + +#endif + +#ifdef __APPLE__ + +ssize_t xattr_get(const char *path, const char *name, void *value, size_t size) +{ + return getxattr(path, name, value, size, 0, 0); +} + +ssize_t xattr_lget(const char *path, const char *name, void *value, size_t size) +{ + return getxattr(path, name, value, size, 0, XATTR_NOFOLLOW); +} + +ssize_t xattr_fget(int fd, const char *name, void *value, size_t size) +{ + return fgetxattr(fd, name, value, size, 0, 0); +} + +ssize_t xattr_list(const char *path, char *list, size_t size) +{ + return listxattr(path, list, size, 0); +} + +ssize_t xattr_llist(const char *path, char *list, size_t size) +{ + return listxattr(path, list, size, XATTR_NOFOLLOW); +} + +ssize_t xattr_flist(int fd, char *list, size_t size) +{ + return flistxattr(fd, list, size, 0); +} + +ssize_t xattr_set(const char* path, const char* name, + const void* value, size_t size, int flags) +{ + return setxattr(path, name, value, size, 0, flags); +} + +ssize_t xattr_lset(const char* path, const char* name, + const void* value, size_t size, int flags) +{ + return setxattr(path, name, value, size, 0, flags | XATTR_NOFOLLOW); +} + +ssize_t xattr_fset(int fd, const char* name, + const void* value, size_t size, int flags) +{ + return fsetxattr(fd, name, value, size, 0, flags); +} + +#else + +ssize_t xattr_get(const char *path, const char *name, void *value, size_t size) +{ + return getxattr(path, name, value, size); +} + +ssize_t xattr_lget(const char *path, const char *name, void *value, size_t size) +{ + return lgetxattr(path, name, value, size); +} + +ssize_t xattr_fget(int fd, const char *name, void *value, size_t size) +{ + return fgetxattr(fd, name, value, size); +} + +ssize_t xattr_list(const char *path, char *list, size_t size) +{ + return listxattr(path, list, size); +} + +ssize_t xattr_llist(const char *path, char *list, size_t size) +{ + return llistxattr(path, list, size); +} + +ssize_t xattr_flist(int fd, char *list, size_t size) +{ + return flistxattr(fd, list, size); +} + +ssize_t xattr_set(const char* path, const char* name, + const void* value, size_t size, int flags) +{ + return setxattr(path, name, value, size, flags); +} + +ssize_t xattr_lset(const char* path, const char* name, + const void* value, size_t size, int flags) +{ + return lsetxattr(path, name, value, size, flags); +} + +ssize_t xattr_fset(int fd, const char* name, + const void* value, size_t size, int flags) +{ + return fsetxattr(fd, name, value, size, flags); +} + + +#endif + +#ifdef __APPLE__ +// In the absence of a mknodat system call, fchdir to dirfd and back +// around a regular mknod call... +int mknodat(int dirfd, const char *path, mode_t mode, dev_t dev) +{ + int old_dirfd = open(".", O_RDONLY), result; + + if (old_dirfd == -1 || fchdir(dirfd) == -1) return -1; + result = mknod(path, mode, dev); + if (fchdir(old_dirfd) == -1) perror_exit("mknodat couldn't return"); + return result; +} + +// As of 10.15, macOS offers an fcntl F_PREALLOCATE rather than fallocate() +// or posix_fallocate() calls. +int posix_fallocate(int fd, off_t offset, off_t length) +{ + int e = errno, result; + fstore_t f; + + f.fst_flags = F_ALLOCATEALL; + f.fst_posmode = F_PEOFPOSMODE; + f.fst_offset = offset; + f.fst_length = length; + if (fcntl(fd, F_PREALLOCATE, &f) == -1) result = errno; + else result = ftruncate(fd, length); + errno = e; + return result; +} +#endif + +// Signals required by POSIX 2008: +// http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html + +#define SIGNIFY(x) {SIG##x, #x} + +static const struct signame signames[] = { + // POSIX + SIGNIFY(ABRT), SIGNIFY(ALRM), SIGNIFY(BUS), + SIGNIFY(FPE), SIGNIFY(HUP), SIGNIFY(ILL), SIGNIFY(INT), SIGNIFY(KILL), + SIGNIFY(PIPE), SIGNIFY(QUIT), SIGNIFY(SEGV), SIGNIFY(TERM), + SIGNIFY(USR1), SIGNIFY(USR2), SIGNIFY(SYS), SIGNIFY(TRAP), + SIGNIFY(VTALRM), SIGNIFY(XCPU), SIGNIFY(XFSZ), + // Non-POSIX signals that cause termination + SIGNIFY(PROF), SIGNIFY(IO), +#ifdef __linux__ + SIGNIFY(STKFLT), SIGNIFY(POLL), SIGNIFY(PWR), +#elif defined(__APPLE__) + SIGNIFY(EMT), SIGNIFY(INFO), +#endif + + // Note: sigatexit relies on all the signals with a default disposition that + // terminates the process coming *before* SIGCHLD. + + // POSIX signals that don't cause termination + SIGNIFY(CHLD), SIGNIFY(CONT), SIGNIFY(STOP), SIGNIFY(TSTP), + SIGNIFY(TTIN), SIGNIFY(TTOU), SIGNIFY(URG), + // Non-POSIX signals that don't cause termination + SIGNIFY(WINCH), +}; +int signames_len = ARRAY_LEN(signames); + +#undef SIGNIFY + +void xsignal_all_killers(void *handler) +{ + int i; + + for (i=0; signames[i].num != SIGCHLD; i++) + if (signames[i].num != SIGKILL) + xsignal(signames[i].num, handler ? exit_signal : SIG_DFL); +} + +// Convert a string like "9", "KILL", "SIGHUP", or "SIGRTMIN+2" to a number. +int sig_to_num(char *sigstr) +{ + int i, offset; + char *s; + + // Numeric? + i = estrtol(sigstr, &s, 10); + if (!errno && !*s) return i; + + // Skip leading "SIG". + strcasestart(&sigstr, "sig"); + + // Named signal? + for (i=0; i= SIGRTMIN && i <= SIGRTMAX) return i; +#endif + + return -1; +} + +char *num_to_sig(int sig) +{ + int i; + + // A named signal? + for (i=0; i SIGRTMIN && sig < SIGRTMAX) { + if (sig-SIGRTMIN <= SIGRTMAX-sig) sprintf(libbuf, "RTMIN+%d", sig-SIGRTMIN); + else sprintf(libbuf, "RTMAX-%d", SIGRTMAX-sig); + return libbuf; + } +#endif + + return NULL; +} + +int dev_minor(int dev) +{ +#if defined(__linux__) + return ((dev&0xfff00000)>>12)|(dev&0xff); +#elif defined(__APPLE__) + return dev&0xffffff; +#else +#error +#endif +} + +int dev_major(int dev) +{ +#if defined(__linux__) + return (dev&0xfff00)>>8; +#elif defined(__APPLE__) + return (dev>>24)&0xff; +#else +#error +#endif +} + +int dev_makedev(int major, int minor) +{ +#if defined(__linux__) + return (minor&0xff)|((major&0xfff)<<8)|((minor&0xfff00)<<12); +#elif defined(__APPLE__) + return (minor&0xffffff)|((major&0xff)<<24); +#else +#error +#endif +} + +char *fs_type_name(struct statfs *statfs) +{ +#if defined(__APPLE__) + // macOS has an `f_type` field, but assigns values dynamically as filesystems + // are registered. They do give you the name directly though, so use that. + return statfs->f_fstypename; +#else + char *s = NULL; + struct {unsigned num; char *name;} nn[] = { + {0xADFF, "affs"}, {0x5346544e, "ntfs"}, {0x1Cd1, "devpts"}, + {0x137D, "ext"}, {0xEF51, "ext2"}, {0xEF53, "ext3"}, + {0x1BADFACE, "bfs"}, {0x9123683E, "btrfs"}, {0x28cd3d45, "cramfs"}, + {0x3153464a, "jfs"}, {0x7275, "romfs"}, {0x01021994, "tmpfs"}, + {0x3434, "nilfs"}, {0x6969, "nfs"}, {0x9fa0, "proc"}, + {0x534F434B, "sockfs"}, {0x62656572, "sysfs"}, {0x517B, "smb"}, + {0x4d44, "msdos"}, {0x4006, "fat"}, {0x43415d53, "smackfs"}, + {0x73717368, "squashfs"} + }; + int i; + + for (i=0; if_type) s = nn[i].name; + if (!s) sprintf(s = libbuf, "0x%x", (unsigned)statfs->f_type); + return s; +#endif +} diff --git a/aosp/external/toybox/lib/portability.h b/aosp/external/toybox/lib/portability.h new file mode 100644 index 0000000000000000000000000000000000000000..d81ddead302627e91a81005697be1cc4d2390157 --- /dev/null +++ b/aosp/external/toybox/lib/portability.h @@ -0,0 +1,359 @@ +// Workarounds for horrible build environment idiosyncrasies. + +// Instead of polluting the code with strange #ifdefs to work around bugs +// in specific compiler, library, or OS versions, localize all that here +// and in portability.c + +// For musl +#define _ALL_SOURCE +#ifndef REG_STARTEND +#define REG_STARTEND 0 +#endif + +#ifdef __APPLE__ +// macOS 10.13 doesn't have the POSIX 2008 direct access to timespec in +// struct stat, but we can ask it to give us something equivalent... +// (This must come before any #include!) +#define _DARWIN_C_SOURCE +// ...and then use macros to paper over the difference. +#define st_atim st_atimespec +#define st_ctim st_ctimespec +#define st_mtim st_mtimespec +#endif + +// Test for gcc (using compiler builtin #define) + +#ifdef __GNUC__ +#define printf_format __attribute__((format(printf, 1, 2))) +#else +#define printf_format +#endif + +// Always use long file support. +#define _FILE_OFFSET_BITS 64 + +// This isn't in the spec, but it's how we determine what libc we're using. + +// Types various replacement prototypes need. +// This also lets us determine what libc we're using. Systems that +// have will transitively include it, and ones that don't -- +// macOS -- won't break. +#include + +// Various constants old build environments might not have even if kernel does + +#ifndef AT_FDCWD +#define AT_FDCWD -100 +#endif + +#ifndef AT_SYMLINK_NOFOLLOW +#define AT_SYMLINK_NOFOLLOW 0x100 +#endif + +#ifndef AT_REMOVEDIR +#define AT_REMOVEDIR 0x200 +#endif + +#ifndef RLIMIT_RTTIME +#define RLIMIT_RTTIME 15 +#endif + +// Introduced in Linux 3.1 +#ifndef SEEK_DATA +#define SEEK_DATA 3 +#endif +#ifndef SEEK_HOLE +#define SEEK_HOLE 4 +#endif + +// We don't define GNU_dammit because we're not part of the gnu project, and +// don't want to get any FSF on us. Unfortunately glibc (gnu libc) +// won't give us Linux syscall wrappers without claiming to be part of the +// gnu project (because Stallman's "GNU owns Linux" revisionist history +// crusade includes the kernel, even though Linux was inspired by Minix). + +// We use most non-posix Linux syscalls directly through the syscall() wrapper, +// but even many posix-2008 functions aren't provided by glibc unless you +// claim it's in the name of Gnu. + +#if defined(__GLIBC__) +// "Function prototypes shall be provided." but aren't. +// http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/unistd.h.html +char *crypt(const char *key, const char *salt); + +// According to posix, #include header, get a function definition. But glibc... +// http://pubs.opengroup.org/onlinepubs/9699919799/functions/wcwidth.html +#include +int wcwidth(wchar_t wc); + +// see http://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html +#include +char *strptime(const char *buf, const char *format, struct tm *tm); + +// They didn't like posix basename so they defined another function with the +// same name and if you include libgen.h it #defines basename to something +// else (where they implemented the real basename), and that define breaks +// the table entry for the basename command. They didn't make a new function +// with a different name for their new behavior because gnu. +// +// Solution: don't use their broken header, provide an inline to redirect the +// correct name to the broken name. + +char *dirname(char *path); +char *__xpg_basename(char *path); +static inline char *basename(char *path) { return __xpg_basename(path); } +char *strcasestr(const char *haystack, const char *needle); +#endif // defined(glibc) + +// getopt_long(), getopt_long_only(), and struct option. +#include + +#if !defined(__GLIBC__) +// POSIX basename. +#include +#endif + +// Work out how to do endianness + +#ifdef __APPLE__ + +#include + +#ifdef __BIG_ENDIAN__ +#define IS_BIG_ENDIAN 1 +#else +#define IS_BIG_ENDIAN 0 +#endif + +#define bswap_16(x) OSSwapInt16(x) +#define bswap_32(x) OSSwapInt32(x) +#define bswap_64(x) OSSwapInt64(x) + +#elif defined(__FreeBSD__) + +#include + +#if _BYTE_ORDER == _BIG_ENDIAN +#define IS_BIG_ENDIAN 1 +#else +#define IS_BIG_ENDIAN 0 +#endif + +#else + +#include +#include + +#if __BYTE_ORDER == __BIG_ENDIAN +#define IS_BIG_ENDIAN 1 +#else +#define IS_BIG_ENDIAN 0 +#endif + +#endif + +#if IS_BIG_ENDIAN +#define IS_LITTLE_ENDIAN 0 +#define SWAP_BE16(x) (x) +#define SWAP_BE32(x) (x) +#define SWAP_BE64(x) (x) +#define SWAP_LE16(x) bswap_16(x) +#define SWAP_LE32(x) bswap_32(x) +#define SWAP_LE64(x) bswap_64(x) +#else +#define IS_LITTLE_ENDIAN 1 +#define SWAP_BE16(x) bswap_16(x) +#define SWAP_BE32(x) bswap_32(x) +#define SWAP_BE64(x) bswap_64(x) +#define SWAP_LE16(x) (x) +#define SWAP_LE32(x) (x) +#define SWAP_LE64(x) (x) +#endif + +// Linux headers not listed by POSIX or LSB +#include +#ifdef __linux__ +#include +#include +#include +#endif + +#ifdef __APPLE__ +#include +#elif !defined(__FreeBSD__) +#include +#else +#include +#ifndef IUTF8 +#define IUTF8 0 +#endif +#endif + +#if defined(__APPLE__) || defined(__linux__) +// Linux and macOS has both have getxattr and friends in , but +// they aren't compatible. +#include +ssize_t xattr_get(const char *, const char *, void *, size_t); +ssize_t xattr_lget(const char *, const char *, void *, size_t); +ssize_t xattr_fget(int fd, const char *, void *, size_t); +ssize_t xattr_list(const char *, char *, size_t); +ssize_t xattr_llist(const char *, char *, size_t); +ssize_t xattr_flist(int, char *, size_t); +ssize_t xattr_set(const char*, const char*, const void*, size_t, int); +ssize_t xattr_lset(const char*, const char*, const void*, size_t, int); +ssize_t xattr_fset(int, const char*, const void*, size_t, int); +#endif + +// macOS doesn't have these functions, but we can fake them. +#ifdef __APPLE__ +int mknodat(int, const char*, mode_t, dev_t); +int posix_fallocate(int, off_t, off_t); +#endif + +// Android is missing some headers and functions +// "generated/config.h" is included first +#if CFG_TOYBOX_SHADOW +#include +#endif +#if CFG_TOYBOX_UTMPX +#include +#else +struct utmpx {int ut_type;}; +#define USER_PROCESS 0 +static inline struct utmpx *getutxent(void) {return 0;} +static inline void setutxent(void) {;} +static inline void endutxent(void) {;} +#endif + +// Some systems don't define O_NOFOLLOW, and it varies by architecture, so... +#include +#ifndef O_NOFOLLOW +#define O_NOFOLLOW 0 +#endif +#ifndef O_NOATIME +#define O_NOATIME 01000000 +#endif +#ifndef O_CLOEXEC +#define O_CLOEXEC 02000000 +#endif +#ifndef O_PATH +#define O_PATH 010000000 +#endif +#ifndef SCHED_RESET_ON_FORK +#define SCHED_RESET_ON_FORK (1<<30) +#endif + +// Glibc won't give you linux-kernel constants unless you say "no, a BUD lite" +// even though linux has nothing to do with the FSF and never has. +#ifndef F_SETPIPE_SZ +#define F_SETPIPE_SZ 1031 +#endif + +#ifndef F_GETPIPE_SZ +#define F_GETPIPE_SZ 1032 +#endif + +#if defined(__SIZEOF_DOUBLE__) && defined(__SIZEOF_LONG__) \ + && __SIZEOF_DOUBLE__ <= __SIZEOF_LONG__ +typedef double FLOAT; +#else +typedef float FLOAT; +#endif + +#ifndef __uClinux__ +pid_t xfork(void); +#endif + +//#define strncpy(...) @@strncpyisbadmmkay@@ +//#define strncat(...) @@strncatisbadmmkay@@ + +// Support building the Android tools on glibc, so hermetic AOSP builds can +// use toybox before they're ready to switch to host bionic. +#ifdef __BIONIC__ +#include +#else +typedef enum android_LogPriority { + ANDROID_LOG_UNKNOWN = 0, + ANDROID_LOG_DEFAULT, + ANDROID_LOG_VERBOSE, + ANDROID_LOG_DEBUG, + ANDROID_LOG_INFO, + ANDROID_LOG_WARN, + ANDROID_LOG_ERROR, + ANDROID_LOG_FATAL, + ANDROID_LOG_SILENT, +} android_LogPriority; +static inline int __android_log_write(int pri, const char *tag, const char *msg) +{ + return -1; +} +#endif + +// libprocessgroup is an Android platform library not included in the NDK. +#if defined(__BIONIC__) +#if __has_include() +#include +#define GOT_IT +#endif +#endif +#ifdef GOT_IT +#undef GOT_IT +#else +static inline int get_sched_policy(int tid, void *policy) {return 0;} +static inline char *get_sched_policy_name(int policy) {return "unknown";} +#endif + +// Android NDKv18 has liblog.so but not liblog.c for static builds, +// stub it out for now. +#ifdef __ANDROID_NDK__ +#define __android_log_write(a, b, c) (0) +#endif + +#ifndef SYSLOG_NAMES +typedef struct {char *c_name; int c_val;} CODE; +extern CODE prioritynames[], facilitynames[]; +#endif + +#if CFG_TOYBOX_GETRANDOM +#include +#endif +int xgetrandom(void *buf, unsigned len, unsigned flags); + +// Android's bionic libc doesn't have confstr. +#ifdef __BIONIC__ +#define _CS_PATH 0 +#define _CS_V7_ENV 1 +#include +static inline void confstr(int a, char *b, int c) {strcpy(b, a ? "POSIXLY_CORRECT=1" : "/bin:/usr/bin");} +#endif + +// Paper over the differences between BSD kqueue and Linux inotify for tail. + +struct xnotify { + char **paths; + int max, *fds, count, kq; +}; + +struct xnotify *xnotify_init(int max); +int xnotify_add(struct xnotify *not, int fd, char *path); +int xnotify_wait(struct xnotify *not, char **path); + +#ifdef __APPLE__ +#define f_frsize f_iosize +#endif + +int sig_to_num(char *s); +char *num_to_sig(int sig); + +struct signame { + int num; + char *name; +}; +void xsignal_all_killers(void *handler); + +// Different OSes encode major/minor device numbers differently. +int dev_minor(int dev); +int dev_major(int dev); +int dev_makedev(int major, int minor); + +char *fs_type_name(struct statfs *statfs); diff --git a/aosp/external/toybox/lib/toyflags.h b/aosp/external/toybox/lib/toyflags.h new file mode 100644 index 0000000000000000000000000000000000000000..b158ba88c4eb57452a1d52f106d46fea9a8ccd12 --- /dev/null +++ b/aosp/external/toybox/lib/toyflags.h @@ -0,0 +1,42 @@ +/* Flags values for the third argument of NEWTOY() + * + * Included from both main.c (runs in toys.h context) and scripts/install.c + * (which may build on crazy things like macosx when cross compiling). + */ + +// Flags describing command behavior. + +// Where to install (toybox --long outputs absolute paths to commands) +// If no location bits set, command not listed in "toybox" command's output. +#define TOYFLAG_USR (1<<0) +#define TOYFLAG_BIN (1<<1) +#define TOYFLAG_SBIN (1<<2) +#define TOYMASK_LOCATION ((1<<4)-1) + +// This is a shell built-in function, running in the same process context. +#define TOYFLAG_NOFORK (1<<4) +#define TOYFLAG_MAYFORK (1<<5) + +// Start command with a umask of 0 (saves old umask in this.old_umask) +#define TOYFLAG_UMASK (1<<6) + +// This command runs as root. +#define TOYFLAG_STAYROOT (1<<7) // Don't drop suid root before running cmd_main +#define TOYFLAG_NEEDROOT (1<<8) // Refuse to run if real uid != 0 +#define TOYFLAG_ROOTONLY (TOYFLAG_STAYROOT|TOYFLAG_NEEDROOT) + +// Call setlocale to listen to environment variables. +// This invalidates sprintf("%.*s", size, string) as a valid length constraint. +#define TOYFLAG_LOCALE (1<<9) + +// Suppress default --help processing +#define TOYFLAG_NOHELP (1<<10) + +// Error code to return if argument parsing fails (default 1) +#define TOYFLAG_ARGFAIL(x) (x<<24) + +#if CFG_TOYBOX_PEDANTIC_ARGS +#define NO_ARGS ">0" +#else +#define NO_ARGS 0 +#endif diff --git a/aosp/external/toybox/lib/tty.c b/aosp/external/toybox/lib/tty.c new file mode 100644 index 0000000000000000000000000000000000000000..a6b4576aeb9039b0a1cd7e14cb4710e80c9745b9 --- /dev/null +++ b/aosp/external/toybox/lib/tty.c @@ -0,0 +1,282 @@ +/* interestingtimes.c - cursor control + * + * Copyright 2015 Rob Landley + */ + +#include "toys.h" + +int tty_fd(void) +{ + int i, j; + + for (i = 0; i<3; i++) if (isatty(j = (i+1)%3)) return j; + + return notstdio(open("/dev/tty", O_RDWR)); +} + +// Quick and dirty query size of terminal, doesn't do ANSI probe fallback. +// set x=80 y=25 before calling to provide defaults. Returns 0 if couldn't +// determine size. + +int terminal_size(unsigned *xx, unsigned *yy) +{ + struct winsize ws; + unsigned i, x = 0, y = 0; + char *s; + + // stdin, stdout, stderr + for (i=0; i<3; i++) { + memset(&ws, 0, sizeof(ws)); + if (isatty(i) && !ioctl(i, TIOCGWINSZ, &ws)) { + if (ws.ws_col) x = ws.ws_col; + if (ws.ws_row) y = ws.ws_row; + + break; + } + } + s = getenv("COLUMNS"); + if (s) sscanf(s, "%u", &x); + s = getenv("LINES"); + if (s) sscanf(s, "%u", &y); + + // Never return 0 for either value, leave it at default instead. + if (xx && x) *xx = x; + if (yy && y) *yy = y; + + return x || y; +} + +// Query terminal size, sending ANSI probe if necesary. (Probe queries xterm +// size through serial connection, when local TTY doesn't know but remote does.) +// Returns 0 if ANSI probe sent, 1 if size determined from tty or environment + +int terminal_probesize(unsigned *xx, unsigned *yy) +{ + if (terminal_size(xx, yy) && (!xx || *xx) && (!yy || *yy)) return 1; + + // Send probe: bookmark cursor position, jump to bottom right, + // query position, return cursor to bookmarked position. + xprintf("\033[s\033[999C\033[999B\033[6n\033[u"); + + return 0; +} + +// Reset terminal to known state, saving copy of old state if old != NULL. +int set_terminal(int fd, int raw, int speed, struct termios *old) +{ + struct termios termio; + int i = tcgetattr(fd, &termio); + + // Fetch local copy of old terminfo, and copy struct contents to *old if set + if (i) return i; + if (old) *old = termio; + + // the following are the bits set for an xterm. Linux text mode TTYs by + // default add two additional bits that only matter for serial processing + // (turn serial line break into an interrupt, and XON/XOFF flow control) + + // Any key unblocks output, swap CR and NL on input + termio.c_iflag = IXANY|ICRNL|INLCR; + if (toys.which->flags & TOYFLAG_LOCALE) termio.c_iflag |= IUTF8; + + // Output appends CR to NL, does magic undocumented postprocessing + termio.c_oflag = ONLCR|OPOST; + + // Leave serial port speed alone + // termio.c_cflag = C_READ|CS8|EXTB; + + // Generate signals, input entire line at once, echo output + // erase, line kill, escape control characters with ^ + // erase line char at a time + // "extended" behavior: ctrl-V quotes next char, ctrl-R reprints unread chars, + // ctrl-W erases word + termio.c_lflag = ISIG|ICANON|ECHO|ECHOE|ECHOK|ECHOCTL|ECHOKE|IEXTEN; + + if (raw) cfmakeraw(&termio); + + if (speed) { + int i, speeds[] = {50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, + 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, + 500000, 576000, 921600, 1000000, 1152000, 1500000, 2000000, + 2500000, 3000000, 3500000, 4000000}; + + // Find speed in table, adjust to constant + for (i = 0; i < ARRAY_LEN(speeds); i++) if (speeds[i] == speed) break; + if (i == ARRAY_LEN(speeds)) error_exit("unknown speed: %d", speed); + cfsetspeed(&termio, i+1+4081*(i>15)); + } + + return tcsetattr(fd, TCSAFLUSH, &termio); +} + +void xset_terminal(int fd, int raw, int speed, struct termios *old) +{ + if (-1 != set_terminal(fd, raw, speed, old)) return; + + sprintf(libbuf, "/proc/self/fd/%d", fd); + libbuf[readlink0(libbuf, libbuf, sizeof(libbuf))] = 0; + perror_exit("tcsetattr %s", libbuf); +} + +struct scan_key_list { + int key; + char *seq; +} static const scan_key_list[] = { + {KEY_UP, "\033[A"}, {KEY_DOWN, "\033[B"}, + {KEY_RIGHT, "\033[C"}, {KEY_LEFT, "\033[D"}, + + {KEY_UP|KEY_SHIFT, "\033[1;2A"}, {KEY_DOWN|KEY_SHIFT, "\033[1;2B"}, + {KEY_RIGHT|KEY_SHIFT, "\033[1;2C"}, {KEY_LEFT|KEY_SHIFT, "\033[1;2D"}, + + {KEY_UP|KEY_ALT, "\033[1;3A"}, {KEY_DOWN|KEY_ALT, "\033[1;3B"}, + {KEY_RIGHT|KEY_ALT, "\033[1;3C"}, {KEY_LEFT|KEY_ALT, "\033[1;3D"}, + + {KEY_UP|KEY_CTRL, "\033[1;5A"}, {KEY_DOWN|KEY_CTRL, "\033[1;5B"}, + {KEY_RIGHT|KEY_CTRL, "\033[1;5C"}, {KEY_LEFT|KEY_CTRL, "\033[1;5D"}, + + // VT102/VT220 escapes. + {KEY_HOME, "\033[1~"}, + {KEY_INSERT, "\033[2~"}, + {KEY_DELETE, "\033[3~"}, + {KEY_END, "\033[4~"}, + {KEY_PGUP, "\033[5~"}, + {KEY_PGDN, "\033[6~"}, + // "Normal" "PC" escapes (xterm). + {KEY_HOME, "\033OH"}, + {KEY_END, "\033OF"}, + // "Application" "PC" escapes (gnome-terminal). + {KEY_HOME, "\033[H"}, + {KEY_END, "\033[F"}, + + {KEY_FN+1, "\033OP"}, {KEY_FN+2, "\033OQ"}, {KEY_FN+3, "\033OR"}, + {KEY_FN+4, "\033OS"}, {KEY_FN+5, "\033[15~"}, {KEY_FN+6, "\033[17~"}, + {KEY_FN+7, "\033[18~"}, {KEY_FN+8, "\033[19~"}, {KEY_FN+9, "\033[20~"}, +}; + +// Scan stdin for a keypress, parsing known escape sequences, including +// responses to screen size queries. +// Blocks for timeout_ms milliseconds, 0=return immediately, -1=wait forever. +// Returns 0-255=literal, -1=EOF, -2=TIMEOUT, -3=RESIZE, 256+= a KEY_ constant. +// Scratch space is necessary because last char of !seq could start new seq. +// Zero out first byte of scratch before first call to scan_key. +int scan_key_getsize(char *scratch, int timeout_ms, unsigned *xx, unsigned *yy) +{ + struct pollfd pfd; + int maybe, i, j; + char *test; + + for (;;) { + pfd.fd = 0; + pfd.events = POLLIN; + pfd.revents = 0; + + maybe = 0; + if (*scratch) { + int pos[6]; + unsigned x, y; + + // Check for return from terminal size probe + memset(pos, 0, 6*sizeof(int)); + scratch[(1+*scratch)&15] = 0; + sscanf(scratch+1, "\033%n[%n%3u%n;%n%3u%nR%n", pos, pos+1, &y, + pos+2, pos+3, &x, pos+4, pos+5); + if (pos[5]) { + // Recognized X/Y position, consume and return + *scratch = 0; + if (xx) *xx = x; + if (yy) *yy = y; + return -3; + } else for (i=0; i<6; i++) if (pos[i]==*scratch) maybe = 1; + + // Check sequences + for (i = 0; i0 || 1 != read(0, scratch+1+*scratch, 1)) + return (toys.signal>0) ? -3 : -1; + ++*scratch; + } + + // Was not a sequence + if (!*scratch) return -2; + i = scratch[1]; + if (--*scratch) memmove(scratch+1, scratch+2, *scratch); + + return i; +} + +// Wrapper that ignores results from ANSI probe to update screensize. +// Otherwise acts like scan_key_getsize(). +int scan_key(char *scratch, int timeout_ms) +{ + return scan_key_getsize(scratch, timeout_ms, NULL, NULL); +} + +void tty_esc(char *s) +{ + printf("\033[%s", s); +} + +void tty_jump(int x, int y) +{ + char s[32]; + + sprintf(s, "%d;%dH", y+1, x+1); + tty_esc(s); +} + +void tty_reset(void) +{ + set_terminal(0, 0, 0, 0); + tty_esc("?25h"); + tty_esc("0m"); + tty_jump(0, 999); + tty_esc("K"); + fflush(0); +} + +// If you call set_terminal(), use sigatexit(tty_sigreset); +void tty_sigreset(int i) +{ + tty_reset(); + _exit(i ? 128+i : 0); +} + +void start_redraw(unsigned *width, unsigned *height) +{ + // If never signaled, do raw mode setup. + if (!toys.signal) { + *width = 80; + *height = 25; + set_terminal(0, 1, 0, 0); + sigatexit(tty_sigreset); + xsignal(SIGWINCH, generic_signal); + } + if (toys.signal != -1) { + toys.signal = -1; + terminal_probesize(width, height); + } + xprintf("\033[H\033[J"); +} diff --git a/aosp/external/toybox/lib/xwrap.c b/aosp/external/toybox/lib/xwrap.c new file mode 100644 index 0000000000000000000000000000000000000000..2f47ac66e20617d2d6732b006fb4757a0896216e --- /dev/null +++ b/aosp/external/toybox/lib/xwrap.c @@ -0,0 +1,1079 @@ +/* xwrap.c - wrappers around existing library functions. + * + * Functions with the x prefix are wrappers that either succeed or kill the + * program with an error message, but never return failure. They usually have + * the same arguments and return value as the function they wrap. + * + * Copyright 2006 Rob Landley + */ + +#include "toys.h" + +// strcpy and strncat with size checking. Size is the total space in "dest", +// including null terminator. Exit if there's not enough space for the string +// (including space for the null terminator), because silently truncating is +// still broken behavior. (And leaving the string unterminated is INSANE.) +void xstrncpy(char *dest, char *src, size_t size) +{ + if (strlen(src)+1 > size) error_exit("'%s' > %ld bytes", src, (long)size); + strcpy(dest, src); +} + +void xstrncat(char *dest, char *src, size_t size) +{ + long len = strlen(dest); + + if (len+strlen(src)+1 > size) + error_exit("'%s%s' > %ld bytes", dest, src, (long)size); + strcpy(dest+len, src); +} + +// We replaced exit(), _exit(), and atexit() with xexit(), _xexit(), and +// sigatexit(). This gives _xexit() the option to siglongjmp(toys.rebound, 1) +// instead of exiting, lets xexit() report stdout flush failures to stderr +// and change the exit code to indicate error, lets our toys.exit function +// change happen for signal exit paths and lets us remove the functions +// after we've called them. + +void _xexit(void) +{ + if (toys.rebound) siglongjmp(*toys.rebound, 1); + + _exit(toys.exitval); +} + +void xexit(void) +{ + // Call toys.xexit functions in reverse order added. + while (toys.xexit) { + struct arg_list *al = llist_pop(&toys.xexit); + + // typecast xexit->arg to a function pointer, then call it using invalid + // signal 0 to let signal handlers tell actual signal from regular exit. + ((void (*)(int))(al->arg))(0); + + free(al); + } + xflush(1); + _xexit(); +} + +void *xmmap(void *addr, size_t length, int prot, int flags, int fd, off_t off) +{ + void *ret = mmap(addr, length, prot, flags, fd, off); + if (ret == MAP_FAILED) perror_exit("mmap"); + return ret; +} + +// Die unless we can allocate memory. +void *xmalloc(size_t size) +{ + void *ret = malloc(size); + if (!ret) error_exit("xmalloc(%ld)", (long)size); + + return ret; +} + +// Die unless we can allocate prezeroed memory. +void *xzalloc(size_t size) +{ + void *ret = xmalloc(size); + memset(ret, 0, size); + return ret; +} + +// Die unless we can change the size of an existing allocation, possibly +// moving it. (Notice different arguments from libc function.) +void *xrealloc(void *ptr, size_t size) +{ + ptr = realloc(ptr, size); + if (!ptr) error_exit("xrealloc"); + + return ptr; +} + +// Die unless we can allocate a copy of this many bytes of string. +char *xstrndup(char *s, size_t n) +{ + char *ret = strndup(s, n); + + if (!ret) error_exit("xstrndup"); + + return ret; +} + +// Die unless we can allocate a copy of this string. +char *xstrdup(char *s) +{ + return xstrndup(s, strlen(s)); +} + +void *xmemdup(void *s, long len) +{ + void *ret = xmalloc(len); + memcpy(ret, s, len); + + return ret; +} + +// Die unless we can allocate enough space to sprintf() into. +char *xmprintf(char *format, ...) +{ + va_list va, va2; + int len; + char *ret; + + va_start(va, format); + va_copy(va2, va); + + // How long is it? + len = vsnprintf(0, 0, format, va); + len++; + va_end(va); + + // Allocate and do the sprintf() + ret = xmalloc(len); + vsnprintf(ret, len, format, va2); + va_end(va2); + + return ret; +} + +// if !flush just check for error on stdout without flushing +void xflush(int flush) +{ + if ((flush && fflush(0)) || ferror(stdout)) + if (!toys.exitval) perror_msg("write"); +} + +void xprintf(char *format, ...) +{ + va_list va; + va_start(va, format); + + vprintf(format, va); + va_end(va); + xflush(0); +} + +// Put string with length (does not append newline) +void xputsl(char *s, int len) +{ + int out; + + while (len != (out = fwrite(s, 1, len, stdout))) { + if (out<1) perror_exit("write"); + len -= out; + s += out; + } + xflush(0); +} + +// xputs with no newline +void xputsn(char *s) +{ + xputsl(s, strlen(s)); +} + +// Write string to stdout with newline, flushing and checking for errors +void xputs(char *s) +{ + puts(s); + xflush(0); +} + +void xputc(char c) +{ + if (EOF == fputc(c, stdout)) perror_exit("write"); + xflush(0); +} + +// This is called through the XVFORK macro because parent/child of vfork +// share a stack, so child returning from a function would stomp the return +// address parent would need. Solution: make vfork() an argument so processes +// diverge before function gets called. +pid_t __attribute__((returns_twice)) xvforkwrap(pid_t pid) +{ + if (pid == -1) perror_exit("vfork"); + + // Signal to xexec() and friends that we vforked so can't recurse + if (!pid) toys.stacktop = 0; + + return pid; +} + +// Die unless we can exec argv[] (or run builtin command). Note that anything +// with a path isn't a builtin, so /bin/sh won't match the builtin sh. +void xexec(char **argv) +{ + // Only recurse to builtin when we have multiplexer and !vfork context. + if (CFG_TOYBOX && !CFG_TOYBOX_NORECURSE && toys.stacktop && **argv != '/') + toy_exec(argv); + execvp(argv[0], argv); + + toys.exitval = 126+(errno == ENOENT); + perror_msg("exec %s", argv[0]); + if (!toys.stacktop) _exit(toys.exitval); + xexit(); +} + +// Spawn child process, capturing stdin/stdout. +// argv[]: command to exec. If null, child re-runs original program with +// toys.stacktop zeroed. +// pipes[2]: Filehandle to move to stdin/stdout of new process. +// If -1, replace with pipe handle connected to stdin/stdout. +// NULL treated as {0, 1}, I.E. leave stdin/stdout as is +// return: pid of child process +pid_t xpopen_setup(char **argv, int *pipes, void (*callback)(void)) +{ + int cestnepasun[4], pid; + + // Make the pipes? + memset(cestnepasun, 0, sizeof(cestnepasun)); + if (pipes) for (pid = 0; pid < 2; pid++) { + if (pipes[pid] != -1) continue; + if (pipe(cestnepasun+(2*pid))) perror_exit("pipe"); + } + + if (!(pid = CFG_TOYBOX_FORK ? xfork() : XVFORK())) { + // Child process: Dance of the stdin/stdout redirection. + // cestnepasun[1]->cestnepasun[0] and cestnepasun[3]->cestnepasun[2] + if (pipes) { + // if we had no stdin/out, pipe handles could overlap, so test for it + // and free up potentially overlapping pipe handles before reuse + + // in child, close read end of output pipe, use write end as new stdout + if (cestnepasun[2]) { + close(cestnepasun[2]); + pipes[1] = cestnepasun[3]; + } + + // in child, close write end of input pipe, use read end as new stdin + if (cestnepasun[1]) { + close(cestnepasun[1]); + pipes[0] = cestnepasun[0]; + } + + // If swapping stdin/stdout, dup a filehandle that gets closed before use + if (!pipes[1]) pipes[1] = dup(0); + + // Are we redirecting stdin? + if (pipes[0]) { + dup2(pipes[0], 0); + close(pipes[0]); + } + + // Are we redirecting stdout? + if (pipes[1] != 1) { + dup2(pipes[1], 1); + close(pipes[1]); + } + } + if (callback) callback(); + if (argv) xexec(argv); + + // In fork() case, force recursion because we know it's us. + if (CFG_TOYBOX_FORK) { + toy_init(toys.which, toys.argv); + toys.stacktop = 0; + toys.which->toy_main(); + xexit(); + // In vfork() case, exec /proc/self/exe with high bit of first letter set + // to tell main() we reentered. + } else { + char *s = "/proc/self/exe"; + + // We did a nommu-friendly vfork but must exec to continue. + // setting high bit of argv[0][0] to let new process know + **toys.argv |= 0x80; + execv(s, toys.argv); + perror_msg_raw(s); + + _exit(127); + } + } + + // Parent process: vfork had a shared environment, clean up. + if (!CFG_TOYBOX_FORK) **toys.argv &= 0x7f; + + if (pipes) { + if (cestnepasun[1]) { + pipes[0] = cestnepasun[1]; + close(cestnepasun[0]); + } + if (cestnepasun[2]) { + pipes[1] = cestnepasun[2]; + close(cestnepasun[3]); + } + } + + return pid; +} + +pid_t xpopen_both(char **argv, int *pipes) +{ + return xpopen_setup(argv, pipes, 0); +} + + +// Wait for child process to exit, then return adjusted exit code. +int xwaitpid(pid_t pid) +{ + int status; + + while (-1 == waitpid(pid, &status, 0) && errno == EINTR); + + return WIFEXITED(status) ? WEXITSTATUS(status) : WTERMSIG(status)+128; +} + +int xpclose_both(pid_t pid, int *pipes) +{ + if (pipes) { + close(pipes[0]); + close(pipes[1]); + } + + return xwaitpid(pid); +} + +// Wrapper to xpopen with a pipe for just one of stdin/stdout +pid_t xpopen(char **argv, int *pipe, int isstdout) +{ + int pipes[2], pid; + + pipes[0] = isstdout ? 0 : -1; + pipes[1] = isstdout ? -1 : 1; + pid = xpopen_both(argv, pipes); + *pipe = pid ? pipes[!!isstdout] : -1; + + return pid; +} + +int xpclose(pid_t pid, int pipe) +{ + close(pipe); + + return xpclose_both(pid, 0); +} + +// Call xpopen and wait for it to finish, keeping existing stdin/stdout. +int xrun(char **argv) +{ + return xpclose_both(xpopen_both(argv, 0), 0); +} + +void xaccess(char *path, int flags) +{ + if (access(path, flags)) perror_exit("Can't access '%s'", path); +} + +// Die unless we can delete a file. (File must exist to be deleted.) +void xunlink(char *path) +{ + if (unlink(path)) perror_exit("unlink '%s'", path); +} + +// Die unless we can open/create a file, returning file descriptor. +// The meaning of O_CLOEXEC is reversed (it defaults on, pass it to disable) +// and WARN_ONLY tells us not to exit. +int xcreate_stdio(char *path, int flags, int mode) +{ + int fd = open(path, (flags^O_CLOEXEC)&~WARN_ONLY, mode); + + if (fd == -1) ((mode&WARN_ONLY) ? perror_msg_raw : perror_exit_raw)(path); + return fd; +} + +// Die unless we can open a file, returning file descriptor. +int xopen_stdio(char *path, int flags) +{ + return xcreate_stdio(path, flags, 0); +} + +void xpipe(int *pp) +{ + if (pipe(pp)) perror_exit("xpipe"); +} + +void xclose(int fd) +{ + if (close(fd)) perror_exit("xclose"); +} + +int xdup(int fd) +{ + if (fd != -1) { + fd = dup(fd); + if (fd == -1) perror_exit("xdup"); + } + return fd; +} + +// Move file descriptor above stdin/stdout/stderr, using /dev/null to consume +// old one. (We should never be called with stdin/stdout/stderr closed, but...) +int notstdio(int fd) +{ + if (fd<0) return fd; + + while (fd<3) { + int fd2 = xdup(fd); + + close(fd); + xopen_stdio("/dev/null", O_RDWR); + fd = fd2; + } + + return fd; +} + +void xrename(char *from, char *to) +{ + if (rename(from, to)) perror_exit("rename %s -> %s", from, to); +} + +int xtempfile(char *name, char **tempname) +{ + int fd; + + *tempname = xmprintf("%s%s", name, "XXXXXX"); + if(-1 == (fd = mkstemp(*tempname))) error_exit("no temp file"); + + return fd; +} + +// Create a file but don't return stdin/stdout/stderr +int xcreate(char *path, int flags, int mode) +{ + return notstdio(xcreate_stdio(path, flags, mode)); +} + +// Open a file descriptor NOT in stdin/stdout/stderr +int xopen(char *path, int flags) +{ + return notstdio(xopen_stdio(path, flags)); +} + +// Open read only, treating "-" as a synonym for stdin, defaulting to warn only +int openro(char *path, int flags) +{ + if (!strcmp(path, "-")) return 0; + + return xopen(path, flags^WARN_ONLY); +} + +// Open read only, treating "-" as a synonym for stdin. +int xopenro(char *path) +{ + return openro(path, O_RDONLY|WARN_ONLY); +} + +FILE *xfdopen(int fd, char *mode) +{ + FILE *f = fdopen(fd, mode); + + if (!f) perror_exit("xfdopen"); + + return f; +} + +// Die unless we can open/create a file, returning FILE *. +FILE *xfopen(char *path, char *mode) +{ + FILE *f = fopen(path, mode); + if (!f) perror_exit("No file %s", path); + return f; +} + +// Die if there's an error other than EOF. +size_t xread(int fd, void *buf, size_t len) +{ + ssize_t ret = read(fd, buf, len); + if (ret < 0) perror_exit("xread"); + + return ret; +} + +void xreadall(int fd, void *buf, size_t len) +{ + if (len != readall(fd, buf, len)) perror_exit("xreadall"); +} + +// There's no xwriteall(), just xwrite(). When we read, there may or may not +// be more data waiting. When we write, there is data and it had better go +// somewhere. + +void xwrite(int fd, void *buf, size_t len) +{ + if (len != writeall(fd, buf, len)) perror_exit("xwrite"); +} + +// Die if lseek fails, probably due to being called on a pipe. + +off_t xlseek(int fd, off_t offset, int whence) +{ + offset = lseek(fd, offset, whence); + if (offset<0) perror_exit("lseek"); + + return offset; +} + +char *xgetcwd(void) +{ + char *buf = getcwd(NULL, 0); + if (!buf) perror_exit("xgetcwd"); + + return buf; +} + +void xstat(char *path, struct stat *st) +{ + if(stat(path, st)) perror_exit("Can't stat %s", path); +} + +// Canonicalize path, even to file with one or more missing components at end. +// Returns allocated string for pathname or NULL if doesn't exist +// exact = 1 file must exist, 0 dir must exist, -1 show theoretical location, +// -2 don't resolve last file +char *xabspath(char *path, int exact) +{ + struct string_list *todo, *done = 0; + int try = 9999, dirfd = open("/", O_PATH), missing = 0; + char *ret; + + // If this isn't an absolute path, start with cwd. + if (*path != '/') { + char *temp = xgetcwd(); + + splitpath(path, splitpath(temp, &todo)); + free(temp); + } else splitpath(path, &todo); + + // Iterate through path components in todo, prepend processed ones to done. + while (todo) { + struct string_list *new = llist_pop(&todo), **tail; + ssize_t len; + + // Eventually break out of endless loops + if (!try--) { + errno = ELOOP; + goto error; + } + + // Removable path componenents. + if (!strcmp(new->str, ".") || !strcmp(new->str, "..")) { + int x = new->str[1]; + + free(new); + if (!x) continue; + if (done) free(llist_pop(&done)); + len = 0; + + if (missing) missing--; + else { + if (-1 == (x = openat(dirfd, "..", O_PATH))) goto error; + close(dirfd); + dirfd = x; + } + continue; + } + + // Is this a symlink? + if (exact == -2 && !todo) len = 0; + else len = readlinkat(dirfd, new->str, libbuf, sizeof(libbuf)); + if (len>4095) goto error; + + // Not a symlink: add to linked list, move dirfd, fail if error + if (len<1) { + int fd; + + new->next = done; + done = new; + if (errno == EINVAL && !todo) break; + if (errno == ENOENT && exact<0) { + missing++; + continue; + } + if (errno != EINVAL && (exact || todo)) goto error; + + fd = openat(dirfd, new->str, O_PATH); + if (fd == -1 && (exact || todo || errno != ENOENT)) goto error; + close(dirfd); + dirfd = fd; + continue; + } + + // If this symlink is to an absolute path, discard existing resolved path + libbuf[len] = 0; + if (*libbuf == '/') { + llist_traverse(done, free); + done=0; + close(dirfd); + dirfd = open("/", O_PATH); + } + free(new); + + // prepend components of new path. Note symlink to "/" will leave new NULL + tail = splitpath(libbuf, &new); + + // symlink to "/" will return null and leave tail alone + if (new) { + *tail = todo; + todo = new; + } + } + close(dirfd); + + // At this point done has the path, in reverse order. Reverse list while + // calculating buffer length. + + try = 2; + while (done) { + struct string_list *temp = llist_pop(&done); + + if (todo) try++; + try += strlen(temp->str); + temp->next = todo; + todo = temp; + } + + // Assemble return buffer + + ret = xmalloc(try); + *ret = '/'; + ret [try = 1] = 0; + while (todo) { + if (try>1) ret[try++] = '/'; + try = stpcpy(ret+try, todo->str) - ret; + free(llist_pop(&todo)); + } + + return ret; + +error: + close(dirfd); + llist_traverse(todo, free); + llist_traverse(done, free); + + return 0; +} + +void xchdir(char *path) +{ + if (chdir(path)) perror_exit("chdir '%s'", path); +} + +void xchroot(char *path) +{ + if (chroot(path)) error_exit("chroot '%s'", path); + xchdir("/"); +} + +struct passwd *xgetpwuid(uid_t uid) +{ + struct passwd *pwd = getpwuid(uid); + if (!pwd) error_exit("bad uid %ld", (long)uid); + return pwd; +} + +struct group *xgetgrgid(gid_t gid) +{ + struct group *group = getgrgid(gid); + + if (!group) perror_exit("gid %ld", (long)gid); + return group; +} + +unsigned xgetuid(char *name) +{ + struct passwd *up = getpwnam(name); + char *s = 0; + long uid; + + if (up) return up->pw_uid; + + uid = estrtol(name, &s, 10); + if (!errno && s && !*s && uid>=0 && uid<=UINT_MAX) return uid; + + error_exit("bad user '%s'", name); +} + +unsigned xgetgid(char *name) +{ + struct group *gr = getgrnam(name); + char *s = 0; + long gid; + + if (gr) return gr->gr_gid; + + gid = estrtol(name, &s, 10); + if (!errno && s && !*s && gid>=0 && gid<=UINT_MAX) return gid; + + error_exit("bad group '%s'", name); +} + +struct passwd *xgetpwnam(char *name) +{ + struct passwd *up = getpwnam(name); + + if (!up) perror_exit("user '%s'", name); + return up; +} + +struct group *xgetgrnam(char *name) +{ + struct group *gr = getgrnam(name); + + if (!gr) perror_exit("group '%s'", name); + return gr; +} + +// setuid() can fail (for example, too many processes belonging to that user), +// which opens a security hole if the process continues as the original user. + +void xsetuser(struct passwd *pwd) +{ + if (initgroups(pwd->pw_name, pwd->pw_gid) || setgid(pwd->pw_uid) + || setuid(pwd->pw_uid)) perror_exit("xsetuser '%s'", pwd->pw_name); +} + +// This can return null (meaning file not found). It just won't return null +// for memory allocation reasons. +char *xreadlink(char *name) +{ + int len, size = 0; + char *buf = 0; + + // Grow by 64 byte chunks until it's big enough. + for(;;) { + size +=64; + buf = xrealloc(buf, size); + len = readlink(name, buf, size); + + if (len<0) { + free(buf); + return 0; + } + if (lensizeof(libbuf)) len = sizeof(libbuf); + + len = read(in, libbuf, len); + if (!len && errno==EAGAIN) continue; + if (len<1) break; + if (consumed) *consumed += len; + if (writeall(out, libbuf, len) != len) return -1; + total += len; + } + + return total; +} + +// error_exit if we couldn't copy all bytes +long long xsendfile_len(int in, int out, long long bytes) +{ + long long len = sendfile_len(in, out, bytes, 0); + + if (bytes != -1 && bytes != len) { + if (out == 1 && len<0) xexit(); + error_exit("short %s", (len<0) ? "write" : "read"); + } + + return len; +} + +// warn and pad with zeroes if we couldn't copy all bytes +void xsendfile_pad(int in, int out, long long len) +{ + len -= xsendfile_len(in, out, len); + if (len) { + perror_msg("short read"); + memset(libbuf, 0, sizeof(libbuf)); + while (len) { + int i = len>sizeof(libbuf) ? sizeof(libbuf) : len; + + xwrite(out, libbuf, i); + len -= i; + } + } +} + +// copy all of in to out +long long xsendfile(int in, int out) +{ + return xsendfile_len(in, out, -1); +} + +double xstrtod(char *s) +{ + char *end; + double d; + + errno = 0; + d = strtod(s, &end); + if (!errno && *end) errno = E2BIG; + if (errno) perror_exit("strtod %s", s); + + return d; +} + +// parse fractional seconds with optional s/m/h/d suffix +long xparsetime(char *arg, long zeroes, long *fraction) +{ + long l, fr = 0, mask = 1; + char *end; + + if (*arg != '.' && !isdigit(*arg)) error_exit("Not a number '%s'", arg); + l = strtoul(arg, &end, 10); + if (*end == '.') { + end++; + while (zeroes--) { + fr *= 10; + mask *= 10; + if (isdigit(*end)) fr += *end++-'0'; + } + while (isdigit(*end)) end++; + } + + // Parse suffix + if (*end) { + int ismhd[]={1,60,3600,86400}, i = stridx("smhd", *end); + + if (i == -1 || *(end+1)) error_exit("Unknown suffix '%s'", end); + l *= ismhd[i]; + fr *= ismhd[i]; + l += fr/mask; + fr %= mask; + } + if (fraction) *fraction = fr; + + return l; +} + +long long xparsemillitime(char *arg) +{ + long l, ll; + + l = xparsetime(arg, 3, &ll); + + return (l*1000LL)+ll; +} + + + +// Compile a regular expression into a regex_t +void xregcomp(regex_t *preg, char *regex, int cflags) +{ + int rc; + + // BSD regex implementations don't support the empty regex (which isn't + // allowed in the POSIX grammar), but glibc does. Fake it for BSD. + if (!*regex) { + regex = "()"; + cflags |= REG_EXTENDED; + } + + if ((rc = regcomp(preg, regex, cflags))) { + regerror(rc, preg, libbuf, sizeof(libbuf)); + error_exit("bad regex: %s", libbuf); + } +} + +char *xtzset(char *new) +{ + char *old = getenv("TZ"); + + if (old) old = xstrdup(old); + if (new ? setenv("TZ", new, 1) : unsetenv("TZ")) perror_exit("setenv"); + tzset(); + + return old; +} + +// Set a signal handler +void xsignal_flags(int signal, void *handler, int flags) +{ + struct sigaction *sa = (void *)libbuf; + + memset(sa, 0, sizeof(struct sigaction)); + sa->sa_handler = handler; + sa->sa_flags = flags; + + if (sigaction(signal, sa, 0)) perror_exit("xsignal %d", signal); +} + +void xsignal(int signal, void *handler) +{ + xsignal_flags(signal, handler, 0); +} + + +time_t xvali_date(struct tm *tm, char *str) +{ + time_t t; + + if (tm && (unsigned)tm->tm_sec<=60 && (unsigned)tm->tm_min<=59 + && (unsigned)tm->tm_hour<=23 && tm->tm_mday && (unsigned)tm->tm_mday<=31 + && (unsigned)tm->tm_mon<=11 && (t = mktime(tm)) != -1) return t; + + error_exit("bad date %s", str); +} + +// Parse date string (relative to current *t). Sets time_t and nanoseconds. +void xparsedate(char *str, time_t *t, unsigned *nano, int endian) +{ + struct tm tm; + time_t now = *t; + int len = 0, i = 0; + // Formats with seconds come first. Posix can't agree on whether 12 digits + // has year before (touch -t) or year after (date), so support both. + char *s = str, *p, *oldtz = 0, *formats[] = {"%Y-%m-%d %T", "%Y-%m-%dT%T", + "%H:%M:%S", "%Y-%m-%d %H:%M", "%Y-%m-%d", "%H:%M", "%m%d%H%M", + endian ? "%m%d%H%M%y" : "%y%m%d%H%M", + endian ? "%m%d%H%M%C%y" : "%C%y%m%d%H%M"}; + + *nano = 0; + + // Parse @UNIXTIME[.FRACTION] + if (*str == '@') { + long long ll; + + // Collect seconds and nanoseconds. + // &ll is not just t because we can't guarantee time_t is 64 bit (yet). + sscanf(s, "@%lld%n", &ll, &len); + if (s[len]=='.') { + s += len+1; + for (len = 0; len<9; len++) { + *nano *= 10; + if (isdigit(*s)) *nano += *s++-'0'; + } + } + *t = ll; + if (!s[len]) return; + xvali_date(0, str); + } + + // Trailing Z means UTC timezone, don't expect libc to know this. + // (Trimming it off here means it won't show up in error messages.) + if ((i = strlen(str)) && toupper(str[i-1])=='Z') { + str[--i] = 0; + oldtz = getenv("TZ"); + if (oldtz) oldtz = xstrdup(oldtz); + setenv("TZ", "UTC0", 1); + } + + // Try each format + for (i = 0; i2) { + len = 0; + sscanf(p, "%2u%n", &tm.tm_sec, &len); + p += len; + } + // nanoseconds + for (len = 0; len<9; len++) { + *nano *= 10; + if (isdigit(*p)) *nano += *p++-'0'; + } + } + + if (!*p) break; + } + } + + // Sanity check field ranges + *t = xvali_date((i!=ARRAY_LEN(formats)) ? &tm : 0, str); + + if (oldtz) setenv("TZ", oldtz, 1); + free(oldtz); +} + +char *xgetline(FILE *fp, int *len) +{ + char *new = 0; + size_t linelen = 0; + long ll; + + errno = 0; + if (1>(ll = getline(&new, &linelen, fp))) { + if (errno) perror_msg("getline"); + new = 0; + } else if (new[linelen-1] == '\n') new[--linelen] = 0; + if (len) *len = ll; + + return new; +} diff --git a/aosp/external/toybox/main.c b/aosp/external/toybox/main.c new file mode 100644 index 0000000000000000000000000000000000000000..60cb2b0787dad29d0b9c6d669c92ff428755fd1c --- /dev/null +++ b/aosp/external/toybox/main.c @@ -0,0 +1,245 @@ +/* Toybox infrastructure. + * + * Copyright 2006 Rob Landley + */ + +#include "toys.h" + +// Populate toy_list[]. + +#undef NEWTOY +#undef OLDTOY +#define NEWTOY(name, opts, flags) {#name, name##_main, OPTSTR_##name, flags}, +#define OLDTOY(name, oldname, flags) \ + {#name, oldname##_main, OPTSTR_##oldname, flags}, + +struct toy_list toy_list[] = { +#include "generated/newtoys.h" +}; + +// global context for this command. + +struct toy_context toys; +union global_union this; +char toybuf[4096], libbuf[4096]; + +struct toy_list *toy_find(char *name) +{ + int top, bottom, middle; + + if (!CFG_TOYBOX || strchr(name, '/')) return 0; + + // Multiplexer name works as prefix, else skip first entry (it's out of order) + if (!toys.which && strstart(&name, "toybox")) return toy_list; + bottom = 1; + + // Binary search to find this command. + top = ARRAY_LEN(toy_list)-1; + for (;;) { + int result; + + middle = (top+bottom)/2; + if (middletop) return 0; + result = strcmp(name,toy_list[middle].name); + if (!result) return toy_list+middle; + if (result<0) top = --middle; + else bottom = ++middle; + } +} + +// Figure out whether or not anything is using the option parsing logic, +// because the compiler can't figure out whether or not to optimize it away +// on its' own. NEED_OPTIONS becomes a constant allowing if() to optimize +// stuff out via dead code elimination. + +#undef NEWTOY +#undef OLDTOY +#define NEWTOY(name, opts, flags) opts || +#define OLDTOY(name, oldname, flags) OPTSTR_##oldname || +static const int NEED_OPTIONS = +#include "generated/newtoys.h" +0; // Ends the opts || opts || opts... + +static void unknown(char *name) +{ + toys.exitval = 127; + toys.which = toy_list; + error_exit("Unknown command %s", name); +} + +// Setup toybox global state for this command. +static void toy_singleinit(struct toy_list *which, char *argv[]) +{ + toys.which = which; + toys.argv = argv; + toys.toycount = ARRAY_LEN(toy_list); + + // Parse --help and --version for (almost) all commands + if (CFG_TOYBOX_HELP_DASHDASH && !(which->flags & TOYFLAG_NOHELP) && argv[1]) { + if (!strcmp(argv[1], "--help")) { + if (CFG_TOYBOX && toys.which == toy_list && toys.argv[2]) + if (!(toys.which = toy_find(toys.argv[2]))) unknown(toys.argv[2]); + show_help(stdout, 1); + xexit(); + } + + if (!strcmp(argv[1], "--version")) { + xputs("toybox "TOYBOX_VERSION); + xexit(); + } + } + + if (NEED_OPTIONS && which->options) get_optflags(); + else { + toys.optargs = argv+1; + for (toys.optc = 0; toys.optargs[toys.optc]; toys.optc++); + } + + if (!(which->flags & TOYFLAG_NOFORK)) { + toys.old_umask = umask(0); + if (!(which->flags & TOYFLAG_UMASK)) umask(toys.old_umask); + if (CFG_TOYBOX_I18N) { + // Deliberately try C.UTF-8 before the user's locale to work around users + // that choose non-UTF-8 locales. macOS doesn't support C.UTF-8 though. + if (!setlocale(LC_CTYPE, "C.UTF-8")) setlocale(LC_CTYPE, ""); + } + setlinebuf(stdout); + } +} + +// Full init needed by multiplexer or reentrant calls, calls singleinit at end +void toy_init(struct toy_list *which, char *argv[]) +{ + void *oldwhich = toys.which; + + // Drop permissions for non-suid commands. + + if (CFG_TOYBOX_SUID) { + if (!toys.which) toys.which = toy_list; + + uid_t uid = getuid(), euid = geteuid(); + + if (!(which->flags & TOYFLAG_STAYROOT)) { + if (uid != euid) { + if (setuid(uid)) perror_exit("setuid %d->%d", euid, uid); // drop root + euid = uid; + toys.wasroot++; + } + } else if (CFG_TOYBOX_DEBUG && uid && which != toy_list) + error_msg("Not installed suid root"); + + if ((which->flags & TOYFLAG_NEEDROOT) && euid) help_exit("Not root"); + } + + // Free old toys contents (to be reentrant), but leave rebound if any + // don't blank old optargs if our new argc lives in the old optargs. + if (argvtoys.optargs+toys.optc) free(toys.optargs); + memset(&toys, 0, offsetof(struct toy_context, rebound)); + if (oldwhich) memset(&this, 0, sizeof(this)); + + // Continue to portion of init needed by standalone commands + toy_singleinit(which, argv); +} + +// Run an internal toybox command. +// Only returns if it can't run command internally, otherwise xexit() when done. +void toy_exec_which(struct toy_list *which, char *argv[]) +{ + // Return if we can't find it (which includes no multiplexer case), + if (!which) return; + + // Return if stack depth getting noticeable (proxy for leaked heap, etc). + + // Compiler writers have decided subtracting char * is undefined behavior, + // so convert to integers. (LP64 says sizeof(long)==sizeof(pointer).) + // Signed typecast so stack growth direction is irrelevant: we're measuring + // the distance between two pointers on the same stack, hence the labs(). + if (!CFG_TOYBOX_NORECURSE && toys.stacktop) + if (labs((long)toys.stacktop-(long)&which)>6000) return; + + // Return if we need to re-exec to acquire root via suid bit. + if (toys.which && (which->flags&TOYFLAG_ROOTONLY) && toys.wasroot) return; + + // Run command + toy_init(which, argv); + if (toys.which) toys.which->toy_main(); + xexit(); +} + +// Lookup internal toybox command to run via argv[0] +void toy_exec(char *argv[]) +{ + toy_exec_which(toy_find(basename(*argv)), argv); +} + +// Multiplexer command, first argument is command to run, rest are args to that. +// If first argument starts with - output list of command install paths. +void toybox_main(void) +{ + static char *toy_paths[] = {"usr/","bin/","sbin/",0}; + int i, len = 0; + + // fast path: try to exec immediately. + // (Leave toys.which null to disable suid return logic.) + // Try dereferencing one layer of symlink + if (toys.argv[1]) { + toy_exec(toys.argv+1); + if (0 65) len = 0; + xputc(len ? ' ' : '\n'); + } + } + xputc('\n'); +} + +int main(int argc, char *argv[]) +{ + // don't segfault if our environment is crazy + if (!*argv) return 127; + + // Snapshot stack location so we can detect recursion depth later. + // Nommu has special reentry path, !stacktop = "vfork/exec self happened" + if (!CFG_TOYBOX_FORK && (0x80 & **argv)) **argv &= 0x7f; + else { + int stack_start; // here so probe var won't permanently eat stack + + toys.stacktop = &stack_start; + } + + // Android before O had non-default SIGPIPE, 7 years = remove in Sep 2024. + if (CFG_TOYBOX_ON_ANDROID) signal(SIGPIPE, SIG_DFL); + + if (CFG_TOYBOX) { + // Call the multiplexer with argv[] as its arguments so it can toy_find() + toys.argv = argv-1; + toybox_main(); + } else { + // single command built standalone with no multiplexer is first list entry + toy_singleinit(toy_list, argv); + toy_list->toy_main(); + } + + xexit(); +} diff --git a/aosp/external/toybox/regenerate.sh b/aosp/external/toybox/regenerate.sh new file mode 100644 index 0000000000000000000000000000000000000000..689a482a79c395c221bbd8a2d7d242285d5e5d94 --- /dev/null +++ b/aosp/external/toybox/regenerate.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +set -e + +rm -rf .config generated/ android/ + +function generate() { + which=$1 + echo -e "\n-------- $1\n" + + # These are the only generated files we actually need. + files="config.h flags.h globals.h help.h newtoys.h tags.h" + + cp .config-$which .config + NOBUILD=1 scripts/make.sh + out=android/$which/generated/ + mkdir -p $out + for f in $files; do cp generated/$f $out/$f ; done + rm -rf .config generated/ +} + +generate "device" +generate "linux" +generate "mac" diff --git a/aosp/external/toybox/run-tests-on-android.sh b/aosp/external/toybox/run-tests-on-android.sh new file mode 100644 index 0000000000000000000000000000000000000000..d85cca31e959caadfb7906a0a53ee653d6211bb1 --- /dev/null +++ b/aosp/external/toybox/run-tests-on-android.sh @@ -0,0 +1,107 @@ +#!/bin/bash + +# +# Setup. +# + +# Copy the toybox tests across. +adb shell rm -rf /data/local/tmp/toybox-tests/ +adb shell mkdir /data/local/tmp/toybox-tests/ +adb push tests/ /data/local/tmp/toybox-tests/ +adb push scripts/runtest.sh /data/local/tmp/toybox-tests/ + +# Make a temporary directory on the device. +tmp_dir=`adb shell mktemp --directory /data/local/tmp/toybox-tests-tmp.XXXXXXXXXX` + +if tty -s; then + green="\033[1;32m" + red="\033[1;31m" + plain="\033[0m" +else + green="" + red="" + plain="" +fi + +# Force pty allocation (http://b/142798587). +dash_t="-tt" + +test_toy() { + toy=$1 + + echo + + location=$(adb shell "which $toy") + if [ -z "$location" ]; then + echo "-- $toy not present" + return + fi + + echo "-- $toy" + + implementation=$(adb shell "realpath $location") + non_toy=false + if [ "$implementation" != "/system/bin/toybox" ]; then + echo "-- note: $toy is non-toybox implementation" + non_toy=true + fi + + adb shell $dash_t "\ + export C=\"\$(which $toy)\"; \ + export CMDNAME=$toy; \ + export FILES=/data/local/tmp/toybox-tests/tests/files/ ; \ + export LANG=en_US.UTF-8; \ + export VERBOSE=1 ; \ + mkdir $tmp_dir/$toy && cd $tmp_dir/$toy ; \ + source /data/local/tmp/toybox-tests/runtest.sh ; \ + source /data/local/tmp/toybox-tests/tests/$toy.test ; \ + if [ "\$FAILCOUNT" -ne 0 ]; then exit 1; fi; \ + cd .. && rm -rf $toy" + if [ $? -eq 0 ]; then + pass_count=$(($pass_count+1)) + elif [ "$non_toy" = "true" ]; then + non_toy_failures="$non_toy_failures $toy" + else + failures="$failures $toy" + fi +} + +# +# Run the selected test or all tests. +# + +failures="" +pass_count=0 +if [ "$#" -eq 0 ]; then + # Run all the tests. + for t in tests/*.test; do + toy=`echo $t | sed 's|tests/||' | sed 's|\.test||'` + test_toy $toy + done +else + # Just run the tests for the given toys. + for toy in "$@"; do + test_toy $toy + done +fi + +# +# Show a summary and return a meaningful exit status. +# + +echo +echo "_________________________________________________________________________" +echo +echo -e "${green}PASSED${plain}: $pass_count" +for failure in $failures; do + echo -e "${red}FAILED${plain}: $failure" +done +for failure in $non_toy_failures; do + echo -e "${red}FAILED${plain}: $failure (ignoring)" +done + +# We should have run *something*... +if [ $pass_count -eq 0 ]; then exit 1; fi +# And all failures are bad... +if [ -n "$failures" ]; then exit 1; fi +exit 0 diff --git a/aosp/external/toybox/scripts/bloatcheck b/aosp/external/toybox/scripts/bloatcheck new file mode 100644 index 0000000000000000000000000000000000000000..fff4690f3e31071a6502f86903b72c81d86591bd --- /dev/null +++ b/aosp/external/toybox/scripts/bloatcheck @@ -0,0 +1,67 @@ +#!/bin/bash + +if [ $# -ne 2 ] +then + echo "usage: bloatcheck old new" + exit 1 +fi + +addline() +{ + NEXT="$(printf "%s% $((50-${#LASTNAME}))d% 10d %10d" "$LASTNAME" "$OLD" "$NEW" "$DELTA")" + [ -z "$STUFF" ] && + STUFF="$NEXT" || + STUFF="$(printf "%s\n%s" "$STUFF" "$NEXT")" +} + +do_bloatcheck() +{ + LASTNAME= + DELTA=0 + TOTAL=0 + OLD=0 + NEW=0 + STUFF= + + printf "name% 46s% 10s% 11s\n" old new delta + echo "-----------------------------------------------------------------------" + while read a b c d + do + THISNAME=$(echo "$d" | sed 's/[.][0-9]*$//') + + if [ "$LASTNAME" != "$THISNAME" ] + then + TOTAL=$(($TOTAL+$DELTA)) + [ $DELTA -ne 0 ] && addline + LASTNAME="$THISNAME" + DELTA=0 + OLD=0 + NEW=0 + fi + + SIZE=$(printf "%d" "0x$b") + if [ "$a" == "-" ] + then + OLD=$(($OLD+$SIZE)) + SIZE=$((-1*$SIZE)) + else + NEW=$(($NEW+$SIZE)) + fi + DELTA=$(($DELTA+$SIZE)) + done + + TOTAL=$(($TOTAL+$DELTA)) + [ $DELTA -ne 0 ] && addline + + echo "$STUFF" | sort -k4,4nr + echo "-----------------------------------------------------------------------" + printf "% 71d total\n" "$TOTAL" +} + +DIFF1=`mktemp base.XXXXXXX` +DIFF2=`mktemp bloat.XXXXXXX` +trap "rm $DIFF1 $DIFF2" EXIT +nm --size-sort "$1" | sort -k3,3 > $DIFF1 +nm --size-sort "$2" | sort -k3,3 > $DIFF2 +diff -U 0 $DIFF1 $DIFF2 | tail -n +3 | sed -n 's/^\([-+]\)/\1 /p' \ + | sort -k4,4 | do_bloatcheck diff --git a/aosp/external/toybox/scripts/change.sh b/aosp/external/toybox/scripts/change.sh new file mode 100644 index 0000000000000000000000000000000000000000..99dcfde95ae3a551f9dca59f87286f93026698ec --- /dev/null +++ b/aosp/external/toybox/scripts/change.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# build each command as a standalone executable + +NOBUILD=1 scripts/make.sh > /dev/null && +${HOSTCC:-cc} -I . scripts/install.c -o generated/instlist && +export PREFIX=${PREFIX:-change/} && +mkdir -p "$PREFIX" || exit 1 + +# Build all the commands standalone except: + +# sh - shell builtins like "cd" and "exit" need the multiplexer +# help - needs to know what other commands are enabled (use command --help) + +for i in $(generated/instlist | egrep -vw "sh|help") +do + echo -n " $i" && + scripts/single.sh $i > /dev/null 2>$PREFIX/${i}.bad && + rm $PREFIX/${i}.bad || echo -n '*' +done +echo diff --git a/aosp/external/toybox/scripts/config2help.c b/aosp/external/toybox/scripts/config2help.c new file mode 100644 index 0000000000000000000000000000000000000000..0eff70872591a93cd438d415f0f89a81d1ffb84c --- /dev/null +++ b/aosp/external/toybox/scripts/config2help.c @@ -0,0 +1,523 @@ +/* config2.help.c - config2hep Config.in .config > help.h + + function parse() reads Config.in data into *sym list, then + we read .config and set sym->try on each enabled symbol. + +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//****************** functions copied from lib/*.c ******************** + +struct double_list { + struct double_list *next, *prev; + char *data; +}; + +// Die unless we can allocate memory. +void *xmalloc(size_t size) +{ + void *ret = malloc(size); + if (!ret) { + fprintf(stderr, "xmalloc(%ld)", (long)size); + exit(1); + } + + return ret; +} + +// Die unless we can allocate enough space to sprintf() into. +char *xmprintf(char *format, ...) +{ + va_list va, va2; + int len; + char *ret; + + va_start(va, format); + va_copy(va2, va); + + // How long is it? + len = vsnprintf(0, 0, format, va); + len++; + va_end(va); + + // Allocate and do the sprintf() + ret = xmalloc(len); + vsnprintf(ret, len, format, va2); + va_end(va2); + + return ret; +} + +// Die unless we can open/create a file, returning FILE *. +FILE *xfopen(char *path, char *mode) +{ + FILE *f = fopen(path, mode); + if (!f) { + fprintf(stderr, "No file %s", path); + exit(1); + } + return f; +} + +void *dlist_pop(void *list) +{ + struct double_list **pdlist = (struct double_list **)list, *dlist = *pdlist; + + if (dlist->next == dlist) *pdlist = 0; + else { + dlist->next->prev = dlist->prev; + dlist->prev->next = *pdlist = dlist->next; + } + + return dlist; +} + +void dlist_add_nomalloc(struct double_list **list, struct double_list *new) +{ + if (*list) { + new->next = *list; + new->prev = (*list)->prev; + (*list)->prev->next = new; + (*list)->prev = new; + } else *list = new->next = new->prev = new; +} + + +// Add an entry to the end of a doubly linked list +struct double_list *dlist_add(struct double_list **list, char *data) +{ + struct double_list *new = xmalloc(sizeof(struct double_list)); + + new->data = data; + dlist_add_nomalloc(list, new); + + return new; +} + +//****************** end copies of lib/*.c ************* + +// Parse config files into data structures. + +struct symbol { + struct symbol *next; + int enabled, help_indent; + char *name, *depends; + struct double_list *help; +} *sym; + +// remove leading spaces +char *skip_spaces(char *s) +{ + while (isspace(*s)) s++; + + return s; +} + +// if line starts with name (as whole word) return pointer after it, else NULL +char *keyword(char *name, char *line) +{ + int len = strlen(name); + + line = skip_spaces(line); + if (strncmp(name, line, len)) return 0; + line += len; + if (*line && !isspace(*line)) return 0; + line = skip_spaces(line); + + return line; +} + +// dlist_pop() freeing wrapper structure for you. +char *dlist_zap(struct double_list **help) +{ + struct double_list *dd = dlist_pop(help); + char *s = dd->data; + + free(dd); + + return s; +} + +int zap_blank_lines(struct double_list **help) +{ + int got = 0; + + while (*help) { + char *s; + + s = skip_spaces((*help)->data); + + if (*s) break; + got++; + free(dlist_zap(help)); + } + + return got; +} + +// Collect "-a blah" description lines following a blank line (or start). +// Returns array of removed lines with *len entries (0 for none). + +// Moves *help to new start of text (in case dash lines were at beginning). +// Sets *from to where dash lines removed from (in case they weren't). +// Discards blank lines before and after dashlines. + +// If no prefix, *help NULL. If no postfix, *from == *help +// if no dashlines returned *from == *help. + +char **grab_dashlines(struct double_list **help, struct double_list **from, + int *len) +{ + struct double_list *dd; + char *s, **list; + int count = 0; + + *len = 0; + zap_blank_lines(help); + *from = *help; + + // Find start of dash block. Must be at start or after blank line. + for (;;) { + s = skip_spaces((*from)->data); + if (*s == '-' && s[1] != '-' && !count) break; + + if (!*s) count = 0; + else count++; + + *from = (*from)->next; + if (*from == *help) return 0; + } + + // If there was whitespace before this, zap it. This can't take out *help + // because zap_blank_lines skipped blank lines, and we had to have at least + // one non-blank line (a dash line) to get this far. + while (!*skip_spaces((*from)->prev->data)) { + *from = (*from)->prev; + free(dlist_zap(from)); + } + + // Count number of dashlines, copy out to array, zap trailing whitespace + // If *help was at start of dashblock, move it with *from + count = 0; + dd = *from; + if (*help == *from) *help = 0; + for (;;) { + if (*skip_spaces(dd->data) != '-') break; + count++; + if (*from == (dd = dd->next)) break; + } + + list = xmalloc(sizeof(char *)*count); + *len = count; + while (count) list[--count] = dlist_zap(from); + + return list; +} + +// Read Config.in (and includes) to populate global struct symbol *sym list. +void parse(char *filename) +{ + FILE *fp = xfopen(filename, "r"); + struct symbol *new = 0; + + for (;;) { + char *s, *line = NULL; + size_t len; + + // Read line, trim whitespace at right edge. + if (getline(&line, &len, fp) < 1) break; + s = line+strlen(line); + while (--s >= line) { + if (!isspace(*s)) break; + *s = 0; + } + + // source or config keyword at left edge? + if (*line && !isspace(*line)) { + if ((s = keyword("config", line))) { + memset(new = xmalloc(sizeof(struct symbol)), 0, sizeof(struct symbol)); + new->next = sym; + new->name = s; + sym = new; + } else if ((s = keyword("source", line))) parse(s); + + continue; + } + if (!new) continue; + + if (sym && sym->help_indent) { + dlist_add(&(new->help), line); + if (sym->help_indent < 0) { + sym->help_indent = 0; + while (isspace(line[sym->help_indent])) sym->help_indent++; + } + } + else if ((s = keyword("depends", line)) && (s = keyword("on", s))) + new->depends = s; + else if (keyword("help", line)) sym->help_indent = -1; + } + + fclose(fp); +} + +int charsort(void *a, void *b) +{ + char *aa = a, *bb = b; + + if (*aa < *bb) return -1; + if (*aa > *bb) return 1; + return 0; +} + +int dashsort(char **a, char **b) +{ + char *aa = *a, *bb = *b; + + if (aa[1] < bb[1]) return -1; + if (aa[1] > bb[1]) return 1; + return 0; +} + +int dashlinesort(char **a, char **b) +{ + return strcmp(*a, *b); +} + +// Three stages: read data, collate entries, output results. + +int main(int argc, char *argv[]) +{ + FILE *fp; + + if (argc != 3) { + fprintf(stderr, "usage: config2help Config.in .config\n"); + exit(1); + } + + // Stage 1: read data. Read Config.in to global 'struct symbol *sym' list, + // then read .config to set "enabled" member of each enabled symbol. + + // Read Config.in + parse(argv[1]); + + // read .config + fp = xfopen(argv[2], "r"); + for (;;) { + char *line = NULL; + size_t len; + + if (getline(&line, &len, fp) < 1) break; + if (!strncmp("CONFIG_", line, 7)) { + struct symbol *try; + char *s = line+7; + + for (try=sym; try; try=try->next) { + len = strlen(try->name); + if (!strncmp(try->name, s, len) && s[len]=='=' && s[len+1]=='y') { + try->enabled++; + break; + } + } + } + } + + // Stage 2: process data. + + // Collate help according to usage, depends, and .config + + // Loop through each entry, finding duplicate enabled "usage:" names + // This is in reverse order, so last entry gets collated with previous + // entry until we run out of matching pairs. + for (;;) { + struct symbol *throw = 0, *catch; + char *this, *that, *cusage, *tusage, *name = 0; + int len; + + // find a usage: name and collate all enabled entries with that name + for (catch = sym; catch; catch = catch->next) { + if (catch->enabled != 1) continue; + if (catch->help && (that = keyword("usage:", catch->help->data))) { + struct double_list *cfrom, *tfrom, *anchor; + char *try, **cdashlines, **tdashlines, *usage; + int clen, tlen; + + // Align usage: lines, finding a matching pair so we can suck help + // text out of throw into catch, copying from this to that + if (!throw) usage = that; + else if (strncmp(name, that, len) || !isspace(that[len])) continue; + catch->enabled++; + while (!isspace(*that) && *that) that++; + if (!throw) len = that-usage; + free(name); + name = strndup(usage, len); + that = skip_spaces(that); + if (!throw) { + throw = catch; + this = that; + + continue; + } + + // Grab option description lines to collate from catch and throw + tusage = dlist_zap(&throw->help); + tdashlines = grab_dashlines(&throw->help, &tfrom, &tlen); + cusage = dlist_zap(&catch->help); + cdashlines = grab_dashlines(&catch->help, &cfrom, &clen); + anchor = catch->help; + + // If we've got both, collate and alphebetize + if (cdashlines && tdashlines) { + char **new = xmalloc(sizeof(char *)*(clen+tlen)); + + memcpy(new, cdashlines, sizeof(char *)*clen); + memcpy(new+clen, tdashlines, sizeof(char *)*tlen); + free(cdashlines); + free(tdashlines); + qsort(new, clen+tlen, sizeof(char *), (void *)dashlinesort); + cdashlines = new; + + // If just one, make sure it's in catch. + } else if (tdashlines) cdashlines = tdashlines; + + // If throw had a prefix, insert it before dashlines, with a + // blank line if catch had a prefix. + if (tfrom && tfrom != throw->help) { + if (throw->help || catch->help) dlist_add(&cfrom, strdup("")); + else { + dlist_add(&cfrom, 0); + anchor = cfrom->prev; + } + while (throw->help && throw->help != tfrom) + dlist_add(&cfrom, dlist_zap(&throw->help)); + if (cfrom && cfrom->prev->data && *skip_spaces(cfrom->prev->data)) + dlist_add(&cfrom, strdup("")); + } + if (!anchor) { + dlist_add(&cfrom, 0); + anchor = cfrom->prev; + } + + // Splice sorted lines back in place + if (cdashlines) { + tlen += clen; + + for (clen = 0; clen < tlen; clen++) + dlist_add(&cfrom, cdashlines[clen]); + } + + // If there were no dashlines, text would be considered prefix, so + // the list is definitely no longer empty, so discard placeholder. + if (!anchor->data) dlist_zap(&anchor); + + // zap whitespace at end of catch help text + while (!*skip_spaces(anchor->prev->data)) { + anchor = anchor->prev; + free(dlist_zap(&anchor)); + } + + // Append trailing lines. + while (tfrom) dlist_add(&anchor, dlist_zap(&tfrom)); + + // Collate first [-abc] option block in usage: lines + try = 0; + if (*this == '[' && this[1] == '-' && this[2] != '-' && + *that == '[' && that[1] == '-' && that[2] != '-') + { + char *from = this+2, *to = that+2; + int ff = strcspn(from, " ]"), tt = strcspn(to, " ]"); + + if (from[ff] == ']' && to[tt] == ']') { + try = xmprintf("[-%.*s%.*s] ", ff, from, tt, to); + qsort(try+2, ff+tt, 1, (void *)charsort); + this = skip_spaces(this+ff+3); + that = skip_spaces(that+tt+3); + } + } + + // The list is definitely no longer empty, so discard placeholder. + if (!anchor->data) dlist_zap(&anchor); + + // Add new collated line (and whitespace). + dlist_add(&anchor, xmprintf("%*cusage: %.*s %s%s%s%s", + catch->help_indent, ' ', len, name, try ? try : "", + this, *this ? " " : "", that)); + free(try); + dlist_add(&anchor, strdup("")); + free(cusage); + free(tusage); + throw->enabled = 0; + throw = catch; + throw->help = anchor->prev->prev; + + throw = catch; + this = throw->help->data + throw->help_indent + 8 + len; + } + } + + // Did we find one? + + if (!throw) break; + } + + // Stage 3: output results to stdout. + + // Print out help #defines + while (sym) { + struct double_list *dd; + + if (sym->help) { + int i, blank; + char *s; + + strcpy(s = xmalloc(strlen(sym->name)+1), sym->name); + + for (i = 0; s[i]; i++) s[i] = tolower(s[i]); + printf("#define HELP_%s \"", s); + free(s); + + dd = sym->help; + blank = 0; + for (;;) { + + // Trim leading whitespace + s = dd->data; + i = sym->help_indent; + while (isspace(*s) && i--) s++; + + // Only one blank line between nonblank lines, not at start or end. + if (!*s) blank = 2; + else { + while (blank--) { + putchar('\\'); + putchar('n'); + } + blank = 1; + } + + for (i=0; s[i]; i++) { + if (s[i] == '"' || s[i] == '\\') putchar('\\'); + putchar(s[i]); + } + dd = dd->next; + if (dd == sym->help) break; + } + printf("\"\n\n"); + } + sym = sym->next; + } + + return 0; +} diff --git a/aosp/external/toybox/scripts/cross.sh b/aosp/external/toybox/scripts/cross.sh new file mode 100644 index 0000000000000000000000000000000000000000..2570713daf4d78a422405ee81cd611db6e6932a2 --- /dev/null +++ b/aosp/external/toybox/scripts/cross.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +# Convenience wrapper to set $CROSS_COMPILE from short name using "ccc" +# symlink (Cross C Compiler) to a directory of cross compilers named +# $TARGET-*-cross. Tested with scripts/mcm-buildall.sh output. + +# Usage: scripts/cross.sh $TARGET make distclean defconfig toybox +# With no arguments, lists available targets. Use target "all" to iterate +# through each $TARGET from the list. + +CCC="$(dirname "$(readlink -f "$0")")"/../ccc +if [ ! -d "$CCC" ] +then + echo "Create symlink 'ccc' to cross compiler directory, ala:" + echo " ln -s ~/musl-cross-make/ccc ccc" + exit 1 +fi + +unset X Y + +# Display target list? +list() +{ + ls "$CCC" | sed 's/-.*//' | sort -u | xargs +} +[ $# -eq 0 ] && list && exit + +X="$1" +shift + +# build all targets? +if [ "$X" == all ] +then + for TARGET in $(list) + do + { + export TARGET + echo -en "\033]2;$TARGET $*\007" + "$0" $TARGET "$@" 2>&1 || mv cross-log-$TARGET.{txt,failed} + } | tee cross-log-$TARGET.txt + done + + exit +fi + +# Call command with CROSS_COMPILE= as its first argument + +Y=$(echo "$CCC/$X"-*cross) +Z=$(basename "$Y") +Y=$(readlink -f "$CCC"/$X-*cross) +export TARGET="${Z/-*/}" +X="$Y/bin/${Z/-cross/-}" +[ ! -e "${X}cc" ] && echo "${X}cc not found" && exit 1 + +CROSS_COMPILE="$X" "$@" diff --git a/aosp/external/toybox/scripts/findglobals.sh b/aosp/external/toybox/scripts/findglobals.sh new file mode 100644 index 0000000000000000000000000000000000000000..2c63164be83296b34141a8b897789eafd0cfe471 --- /dev/null +++ b/aosp/external/toybox/scripts/findglobals.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +# Quick and dirty check to see if anybody's leaked global variables. +# We should have this, toy_list, toybuf, and toys. + +nm toybox_unstripped | grep '[0-9A-Fa-f]* [BCDGRS]' | cut -d ' ' -f 3 diff --git a/aosp/external/toybox/scripts/genconfig.sh b/aosp/external/toybox/scripts/genconfig.sh new file mode 100644 index 0000000000000000000000000000000000000000..b5637f861fc0e07d6836ceea2ab2d0a0ed8dd698 --- /dev/null +++ b/aosp/external/toybox/scripts/genconfig.sh @@ -0,0 +1,164 @@ +#!/bin/bash + +# This has to be a separate file from scripts/make.sh so it can be called +# before menuconfig. (It's called again from scripts/make.sh just to be sure.) + +mkdir -p generated + +source scripts/portability.sh + +probecc() +{ + ${CROSS_COMPILE}${CC} $CFLAGS -xc -o /dev/null $1 - +} + +# Probe for a single config symbol with a "compiles or not" test. +# Symbol name is first argument, flags second, feed C file to stdin +probesymbol() +{ + probecc $2 2>/dev/null && DEFAULT=y || DEFAULT=n + rm a.out 2>/dev/null + echo -e "config $1\n\tbool" || exit 1 + echo -e "\tdefault $DEFAULT\n" || exit 1 +} + +probeconfig() +{ + > generated/cflags + # llvm produces its own really stupid warnings about things that aren't wrong, + # and although you can turn the warning off, gcc reacts badly to command line + # arguments it doesn't understand. So probe. + [ -z "$(probecc -Wno-string-plus-int <<< \#warn warn 2>&1 | grep string-plus-int)" ] && + echo -Wno-string-plus-int >> generated/cflags + + # Probe for container support on target + probesymbol TOYBOX_CONTAINER << EOF + #include + #include + #include + int x=CLONE_NEWNS|CLONE_NEWUTS|CLONE_NEWIPC|CLONE_NEWNET; + + int main(int argc, char *argv[]){printf("%d", x+SYS_unshare+ SYS_setns);} +EOF + + probesymbol TOYBOX_FIFREEZE -c << EOF + #include + #ifndef FIFREEZE + #error nope + #endif +EOF + + # Work around some uClibc limitations + probesymbol TOYBOX_ICONV -c << EOF + #include "iconv.h" +EOF + + # Android and some other platforms miss utmpx + probesymbol TOYBOX_UTMPX -c << EOF + #include + #ifndef BOOT_TIME + #error nope + #endif + int main(int argc, char *argv[]) { + struct utmpx *a; + if (0 != (a = getutxent())) return 0; + return 1; + } +EOF + + # Android is missing shadow.h + probesymbol TOYBOX_SHADOW -c << EOF + #include + int main(int argc, char *argv[]) { + struct spwd *a = getspnam("root"); return 0; + } +EOF + + # Some commands are android-specific + probesymbol TOYBOX_ON_ANDROID -c << EOF + #ifndef __ANDROID__ + #error nope + #endif +EOF + + probesymbol TOYBOX_ANDROID_SCHEDPOLICY << EOF + #include + + int main(int argc,char *argv[]) { get_sched_policy_name(0); } +EOF + + # nommu support + probesymbol TOYBOX_FORK << EOF + #include + int main(int argc, char *argv[]) { return fork(); } +EOF + echo -e '\tdepends on !TOYBOX_FORCE_NOMMU' + + probesymbol TOYBOX_PRLIMIT << EOF + #include + #include + #include + int prlimit(pid_t pid, int resource, const struct rlimit *new_limit, + struct rlimit *old_limit); + int main(int argc, char *argv[]) { prlimit(0, 0, 0, 0); } +EOF + + probesymbol TOYBOX_GETRANDOM << EOF + #include + int main(void) { char buf[100]; getrandom(buf, 100, 0); } +EOF +} + +genconfig() +{ + # Reverse sort puts posix first, examples last. + for j in $(ls toys/*/README | sort -s -r) + do + DIR="$(dirname "$j")" + + [ $(ls "$DIR" | wc -l) -lt 2 ] && continue + + echo "menu \"$(head -n 1 $j)\"" + echo + + # extract config stanzas from each source file, in alphabetical order + for i in $(ls -1 $DIR/*.c) + do + # Grab the config block for Config.in + echo "# $i" + $SED -n '/^\*\//q;/^config [A-Z]/,$p' $i || return 1 + echo + done + + echo endmenu + done +} + +probeconfig > generated/Config.probed || rm generated/Config.probed +genconfig > generated/Config.in || rm generated/Config.in + +# Find names of commands that can be built standalone in these C files +toys() +{ + grep 'TOY(.*)' "$@" | grep -v TOYFLAG_NOFORK | grep -v "0))" | \ + $SED -En 's/([^:]*):.*(OLD|NEW)TOY\( *([a-zA-Z][^,]*) *,.*/\1:\3/p' +} + +WORKING= +PENDING= +toys toys/*/*.c | ( +while IFS=":" read FILE NAME +do + [ "$NAME" == help ] && continue + [ "$NAME" == install ] && continue + echo -e "$NAME: $FILE *.[ch] lib/*.[ch]\n\tscripts/single.sh $NAME\n" + echo -e "test_$NAME:\n\tscripts/test.sh $NAME\n" + [ "${FILE/pending//}" != "$FILE" ] && + PENDING="$PENDING $NAME" || + WORKING="$WORKING $NAME" +done && +echo -e "clean::\n\t@rm -f $WORKING $PENDING" && +echo -e "list:\n\t@echo $(echo $WORKING | tr ' ' '\n' | sort | xargs)" && +echo -e "list_pending:\n\t@echo $(echo $PENDING | tr ' ' '\n' | sort | xargs)" && +echo -e ".PHONY: $WORKING $PENDING" | $SED 's/ \([^ ]\)/ test_\1/g' +) > .singlemake diff --git a/aosp/external/toybox/scripts/help.txt b/aosp/external/toybox/scripts/help.txt new file mode 100644 index 0000000000000000000000000000000000000000..7d52916b61d5cf4aa9db9a4f5350aa9ebce4dfe5 --- /dev/null +++ b/aosp/external/toybox/scripts/help.txt @@ -0,0 +1,22 @@ + toybox - Build toybox. + COMMANDNAME - Build individual toybox command as a standalone binary. + list - List COMMANDNAMEs you can build standalone. + list_pending - List unfinished COMMANDNAMEs out of toys/pending. + change - Build each command standalone under change/. + baseline - Create toybox_old for use by bloatcheck. + bloatcheck - Report size differences between old and current versions + test_COMMAND - Run tests for COMMAND (test_ps, test_cat, etc.) + tests - Run test suite against all compiled commands. + export TEST_HOST=1 to test host command, VERBOSE=1 + to show diff, VERBOSE=fail to stop after first failure. + clean - Delete temporary files. + distclean - Delete everything that isn't shipped. + install_airlock - Install toybox and host toolchain into $PREFIX directory + (providing $PATH for hermetic builds). + install_flat - Install toybox into $PREFIX directory. + install - Install toybox into subdirectories of $PREFIX. + uninstall_flat - Remove toybox from $PREFIX directory. + uninstall - Remove toybox from subdirectories of $PREFIX. + +example: CFLAGS="--static" CROSS_COMPILE=armv5l- make defconfig toybox install + diff --git a/aosp/external/toybox/scripts/install.c b/aosp/external/toybox/scripts/install.c new file mode 100644 index 0000000000000000000000000000000000000000..3ffb867d106cf01bd8337efa661c1bf706f1918b --- /dev/null +++ b/aosp/external/toybox/scripts/install.c @@ -0,0 +1,37 @@ +/* Wrapper to make installation easier with cross-compiling. + * + * Copyright 2006 Rob Landley + */ + +#include +#include "generated/config.h" +#include "lib/toyflags.h" + +#define NEWTOY(name, opts, flags) {#name, flags}, +#define OLDTOY(name, oldname, flags) {#name, flags}, + +// Populate toy_list[]. + +struct {char *name; int flags;} toy_list[] = { +#include "generated/newtoys.h" +}; + +int main(int argc, char *argv[]) +{ + static char *toy_paths[]={"usr/","bin/","sbin/",0}; + int i, len = 0; + + // Output list of applets. + for (i=1; i1) { + int j; + for (j=0; toy_paths[j]; j++) + if (fl & (1</dev/null +fi +cd "$PREFIX" || exit 1 + +# Make links to toybox + +EXIT=0 + +for i in $COMMANDS +do + # Figure out target of link + + if [ -z "$LONG_PATH" ] + then + DOTPATH="" + else + # Create subdirectory for command to go in (if necessary) + + DOTPATH="$(dirname "$i")"/ + if [ -z "$UNINSTALL" ] + then + mkdir -p "$DOTPATH" || exit 1 + fi + + if [ -z "$LINK_TYPE" ] + then + DOTPATH="bin/" + else + if [ "$DOTPATH" != "$LONG_PATH" ] + then + # For symlinks we need ../../bin style relative paths + DOTPATH="$(echo $DOTPATH | sed -e 's@[^/]*/@../@g')"$LONG_PATH + else + DOTPATH="" + fi + fi + fi + + # Create link + if [ -z "$UNINSTALL" ] + then + ln $DO_FORCE $LINK_TYPE ${DOTPATH}toybox $i || EXIT=1 + else + rm -f $i || EXIT=1 + fi +done + +[ -z "$AIRLOCK" ] && exit 0 + +# --airlock creates a single directory you can point the $PATH to for cross +# compiling, which contains just toybox and symlinks to toolchain binaries. + +# This not only means you're building with a known set of tools (insulated from +# variations in the host distro), but that everything else is NOT in your PATH +# and thus various configure stages won't find things on thie host that won't +# be there on the target (such as the distcc build noticing the host has +# python and deciding to #include Python.h). + +# The following are commands toybox should provide, but doesn't yet. +# For now symlink the host version. This list must go away by 1.0. + +PENDING="dd diff expr ftpd less tr vi wget awk sh sha512sum sha256sum unxz xzcat bc bison flex make nm ar gzip" + +# "gcc" should go away for llvm, but some things still hardwire it +TOOLCHAIN="as cc ld gcc objdump" + +if [ ! -z "$AIRLOCK" ] +then + + # Tools needed to build packages + for i in $TOOLCHAIN $PENDING $HOST_EXTRA + do + if [ ! -f "$i" ] + then + # Loop through each instance, populating fallback directories (used by + # things like distcc, which require multiple instances of the same binary + # in a known order in the $PATH). + + X=0 + FALLBACK="$PREFIX" + which -a "$i" | while read j + do + if [ ! -e "$FALLBACK/$i" ] + then + mkdir -p "$FALLBACK" && + ln -sf "$j" "$FALLBACK/$i" || exit 1 + fi + + X=$[$X+1] + FALLBACK="$PREFIX/fallback-$X" + done + + if [ ! -f "$PREFIX/$i" ] + then + echo "Toolchain component missing: $i" >&2 + [ -z "$PEDANTIC" ] || EXIT=1 + fi + fi +done + + + +fi + +exit $EXIT diff --git a/aosp/external/toybox/scripts/make.sh b/aosp/external/toybox/scripts/make.sh new file mode 100644 index 0000000000000000000000000000000000000000..e4333ba26f30ca451cff7953baf5164da19f3d0b --- /dev/null +++ b/aosp/external/toybox/scripts/make.sh @@ -0,0 +1,359 @@ +#!/bin/bash + +# Grab default values for $CFLAGS and such. + +if [ ! -z "$ASAN" ]; then + echo "Enabling ASan..." + # Turn ASan on. Everything except -fsanitize=address is optional, but + # but effectively required for useful backtraces. + asan_flags="-fsanitize=address \ + -O1 -g -fno-omit-frame-pointer -fno-optimize-sibling-calls" + CFLAGS="$asan_flags $CFLAGS" + HOSTCC="$HOSTCC $asan_flags" + # Ignore leaks on exit. + export ASAN_OPTIONS="detect_leaks=0" +fi + +export LANG=c +export LC_ALL=C +set -o pipefail +source scripts/portability.sh + +[ -z "$KCONFIG_CONFIG" ] && KCONFIG_CONFIG=.config +[ -z "$OUTNAME" ] && OUTNAME=toybox"${TARGET:+-$TARGET}" +UNSTRIPPED="generated/unstripped/$(basename "$OUTNAME")" + +# Try to keep one more cc invocation going than we have processors +[ -z "$CPUS" ] && \ + CPUS=$(($(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null)+1)) + +# Respond to V= by echoing command lines as well as running them +DOTPROG= +do_loudly() +{ + [ ! -z "$V" ] && echo "$@" || echo -n "$DOTPROG" + "$@" +} + +# Is anything under directory $2 newer than file $1 +isnewer() +{ + CHECK="$1" + shift + [ ! -z "$(find "$@" -newer "$CHECK" 2>/dev/null || echo yes)" ] +} + +echo "Generate headers from toys/*/*.c..." + +mkdir -p generated/unstripped + +if isnewer generated/Config.in toys +then + echo "Extract configuration information from toys/*.c files..." + scripts/genconfig.sh +fi + +# Create a list of all the commands toybox can provide. Note that the first +# entry is out of order on purpose (the toybox multiplexer command must be the +# first element of the array). The rest must be sorted in alphabetical order +# for fast binary search. + +if isnewer generated/newtoys.h toys +then + echo -n "generated/newtoys.h " + + echo "USE_TOYBOX(NEWTOY(toybox, NULL, TOYFLAG_STAYROOT))" > generated/newtoys.h + $SED -n -e 's/^USE_[A-Z0-9_]*(/&/p' toys/*/*.c \ + | $SED 's/\(.*TOY(\)\([^,]*\),\(.*\)/\2 \1\2,\3/' | sort -s -k 1,1 \ + | $SED 's/[^ ]* //' >> generated/newtoys.h + [ $? -ne 0 ] && exit 1 +fi + +[ ! -z "$V" ] && echo "Which C files to build..." + +# Extract a list of toys/*/*.c files to compile from the data in $KCONFIG_CONFIG +# (First command names, then filenames with relevant {NEW,OLD}TOY() macro.) + +[ -d ".git" ] && GITHASH="$(git describe --tags --abbrev=12 2>/dev/null)" +[ ! -z "$GITHASH" ] && GITHASH="-DTOYBOX_VERSION=\"$GITHASH\"" +TOYFILES="$($SED -n 's/^CONFIG_\([^=]*\)=.*/\1/p' "$KCONFIG_CONFIG" | xargs | tr ' [A-Z]' '|[a-z]')" +TOYFILES="$(egrep -l "TOY[(]($TOYFILES)[ ,]" toys/*/*.c)" +CFLAGS="$CFLAGS $(cat generated/cflags)" +BUILD="$(echo ${CROSS_COMPILE}${CC} $CFLAGS -I . $OPTIMIZE $GITHASH)" +LIBFILES="$(ls lib/*.c | grep -v lib/help.c)" +TOYFILES="lib/help.c main.c $TOYFILES" + +if [ "${TOYFILES/pending//}" != "$TOYFILES" ] +then + echo -e "\n\033[1;31mwarning: using unfinished code from toys/pending\033[0m" +fi + +genbuildsh() +{ + # Write a canned build line for use on crippled build machines. + + echo "#!/bin/sh" + echo + echo "PATH='$PATH'" + echo + echo "BUILD='$BUILD'" + echo + echo "LINK='$LINK'" + echo + echo "FILES='$LIBFILES $TOYFILES'" + echo + echo + echo '$BUILD $FILES $LINK' +} + +if ! cmp -s <(genbuildsh 2>/dev/null | head -n 6 ; echo LINK="'"$LDOPTIMIZE $LDFLAGS) \ + <(head -n 7 generated/build.sh 2>/dev/null | $SED '7s/ -o .*//') +then + echo -n "Library probe" + + # We trust --as-needed to remove each library if we don't use any symbols + # out of it, this loop is because the compiler has no way to ignore a library + # that doesn't exist, so we have to detect and skip nonexistent libraries + # for it. + + > generated/optlibs.dat + for i in util crypt m resolv selinux smack attr crypto z log iconv + do + echo "int main(int argc, char *argv[]) {return 0;}" | \ + ${CROSS_COMPILE}${CC} $CFLAGS $LDFLAGS -xc - -o generated/libprobe $LDASNEEDED -l$i > /dev/null 2>/dev/null && + echo -l$i >> generated/optlibs.dat + echo -n . + done + rm -f generated/libprobe + echo +fi + +# LINK needs optlibs.dat, above + +LINK="$(echo $LDOPTIMIZE $LDFLAGS -o "$UNSTRIPPED" $LDASNEEDED $(cat generated/optlibs.dat))" +genbuildsh > generated/build.sh && chmod +x generated/build.sh || exit 1 + +#TODO: "make $SED && make" doesn't regenerate config.h because diff .config +if true #isnewer generated/config.h "$KCONFIG_CONFIG" +then + echo "Make generated/config.h from $KCONFIG_CONFIG." + + # This long and roundabout sed invocation is to make old versions of sed + # happy. New ones have '\n' so can replace one line with two without all + # the branches and tedious mucking about with hyperspace. + # TODO: clean this up to use modern stuff. + + $SED -n \ + -e 's/^# CONFIG_\(.*\) is not set.*/\1/' \ + -e 't notset' \ + -e 's/^CONFIG_\(.*\)=y.*/\1/' \ + -e 't isset' \ + -e 's/^CONFIG_\([^=]*\)=\(.*\)/#define CFG_\1 \2/p' \ + -e 'd' \ + -e ':notset' \ + -e 'h' \ + -e 's/.*/#define CFG_& 0/p' \ + -e 'g' \ + -e 's/.*/#define USE_&(...)/p' \ + -e 'd' \ + -e ':isset' \ + -e 'h' \ + -e 's/.*/#define CFG_& 1/p' \ + -e 'g' \ + -e 's/.*/#define USE_&(...) __VA_ARGS__/p' \ + $KCONFIG_CONFIG > generated/config.h || exit 1 +fi + +if [ ! -f generated/mkflags ] || [ generated/mkflags -ot scripts/mkflags.c ] +then + do_loudly $HOSTCC scripts/mkflags.c -o generated/mkflags || exit 1 +fi + +# Process config.h and newtoys.h to generate FLAG_x macros. Note we must +# always #define the relevant macro, even when it's disabled, because we +# allow multiple NEWTOY() in the same C file. (When disabled the FLAG is 0, +# so flags&0 becomes a constant 0 allowing dead code elimination.) + +make_flagsh() +{ + # Parse files through C preprocessor twice, once to get flags for current + # .config and once to get flags for allyesconfig + for I in A B + do + ( + # define macros and select header files with option string data + + echo "#define NEWTOY(aa,bb,cc) aa $I bb" + echo '#define OLDTOY(...)' + if [ "$I" == A ] + then + cat generated/config.h + else + $SED '/USE_.*([^)]*)$/s/$/ __VA_ARGS__/' generated/config.h + fi + echo '#include "lib/toyflags.h"' + cat generated/newtoys.h + + # Run result through preprocessor, glue together " " gaps leftover from USE + # macros, delete comment lines, print any line with a quoted optstring, + # turn any non-quoted opstring (NULL or 0) into " " (because fscanf can't + # handle "" with nothing in it, and mkflags uses that). + + ) | ${CROSS_COMPILE}${CC} -E - | \ + $SED -n -e 's/" *"//g;/^#/d;t clear;:clear;s/"/"/p;t;s/\( [AB] \).*/\1 " "/p' + + # Sort resulting line pairs and glue them together into triplets of + # command "flags" "allflags" + # to feed into mkflags C program that outputs actual flag macros + # If no pair (because command's disabled in config), use " " for flags + # so allflags can define the appropriate zero macros. + + done | sort -s | $SED -n -e 's/ A / /;t pair;h;s/\([^ ]*\).*/\1 " "/;x' \ + -e 'b single;:pair;h;n;:single;s/[^ ]* B //;H;g;s/\n/ /;p' | \ + tee generated/flags.raw | generated/mkflags > generated/flags.h || exit 1 +} + +if isnewer generated/flags.h toys "$KCONFIG_CONFIG" +then + echo -n "generated/flags.h " + make_flagsh +fi + +# Extract global structure definitions and flag definitions from toys/*/*.c + +function getglobals() +{ + for i in toys/*/*.c + do + NAME="$(echo $i | $SED 's@.*/\(.*\)\.c@\1@')" + DATA="$($SED -n -e '/^GLOBALS(/,/^)/b got;b;:got' \ + -e 's/^GLOBALS(/struct '"$NAME"'_data {/' \ + -e 's/^)/};/' -e 'p' $i)" + + [ ! -z "$DATA" ] && echo -e "// $i\n\n$DATA\n" + done +} + +if isnewer generated/globals.h toys +then + echo -n "generated/globals.h " + GLOBSTRUCT="$(getglobals)" + ( + echo "$GLOBSTRUCT" + echo + echo "extern union global_union {" + echo "$GLOBSTRUCT" | \ + $SED -n 's/struct \(.*\)_data {/ struct \1_data \1;/p' + echo "} this;" + ) > generated/globals.h +fi + +if [ ! -f generated/mktags ] || [ generated/mktags -ot scripts/mktags.c ] +then + do_loudly $HOSTCC scripts/mktags.c -o generated/mktags || exit 1 +fi + +if isnewer generated/tags.h toys +then + echo -n "generated/tags.h " + + $SED -n '/TAGGED_ARRAY(/,/^)/{s/.*TAGGED_ARRAY[(]\([^,]*\),/\1/;p}' \ + toys/*/*.c lib/*.c | generated/mktags > generated/tags.h +fi + +if [ ! -f generated/config2help ] || [ generated/config2help -ot scripts/config2help.c ] +then + do_loudly $HOSTCC scripts/config2help.c -o generated/config2help || exit 1 +fi +if isnewer generated/help.h generated/Config.in +then + echo "generated/help.h" + generated/config2help Config.in $KCONFIG_CONFIG > generated/help.h || exit 1 +fi + +[ ! -z "$NOBUILD" ] && exit 0 + +echo -n "Compile $OUTNAME" +[ ! -z "$V" ] && echo +DOTPROG=. + +# This is a parallel version of: do_loudly $BUILD $FILES $LINK || exit 1 + +# Any headers newer than the oldest generated/obj file? +X="$(ls -1t generated/obj/* 2>/dev/null | tail -n 1)" +# TODO: redo this +if [ ! -e "$X" ] || [ ! -z "$(find toys -name "*.h" -newer "$X")" ] +then + rm -rf generated/obj && mkdir -p generated/obj || exit 1 +else + rm -f generated/obj/{main,lib_help}.o || exit 1 +fi + +# build each generated/obj/*.o file in parallel + +PENDING= +LNKFILES= +DONE=0 +COUNT=0 +CLICK= + +for i in $LIBFILES click $TOYFILES +do + [ "$i" == click ] && CLICK=1 && continue + + X=${i/lib\//lib_} + X=${X##*/} + OUT="generated/obj/${X%%.c}.o" + LNKFILES="$LNKFILES $OUT" + + # $LIBFILES doesn't need to be rebuilt if older than .config, $TOYFILES does + # ($TOYFILES contents can depend on CONFIG symbols, lib/*.c never should.) + + [ "$OUT" -nt "$i" ] && [ -z "$CLICK" -o "$OUT" -nt "$KCONFIG_CONFIG" ] && + continue + + do_loudly $BUILD -c $i -o $OUT & + PENDING="$PENDING $!" + COUNT=$(($COUNT+1)) + + # ratelimit to $CPUS many parallel jobs, detecting errors + + for j in $PENDING + do + [ "$COUNT" -lt "$CPUS" ] && break; + + wait $j + DONE=$(($DONE+$?)) + COUNT=$(($COUNT-1)) + PENDING="${PENDING## $j}" + done + [ $DONE -ne 0 ] && break +done + +# wait for all background jobs, detecting errors + +for i in $PENDING +do + wait $i + DONE=$(($DONE+$?)) +done + +[ $DONE -ne 0 ] && exit 1 + +do_loudly $BUILD $LNKFILES $LINK || exit 1 +if [ ! -z "$NOSTRIP" ] || + ! do_loudly ${CROSS_COMPILE}${STRIP} "$UNSTRIPPED" -o "$OUTNAME" +then + [ -z "$NOSTRIP" ] && echo "strip failed, using unstripped" + rm -f "$OUTNAME" && + cp "$UNSTRIPPED" "$OUTNAME" || + exit 1 +fi + +# gcc 4.4's strip command is buggy, and doesn't set the executable bit on +# its output the way SUSv4 suggests it do so. While we're at it, make sure +# we don't have the "w" bit set so things like bzip2's "cp -f" install don't +# overwrite our binary through the symlink. +do_loudly chmod 555 "$OUTNAME" || exit 1 + +echo diff --git a/aosp/external/toybox/scripts/mcm-buildall.sh b/aosp/external/toybox/scripts/mcm-buildall.sh new file mode 100644 index 0000000000000000000000000000000000000000..e82ce2d5b39b0ef42e833cb3012c5d9bef46db45 --- /dev/null +++ b/aosp/external/toybox/scripts/mcm-buildall.sh @@ -0,0 +1,249 @@ +#!/bin/bash + +# Script to build all cross and native compilers supported by musl-libc. +# This isn't directly used by toybox, but is useful for testing. + +if [ ! -d litecross ] +then + echo Run this script in musl-cross-make directory to make "ccc" directory. + echo + echo " "git clone https://github.com/richfelker/musl-cross-make + echo " "cd musl-cross-make + echo ' ~/toybox/scripts/mcm-buildall.sh' + exit 1 +fi + +# All toolchains after the first are themselves cross compiled (so they +# can be statically linked against musl on the host, for binary portability.) +# static i686 binaries are basically "poor man's x32". +BOOTSTRAP=i686-linux-musl + +[ -z "$OUTPUT" ] && OUTPUT="$PWD/ccc" + +if [ "$1" == clean ] +then + rm -rf "$OUTPUT" host-* *.log + make clean + exit +fi + +make_toolchain() +{ + # Set cross compiler path + LP="$PATH" + if [ -z "$TYPE" ] + then + OUTPUT="$PWD/host-$TARGET" + EXTRASUB=y + else + if [ "$TYPE" == static ] + then + HOST=$BOOTSTRAP + [ "$TARGET" = "$HOST" ] && LP="$PWD/host-$HOST/bin:$LP" + TYPE=cross + EXTRASUB=y + LP="$OUTPUT/$HOST-cross/bin:$LP" + else + HOST="$TARGET" + export NATIVE=y + LP="$OUTPUT/${RENAME:-$TARGET}-cross/bin:$LP" + fi + COMMON_CONFIG="CC=\"$HOST-gcc -static --static\" CXX=\"$HOST-g++ -static --static\"" + export -n HOST + OUTPUT="$OUTPUT/${RENAME:-$TARGET}-$TYPE" + fi + + if [ -e "$OUTPUT.sqf" ] || [ -e "$OUTPUT/bin/$TARGET-ld" ] || + [ -e "$OUTPUT/bin/ld" ] + then + return + fi + + # Change title bar to say what we're currently building + + echo === building $TARGET-$TYPE + echo -en "\033]2;$TARGET-$TYPE\007" + + rm -rf build/"$TARGET" "$OUTPUT" && + if [ -z "$CPUS" ] + then + CPUS="$(nproc)" + [ "$CPUS" != 1 ] && CPUS=$(($CPUS+1)) + fi + set -x && + PATH="$LP" make OUTPUT="$OUTPUT" TARGET="$TARGET" \ + GCC_CONFIG="--disable-nls --disable-libquadmath --disable-decimal-float --disable-multilib --enable-languages=c,c++ $GCC_CONFIG" \ + COMMON_CONFIG="CFLAGS=\"$CFLAGS -g0 -Os\" CXXFLAGS=\"$CXXFLAGS -g0 -Os\" LDFLAGS=\"$LDFLAGS -s\" $COMMON_CONFIG" \ + install -j$CPUS || exit 1 + set +x + echo -e '#ifndef __MUSL__\n#define __MUSL__ 1\n#endif' \ + >> "$OUTPUT/${EXTRASUB:+$TARGET/}include/features.h" + + if [ ! -z "$RENAME" ] && [ "$TYPE" == cross ] + then + CONTEXT="output/$RENAME-cross/bin" + for i in "$CONTEXT/$TARGET-"* + do + X="$(echo $i | sed "s@.*/$TARGET-\([^-]*\)@\1@")" + ln -sf "$TARGET-$X" "$CONTEXT/$RENAME-$X" + done + fi + + # Prevent cross compiler reusing dynamically linked host build files for + # $BOOTSTRAP arch + [ -z "$TYPE" ] && make clean + + if [ "$TYPE" == native ] + then + # gcc looks in "../usr/include" but not "/bin/../include" (relative to the + # executable). That means /usr/bin/gcc looks in /usr/usr/include, so that's + # not a fix either. So add a NOP symlink as a workaround for The Crazy. + ln -s . "$OUTPUT/usr" || exit 1 + [ ! -z "$(which mksquashfs 2>/dev/null)" ] && + mksquashfs "$OUTPUT" "$OUTPUT.sqf" -all-root && + [ -z "$CLEANUP" ] && rm -rf "$OUTPUT" + fi +} + +# Expand compressed target into binutils/gcc "tuple" and call make_toolchain +make_tuple() +{ + PART1=${1/:*/} + PART3=${1/*:/} + PART2=${1:$((${#PART1}+1)):$((${#1}-${#PART3}-${#PART1}-2))} + + # Do we need to rename this toolchain after building it? + RENAME=${PART1/*@/} + [ "$RENAME" == "$PART1" ] && RENAME= + PART1=${PART1/@*/} + TARGET=${PART1}-linux-musl${PART2} + + [ -z "$NOCLEAN" ] && rm -rf build + + for TYPE in static native + do + TYPE=$TYPE TARGET=$TARGET GCC_CONFIG="$PART3" RENAME="$RENAME" \ + make_toolchain 2>&1 | tee "$OUTPUT"/log/${RENAME:-$PART1}-${TYPE}.log + done +} + +# Packages detect nommu via the absence of fork(). Musl provides a broken fork() +# on nommu builds that always returns -ENOSYS at runtime. Rip it out. +# (Currently only for superh/jcore.) +fix_nommu() +{ + # Rich won't merge this + sed -i 's/--enable-fdpic$/& --enable-twoprocess/' litecross/Makefile + + PP=patches/musl-"$(sed -n 's/MUSL_VER[ \t]*=[ \t]*//p' Makefile)" + mkdir -p "$PP" && + cat > "$PP"/0001-nommu.patch << 'EOF' +--- a/include/features.h ++++ b/include/features.h +@@ -3,2 +3,4 @@ + ++#define __MUSL__ 1 ++ + #if defined(_ALL_SOURCE) && !defined(_GNU_SOURCE) +--- a/src/legacy/daemon.c ++++ b/src/legacy/daemon.c +@@ -17,3 +17,3 @@ + +- switch(fork()) { ++ switch(vfork()) { + case 0: break; +@@ -25,3 +25,3 @@ + +- switch(fork()) { ++ switch(vfork()) { + case 0: break; +--- a/src/misc/forkpty.c ++++ b/src/misc/forkpty.c +@@ -8,2 +8,3 @@ + ++#ifndef __SH_FDPIC__ + int forkpty(int *pm, char *name, const struct termios *tio, const struct winsize *ws) +@@ -57,1 +58,2 @@ + } ++#endif +--- a/src/misc/wordexp.c ++++ b/src/misc/wordexp.c +@@ -25,2 +25,3 @@ + ++#ifndef __SH_FDPIC__ + static int do_wordexp(const char *s, wordexp_t *we, int flags) +@@ -177,2 +178,3 @@ + } ++#endif + +--- a/src/process/fork.c ++++ b/src/process/fork.c +@@ -7,2 +7,3 @@ + ++#ifndef __SH_FDPIC__ + static void dummy(int x) +@@ -37,1 +38,2 @@ + } ++#endif +--- a/Makefile ++++ b/Makefile +@@ -100,3 +100,3 @@ + cp $< $@ +- sed -n -e s/__NR_/SYS_/p < $< >> $@ ++ sed -e s/__NR_/SYS_/ < $< >> $@ + +--- a/arch/sh/bits/syscall.h.in ++++ b/arch/sh/bits/syscall.h.in +@@ -2,3 +2,5 @@ + #define __NR_exit 1 ++#ifndef __SH_FDPIC__ + #define __NR_fork 2 ++#endif + #define __NR_read 3 +EOF + + # I won't sign the FSF's copyright assignment + tee $(for i in patches/gcc-*; do echo $i/099-vfork.patch; done) > /dev/null << 'EOF' +--- gcc-8.3.0/fixincludes/procopen.c 2005-08-14 19:50:43.000000000 -0500 ++++ gcc-bak/fixincludes/procopen.c 2020-02-06 23:27:15.408071708 -0600 +@@ -116,3 +116,3 @@ + */ +- ch_id = fork (); ++ ch_id = vfork (); + switch (ch_id) +EOF +} + +fix_nommu || exit 1 +mkdir -p "$OUTPUT"/log + +# Make bootstrap compiler (no $TYPE, dynamically linked against host libc) +# We build the rest of the cross compilers with this so they're linked against +# musl-libc, because glibc doesn't fully support static linking and dynamic +# binaries aren't really portable between distributions +TARGET=$BOOTSTRAP make_toolchain 2>&1 | tee -a "$OUTPUT/log/$BOOTSTRAP"-host.log + +if [ $# -gt 0 ] +then + for i in "$@" + do + make_tuple "$i" + done +else + # Here's the list of cross compilers supported by this build script. + + # First target builds a proper version of the $BOOTSTRAP compiler above, + # which is used to build the rest (in alphabetical order) + for i in i686:: \ + aarch64:eabi: armv4l:eabihf:"--with-arch=armv5t --with-float=soft" \ + "armv5l:eabihf:--with-arch=armv5t --with-float=vfp" \ + "armv7l:eabihf:--with-arch=armv7-a --with-float=vfp" \ + "armv7m:eabi:--with-arch=armv7-m --with-mode=thumb --disable-libatomic --enable-default-pie" \ + armv7r:eabihf:"--with-arch=armv7-r --enable-default-pie" \ + i486:: m68k:: microblaze:: mips:: mips64:: mipsel:: powerpc:: \ + powerpc64:: powerpc64le:: s390x:: sh2eb:fdpic:--with-cpu=mj2 \ + sh4::--enable-incomplete-targets x86_64:: x86_64@x32:x32: + do + make_tuple "$i" + done +fi diff --git a/aosp/external/toybox/scripts/minicom.sh b/aosp/external/toybox/scripts/minicom.sh new file mode 100644 index 0000000000000000000000000000000000000000..f47d0966647bbf6b88822ea3db9e5d1513ad94d5 --- /dev/null +++ b/aosp/external/toybox/scripts/minicom.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +# If you want to use toybox netcat to talk to a serial port, use this. + +if [ ! -c "$1" ] +then + echo "usage: minicom.sh /dev/ttyS0" + exit 1 +fi + +SPEED="$2" +[ -z "$SPEED" ] && SPEED=115200 + +stty $SPEED -F "$1" +stty raw -echo -ctlecho -F "$1" +stty raw -echo # Need to do it on stdin, too. +./toybox netcat -f "$1" +stty cooked echo # Put stdin back. diff --git a/aosp/external/toybox/scripts/mkflags.c b/aosp/external/toybox/scripts/mkflags.c new file mode 100644 index 0000000000000000000000000000000000000000..fff9dd4c2334690fddcf273db750eb6a2ccfa25b --- /dev/null +++ b/aosp/external/toybox/scripts/mkflags.c @@ -0,0 +1,257 @@ +// Take three word input lines on stdin and produce flag #defines to stdout. +// The three words on each input lnie are command name, option string with +// current config, option string from allyesconfig. The three are space +// separated and the last two are in double quotes. + +// This is intentionally crappy code because we control the inputs. It leaks +// memory like a sieve and segfaults if malloc returns null, but does the job. + +#include +#include +#include +#include +#include +#include + +struct flag { + struct flag *next; + char *command; + struct flag *lopt; +}; + +int chrtype(char c) +{ + // Does this populate a GLOBALS() variable? + if (strchr("?&^-:#|@*; %", c)) return 1; + + // Is this followed by a numeric argument in optstr? + if (strchr("=<>", c)) return 2; + + return 0; +} + +// replace chopped out USE_BLAH() sections with low-ascii characters +// showing how many flags got skipped + +char *mark_gaps(char *flags, char *all) +{ + char *n, *new, c; + int bare = 1; + + // Shell feeds in " " for blank args, leading space not meaningful. + while (isspace(*flags)) flags++; + while (isspace(*all)) all++; + + n = new = strdup(all); + while (*all) { + // --longopt parentheticals dealt with as a unit + if (*all == '(') { + int len = 0; + + while (all[len++] != ')'); + if (strncmp(flags, all, len)) { + // bare longopts need their own skip placeholders + if (bare) *(new++) = 1; + } else { + memcpy(new, all, len); + new += len; + flags += len; + } + all += len; + continue; + } + c = *(all++); + if (bare) bare = chrtype(c); + if (*flags == c) { + *(new++) = c; + flags++; + continue; + } + + c = chrtype(c); + if (!c) *(new++) = 1; + else if (c==2) while (isdigit(*all)) all++; + } + *new = 0; + + return n; +} + +// Break down a command string into linked list of "struct flag". + +struct flag *digest(char *string) +{ + struct flag *list = NULL; + char *err = string, c; + + while (*string) { + // Groups must be at end. + if (*string == '[') break; + + // Longopts + if (*string == '(') { + struct flag *new = calloc(sizeof(struct flag), 1); + + new->command = ++string; + + // Attach longopt to previous short opt, if any. + if (list && list->command) { + new->next = list->lopt; + list->lopt = new; + } else { + struct flag *blank = calloc(sizeof(struct flag), 1); + + blank->next = list; + blank->lopt = new; + list = blank; + } + // An empty longopt () would break this. + while (*++string != ')') if (*string == '-') *string = '_'; + *(string++) = 0; + continue; + } + + c = chrtype(*string); + if (c == 1) string++; + else if (c == 2) { + if (string[1]=='-') string++; + if (!isdigit(string[1])) { + fprintf(stderr, "%c without number in '%s'", *string, err); + exit(1); + } + while (isdigit(*++string)) { + if (!list) { + string++; + break; + } + } + } else { + struct flag *new = calloc(sizeof(struct flag), 1); + + new->command = string++; + new->next = list; + list = new; + } + } + + return list; +} + +// Parse C-style octal escape +void octane(char *from) +{ + unsigned char *to = (void *)from; + + while (*from) { + if (*from == '\\') { + *to = 0; + while (isdigit(*++from)) *to = (8**to)+*from-'0'; + to++; + } else *to++ = *from++; + } + *to = 0; +} + +int main(int argc, char *argv[]) +{ + char command[256], flags[1024], allflags[1024]; + char *out, *outbuf = malloc(1024*1024); + + // Yes, the output buffer is 1 megabyte with no bounds checking. + // See "intentionally crappy", above. + if (!(out = outbuf)) return 1; + + printf("#undef FORCED_FLAG\n#undef FORCED_FLAGLL\n" + "#ifdef FORCE_FLAGS\n#define FORCED_FLAG 1\n#define FORCED_FLAGLL 1ULL\n" + "#else\n#define FORCED_FLAG 0\n#define FORCED_FLAGLL 0\n#endif\n\n"); + + for (;;) { + struct flag *flist, *aflist, *offlist; + char *mgaps = 0; + unsigned bit; + + *command = *flags = *allflags = 0; + bit = fscanf(stdin, "%255s \"%1023[^\"]\" \"%1023[^\"]\"\n", + command, flags, allflags); + octane(flags); + octane(allflags); + + if (getenv("DEBUG")) + fprintf(stderr, "command=%s, flags=%s, allflags=%s\n", + command, flags, allflags); + + if (!*command) break; + if (bit != 3) { + fprintf(stderr, "\nError in %s (see generated/flags.raw)\n", command); + exit(1); + } + + bit = 0; + printf("// %s %s %s\n", command, flags, allflags); + if (*flags != ' ') mgaps = mark_gaps(flags, allflags); + else if (*allflags != ' ') mgaps = allflags; + // If command disabled, use allflags for OLDTOY() + printf("#undef OPTSTR_%s\n#define OPTSTR_%s ", command, command); + if (mgaps) printf("\"%s\"\n", mgaps); + else printf("0\n"); + if (mgaps != allflags) free(mgaps); + + flist = digest(flags); + offlist = aflist = digest(allflags); + + printf("#ifdef CLEANUP_%s\n#undef CLEANUP_%s\n#undef FOR_%s\n", + command, command, command); + + while (offlist) { + char *s = (char []){0, 0, 0, 0}; + + if (!offlist->command) s = offlist->lopt->command; + else { + *s = *offlist->command; + if (127 < (unsigned char)*s) sprintf(s, "X%02X", 127&*s); + } + printf("#undef FLAG_%s\n", s); + offlist = offlist->next; + } + printf("#endif\n\n"); + + sprintf(out, "#ifdef FOR_%s\n#ifndef TT\n#define TT this.%s\n#endif\n", + command, command); + out += strlen(out); + + while (aflist) { + char *llstr = bit>30 ? "LL" : "", *s = (char []){0, 0, 0, 0}; + int enabled = 0; + + // Output flag macro for bare longopts + if (!aflist->command) { + s = aflist->lopt->command; + if (flist && flist->lopt && + !strcmp(flist->lopt->command, aflist->lopt->command)) enabled++; + // Output normal flag macro + } else { + *s = *aflist->command; + if (127 < (unsigned char)*s) sprintf(s, "X%02X", 127&*s); + if (flist && flist->command && *aflist->command == *flist->command) + enabled++; + } + out += sprintf(out, "#define FLAG_%s (%s%s<<%d)\n", + s, enabled ? "1" : "FORCED_FLAG", llstr, bit++); + aflist = aflist->next; + if (enabled) flist = flist->next; + } + out = stpcpy(out, "#endif\n\n"); + } + + if (fflush(0) && ferror(stdout)) return 1; + + out = outbuf; + while (*out) { + int i = write(1, outbuf, strlen(outbuf)); + + if (i<0) return 1; + out += i; + } + + return 0; +} diff --git a/aosp/external/toybox/scripts/mkroot.sh b/aosp/external/toybox/scripts/mkroot.sh new file mode 100644 index 0000000000000000000000000000000000000000..371ba48f3c34b9d31c7e8fad419e167a302d6b17 --- /dev/null +++ b/aosp/external/toybox/scripts/mkroot.sh @@ -0,0 +1,225 @@ +#!/bin/bash + +# Clear environment variables by restarting script w/bare minimum passed through +[ -z "$NOCLEAR" ] && + exec env -i NOCLEAR=1 HOME="$HOME" PATH="$PATH" LINUX="$LINUX" \ + CROSS_COMPILE="$CROSS_COMPILE" CROSS_SHORT="$CROSS_SHORT" "$0" "$@" + +# assign command line NAME=VALUE args to env vars +while [ $# -ne 0 ]; do + X="${1/=*/}" Y="${1#*=}" + [ "${1/=/}" != "$1" ] && eval "export $X=\"\$Y\"" || echo "unknown $i" + shift +done + +# If we're cross compiling, set appropriate environment variables. +if [ -z "$CROSS_COMPILE" ]; then + echo "Building natively" + if ! cc --static -xc - -o /dev/null <<< "int main(void) {return 0;}"; then + echo "Warning: host compiler can't create static binaries." >&2 + sleep 3 + fi +else + CROSS_PATH="$(dirname "$(which "${CROSS_COMPILE}cc")")" + CROSS_BASE="$(basename "$CROSS_COMPILE")" + [ -z "$CROSS_SHORT" ] && CROSS_SHORT="${CROSS_BASE/-*/}" + echo "Cross compiling to $CROSS_SHORT" + if [ -z "$CROSS_PATH" ]; then + echo "no ${CROSS_COMPILE}cc in path" >&2 + exit 1 + fi +fi + +# set up directories (can override most of these paths on cmdline) +TOP="$PWD/root" +[ -z "$BUILD" ] && BUILD="$TOP/build" +[ -z "$AIRLOCK" ] && AIRLOCK="$TOP/airlock" +[ -z "$OUTPUT" ] && OUTPUT="$TOP/${CROSS_SHORT:-host}" +[ -z "$ROOT" ] && ROOT="$OUTPUT/${CROSS_BASE}fs" && rm -rf "$ROOT" +MYBUILD="$BUILD/${CROSS_BASE:-host-}tmp" +rm -rf "$MYBUILD" && mkdir -p "$MYBUILD" || exit 1 + +# Stabilize cross compiling by providing known $PATH contents +if [ ! -z "$CROSS_COMPILE" ]; then + if [ ! -e "$AIRLOCK/toybox" ]; then + echo === Create airlock dir + PREFIX="$AIRLOCK" KCONFIG_CONFIG="$TOP"/.airlock CROSS_COMPILE= \ + make clean defconfig toybox install_airlock && + rm "$TOP"/.airlock || exit 1 + fi + export PATH="$CROSS_PATH:$AIRLOCK" +fi + +### Create files and directories +mkdir -p "$ROOT"/{etc,tmp,proc,sys,dev,home,mnt,root,usr/{bin,sbin,lib},var} && +chmod a+rwxt "$ROOT"/tmp && ln -s usr/{bin,sbin,lib} "$ROOT" || exit 1 + +# init script. Runs as pid 1 from initramfs to set up and hand off system. +cat > "$ROOT"/init << 'EOF' && +#!/bin/sh + +export HOME=/home PATH=/bin:/sbin + +mountpoint -q proc || mount -t proc proc proc +mountpoint -q sys || mount -t sysfs sys sys +if ! mountpoint -q dev; then + mount -t devtmpfs dev dev || mdev -s + for i in ,fd /0,stdin /1,stdout /2,stderr + do ln -sf /proc/self/fd${i/,*/} dev/${i/*,/}; done + mkdir -p dev/{shm,pts} + mountpoint -q dev/pts || mount -t devpts dev/pts dev/pts + chmod +t /dev/shm +fi + +if [ $$ -eq 1 ]; then + # Setup networking for QEMU (needs /proc) + ifconfig eth0 10.0.2.15 + route add default gw 10.0.2.2 + [ "$(date +%s)" -lt 1000 ] && rdate 10.0.2.2 # Ask QEMU what time it is + [ "$(date +%s)" -lt 10000000 ] && ntpd -nq -p north-america.pool.ntp.org + + [ -z "$CONSOLE" ] && CONSOLE="$( "$ROOT"/etc/passwd << 'EOF' && +root::0:0:root:/root:/bin/sh +guest:x:500:500:guest:/home/guest:/bin/sh +nobody:x:65534:65534:nobody:/proc/self:/dev/null +EOF +echo -e 'root:x:0:\nguest:x:500:\nnobody:x:65534:' > "$ROOT"/etc/group && +# Google's public nameserver. +echo "nameserver 8.8.8.8" > "$ROOT"/etc/resolv.conf || exit 1 + +# Build toybox +make clean +make $([ -z .config ] && echo defconfig || echo silentoldconfig) +LDFLAGS=--static PREFIX="$ROOT" make toybox install || exit 1 + +write_miniconfig() +{ + # Generic options for all targets + KCGLOB=EARLY_PRINTK,BINFMT_ELF,BINFMT_SCRIPT,NO_HZ,HIGH_RES_TIMERS,BLK_DEV,BLK_DEV_INITRD,RD_GZIP,BLK_DEV_LOOP,EXT4_FS,EXT4_USE_FOR_EXT2,VFAT_FS,FAT_DEFAULT_UTF8,MISC_FILESYSTEMS,SQUASHFS,SQUASHFS_XATTR,SQUASHFS_ZLIB,DEVTMPFS,DEVTMPFS_MOUNT,TMPFS,TMPFS_POSIX_ACL,NET,PACKET,UNIX,INET,IPV6,NETDEVICES,NET_CORE,NETCONSOLE,ETHERNET + + echo "# make ARCH=$KARCH allnoconfig KCONFIG_ALLCONFIG=$TARGET.miniconf" + echo "# make ARCH=$KARCH -j \$(nproc)" + echo "# boot $VMLINUX" + echo + echo "# CONFIG_EMBEDDED is not set" + + # Expand list of =y symbols + for i in $KCGLOB $KCONF; do + echo "# architecture ${X:-independent}" + sed -E '/^$/d;s/([^,]*)($|,)/CONFIG_\1=y\n/g' <<< "$i" + X=specific + done + echo "$KERNEL_CONFIG" +} + +if [ -z "$LINUX" ] || [ ! -d "$LINUX/kernel" ]; then + echo 'No $LINUX directory, kernel build skipped.' +else + + # Which architecture are we building a kernel for? + [ -z "$TARGET" ] && TARGET="${CROSS_BASE/-*/}" + [ -z "$TARGET" ] && TARGET="$(uname -m)" + + # Target-specific info in an (alphabetical order) if/else staircase + # Each target needs board config, serial console, RTC, ethernet, block device. + + if [ "$TARGET" == armv5l ]; then + + # This could use the same VIRT board as armv7, but let's demonstrate a + # different one requiring a separate device tree binary. + QEMU="arm -M versatilepb -net nic,model=rtl8139 -net user" + KARCH=arm KARGS=ttyAMA0 VMLINUX=arch/arm/boot/zImage + KCONF=CPU_ARM926T,MMU,VFP,ARM_THUMB,AEABI,ARCH_VERSATILE,ATAGS,DEPRECATED_PARAM_STRUCT,ARM_ATAG_DTB_COMPAT,ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEND,SERIAL_AMBA_PL011,SERIAL_AMBA_PL011_CONSOLE,RTC_CLASS,RTC_DRV_PL031,RTC_HCTOSYS,PCI,PCI_VERSATILE,BLK_DEV_SD,SCSI,SCSI_LOWLEVEL,SCSI_SYM53C8XX_2,SCSI_SYM53C8XX_MMIO,NET_VENDOR_REALTEK,8139CP + KERNEL_CONFIG="CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0" + DTB=arch/arm/boot/dts/versatile-pb.dtb + elif [ "$TARGET" == armv7l ] || [ "$TARGET" == aarch64 ]; then + if [ "$TARGET" == aarch64 ]; then + QEMU="aarch64 -M virt -cpu cortex-a57" + KARCH=arm64 VMLINUX=arch/arm64/boot/Image + else + QEMU="arm -M virt" KARCH=arm VMLINUX=arch/arm/boot/zImage + fi + KARGS=ttyAMA0 + KCONF=MMU,ARCH_MULTI_V7,ARCH_VIRT,SOC_DRA7XX,ARCH_OMAP2PLUS_TYPICAL,ARCH_ALPINE,ARM_THUMB,VDSO,CPU_IDLE,ARM_CPUIDLE,KERNEL_MODE_NEON,SERIAL_AMBA_PL011,SERIAL_AMBA_PL011_CONSOLE,RTC_CLASS,RTC_HCTOSYS,RTC_DRV_PL031,NET_CORE,VIRTIO_MENU,VIRTIO_NET,PCI,PCI_HOST_GENERIC,VIRTIO_BLK,VIRTIO_PCI,VIRTIO_MMIO,ATA,ATA_SFF,ATA_BMDMA,ATA_PIIX,PATA_PLATFORM,PATA_OF_PLATFORM,ATA_GENERIC + elif [ "$TARGET" == i486 ] || [ "$TARGET" == i686 ] || + [ "$TARGET" == x86_64 ] || [ "$TARGET" == x32 ]; then + if [ "$TARGET" == i486 ]; then + QEMU="i386 -cpu 486 -global fw_cfg.dma_enabled=false" KCONF=M486 + elif [ "$TARGET" == i686 ]; then + QEMU="i386 -cpu pentium3" KCONF=MPENTIUMII + else + QEMU=x86_64 KCONF=64BIT + [ "$TARGET" == x32 ] && KCONF=X86_X32 + fi + KARCH=x86 KARGS=ttyS0 VMLINUX=arch/x86/boot/bzImage + KCONF=$KCONF,UNWINDER_FRAME_POINTER,PCI,BLK_DEV_SD,ATA,ATA_SFF,ATA_BMDMA,ATA_PIIX,NET_VENDOR_INTEL,E1000,SERIAL_8250,SERIAL_8250_CONSOLE,RTC_CLASS + elif [ "$TARGET" == mips ] || [ "$TARGET" == mipsel ]; then + QEMU="mips -M malta" KARCH=mips KARGS=ttyS0 VMLINUX=vmlinux + KCONF=MIPS_MALTA,CPU_MIPS32_R2,SERIAL_8250,SERIAL_8250_CONSOLE,PCI,BLK_DEV_SD,ATA,ATA_SFF,ATA_BMDMA,ATA_PIIX,NET_VENDOR_AMD,PCNET32,POWER_RESET,POWER_RESET_SYSCON + [ "$TARGET" == mipsel ] && KCONF=$KCONF,CPU_LITTLE_ENDIAN && + QEMU="mipsel -M malta" + elif [ "$TARGET" == powerpc ]; then + KARCH=powerpc QEMU="ppc -M g3beige" KARGS=ttyS0 VMLINUX=vmlinux + KCONF=ALTIVEC,PPC_PMAC,PPC_OF_BOOT_TRAMPOLINE,IDE,IDE_GD,IDE_GD_ATA,BLK_DEV_IDE_PMAC,BLK_DEV_IDE_PMAC_ATA100FIRST,MACINTOSH_DRIVERS,ADB,ADB_CUDA,NET_VENDOR_NATSEMI,NET_VENDOR_8390,NE2K_PCI,SERIO,SERIAL_PMACZILOG,SERIAL_PMACZILOG_TTYS,SERIAL_PMACZILOG_CONSOLE,BOOTX_TEXT + + elif [ "$TARGET" == powerpc64le ]; then + KARCH=powerpc QEMU="ppc64 -M pseries -vga none" KARGS=/dev/hvc0 + VMLINUX=vmlinux + KCONF=PPC64,PPC_PSERIES,CPU_LITTLE_ENDIAN,PPC_OF_BOOT_TRAMPOLINE,BLK_DEV_SD,SCSI_LOWLEVEL,SCSI_IBMVSCSI,ATA,NET_VENDOR_IBM,IBMVETH,HVC_CONSOLE,PPC_TRANSACTIONAL_MEM,PPC_DISABLE_WERROR,SECTION_MISMATCH_WARN_ONLY + + elif [ "$TARGET" = s390x ] ; then + QEMU="s390x" KARCH=s390 VMLINUX=arch/s390/boot/bzImage + KCONF=MARCH_Z900,PACK_STACK,NET_CORE,VIRTIO_NET,VIRTIO_BLK,SCLP_TTY,SCLP_CONSOLE,SCLP_VT220_TTY,SCLP_VT220_CONSOLE,S390_GUEST + elif [ "$TARGET" == sh4 ] ; then + QEMU="sh4 -M r2d -serial null -serial mon:stdio" KARCH=sh + KARGS="ttySC1 noiotrap" VMLINUX=arch/sh/boot/zImage + KERNEL_CONFIG="CONFIG_MEMORY_START=0x0c000000" + KCONF=CPU_SUBTYPE_SH7751R,MMU,VSYSCALL,SH_FPU,SH_RTS7751R2D,RTS7751R2D_PLUS,SERIAL_SH_SCI,SERIAL_SH_SCI_CONSOLE,PCI,NET_VENDOR_REALTEK,8139CP,PCI,BLK_DEV_SD,ATA,ATA_SFF,ATA_BMDMA,PATA_PLATFORM,BINFMT_ELF_FDPIC,BINFMT_FLAT +#see also SPI SPI_SH_SCI MFD_SM501 RTC_CLASS RTC_DRV_R9701 RTC_DRV_SH RTC_HCTOSYS + else + echo "Unknown \$TARGET" + exit 1 + fi + + # Write the qemu launch script + echo "qemu-system-$QEMU" '"$@"' -nographic -no-reboot -m 256 \ + "-kernel $(basename "$VMLINUX") -initrd ${CROSS_BASE}root.cpio.gz" \ + "-append \"panic=1 HOST=$TARGET console=$KARGS \$KARGS\"" \ + ${DTB:+-dtb "$(basename "$DTB")"} > "$OUTPUT/qemu-$TARGET.sh" && + chmod +x "$OUTPUT/qemu-$TARGET.sh" && + + echo "Build linux for $KARCH" + pushd "$LINUX" && make distclean && popd && + cp -sfR "$LINUX" "$MYBUILD/linux" && pushd "$MYBUILD/linux" || exit 1 + write_miniconfig > "$OUTPUT/miniconfig-$TARGET" && + make ARCH=$KARCH allnoconfig KCONFIG_ALLCONFIG="$OUTPUT/miniconfig-$TARGET" && + make ARCH=$KARCH CROSS_COMPILE="$CROSS_COMPILE" -j $(nproc) || exit 1 + + # If we have a device tree binary, save it for QEMU. + if [ ! -z "$DTB" ]; then + cp "$DTB" "$OUTPUT/$(basename "$DTB")" || exit 1 + fi + + cp "$VMLINUX" "$OUTPUT/$(basename "$VMLINUX")" && cd .. && rm -rf linux && + popd || exit 1 +fi + +rmdir "$MYBUILD" "$BUILD" 2>/dev/null + +# package root filesystem for initramfs. +# we do it here so module install can add files (not implemented yet) +echo === create "${CROSS_BASE}root.cpio.gz" + +(cd "$ROOT" && find . | cpio -o -H newc | gzip) > \ + "$OUTPUT/${CROSS_BASE}root.cpio.gz" diff --git a/aosp/external/toybox/scripts/mkstatus.py b/aosp/external/toybox/scripts/mkstatus.py new file mode 100644 index 0000000000000000000000000000000000000000..c1b325eb60f44e88590bcc709642a2cdeffebf2f --- /dev/null +++ b/aosp/external/toybox/scripts/mkstatus.py @@ -0,0 +1,131 @@ +#!/usr/bin/python + +# Create status.html + +import subprocess,sys + +def readit(args, shell=False): + ret={} + arr=[] + blob=subprocess.Popen(args, stdout=subprocess.PIPE, shell=shell) + for i in blob.stdout.read().split("\n"): + if not i: continue + i=i.split() + try: ret[i[0]].extend(i[1:]) + except: ret[i[0]]=i[1:] + arr.extend(i) + return ret,arr + +# Run sed on roadmap and source to get command lists, and run toybox too +# This gives us a dictionary of types, each with a list of commands + +print "Collecting data..." + +stuff,blah=readit(["sed","-n", 's//\\1 /;t good;d;:good;h;:loop;n;s@@@;t out;H;b loop;:out;g;s/\\n/ /g;p', "www/roadmap.html", "www/status.html"]) +blah,toystuff=readit(["./toybox"]) +blah,pending=readit(["sed -n 's/[^ \\t].*TOY(\\([^,]*\\),.*/\\1/p' toys/pending/*.c"], 1) +blah,version=readit(["git","describe","--tags"]) + +print "Analyzing..." + +# Create reverse mappings: reverse["command"] gives list of categories it's in + +reverse={} +for i in stuff: + for j in stuff[i]: + try: reverse[j].append(i) + except: reverse[j]=[i] +print "all commands=%s" % len(reverse) + +# Run a couple sanity checks on input + +for i in toystuff: + if (i in pending): print "barf %s" % i + +unknowns=[] +for i in toystuff + pending: + if not i in reverse: unknowns.append(i) + +if unknowns: print "uncategorized: %s" % " ".join(unknowns) + +conv = [("posix", '%%s', "[%s]"), + ("lsb", '%%s', '<%s>'), + ("development", '%%s', '(%s)'), + ("toolbox", "", '{%s}'), ("klibc_cmd", "", '=%s='), + ("sash_cmd", "", '#%s#'), ("sbase_cmd", "", '@%s@'), + ("beastiebox_cmd", "", '*%s*'), ("tizen", "", '$%s$'), + ("shell", "", "%%%s%%"), + ("request", '%%s', '+%s+')] + + +def categorize(reverse, i, skippy=""): + linky = "%s" + out = i + + if skippy: types = filter(lambda a: a != skippy, reverse[i]) + else: types = reverse[i] + + for j in conv: + if j[0] in types: + if j[1]: linky = j[1] % i + out = j[2] % out + if not skippy: break + if (not skippy) and out == i: + sys.stderr.write("unknown %s %s\n" % (i,reverse[i])) + + return linky % out + +# Sort/annotate done, pending, and todo item lists + +allcmd=[] +done=[] +pend=[] +todo=[] +blah=list(reverse) +blah.sort() +for i in blah: + out=categorize(reverse, i) + allcmd.append(out) + if i in toystuff or i in pending: + if i in toystuff: done.append(out) + else: pend.append(out) + out='%s' % out + else: todo.append(out) + +print "implemented=%s" % len(toystuff) + +# Write data to output file + +outfile=open("www/status.gen", "w") +outfile.write("

Status of toybox %s

\n" % version[0]); +outfile.write("

Legend: [posix] <lsb> (development) {android}\n") +outfile.write("=klibc= #sash# @sbase@ *beastiebox* $tizen$ %shell% +request+ other\n") +outfile.write("pending

\n"); + +outfile.write("

Completed

%s

\n" % "\n".join(done)) +outfile.write("

Partially implemented

%s

\n" % "\n".join(pend)) +outfile.write("

Not started yet

%s

\n" % "\n".join(todo)) + +# Output unfinished commands by category + +outfile.write("

Categories of remaining todo items

") + +for i in stuff: + todo = [] + + for j in stuff[i]: + if j in toystuff: continue + if j in pending: todo.append('%s' % j) + else: todo.append(categorize(reverse,j,i)) + + if todo: + k = i + for j in conv: + if j[0] == i: + k = j[2] % i + + outfile.write("

%s

" % (i,i,k)) + outfile.write(" ".join(todo)) + outfile.write("

\n") + +outfile.write("

All commands together in one big list

%s

\n" % "\n".join(allcmd)) diff --git a/aosp/external/toybox/scripts/mktags.c b/aosp/external/toybox/scripts/mktags.c new file mode 100644 index 0000000000000000000000000000000000000000..05494b2a56410691d729ab4bba0859ba1b510f8b --- /dev/null +++ b/aosp/external/toybox/scripts/mktags.c @@ -0,0 +1,58 @@ +// Process TAGGED_ARRAY() macros to emit TAG_STRING index macros. + +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + char *tag = 0; + int idx = 0; + + for (;;) { + char *line = 0, *s; + ssize_t len; + + len = getline(&line, (void *)&len, stdin); + if (len<0) break; + while (len && isspace(line[len-1])) line[--len]=0; + + // Very simple parser: If we haven't got a TAG then first line is TAG. + // Then look for { followed by "str" (must be on same line, may have + // more than one per line), for each one emit #define. Current TAG ended + // by ) at start of line. + + if (!tag) { + if (!isalpha(*line)) { + fprintf(stderr, "bad tag %s\n", line); + exit(1); + } + tag = strdup(line); + idx = 0; + + continue; + } + + for (s = line; isspace(*s); s++); + if (*s == ')') tag = 0; + else for (;;) { + char *start; + + while (*s && *s != '{') s++; + while (*s && *s != '"') s++; + if (!*s) break; + + start = ++s; + while (*s && *s != '"') { + if (!isalpha(*s) && !isdigit(*s)) *s = '_'; + s++; + } + printf("#define %s_%*.*s %d\n", tag, -40, (int)(s-start), start, idx); + printf("#define _%s_%*.*s (1%s<<%d)\n", tag, -39, (int)(s-start), start, + idx>31 ? "LL": "", idx); + idx++; + } + free(line); + } +} diff --git a/aosp/external/toybox/scripts/portability.sh b/aosp/external/toybox/scripts/portability.sh new file mode 100644 index 0000000000000000000000000000000000000000..618022c79605ec05006b3732660570e7bef93b09 --- /dev/null +++ b/aosp/external/toybox/scripts/portability.sh @@ -0,0 +1,14 @@ +# sourced to find alternate names for things + +source configure + +if [ -z "$(command -v "${CROSS_COMPILE}${CC}")" ] +then + echo "No ${CROSS_COMPILE}${CC} found" >&2 + exit 1 +fi + +if [ -z "$SED" ] +then + [ ! -z "$(command -v gsed 2>/dev/null)" ] && SED=gsed || SED=sed +fi diff --git a/aosp/external/toybox/scripts/record-commands b/aosp/external/toybox/scripts/record-commands new file mode 100644 index 0000000000000000000000000000000000000000..8410966be9fb97d19966327597815069448387b3 --- /dev/null +++ b/aosp/external/toybox/scripts/record-commands @@ -0,0 +1,40 @@ +#!/bin/bash + +# Set up command recording wrapper + +[ -z "$WRAPDIR" ] && WRAPDIR="$PWD"/record-commands && RM=$(which rm) +[ -z "$WRAPLOG" ] && export WRAPLOG="$PWD"/log.txt + +if [ $# -eq 0 ] +then + echo "usage: WRAPDIR=dir WRAPLOG=log.txt record-commands COMMAND..." + echo 'Then examine log.txt. "record-commands echo" to just setup $WRAPDIR' + exit 1 +fi + +if [ ! -x "$WRAPDIR/logwrapper" ] +then + make logwrapper + mkdir -p "$WRAPDIR" && mv logwrapper "$WRAPDIR" || exit 1 + + echo "$PATH" | tr : '\n' | while read DIR + do + ls "$DIR/" | while read FILE + do + ln -s logwrapper "$WRAPDIR/$FILE" 2>/dev/null + done + done +fi + +# Delete old log (if any) +rm -f "$WRAPLOG" + +X=0 +if [ ! -z "$1" ] +then + PATH="$WRAPDIR:$PATH" "$@" +fi +X=$? +[ ! -z "$RM" ] && "$RM" -rf "$WRAPDIR" + +exit $X diff --git a/aosp/external/toybox/scripts/runtest.sh b/aosp/external/toybox/scripts/runtest.sh new file mode 100644 index 0000000000000000000000000000000000000000..75872c9ed93e8e6f8536a8851a62349b61c48be0 --- /dev/null +++ b/aosp/external/toybox/scripts/runtest.sh @@ -0,0 +1,310 @@ +# Simple test harness infrastructure +# +# Copyright 2005 by Rob Landley + +# This file defines two main functions, "testcmd" and "optional". The +# first performs a test, the second enables/disables tests based on +# configuration options. + +# The following environment variables enable optional behavior in "testing": +# DEBUG - Show every command run by test script. +# VERBOSE - Print the diff -u of each failed test case. +# If equal to "fail", stop after first failed test. +# "nopass" to not show successful tests +# +# The "testcmd" function takes five arguments: +# $1) Description to display when running command +# $2) Command line arguments to command +# $3) Expected result (on stdout) +# $4) Data written to file "input" +# $5) Data written to stdin +# +# The "testing" function is like testcmd but takes a complete command line +# (I.E. you have to include the command name.) The variable $C is an absolute +# path to the command being tested, which can bypass shell builtins. +# +# The exit value of testcmd is the exit value of the command it ran. +# +# The environment variable "FAILCOUNT" contains a cumulative total of the +# number of failed tests. +# +# The "optional" function is used to skip certain tests (by setting the +# environment variable SKIP), ala: +# optional CFG_THINGY +# +# The "optional" function checks the environment variable "OPTIONFLAGS", +# which is either empty (in which case it always clears SKIP) or +# else contains a colon-separated list of features (in which case the function +# clears SKIP if the flag was found, or sets it to 1 if the flag was not found). + +export FAILCOUNT=0 +export SKIP= + +# Helper functions + +# Check config to see if option is enabled, set SKIP if not. + +SHOWPASS=PASS +SHOWFAIL=FAIL +SHOWSKIP=SKIP + +if tty -s <&1 +then + SHOWPASS="$(echo -e "\033[1;32m${SHOWPASS}\033[0m")" + SHOWFAIL="$(echo -e "\033[1;31m${SHOWFAIL}\033[0m")" + SHOWSKIP="$(echo -e "\033[1;33m${SHOWSKIP}\033[0m")" +fi + +optional() +{ + option=`printf %s "$OPTIONFLAGS" | egrep "(^|:)$1(:|\$)"` + # Not set? + if [ -z "$1" ] || [ -z "$OPTIONFLAGS" ] || [ ${#option} -ne 0 ] + then + SKIP="" + return + fi + SKIP=1 +} + +skipnot() +{ + if [ -z "$VERBOSE" ] + then + eval "$@" 2>/dev/null + else + eval "$@" + fi + [ $? -eq 0 ] || SKIPNEXT=1 +} + +toyonly() +{ + IS_TOYBOX="$("$C" --version 2>/dev/null)" + [ "${IS_TOYBOX/toybox/}" == "$IS_TOYBOX" ] && SKIPNEXT=1 + + "$@" +} + +wrong_args() +{ + if [ $# -ne 5 ] + then + printf "%s\n" "Test $NAME has the wrong number of arguments ($# $*)" >&2 + exit + fi +} + +# Announce success +do_pass() +{ + [ "$VERBOSE" != "nopass" ] && printf "%s\n" "$SHOWPASS: $NAME" +} + +# The testing function + +testing() +{ + NAME="$CMDNAME $1" + wrong_args "$@" + + [ -z "$1" ] && NAME=$2 + + [ -n "$DEBUG" ] && set -x + + if [ -n "$SKIP" -o -n "$SKIP_HOST" -a -n "$TEST_HOST" -o -n "$SKIPNEXT" ] + then + [ ! -z "$VERBOSE" ] && printf "%s\n" "$SHOWSKIP: $NAME" + unset SKIPNEXT + return 0 + fi + + echo -ne "$3" > expected + [ ! -z "$4" ] && echo -ne "$4" > input || rm -f input + echo -ne "$5" | ${EVAL:-eval --} "$2" > actual + RETVAL=$? + + # Catch segfaults + [ $RETVAL -gt 128 ] && [ $RETVAL -lt 255 ] && + echo "exited with signal (or returned $RETVAL)" >> actual + DIFF="$(diff -au${NOSPACE:+w} expected actual)" + if [ ! -z "$DIFF" ] + then + FAILCOUNT=$(($FAILCOUNT+1)) + printf "%s\n" "$SHOWFAIL: $NAME" + if [ -n "$VERBOSE" ] + then + [ ! -z "$4" ] && printf "%s\n" "echo -ne \"$4\" > input" + printf "%s\n" "echo -ne '$5' |$EVAL $2" + printf "%s\n" "$DIFF" + [ "$VERBOSE" == fail ] && exit 1 + fi + else + [ "$VERBOSE" != "nopass" ] && printf "%s\n" "$SHOWPASS: $NAME" + fi + rm -f input expected actual + + [ -n "$DEBUG" ] && set +x + + return 0 +} + +testcmd() +{ + wrong_args "$@" + + X="$1" + [ -z "$X" ] && X="$CMDNAME $2" + testing "$X" "\"$C\" $2" "$3" "$4" "$5" +} + +# Announce failure and handle fallout for txpect +do_fail() +{ + FAILCOUNT=$(($FAILCOUNT+1)) + printf "%s\n" "$SHOWFAIL: $NAME" + if [ ! -z "$CASE" ] + then + echo "Expected '$CASE'" + echo "Got '$A'" + fi + [ "$VERBOSE" == fail ] && exit 1 +} + +# txpect NAME COMMAND [I/O/E/Xstring]... +# Run COMMAND and interact with it: send I strings to input, read O or E +# strings from stdout or stderr (empty string is "read line of input here"), +# X means close stdin/stdout/stderr and match return code (blank means nonzero) +txpect() +{ + # Run command with redirection through fifos + NAME="$1" + CASE= + + if [ $# -lt 2 ] || ! mkfifo in-$$ out-$$ err-$$ + then + do_fail + return + fi + eval "$2" out-$$ 2>err-$$ & + shift 2 + : {IN}>in-$$ {OUT}&2 + LEN=$((${#1}-1)) + CASE="$1" + A= + case ${1::1} in + + # send input to child + I) echo -en "${1:1}" >&$IN || { do_fail;break;} ;; + + # check output from child + [OE]) + [ $LEN == 0 ] && LARG="" || LARG="-rN $LEN" + O=$OUT + [ ${1::1} == 'E' ] && O=$ERR + A= + read -t2 $LARG A <&$O + [ "$VERBOSE" == xpect ] && echo "$A" >&2 + if [ $LEN -eq 0 ] + then + [ -z "$A" ] && { do_fail;break;} + else + if [ "$A" != "${1:1}" ] + then + # Append the rest of the output if there is any. + read -t.1 B <&$O + A="$A$B" + read -t.1 -rN 9999 B<&$ERR + do_fail;break; + fi + fi + ;; + + # close I/O and wait for exit + X) + exec {IN}<&- {OUT}<&- {ERR}<&- + wait + A=$? + if [ -z "$LEN" ] + then + [ $A -eq 0 ] && { do_fail;break;} # any error + else + [ $A != "${1:1}" ] && { do_fail;break;} # specific value + fi + ;; + *) do_fail; break ;; + esac + shift + done + # In case we already closed it + exec {IN}<&- {OUT}<&- {ERR}<&- + + [ $# -eq 0 ] && do_pass +} + +# Recursively grab an executable and all the libraries needed to run it. +# Source paths beginning with / will be copied into destpath, otherwise +# the file is assumed to already be there and only its library dependencies +# are copied. + +mkchroot() +{ + [ $# -lt 2 ] && return + + echo -n . + + dest=$1 + shift + for i in "$@" + do + [ "${i:0:1}" == "/" ] || i=$(which $i) + [ -f "$dest/$i" ] && continue + if [ -e "$i" ] + then + d=`echo "$i" | grep -o '.*/'` && + mkdir -p "$dest/$d" && + cat "$i" > "$dest/$i" && + chmod +x "$dest/$i" + else + echo "Not found: $i" + fi + mkchroot "$dest" $(ldd "$i" | egrep -o '/.* ') + done +} + +# Set up a chroot environment and run commands within it. +# Needed commands listed on command line +# Script fed to stdin. + +dochroot() +{ + mkdir tmpdir4chroot + mount -t ramfs tmpdir4chroot tmpdir4chroot + mkdir -p tmpdir4chroot/{etc,sys,proc,tmp,dev} + cp -L testing.sh tmpdir4chroot + + # Copy utilities from command line arguments + + echo -n "Setup chroot" + mkchroot tmpdir4chroot $* + echo + + mknod tmpdir4chroot/dev/tty c 5 0 + mknod tmpdir4chroot/dev/null c 1 3 + mknod tmpdir4chroot/dev/zero c 1 5 + + # Copy script from stdin + + cat > tmpdir4chroot/test.sh + chmod +x tmpdir4chroot/test.sh + chroot tmpdir4chroot /test.sh + umount -l tmpdir4chroot + rmdir tmpdir4chroot +} diff --git a/aosp/external/toybox/scripts/showasm b/aosp/external/toybox/scripts/showasm new file mode 100644 index 0000000000000000000000000000000000000000..75a6efd70cca792944a1dbc4871437c64b18bf98 --- /dev/null +++ b/aosp/external/toybox/scripts/showasm @@ -0,0 +1,20 @@ +#!/bin/sh + +# Copyright 2006 Rob Landley + +# Dumb little utility function to print out the assembly dump of a single +# function, or list the functions so dumpable in an executable. You'd think +# there would be a way to get objdump to do this, but I can't find it. + +[ $# -lt 1 ] || [ $# -gt 2 ] && { echo "usage: showasm file function"; exit 1; } + +[ ! -f $1 ] && { echo "File $1 not found"; exit 1; } + +if [ $# -eq 1 ] +then + objdump -d $1 | sed -n -e 's/^[0-9a-fA-F]* <\(.*\)>:$/\1/p' + exit 0 +fi + +objdump -d $1 | sed -n -e '/./{H;$!d}' -e "x;/^.[0-9a-fA-F]* <$2>:/p" + diff --git a/aosp/external/toybox/scripts/single.sh b/aosp/external/toybox/scripts/single.sh new file mode 100644 index 0000000000000000000000000000000000000000..c40c6bcfad79c99f52b7d58eaf56679db5358cab --- /dev/null +++ b/aosp/external/toybox/scripts/single.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +# Build a standalone toybox command + +if [ -z "$1" ] +then + echo "usage: single.sh command..." >&2 + exit 1 +fi + +# Add trailing / to PREFIX when it's set but hasn't got one +[ "$PREFIX" == "${PREFIX%/}" ] && PREFIX="${PREFIX:+$PREFIX/}" + +# Harvest TOYBOX_* symbols from .config +if [ ! -e .config ] +then + echo "Need .config for toybox global settings. Run defconfig/menuconfig." >&2 + exit 1 +fi + +# Force dependencies to rebuild headers if we build multiplexer after this. +touch -c .config + +export KCONFIG_CONFIG=.singleconfig +for i in "$@" +do + echo -n "$i:" + TOYFILE="$(egrep -l "TOY[(]($i)[ ,]" toys/*/*.c)" + + if [ -z "$TOYFILE" ] + then + echo "Unknown command '$i'" >&2 + exit 1 + fi + + make allnoconfig > /dev/null || exit 1 + + DEPENDS= + MPDEL= + if [ "$i" == sh ] + then + DEPENDS="$(sed -n 's/USE_\([^(]*\)(NEWTOY([^,]*,.*TOYFLAG_MAYFORK.*/\1/p' toys/*/*.c)" + else + MPDEL='s/CONFIG_TOYBOX=y/# CONFIG_TOYBOX is not set/;t' + fi + + # Enable stuff this command depends on + DEPENDS="$({ echo $DEPENDS; sed -n "/^config *$i"'$/,/^$/{s/^[ \t]*depends on //;T;s/[!][A-Z0-9_]*//g;s/ *&& */|/g;p}' $TOYFILE; sed -n 's/CONFIG_\(TOYBOX_[^=]*\)=y/\1/p' .config;}| xargs | tr ' ' '|')" + NAME=$(echo $i | tr a-z- A-Z_) + sed -ri -e "$MPDEL" \ + -e "s/# (CONFIG_($NAME|${NAME}_.*${DEPENDS:+|$DEPENDS})) is not set/\1=y/" \ + "$KCONFIG_CONFIG" || exit 1 #&& grep "CONFIG_TOYBOX_" .config >> "$KCONFIG_CONFIG" || exit 1 + + export OUTNAME="$PREFIX$i" + rm -f "$OUTNAME" && + scripts/make.sh || exit 1 +done diff --git a/aosp/external/toybox/scripts/test.sh b/aosp/external/toybox/scripts/test.sh new file mode 100644 index 0000000000000000000000000000000000000000..d9955a5f0da14a282f7f762e8bcacb1160585ec6 --- /dev/null +++ b/aosp/external/toybox/scripts/test.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +source scripts/runtest.sh +source scripts/portability.sh + +TOPDIR="$PWD" +FILES="$PWD"/tests/files + +trap 'kill $(jobs -p) 2>/dev/null; exit 1' INT + +rm -rf generated/testdir +mkdir -p generated/testdir/testdir + +if [ -z "$TEST_HOST" ] +then + if [ $# -ne 0 ] + then + PREFIX=generated/testdir/ scripts/single.sh "$@" || exit 1 + else + make install_flat PREFIX=generated/testdir || exit 1 + fi +fi + +cd generated/testdir +PATH="$PWD:$PATH" +TESTDIR="$PWD" +export LC_COLLATE=C + +[ -f "$TOPDIR/generated/config.h" ] && + export OPTIONFLAGS=:$(echo $($SED -nr 's/^#define CFG_(.*) 1/\1/p' "$TOPDIR/generated/config.h") | $SED 's/ /:/g') + +do_test() +{ + cd "$TESTDIR" && rm -rf testdir && mkdir testdir && cd testdir || exit 1 + CMDNAME="${1##*/}" + CMDNAME="${CMDNAME%.test}" + if [ -z "$TEST_HOST" ] + then + C="$TESTDIR/$CMDNAME" + [ ! -e "$C" ] && echo "$CMDNAME disabled" && return + else + C="$(which $CMDNAME 2>/dev/null)" + [ -z "$C" ] && "C=$CMDNAME" + fi + + . "$1" +} + +if [ $# -ne 0 ] +then + for i in "$@" + do + do_test "$TOPDIR"/tests/$i.test + done +else + for i in "$TOPDIR"/tests/*.test + do + [ -z "$TEST_ALL" ] && [ ! -x "$i" ] && continue + do_test "$i" + done +fi diff --git a/aosp/external/toybox/tests/README.txt b/aosp/external/toybox/tests/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..15d2ea2a9e89c7623c3988e11620007f3cf87e09 --- /dev/null +++ b/aosp/external/toybox/tests/README.txt @@ -0,0 +1,8 @@ +The build infrastructure adds a "make test_NAME" target for each NAME.test +file in this directory, and "make tests" iterates through all of them. + +Individual tests boil down to a call to "scripts/test.sh NAME", and +testing all is "scripts/test.sh" with no arguments. + +The test infrastructure, including the shell functions each test calls +(mostly "testcmd" and "optional") is described in scripts/test.sh diff --git a/aosp/external/toybox/tests/base64.test b/aosp/external/toybox/tests/base64.test new file mode 100644 index 0000000000000000000000000000000000000000..7e5a99a3fcae82a25890d4ee411f74192b755f4f --- /dev/null +++ b/aosp/external/toybox/tests/base64.test @@ -0,0 +1,24 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +#testing "name" "command" "result" "infile" "stdin" + +testcmd "simple" "" "c2ltcGxlCg==\n" "" "simple\n" +testcmd "file" "input" "c2ltcGxlCg==\n" "simple\n" "" +testcmd "simple -d" "-d" "simple\n" "" "c2ltcGxlCg==\n" +testcmd "simple -d" "-d input" "simple\n" "c2ltcGxlCg==" "" +testcmd "default wrap" "" \ + "V2UndmUgcmVwbGFjZWQgdGhlIGRpbGl0aGl1bSB0aGV5IG5vcm1hbGx5IHVzZSB3aXRoIEZvbGdl\ncidzIENyeXN0YWxzLg==\n" \ + "" "We've replaced the dilithium they normally use with Folger's Crystals." +testcmd "multiline -d " "-d" \ + "We've replaced the dilithium they normally use with Folger's Crystals." "" \ + "V2UndmUgcmVwbGFjZWQgdGhlIGRpbGl0aGl1bSB0aGV5IG5vcm1hbGx5IHVzZSB3aXRoIEZvbGdl\ncidzIENyeXN0YWxzLg==\n" + +testcmd "-w" "-w 10" \ + "TWFyY2hpbm\ncgdG8gdGhl\nIGJlYXQgb2\nYgYSBkaWZm\nZXJlbnQga2\nV0dGxlIG9m\nIGZpc2guCg\n==\n" \ + "" "Marching to the beat of a different kettle of fish.\n" + +testcmd "-w0" "-w0 input" \ + "VmlraW5ncz8gVGhlcmUgYWluJ3Qgbm8gdmlraW5ncyBoZXJlLiBKdXN0IHVzIGhvbmVzdCBmYXJtZXJzLiBUaGUgdG93biB3YXMgYnVybmluZywgdGhlIHZpbGxhZ2VycyB3ZXJlIGRlYWQuIFRoZXkgZGlkbid0IG5lZWQgdGhvc2Ugc2hlZXAgYW55d2F5LiBUaGF0J3Mgb3VyIHN0b3J5IGFuZCB3ZSdyZSBzdGlja2luZyB0byBpdC4K" \ + "Vikings? There ain't no vikings here. Just us honest farmers. The town was burning, the villagers were dead. They didn't need those sheep anyway. That's our story and we're sticking to it.\n" "" diff --git a/aosp/external/toybox/tests/basename.test b/aosp/external/toybox/tests/basename.test new file mode 100644 index 0000000000000000000000000000000000000000..9fd570f03a4ab2667cefc369592cb551596847e1 --- /dev/null +++ b/aosp/external/toybox/tests/basename.test @@ -0,0 +1,31 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +#testing "name" "command" "result" "infile" "stdin" + +# Removal of extra /'s +testcmd "/-only" "///////" "/\n" "" "" +testcmd "trailing /" "a//////" "a\n" "" "" +testcmd "combined" "/////a///b///c///d/////" "d\n" "" "" + +# Standard suffix behavior. +testcmd "suffix" "a/b/c/d.suffix .suffix" "d\n" "" "" + +# A suffix cannot be the entire result. +testcmd "suffix=result" ".txt .txt" ".txt\n" "" "" + +# Deal with suffix appearing in the filename +testcmd "reappearing suffix 1" "a.txt.txt .txt" "a.txt\n" "" "" +testcmd "reappearing suffix 2" "a.txt.old .txt" "a.txt.old\n" "" "" + +# A suffix should be a real suffix, only a the end. +testcmd "invalid suffix" "isthisasuffix? suffix" "isthisasuffix?\n" "" "" + +# Zero-length suffix +testcmd "zero-length suffix" "a/b/c ''" "c\n" "" "" + +# -s. +testcmd "-s" "-s .txt /a/b/c.txt" "c\n" "" "" +testcmd "-s implies -a" "-s .txt /a/b/c.txt /a/b/d.txt" "c\nd\n" "" "" +testcmd "-a" "-a /a/b/f1 /c/d/f2" "f1\nf2\n" "" "" diff --git a/aosp/external/toybox/tests/bc.test b/aosp/external/toybox/tests/bc.test new file mode 100644 index 0000000000000000000000000000000000000000..65969b79c05b12bff7f7abc306e4a97695b2a197 --- /dev/null +++ b/aosp/external/toybox/tests/bc.test @@ -0,0 +1,40 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +#testcmd "name "args" "result" "infile" "stdin" + +BDIR="$FILES/bc" +TESTDIR="./" + +run_bc_test() { + tst="$1" + results=$(cat "$BDIR/${tst}_results.txt") + testcmd "$tst" "-l $BDIR/$tst.txt" "$results\n" "$BDIR/$tst.txt" "" +} + +run_bc_test decimal +run_bc_test add +run_bc_test subtract +run_bc_test multiply +run_bc_test divide +run_bc_test modulus +run_bc_test power +run_bc_test sqrt +run_bc_test vars +run_bc_test boolean +run_bc_test parse +run_bc_test print +run_bc_test exponent +run_bc_test log +run_bc_test pi +run_bc_test arctan +run_bc_test sine +run_bc_test cosine +run_bc_test bessel +run_bc_test arrays +run_bc_test misc +run_bc_test misc1 +run_bc_test misc2 + +testcmd "stdin" "" "2\n" "" "1+1\n" diff --git a/aosp/external/toybox/tests/blkid.test b/aosp/external/toybox/tests/blkid.test new file mode 100644 index 0000000000000000000000000000000000000000..5bfce435b0e9dbcac1aae01a7738d1e54b29a652 --- /dev/null +++ b/aosp/external/toybox/tests/blkid.test @@ -0,0 +1,55 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +#testing "name" "command" "result" "infile" "stdin" + +function BLKID() +{ + file=$1 + shift + bzcat $FILES/blkid/$file.bz2 > temp.img + # e2fsprogs' blkid outputs trailing spaces; no other blkid does. + blkid "$@" temp.img | sed 's/ $//' + rm temp.img +} + +testing "cramfs" "BLKID cramfs" \ + 'temp.img: LABEL="mycramfs" TYPE="cramfs"\n' "" "" +testing "ext2" "BLKID ext2" \ + 'temp.img: LABEL="myext2" UUID="e59093ba-4135-4fdb-bcc4-f20beae4dfaf" TYPE="ext2"\n' \ + "" "" +testing "ext3" "BLKID ext3" \ + 'temp.img: LABEL="myext3" UUID="79d1c877-1a0f-4e7d-b21d-fc32ae3ef101" SEC_TYPE="ext2" TYPE="ext3"\n' \ + "" "" +testing "ext4" "BLKID ext4" \ + 'temp.img: LABEL="myext4" UUID="dc4b7c00-c0c0-4600-af7e-0335f09770fa" TYPE="ext4"\n' \ + "" "" +testing "f2fs" "BLKID f2fs" \ + 'temp.img: LABEL="myf2fs" UUID="b53d3619-c204-4c0b-8504-36363578491c" TYPE="f2fs"\n' \ + "" "" +testing "msdos" "BLKID msdos" \ + 'temp.img: SEC_TYPE="msdos" LABEL="mymsdos" UUID="6E1E-0851" TYPE="vfat"\n' \ + "" "" + +# We use -s here because toybox blkid can't do ntfs volume labels yet. +testing "ntfs" "BLKID ntfs -s UUID -s TYPE" \ + 'temp.img: UUID="6EE1BF3808608585" TYPE="ntfs"\n' "" "" +testing "reiserfs" "BLKID reiser3" \ + 'temp.img: LABEL="myreiser" UUID="a5b99bec-45cc-41d7-986e-32f4b6fc28f2" TYPE="reiserfs"\n' \ + "" "" +testing "squashfs" "BLKID squashfs" 'temp.img: TYPE="squashfs"\n' "" "" +testing "vfat" "BLKID vfat" \ + 'temp.img: SEC_TYPE="msdos" LABEL="myvfat" UUID="7356-B91D" TYPE="vfat"\n' \ + "" "" +testing "xfs" "BLKID xfs" \ + 'temp.img: LABEL="XFS_test" UUID="d63a1dc3-27d5-4dd4-8b38-f4f97f495c6f" TYPE="xfs"\n' \ + "" "" + +# Unlike util-linux's blkid, toybox blkid can read from stdin. +toyonly testing "stdin" "bzcat $FILES/blkid/squashfs.bz2 | blkid -" \ + '-: TYPE="squashfs"\n' "" "" + +#testing "minix" 'bzcat "$BDIR"/minix.bz2 | blkid -' +#adfs bfs btrfs cramfs jfs nilfs romfs +#vfat // fat32 fat12 fat16 diff --git a/aosp/external/toybox/tests/bzcat.test b/aosp/external/toybox/tests/bzcat.test new file mode 100644 index 0000000000000000000000000000000000000000..45a2fd834a8e868a83c0e2ddcb7c67b95ecae7fa --- /dev/null +++ b/aosp/external/toybox/tests/bzcat.test @@ -0,0 +1,16 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +#testing "name" "command" "result" "infile" "stdin" +testing "2 known files" \ + 'bzcat "$FILES/blkid/"{minix,ntfs}.bz2 | sha1sum | cut -d " " -f 1' \ + 'c0b7469c9660d6056a988ef8a7fe73925efc9266\n' '' '' + +testing "overflow" \ + 'bzcat "$FILES/bzcat/overflow.bz2" >/dev/null 2>/dev/null ; + [ $? -ne 0 ] && echo good' "good\n" "" "" + +testing "badcrc" \ + 'bzcat "$FILES/bzcat/badcrc.bz2" > /dev/null 2>/dev/null ; + [ $? -ne 0 ] && echo good' "good\n" "" "" diff --git a/aosp/external/toybox/tests/cat.test b/aosp/external/toybox/tests/cat.test new file mode 100644 index 0000000000000000000000000000000000000000..9432d4e8ccd2b130317f66acf36832484462a70b --- /dev/null +++ b/aosp/external/toybox/tests/cat.test @@ -0,0 +1,31 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +#testing "name" "command" "result" "infile" "stdin" + +echo "one" > file1 +echo "two" > file2 +testing "cat" "cat && echo yes" "oneyes\n" "" "one" +testing "-" "cat - && echo yes" "oneyes\n" "" "one" +testing "file1 file2" "cat file1 file2" "one\ntwo\n" "" "" +testing "- file" "cat - file1" "zero\none\n" "" "zero\n" +testing "file -" "cat file1 -" "one\nzero\n" "" "zero\n" + +testing "file1 notfound file2" \ + "cat file1 notfound file2 2>stderr && echo ok ; cat stderr; rm stderr" \ + "one\ntwo\ncat: notfound: No such file or directory\n" "" "" + +testing "binary" \ + 'cat "$C" > file1 && cmp "$C" file1 && echo yes' "yes\n" "" "" + +testing "- file1" \ + "cat - file1 | diff -a -U 0 - file1 | tail -n 1" \ + "-hello\n" "" "hello\n" + +skipnot [ -e /dev/full ] +testing "> /dev/full" \ + "cat - > /dev/full 2>stderr && echo ok; cat stderr; rm stderr" \ + "cat: xwrite: No space left on device\n" "" "zero\n" + +rm file1 file2 diff --git a/aosp/external/toybox/tests/chattr.test b/aosp/external/toybox/tests/chattr.test new file mode 100644 index 0000000000000000000000000000000000000000..cefc84b90d09a0ac6efb084d4f424615ed6ed993 --- /dev/null +++ b/aosp/external/toybox/tests/chattr.test @@ -0,0 +1,83 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +#testing "name" "command" "result" "infile" "stdin" + +if [ "$(id -u)" -ne 0 ]; then + echo "$SHOWSKIP: chattr (not root)" + return 2>/dev/null + exit +fi + +function clean() +{ + # We don't know whether the fs will have extents (e, typically true on the + # desktop) or be encrypted (E, typically true on Android), or have data + # inlined in the inode (N), or use indexed directories, so strip those out. + # We also don't want to rely on chattr(1) to set a known version number or + # project number, so blank out any numbers. + sed -E -e 's/, (Encrypted|Extents|Indexed_directory|Inline_Data)//g;' \ + -e 's/[EeIN]-/--/g; s/[0-9]+/_/g' +} + +mkdir testattr +IN="cd testattr" +OUT="cd .." +_t="abcdefghijklmnopqrstuvwxyz" + +_empty="--------------------" + +# Check +i (immutable) works by trying to write to and remove the file. +_i="----i---------------" +testing "immutable" "$IN && echo "$_t" > testFile && + chattr +i testFile && lsattr testFile | clean && + date > testFile 2>/dev/null; rm testFile; chattr -i testFile; + cat testFile; rm -rf testFile; $OUT " "$_i testFile\n$_t\n" "" "" + +# Check +a (append-only) works by failing to write and succeeding in appending. +_a="-----a--------------" +testing "append-only" "$IN && echo "$_t" > testFile && + chattr +a testFile && + echo $_t >> testFile && + date > testFile || lsattr testFile | clean && + chattr -a testFile; cat testFile; rm -rf testFile; $OUT" \ + "$_a testFile\n$_t\n$_t\n" "" "" + +# For the rest, just toggle the bits back and forth (where supported). +# Note that some file system/kernel combinations do return success but +# silently ignore your request: +T on 4.19 f2fs, or +F on 5.2i ext4, +# for example, so we're deliberately a bit selective here. +for attr in "A" "c" "d" "e" "j" "P" "S" "s" "t" "u"; do + echo "$_t" > testFile && chattr +$attr testFile 2>/dev/null || SKIPNEXT=1 + # Check that $attr is in the lsattr output, then that - turns it back off. + testing "toggle $attr" "lsattr testFile | awk '{print \$1}' > attrs; + grep -q $attr attrs || cat attrs; cat testFile && chattr -$attr testFile && + lsattr testFile | clean; rm -rf testFile" "$_t\n$_empty testFile\n" "" "" +done + +_aA="-----a-A------------" +testing "multiple bits" "$IN && touch testFile && + chattr +Aa testFile && lsattr testFile | clean && + chattr -Aa testFile && lsattr testFile | clean; + rm -rf testFile; $OUT" "$_aA testFile\n$_empty testFile\n" "" "" + +testing "multiple files" "$IN && touch fileA && touch fileB && + chattr +Aa fileA fileB && lsattr fileA fileB | clean && + chattr -Aa fileA fileB && lsattr fileA fileB | clean; + rm -rf testFile*; $OUT" \ + "$_aA fileA\n$_aA fileB\n$_empty fileA\n$_empty fileB\n" "" "" + +touch testFile; chattr -v 1234 testFile 2>/dev/null || SKIPNEXT=1 +testing "-v version" "lsattr -v testFile | awk '{print \$1}' && + chattr -v 4567 testFile && lsattr -v testFile | awk '{print \$1}'; + rm -rf testFile" "1234\n4567\n" "" "" + +mkdir -p a/b/c && touch a/b/c/fA a/b/c/fB +testing "-R" "chattr -R +a a && lsattr a/b/c/fA a/b/c/fB | clean && + chattr -R -a a && rm -rf a" \ + "$_a a/b/c/fA\n$_a a/b/c/fB\n" "" "" +rm -rf a + +# Clean up +rm -rf testattr diff --git a/aosp/external/toybox/tests/chgrp.test b/aosp/external/toybox/tests/chgrp.test new file mode 100644 index 0000000000000000000000000000000000000000..a137baedb490ea6770d3ed7b3cda57281ceef391 --- /dev/null +++ b/aosp/external/toybox/tests/chgrp.test @@ -0,0 +1,103 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +if [ "$(id -u)" -ne 0 ] +then + echo "$SHOWSKIP: chgrp (not root)" + return 2>/dev/null + exit +fi + +# We chgrp between "root" and the last group in /etc/group. +GRP="$(sed -n '$s/:.*//p' /etc/group)" +# Or if that fails, assume we're on Android and pick a well-known group. +: "${GRP:=shell}" + +# Set up a little testing hierarchy + +rm -rf testdir && +mkdir -p testdir/dir/dir/dir testdir/dir2 && +touch testdir/dir/file && +ln -s ../dir/dir testdir/dir2/dir && +ln -s ../dir/file testdir/dir2/file || exit 1 + +# Wrapper to reset groups and return results + +IN="cd testdir && chgrp -R $GRP dir dir2 &&" +OUT="&& cd .. && echo \$(ls -lR testdir | awk '{print \$4}')" + +# The groups returned by $OUT are, in order: +# dir dir2 dir/dir dir/file dir/dir/dir dir2/dir dir2/file + +#testing "name" "command" "result" "infile" "stdin" + +# Basic smoketest +testing "dir" "$IN chgrp root dir $OUT" \ + "root $GRP $GRP $GRP $GRP $GRP $GRP\n" "" "" +testing "file" "$IN chgrp root dir/file $OUT" \ + "$GRP $GRP $GRP root $GRP $GRP $GRP\n" "" "" +testing "dir and file" "$IN chgrp root dir dir/file $OUT" \ + "root $GRP $GRP root $GRP $GRP $GRP\n" "" "" + +# symlinks (affect target, not symlink) +testing "symlink->file" "$IN chgrp root dir2/file $OUT" \ + "$GRP $GRP $GRP root $GRP $GRP $GRP\n" "" "" +testing "symlink->dir" "$IN chgrp root dir2/dir $OUT" \ + "$GRP $GRP root $GRP $GRP $GRP $GRP\n" "" "" +testing "-h symlink->dir" "$IN chgrp -h root dir2/dir $OUT" \ + "$GRP $GRP $GRP $GRP $GRP root $GRP\n" "" "" + +# What does -h do (affect symlink, not target) +testing "-h symlink->file" "$IN chgrp -h root dir2/file $OUT" \ + "$GRP $GRP $GRP $GRP $GRP $GRP root\n" "" "" +testing "-h symlink->dir" "$IN chgrp -h root dir2/dir $OUT" \ + "$GRP $GRP $GRP $GRP $GRP root $GRP\n" "" "" + +# chgrp -R (note, -h is implied by -R) + +testing "-R dir" "$IN chgrp -R root dir $OUT" \ + "root $GRP root root root $GRP $GRP\n" "" "" +testing "-R dir2" "$IN chgrp -R root dir2 $OUT" \ + "$GRP root $GRP $GRP $GRP root root\n" "" "" +testing "-R symlink->dir" "$IN chgrp -R root dir2/dir $OUT" \ + "$GRP $GRP $GRP $GRP $GRP root $GRP\n" "" "" +testing "-R symlink->file" "$IN chgrp -R root dir2/file $OUT" \ + "$GRP $GRP $GRP $GRP $GRP $GRP root\n" "" "" + +# chgrp -RP (same as -R by itself) + +testing "-RP dir2" "$IN chgrp -RP root dir2 $OUT" \ + "$GRP root $GRP $GRP $GRP root root\n" "" "" +testing "-RP symlink->dir" "$IN chgrp -RP root dir2/dir $OUT" \ + "$GRP $GRP $GRP $GRP $GRP root $GRP\n" "" "" +testing "-RP symlink->file" "$IN chgrp -RP root dir2/file $OUT" \ + "$GRP $GRP $GRP $GRP $GRP $GRP root\n" "" "" + +# chgrp -RH (change target but only recurse through symlink->dir on cmdline) + +testing "-RH dir2" "$IN chgrp -RH root dir2 $OUT" \ + "$GRP root root root $GRP $GRP $GRP\n" "" "" +testing "-RH symlink->dir" "$IN chgrp -RH root dir2/dir $OUT" \ + "$GRP $GRP root $GRP root $GRP $GRP\n" "" "" +testing "-RH symlink->file" "$IN chgrp -RH root dir2/file $OUT" \ + "$GRP $GRP $GRP root $GRP $GRP $GRP\n" "" "" + +# chgrp -RL (change target and always recurse through symlink->dir) + +testing "-RL dir2" "$IN chgrp -RL root dir2 $OUT" \ + "$GRP root root root root $GRP $GRP\n" "" "" +testing "-RL symlink->dir" "$IN chgrp -RL root dir2/dir $OUT" \ + "$GRP $GRP root $GRP root $GRP $GRP\n" "" "" +testing "-RL symlink->file" "$IN chgrp -RL root dir2/file $OUT" \ + "$GRP $GRP $GRP root $GRP $GRP $GRP\n" "" "" + +# -HLP are NOPs without -R +testing "-H without -R" "$IN chgrp -H root dir2/dir $OUT" \ + "$GRP $GRP root $GRP $GRP $GRP $GRP\n" "" "" +testing "-L without -R" "$IN chgrp -L root dir2/dir $OUT" \ + "$GRP $GRP root $GRP $GRP $GRP $GRP\n" "" "" +testing "-P without -R" "$IN chgrp -P root dir2/dir $OUT" \ + "$GRP $GRP root $GRP $GRP $GRP $GRP\n" "" "" + +rm -rf testdir diff --git a/aosp/external/toybox/tests/chmod.test b/aosp/external/toybox/tests/chmod.test new file mode 100644 index 0000000000000000000000000000000000000000..b2b5a4889f4044f0103b338c3de614a2890144a5 --- /dev/null +++ b/aosp/external/toybox/tests/chmod.test @@ -0,0 +1,116 @@ +#!/bin/bash + +# Copyright 2013 Divya Kothari +# Copyright 2013 Robin Mittal + +#testing "name" "command" "result" "infile" "stdin" + +umask 022 + +PERM="---""--x""-w-""-wx""r--""r-x""rw-""rwx" + +num2perm() +{ + for i in 0 1 2 + do + num=${1:$i:1} + printf "%s" ${PERM:$(($num*3)):3} + done + echo +} + +# Creating test files to test chmod command +mkdir dir +touch file + +# We don't need to test all 512 permissions +for u in 0 1 2 3 4 5 6 7 +do + for g in 0 3 6 + do + for o in 0 7 + do + if [ "$type" == file ] + then + type=dir + rm -rf "./$type" && mkdir $type + DASH=d + else + type=file + rm -f "./$type" && touch $type + DASH=- + fi + DASHES=$(num2perm $u$g$o) + testing "$u$g$o $type" "chmod $u$g$o $type && + ls -ld $type | cut -d' ' -f 1 | cut -d. -f 1" "$DASH$DASHES\n" "" "" + done + done +done + +rm -rf dir file && mkdir dir && touch file 640 +testing "750 dir 640 file" "chmod 750 dir 640 file && + ls -ld 640 dir file | cut -d' ' -f 1 | cut -d. -f 1" \ + "-rwxr-x---\ndrwxr-x---\n-rwxr-x---\n" "" "" + +chtest() +{ + rm -rf dir file && mkdir dir && touch file + testing "$1 dir file" \ + "chmod $1 dir file && ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" \ + "$2" "" "" +} + +chtest 666 "drw-rw-rw-\n-rw-rw-rw-\n" +chtest 765 "drwxrw-r-x\n-rwxrw-r-x\n" +chtest u=r "dr--r-xr-x\n-r--r--r--\n" +chtest u=w "d-w-r-xr-x\n--w-r--r--\n" +chtest u=x "d--xr-xr-x\n---xr--r--\n" +chtest u+r "drwxr-xr-x\n-rw-r--r--\n" +chtest u+w "drwxr-xr-x\n-rw-r--r--\n" +chtest u+x "drwxr-xr-x\n-rwxr--r--\n" +chtest u-r "d-wxr-xr-x\n--w-r--r--\n" +chtest u-w "dr-xr-xr-x\n-r--r--r--\n" +chtest u-x "drw-r-xr-x\n-rw-r--r--\n" +chtest g=r "drwxr--r-x\n-rw-r--r--\n" +chtest g=w "drwx-w-r-x\n-rw--w-r--\n" +chtest g=x "drwx--xr-x\n-rw---xr--\n" +chtest g+r "drwxr-xr-x\n-rw-r--r--\n" +chtest g+w "drwxrwxr-x\n-rw-rw-r--\n" +chtest g+x "drwxr-xr-x\n-rw-r-xr--\n" +chtest g-r "drwx--xr-x\n-rw----r--\n" +chtest g-w "drwxr-xr-x\n-rw-r--r--\n" +chtest g-x "drwxr--r-x\n-rw-r--r--\n" +chtest o=r "drwxr-xr--\n-rw-r--r--\n" +chtest o=w "drwxr-x-w-\n-rw-r---w-\n" +chtest o=x "drwxr-x--x\n-rw-r----x\n" +chtest o+r "drwxr-xr-x\n-rw-r--r--\n" +chtest o+w "drwxr-xrwx\n-rw-r--rw-\n" +chtest o+x "drwxr-xr-x\n-rw-r--r-x\n" +chtest o-r "drwxr-x--x\n-rw-r-----\n" +chtest o-w "drwxr-xr-x\n-rw-r--r--\n" +chtest o-x "drwxr-xr--\n-rw-r--r--\n" +chtest a=r "dr--r--r--\n-r--r--r--\n" +chtest a=w "d-w--w--w-\n--w--w--w-\n" +chtest a=x "d--x--x--x\n---x--x--x\n" +chtest a+r "drwxr-xr-x\n-rw-r--r--\n" +chtest a+w "drwxrwxrwx\n-rw-rw-rw-\n" +chtest a+x "drwxr-xr-x\n-rwxr-xr-x\n" +chtest a-r "d-wx--x--x\n--w-------\n" +chtest a-w "dr-xr-xr-x\n-r--r--r--\n" +chtest a-x "drw-r--r--\n-rw-r--r--\n" +chtest =r "dr--r--r--\n-r--r--r--\n" +chtest =w "d-w-------\n--w-------\n" +chtest =x "d--x--x--x\n---x--x--x\n" +chtest +r "drwxr-xr-x\n-rw-r--r--\n" +chtest +w "drwxr-xr-x\n-rw-r--r--\n" +chtest +x "drwxr-xr-x\n-rwxr-xr-x\n" +chtest -r "d-wx--x--x\n--w-------\n" +chtest -w "dr-xr-xr-x\n-r--r--r--\n" +chtest -x "drw-r--r--\n-rw-r--r--\n" +chtest g+s "drwxr-sr-x\n-rw-r-Sr--\n" +chtest u+s "drwsr-xr-x\n-rwSr--r--\n" +chtest o+s "drwxr-xr-x\n-rw-r--r--\n" +chtest +t "drwxr-xr-t\n-rw-r--r-T\n" + +# Removing test files for cleanup purpose +rm -rf dir file diff --git a/aosp/external/toybox/tests/chown.test b/aosp/external/toybox/tests/chown.test new file mode 100644 index 0000000000000000000000000000000000000000..f79d5c1a8ce666e9d21683e5a8c811c1640f66b3 --- /dev/null +++ b/aosp/external/toybox/tests/chown.test @@ -0,0 +1,43 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +if [ "$(id -u)" -ne 0 ] +then + echo "$SHOWSKIP: chown (not root)" + return 2>/dev/null + exit +fi + +# We chown between user "root" and the last user in /etc/passwd, +# and group "root" and the last group in /etc/group. +USR="$(sed -n '$s/:.*//p' /etc/passwd)" +GRP="$(sed -n '$s/:.*//p' /etc/group)" +# Or if that fails, we assume we're on Android... +: "${USR:=shell}" +: "${GRP:=daemon}" + +# Set up a little testing hierarchy + +rm -rf testdir && +mkdir testdir && +touch testdir/file +F=testdir/file + +# Wrapper to reset groups and return results + +OUT="&& stat --format '%U %G' $F" + +#testing "name" "command" "result" "infile" "stdin" + +# Basic smoketest +testing "initial" "chown root:root $F $OUT" "root root\n" "" "" +testing "usr:grp" "chown $USR:$GRP $F $OUT" "$USR $GRP\n" "" "" +testing "root" "chown root $F $OUT" "root $GRP\n" "" "" +# TODO: can we test "owner:"? +testing ":grp" "chown root:root $F && chown :$GRP $F $OUT" \ + "root $GRP\n" "" "" +testing ":" "chown $USR:$GRP $F && chown : $F $OUT" \ + "$USR $GRP\n" "" "" + +rm -rf testdir diff --git a/aosp/external/toybox/tests/cksum.test b/aosp/external/toybox/tests/cksum.test new file mode 100644 index 0000000000000000000000000000000000000000..d69f0cb4f8e1afdf8d8e2ae08b5ad746f09d8678 --- /dev/null +++ b/aosp/external/toybox/tests/cksum.test @@ -0,0 +1,29 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + + +#testing "name" "command" "result" "infile" "stdin" + +# Default behavior on stdin and on files. +testing "on stdin" "echo -n hello | cksum" "3287646509 5\n" "" "" +echo -n "hello" > tmpfile +testing "on file" "cksum tmpfile" "3287646509 5 tmpfile\n" "" "" +rm -f tmpfile +touch one two +testing "on multiple files" "cksum one two" "4294967295 0 one\n4294967295 0 two\n" "" "" +rm -f one two + +# Check the length suppression, both calculate the CRC on 'abc' but the second +# option has length suppression on and has the length concatenated to 'abc'. +testing "on abc including length" "cksum" "1219131554 3\n" "" 'abc' +testing "on abc excluding length" "cksum -N" "1219131554\n" "" 'abc\x3' + +# cksum on no contents gives 0xffffffff (=4294967295) +testing "on no data post-inversion" "echo -n "" | cksum" "4294967295 0\n" "" "" +# If we do preinversion we will then get 0. +testing "on no data pre+post-inversion" "echo -n "" | cksum -P" "0 0\n" "" "" +# If we skip the post-inversion we also get 0 +testing "on no data no inversion" "echo -n "" | cksum -I" "0 0\n" "" "" +# Two wrongs make a right. +testing "on no data pre-inversion" "echo -n "" | cksum -PI" "4294967295 0\n" "" "" diff --git a/aosp/external/toybox/tests/cmp.test b/aosp/external/toybox/tests/cmp.test new file mode 100644 index 0000000000000000000000000000000000000000..d1a8033b0f7e90bc10e96045a89452a621dccbb2 --- /dev/null +++ b/aosp/external/toybox/tests/cmp.test @@ -0,0 +1,45 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +# TODO: coreutils cmp uses stdin if only one file is given +testing "one argument match" 'cmp input && echo yes' "yes\n" \ + "one\ntwo\nthree" "one\ntwo\nthree" +# posix says ""%s %s differ: char %d, line %d\n" but diffutils says "byte" +testing "one argument diff" 'cmp input | sed s/byte/char/' \ + "input - differ: char 5, line 2\n" "one\ntwo\nthree" "one\nboing\nthree" + +testing "missing file1 [fail]" 'cmp file1 input 2>/dev/null || echo $?' "2\n" "foo" "" + +#mkdir dir +#testing "directory [fail]" "cmp dir dir 2>/dev/null || echo yes" \ + #"yes\n" "" "" +#rmdir dir + +echo "ab +c" > input2 + +testing "identical files, stdout" "cmp input input2" "" "ab\nc\n" "" +testing "identical files, return code" "cmp input input2 && echo yes" "yes\n" "ab\nc\n" "" + +testing "EOF, stderr" "cmp input input2 2>&1" "cmp: EOF on input2\n" "ab\nc\nx" "" +testing "EOF, return code" "cmp input input2 2>/dev/null || echo yes" "yes\n" "ab\nc\nx" "" +# The gnu/dammit version fails this because posix says "char" and they don't. +testing "diff, stdout" "cmp input input2 | sed s/byte/char/" \ + "input input2 differ: char 4, line 2\n" "ab\nx\nx" "" +testing "diff, return code" "cmp input input2 > /dev/null || echo yes" "yes\n" "ab\nx\nx" "" + +testing "-s EOF, return code" "cmp -s input input2 2>&1 || echo yes" "yes\n" "ab\nc\nx" "" +testing "-s diff, return code" "cmp -s input input2 2>&1 || echo yes" "yes\n" "ab\nx\nx" "" + +testing "-l EOF, stderr" "cmp -l input input2 2>&1" "cmp: EOF on input2\n" "ab\nc\nx" "" +testing "-l diff and EOF, stdout and stderr" "cmp -l input input2 2>&1 | sort" "4 170 143\ncmp: EOF on input2\n" "ab\nx\nx" "" + +testing "-s not exist" "cmp -s input doesnotexist 2>&1 || echo yes" "yes\n" "x" "" + +rm input2 + +testing "stdin and file" "cmp input - | sed s/byte/char/" \ + "input - differ: char 4, line 2\n" "ab\nc\n" "ab\nx\n" +#testing "stdin and stdin" "cmp input -" "" "" "ab\nc\n" + diff --git a/aosp/external/toybox/tests/cp.test b/aosp/external/toybox/tests/cp.test new file mode 100644 index 0000000000000000000000000000000000000000..dfb80ea1b2f7787654ae056bd3ce634f2cea0b83 --- /dev/null +++ b/aosp/external/toybox/tests/cp.test @@ -0,0 +1,133 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +OLDUMASK=$(umask) +umask 0002 + +# Create test file +dd if=/dev/urandom of=random bs=64 count=1 2> /dev/null + +#testing "name" "command" "result" "infile" "stdin" + +testing "not enough arguments [fail]" "cp one 2>/dev/null || echo yes" \ + "yes\n" "" "" +testing "-missing source [fail]" "cp missing two 2>/dev/null || echo yes" \ + "yes\n" "" "" +testing "file->file" "cp random two && cmp random two && echo yes" \ + "yes\n" "" "" +rm two + +mkdir two +testing "file->dir" "cp random two && cmp random two/random && echo yes" \ + "yes\n" "" "" +rm two/random +testing "file->dir/file" \ + "cp random two/random && cmp random two/random && echo yes" \ + "yes\n" "" "" +testing "-r dir->missing" \ + "cp -r two three && cmp random three/random && echo yes" \ + "yes\n" "" "" +touch walrus +testing "-r dir->file [fail]" \ + "cp -r two walrus 2>/dev/null || echo yes" "yes\n" "" "" +touch two/three +testing "-r dir hits file." \ + "cp -r three two 2>/dev/null || echo yes" "yes\n" "" "" +rm -rf two three walrus + +touch two +chmod 000 two +skipnot [ $(id -u) -ne 0 ] # Root doesn't count. +testing "file->inaccessible [fail]" \ + "cp random two 2>/dev/null || echo yes" "yes\n" "" "" +rm -f two + +touch two +chmod 000 two +skipnot [ $(id -u) -ne 0 ] # Root doesn't count. +testing "-f file->inaccessible" \ + "cp -f random two && cmp random two && echo yes" "yes\n" "" "" +mkdir sub +chmod 000 sub +skipnot [ $(id -u) -ne 0 ] # Root doesn't count. +testing "file->inaccessible_dir [fail]" \ + "cp random sub 2>/dev/null || echo yes" "yes\n" "" "" +rm two +rmdir sub + +# This test fails because our -rf deletes existing target files without +# regard to what we'd be copying over it. Posix says to only do that if +# we'd be copying a file over the file, but does not say _why_. + +#mkdir dir +#touch file +#testing "-rf dir file [fail]" "cp -rf dir file 2>/dev/null || echo yes" \ +# "yes\n" "" "" +#rm -rf dir file + +touch one two +testing "file1 file2 missing [fail]" \ + "cp one two missing 2>/dev/null || echo yes" "yes\n" "" "" +mkdir dir +testing "dir file missing [fail]" \ + "cp dir two missing 2>/dev/null || echo yes" "yes\n" "" "" +testing "-rf dir file missing [fail]" \ + "cp dir two missing 2>/dev/null || echo yes" "yes\n" "" "" +testing "file1 file2 file [fail]" \ + "cp random one two 2>/dev/null || echo yes" "yes\n" "" "" +testing "file1 file2 dir" \ + "cp random one dir && cmp random dir/random && cmp one dir/one && echo yes" \ + "yes\n" "" "" +rm one two random +rm -rf dir + +mkdir -p one/two/three/four +touch one/two/three/five +touch one/{six,seven,eight} +testing "-r /abspath dest" \ + "cp -r \"$(readlink -f one)\" dir && diff -r one dir && echo yes" \ + "yes\n" "" "" +testing "-r dir again" "cp -r one/. dir && diff -r one dir && echo yes" \ + "yes\n" "" "" +mkdir dir2 +testing "-r dir1/* dir2" \ + "cp -r one/* dir2 && diff -r one dir2 && echo yes" "yes\n" "" "" +rm -rf one dir dir2 + +mkdir one; touch one/two; cp one/two one/three +cp -pr one/ one_ # Succeeds twice in a row +testing "-pr dir/." "cp -pr one/. one_ && echo yes" "yes\n" "" "" +rm -rf one one_ +mkdir one; touch one/two; ln -s two one/three +cp -pr one/ one_ # First time ok, second mustn't fail with "File exists" +testing "-pr dir/. symlink child" "cp -pr one/. one_ && echo yes" "yes\n" "" "" +rm -rf one one_ + +touch walrus +chmod 644 walrus +ln -s walrus woot +testing "symlink dest permissions" "cp woot carpenter && stat -c %A carpenter" \ + "-rw-r--r--\n" "" "" +testing "duplicated --preserve options" \ + "cp --preserve=mode,mode walrus walrus2 2>&1 || echo bad" "" "" "" +rm -rf walrus woot carpenter + +mkdir dir +echo a > file +echo b > b +testing "-T file" "cp -T b file && cat file" "b\n" "" "" +testing "-T dir" "cp -T b dir 2>/dev/null || echo expected" "expected\n" "" "" +rm b file + +# cp -r ../source destdir +# cp -r one/two/three missing +# cp -r one/two/three two +# cp file1 file2 dir +# cp file1 missing file2 -> dir + +# Make sure it's truncating existing file +# copy with -d at top level, with -d in directory, without -d at top level, +# without -d in directory + +umask $OLDUMASK diff --git a/aosp/external/toybox/tests/cpio.test b/aosp/external/toybox/tests/cpio.test new file mode 100644 index 0000000000000000000000000000000000000000..5158efa43164c618c02c049cb1aeef6236075319 --- /dev/null +++ b/aosp/external/toybox/tests/cpio.test @@ -0,0 +1,39 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +# We need to test name and file padding. +# This means all possible values of strlen(name)+1 % 4, +# plus file sizes of at least 0-4. + +touch a bb ccc dddd +testing "name padding" "cpio -o -H newc|cpio -it" "a\nbb\nccc\ndddd\n" "" "a\nbb\nccc\ndddd\n" +rm a bb ccc dddd + +touch a +printf '1' >b +printf '22' >c +printf '333' >d +testing "file padding" "cpio -o -H newc|cpio -it" "a\nb\nc\nd\n" "" "a\nb\nc\nd\n" +rm a b c d + +touch a +printf '1' >bb +printf '22' >ccc +printf '333' >dddd +# With the proper padding, header length, and file length, +# the relevant bit should be here: +# 110*5 + 4*3 + 2 + 6*3 = 550 + 12 + 20 = 582 +# files are padded to n*4, names are padded to 2 + n*4 due to the header length +testing "archive length" "cpio -o -H newc|dd ibs=2 skip=291 count=5 2>/dev/null" "TRAILER!!!" "" "a\nbb\nccc\ndddd\n" +testing "archive magic" "cpio -o -H newc|dd ibs=2 count=3 2>/dev/null" "070701" "" "a\n" +# check name length (8 bytes before the empty "crc") +testing "name length" "cpio -o -H newc|dd ibs=2 skip=47 count=4 2>/dev/null" "00000002" "" "a\n" +rm a bb ccc dddd + +# archive dangling symlinks and empty files even if we cannot open them +touch a; chmod a-rwx a; ln -s a/cant b +testing "archives unreadable empty files" "cpio -o -H newc|cpio -it" "a\nb\n" "" "a\nb\n" +chmod u+rw a; rm -f a b + + diff --git a/aosp/external/toybox/tests/cut.test b/aosp/external/toybox/tests/cut.test new file mode 100644 index 0000000000000000000000000000000000000000..8d8c4ba16cb941a53f42008eea0afa3d12652953 --- /dev/null +++ b/aosp/external/toybox/tests/cut.test @@ -0,0 +1,84 @@ +#!/bin/bash + +# Copyright 2013 Robin Mittal +# Copyright 2013 Divya Kothari +# Copyright 2013 Kyungwan.Han + +[ -f testing.sh ] && . testing.sh + +#testing "name" "command" "result" "infile" "stdin" + +# Creating test file for testing cut +echo "one:two:three:four:five:six:seven +alpha:beta:gamma:delta:epsilon:zeta:eta:theta:iota:kappa:lambda:mu +the quick brown fox jumps over the lazy dog" >abc.txt + +testing "-b a,a,a" "cut -b 3,3,3 abc.txt" "e\np\ne\n" "" "" +testing "-b overlaps" "cut -b 1-3,2-5,7-9,9-10 abc.txt" \ + "one:to:th\nalphabeta\nthe qick \n" "" "" +testing "-b encapsulated" "cut -b 3-8,4-6 abc.txt" "e:two:\npha:be\ne quic\n" \ + "" "" +testing "-bO overlaps" \ + "cut --output-delimiter ' ' -b 1-3,2-5,7-9,9-10 abc.txt" \ + "one:t o:th\nalpha beta\nthe q ick \n" "" "" +testing "high-low error" "cut -b 8-3 abc.txt 2>/dev/null || echo err" "err\n" \ + "" "" + +testing "-c a-b" "cut -c 4-10 abc.txt" ":two:th\nha:beta\n quick \n" "" "" +testing "-c a-" "cut -c 41- abc.txt" "\ntheta:iota:kappa:lambda:mu\ndog\n" "" "" +testing "-c -b" "cut -c -39 abc.txt" \ + "one:two:three:four:five:six:seven\nalpha:beta:gamma:delta:epsilon:zeta:eta\nthe quick brown fox jumps over the lazy\n" \ + "" "" +testing "-c a" "cut -c 40 abc.txt" "\n:\n \n" "" "" +testing "-c a,b-c,d" "cut -c 3,5-7,10 abc.txt" "etwoh\npa:ba\nequi \n" "" "" +toyonly testing "-c japan.txt" 'cut -c 3-6,9-12 "$FILES/utf8/japan.txt"' \ + "ガラスをられã¾ã™\n" "" "" + +toyonly testing "-C test1.txt" 'cut -C -1 "$FILES/utf8/test1.txt"' \ + "l̴̗̞̠\n" "" "" + +# substitute for awk +toyonly testcmd "-DF" "-DF 2,7,5" \ + "said and your\nare\nis demand. supply\nforecast :\nyou you better,\n\nEm: Took hate\n" "" \ +"Bother, said Pooh. It's your husband, and he has a gun. +Cheerios are donut seeds. +Talk is cheap because supply exceeds demand. +Weather forecast for tonight : dark. +Apple: you can buy better, but you can't pay more. +Subcalifragilisticexpialidocious. +Auntie Em: Hate you, hate Kansas. Took the dog. Dorothy." + +testcmd "empty field" "-d ':' -f 1-3" "a::b\n" "" "a::b\n" +testcmd "empty field 2" "-d ':' -f 3-5" "b::c\n" "" "a::b::c:d\n" + +testing "-f a-" "cut -d ':' -f 5- abc.txt" "five:six:seven\nepsilon:zeta:eta:theta:iota:kappa:lambda:mu\nthe quick brown fox jumps over the lazy dog\n" "" "" + +testing "show whole line with no delim" "cut -d ' ' -f 3 abc.txt" \ + "one:two:three:four:five:six:seven\nalpha:beta:gamma:delta:epsilon:zeta:eta:theta:iota:kappa:lambda:mu\nbrown\n" "" "" + +testing "with echo, -c (a-b)" "echo 'ref_categorie=test' | cut -c 1-15 " "ref_categorie=t\n" "" "" +testing "with echo, -c (a)" "echo 'ref_categorie=test' | cut -c 14" "=\n" "" "" + +# Modifying abc.txt data as per new testcase +echo "abcdefghijklmnopqrstuvwxyz" >abc.txt + +testing "with -c (a,b,c)" "cut -c 4,5,20 abc.txt" "det\n" "" "" + +testing "with -b (a,b,c)" "cut -b 4,5,20 abc.txt" "det\n" "" "" + +# Modifying abc.txt data as per testcase +echo "406378:Sales:Itorre:Jan +031762:Marketing:Nasium:Jim +636496:Research:Ancholie:Mel +396082:Sales:Jucacion:Ed" >abc.txt + +testing "with -d -f(:) -s" "cut -d: -f3 -s abc.txt" "Itorre\nNasium\nAncholie\nJucacion\n" "" "" + +testing "with -d -f( ) -s" "cut -d' ' -f3 -s abc.txt && echo yes" "yes\n" "" "" + +testing "with -d -f(a) -s" "cut -da -f3 -s abc.txt" "n\nsium:Jim\n\ncion:Ed\n" "" "" + +testing "with -d -f(a) -s -n" "cut -da -f3 -s -n abc.txt" "n\nsium:Jim\n\ncion:Ed\n" "" "" + +# Removing abc.txt file for cleanup purpose +rm abc.txt diff --git a/aosp/external/toybox/tests/date.test b/aosp/external/toybox/tests/date.test new file mode 100644 index 0000000000000000000000000000000000000000..2b8653493c791e19d87e01f71e3c5a57e9d5cc8c --- /dev/null +++ b/aosp/external/toybox/tests/date.test @@ -0,0 +1,56 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +#testing "name" "command" "result" "infile" "stdin" + +# Use a consistent TZ for these tests, but not GMT/UTC because that +# makes mistakes harder to spot. +tz=Europe/Berlin +this_year=$(TZ=$tz date +%Y) + +# Unix date parsing. +testing "-d @0" "TZ=$tz date -d @0" "Thu Jan 1 01:00:00 CET 1970\n" "" "" +testing "-d @0x123 invalid" "TZ=$tz date -d @0x123 2>/dev/null || echo expected error" "expected error\n" "" "" + +# POSIX format with 2- and 4-digit years. +# All toyonly because coreutils rejects POSIX format dates supplied to -d. +# These expected values are from running on the host without -d (not as root!). +toyonly testing "-d MMDDhhmm" \ + "TZ=$tz date -d 06021234 +'%F %T'" "$this_year-06-02 12:34:00\n" "" "" +toyonly testing "-d MMDDhhmmYY.SS" \ + "TZ=$tz date -d 1110143115.30" "Tue Nov 10 14:31:30 CET 2015\n" "" "" +# busybox thinks this is the year 603 (ISO time 0602-12-34 19:82 with out of range fields normalized). +toyonly testing "-d MMDDhhmmCCYY" \ + "TZ=$tz date -d 060212341982" "Wed Jun 2 12:34:00 CEST 1982\n" "" "" +toyonly testing "-d MMDDhhmmCCYY.SS" \ + "TZ=$tz date -d 111014312015.30" "Tue Nov 10 14:31:30 CET 2015\n" "" "" + +# ISO date format. +testing "-d 1980-01-02" "TZ=$tz date -d 1980-01-02" "Wed Jan 2 00:00:00 CET 1980\n" "" "" +testing "-d 1980-01-02 12:34" "TZ=$tz date -d '1980-01-02 12:34'" "Wed Jan 2 12:34:00 CET 1980\n" "" "" +testing "-d 1980-01-02 12:34:56" "TZ=$tz date -d '1980-01-02 12:34:56'" "Wed Jan 2 12:34:56 CET 1980\n" "" "" + +# Reject Unix times without a leading @. +testing "Unix time missing @" "TZ=$tz date 1438053157 2>/dev/null || echo no" \ + "no\n" "" "" + +# Test just hour and minute (accepted by coreutils and busybox, presumably for setting the time). +testing "-d 12:34" 'TZ=UTC date -d 12:34 | grep -q " 12:34:00 UTC $this_year" && echo OK' "OK\n" "" "" +testing "-d 12:34:56" 'TZ=UTC date -d 12:34:56 | grep -q " 12:34:56 UTC $this_year" && echo OK' "OK\n" "" "" + +# Test the %N extension to srtftime(3) format strings. +testing "%N" "touch -d 2012-01-23T12:34:56.123456789 f && date -r f +%Y%m%d-%H%M%S.%N" "20120123-123456.123456789\n" "" "" +testing "%1N" "touch -d 2012-01-23T12:34:56.123456789 f && date -r f +%Y%m%d-%H%M%S.%1N" "20120123-123456.1\n" "" "" +testing "%2N" "touch -d 2012-01-23T12:34:56.123456789 f && date -r f +%Y%m%d-%H%M%S.%2N" "20120123-123456.12\n" "" "" +testing "%8N" "touch -d 2012-01-23T12:34:56.123456789 f && date -r f +%Y%m%d-%H%M%S.%8N" "20120123-123456.12345678\n" "" "" +testing "%9N" "touch -d 2012-01-23T12:34:56.123456789 f && date -r f +%Y%m%d-%H%M%S.%9N" "20120123-123456.123456789\n" "" "" +testing "%%N" "touch -d 2012-01-23T12:34:56.123456789 f && date -r f +%Y%m%d-%H%M%S.%%N" "20120123-123456.%N\n" "" "" +testing "trailing %" "touch -d 2012-01-23T12:34:56.123456789 f && date -r f +%Y%m%d-%H%M%S.%" "20120123-123456.%\n" "" "" +testing "just %" "touch -d 2012-01-23T12:34:56.123456789 f && date -r f +%" "%\n" "" "" +rm -f f + +# Test embedded TZ to take a date in one time zone and display it in another. +testing "TZ=" "TZ='America/Los_Angeles' date -d 'TZ=\"Europe/Berlin\" 2018-01-04 08:00'" "Wed Jan 3 23:00:00 PST 2018\n" "" "" +testing "TZ=" "TZ='America/Los_Angeles' date -d 'TZ=\"Europe/Berlin\" 2018-10-04 08:00'" "Wed Oct 3 23:00:00 PDT 2018\n" "" "" +testing "TZ= @" "TZ='America/Los_Angeles' date -d 'TZ=\"GMT\" @1533427200'" "Sat Aug 4 17:00:00 PDT 2018\n" "" "" diff --git a/aosp/external/toybox/tests/dd.test b/aosp/external/toybox/tests/dd.test new file mode 100644 index 0000000000000000000000000000000000000000..7d7b794b610056738323423a43e4e26f9f3600b7 --- /dev/null +++ b/aosp/external/toybox/tests/dd.test @@ -0,0 +1,109 @@ +#!/bin/bash + +# Copyright 2013 Robin Mittal +# Copyright 2013 Divya Kothari + +[ -f testing.sh ] && . testing.sh + +# 'dd' command, stderr prints redirecting to /dev/null +opt="2>/dev/null" + +#testing "name" "command" "result" "infile" "stdin" + +# Test suffixed number parsing; `count` is representative. +testing "count=2" "dd if=input count=2 ibs=1 $opt" "hi" "high\n" "" +testing "count= 2" "dd if=input 'count= 2' ibs=1 $opt" "hi" "high\n" "" +toyonly testing "count=0x2" "dd if=input 'count=0x2' ibs=1 $opt" "hi" \ + "high\n" "" +testing "count=-2" "dd if=input 'count=-2' ibs=1 2>/dev/null || echo errored" "errored\n" "" "" + +testing "if=(file)" "dd if=input $opt" "I WANT\n" "I WANT\n" "" +testing "of=(file)" "dd of=file $opt && cat file" "I WANT\n" "" "I WANT\n" +testing "if=file of=file" "dd if=input of=foo $opt && cat foo && rm -f foo" \ + "I WANT\n" "I WANT\n" "" +testing "if=file | dd of=file" "dd if=input $opt | dd of=foo $opt && + cat foo && rm -f foo" "I WANT\n" "I WANT\n" "" +testing "(stdout)" "dd $opt" "I WANT\n" "" "I WANT\n" +testing "sync,noerror" \ + "dd if=input of=outFile seek=8860 bs=1M conv=sync,noerror $opt && + stat -c \"%s\" outFile && rm -f outFile" "9291431936\n" "I WANT\n" "" +testing "if=file of=(null)" \ + "dd if=input of=/dev/null $opt && echo 'yes'" "yes\n" "I WANT\n" "" +testing "with if of bs" \ + "dd if=/dev/zero of=sda.txt bs=512 count=1 $opt && + stat -c '%s' sda.txt && rm -f sda.txt" "512\n" "" "" +testing "with if of ibs obs" \ + "dd if=/dev/zero of=sda.txt ibs=512 obs=256 count=1 $opt && + stat -c '%s' sda.txt && rm -f sda.txt" "512\n" "" "" +testing "with if of ibs obs count" \ + "dd if=/dev/zero of=sda.txt ibs=512 obs=256 count=3 $opt && + stat -c '%s' sda.txt && rm -f sda.txt" "1536\n" "" "" + +ln -s input softlink +testing "if=softlink" "dd if=softlink $opt" "I WANT\n" "I WANT\n" "" +unlink softlink + +ln -s file softlink +testing "if=file of=softlink" "dd if=input of=softlink $opt && + [ -f file -a -L softlink ] && cat softlink" "I WANT\n" "I WANT\n" "" +unlink softlink && rm -f file + +testing "if=file of=file (same file)" "dd if=input of=input $opt && + [ -f input ] && cat input && echo 'yes'" "yes\n" "I WANT\n" "" +testing "same file notrunc" \ + "dd if=input of=input conv=notrunc $opt && cat input" \ + "I WANT\n" "I WANT\n" "" + +testing "with ibs obs bs" "dd ibs=2 obs=5 bs=9 $opt" "I WANT\n" "" "I WANT\n" +testing "with ibs obs bs if" "dd ibs=2 obs=5 bs=9 if=input $opt" \ + "I WANT\n" "I WANT\n" "" + +testing "with ibs obs count" "dd ibs=1 obs=1 count=1 $opt" "I" "" "I WANT\n" +testing "with ibs obs count if" "dd ibs=1 obs=1 count=3 if=input $opt" \ + "I W" "I WANT\n" "" + +testing "with count" "dd count=1 $opt" "I WANT\n" "" "I WANT\n" +testing "with count if" "dd count=1 if=input $opt" "I WANT\n" "I WANT\n" "" + +testing "with skip" "dd skip=0 $opt" "I WANT\n" "" "I WANT\n" +testing "with skip if" "dd skip=0 if=input $opt" "I WANT\n" "I WANT\n" "" + +testing "with seek" "dd seek=0 $opt" "I WANT\n" "" "I WANT\n" +testing "with seek if" "dd seek=0 if=input $opt" "I WANT\n" "I WANT\n" "" + +# Testing only 'notrunc', 'noerror', 'fsync', 'sync' + +testing "conv=notrunc" "dd conv=notrunc $opt" "I WANT\n" "" "I WANT\n" +testing "conv=notrunc with IF" "dd conv=notrunc if=input $opt" "I WANT\n" \ + "I WANT\n" "" + +testing "conv=noerror" "dd conv=noerror $opt" "I WANT\n" "" "I WANT\n" +testing "conv=noerror with IF" "dd conv=noerror if=input $opt" "I WANT\n" \ + "I WANT\n" "" + +testing "conv=fsync" "dd conv=fsync $opt" "I WANT\n" "" "I WANT\n" +testing "conv=fsync with IF" "dd conv=fsync if=input $opt" "I WANT\n" \ + "I WANT\n" "" + +testing "conv=sync" "dd conv=sync $opt | head -n 1" "I WANT\n" "" "I WANT\n" +testing "conv=sync with IF" "dd conv=sync if=input $opt | head -n 1" "I WANT\n" \ + "I WANT\n" "" + +# status=noxfer|none +testing "status=noxfer" "dd if=input status=noxfer ibs=1 2>&1" "input\n6+0 records in\n0+1 records out\n" "input\n" "" +testing "status=none" "dd if=input status=none ibs=1 2>&1" "input\n" "input\n" "" + +testing "seek stdout" "yes 2> /dev/null | dd bs=8 seek=2 count=1 > out 2> /dev/null && xxd -p out" \ + "00000000000000000000000000000000790a790a790a790a\n" "" "" + +# Duplicated options are fine. +testing "conv=sync,sync" "dd conv=sync,sync $opt | head -n 1" "I WANT\n" "" "I WANT\n" + +# _bytes options +testing "iflag=count_bytes" \ + "dd if=input count=2 ibs=4096 iflag=count_bytes $opt" "hi" "high" "" +testing "iflag=skip_bytes" \ + "dd if=input skip=2 ibs=4096 iflag=skip_bytes $opt" "gh" "high" "" +testing "oflag=seek_bytes" \ + "dd if=input of=output seek=2 obs=4096 oflag=seek_bytes status=none && \ + xxd -p output" "000030313233\n" "0123" "" diff --git a/aosp/external/toybox/tests/demo_number.test b/aosp/external/toybox/tests/demo_number.test new file mode 100644 index 0000000000000000000000000000000000000000..7ce5d68f73c99465572021b528239072653ab9fb --- /dev/null +++ b/aosp/external/toybox/tests/demo_number.test @@ -0,0 +1,29 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +#testing "name" "command" "result" "infile" "stdin" + +testcmd "l 1024" "-h 123456789" "118M\n" "" "" +testcmd "l 1000" "-d 123456789" "123M\n" "" "" +testcmd "s 1024" "-h 5675" "5.5K\n" "" "" +testcmd "s 1000" "-d 5675" "5.6k\n" "" "" + +# An example input where we give a better result than coreutils. +# 267350/1024=261.08. We say 261K and coreutils says 262K. +testcmd "edge case" "-h 267350" "261K\n" "" "" + +testcmd "-b" "-b 123" "123B\n" "" "" +testcmd "-b" "-b 123456789" "118M\n" "" "" +testcmd "-s" "-s 123456789" "118 M\n" "" "" +testcmd "-bs" "-bs 123456789" "118 M\n" "" "" + +testcmd "units" "-b 1c 1b 1k 1kd 1m 1md 1g 1gd 1t 1td 1e 1ed" \ + "1B\n512B\n1.0K\n0.9K\n1.0M\n977K\n1.0G\n954M\n1.0T\n931G\n1.0E\n888P\n" \ + "" "" + +testcmd "decimal units" "-d 1c 1b 1k 1kd 1m 1md 1g 1gd 1t 1td 1e 1ed" \ + "1\n512\n1.0k\n1.0k\n1.0M\n1.0M\n1.0G\n1.0G\n1.1T\n1.0T\n1.1E\n1.0E\n" \ + "" "" + +testcmd "longer output" "-D6 123 1234567 1234567890" "123\n1206K\n1177M\n" "" "" diff --git a/aosp/external/toybox/tests/diff.test b/aosp/external/toybox/tests/diff.test new file mode 100644 index 0000000000000000000000000000000000000000..f78eaa661e30f63e6572fb83585fdc93f62e16eb --- /dev/null +++ b/aosp/external/toybox/tests/diff.test @@ -0,0 +1,40 @@ +#!/bin/bash + +#testing "name" "command" "result" "infile" "stdin" + +seq 10 > left +seq 11 > right + +testing "unknown argument" 'diff --oops left right 2>/dev/null ; echo $?' "2\n" "" "" +testing "missing" 'diff missing1 missing2 2>/dev/null ; echo $?' "2\n" "" "" + +testing "- -" 'diff - - ; echo $?' "0\n" "" "whatever" + +expected='--- lll ++++ rrr +@@ -8,3 +8,4 @@ + 8 + 9 + 10 ++11 +' +# Hm this only gives unified diffs? +testing "simple" "diff -L lll -L rrr left right" "$expected" "" "" + + +expected='--- tree1/file ++++ tree2/file +@@ -1 +1 @@ +-foo ++food +' +mkdir -p tree1 tree2 +echo foo > tree1/file +echo food > tree2/file + +testing "-r" "diff -r -L tree1/file -L tree2/file tree1 tree2 |tee out" "$expected" "" "" + +echo -e "hello\r\nworld\r\n"> a +echo -e "hello\nworld\n"> b +testing "--strip-trailing-cr off" "diff -q a b" "Files a and b differ\n" "" "" +testing "--strip-trailing-cr on" "diff -u --strip-trailing-cr a b" "" "" "" diff --git a/aosp/external/toybox/tests/dirname.test b/aosp/external/toybox/tests/dirname.test new file mode 100644 index 0000000000000000000000000000000000000000..47b26e0322d83b0ea2e7e0d0f2df67526405ba85 --- /dev/null +++ b/aosp/external/toybox/tests/dirname.test @@ -0,0 +1,11 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +#testing "name" "command" "result" "infile" "stdin" + +testing "/-only" "dirname ///////" "/\n" "" "" +testing "trailing /" "dirname a//////" ".\n" "" "" +testing "combined" "dirname /////a///b///c///d/////" "/////a///b///c\n" "" "" +testing "/a/" "dirname /////a///" "/\n" "" "" +testing "multiple" "dirname hello/a world/b" "hello\nworld\n" "" "" diff --git a/aosp/external/toybox/tests/du.test b/aosp/external/toybox/tests/du.test new file mode 100644 index 0000000000000000000000000000000000000000..d7e58b43041535bd75d6b2d6c606e3627fe7a7c9 --- /dev/null +++ b/aosp/external/toybox/tests/du.test @@ -0,0 +1,47 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +# ext stores extended attributes in a way that makes all the numbers in the +# tests below incorrect. +# TODO: include a read-only ext file system that we can mount for the tests? +if [ "$(stat --format %C . 2>/dev/null)" != "?" ]; then + echo "$SHOWSKIP: du (SELinux extended attributes present)" + return 2>/dev/null + exit +fi + +# darwin stores empty directories in the inode itself, making all the numbers +# in the tests below 0. (TODO this is not the right fix.) +if [ "$(uname)" == "Darwin" ]; then + echo "$SHOWSKIP: du (Darwin stores empty directories in inode)" + return 2>/dev/null + exit +fi + +#testing "name" "command" "result" "infile" "stdin" + +# we only test with -k since getting POSIX version is variable +# POSIXLY_CORRECT is sometimes needed, sometimes -P is needed, +# while -k is the default on most Linux systems + +mkdir -p du_test/test du_2/foo +testing "(no options)" "du -k du_test" "4\tdu_test/test\n8\tdu_test\n" "" "" +testing "-s" "du -k -s du_test" "8\tdu_test\n" "" "" +ln -s ../du_2 du_test/xyz +# "du shall count the size of the symbolic link" +# The tests assume that like for most POSIX systems symbolic +# links are stored directly in the inode so that the +# allocated file space is zero. +testing "counts symlinks without following" "du -ks du_test" "8\tdu_test\n" "" "" +testing "-L follows symlinks" "du -ksL du_test" "16\tdu_test\n" "" "" +ln -s . du_test/up +testing "-L avoid endless loop" "du -ksL du_test" "16\tdu_test\n" "" "" +rm du_test/up +# if -H and -L are specified, the last takes priority +testing "-HL follows symlinks" "du -ksHL du_test" "16\tdu_test\n" "" "" +testing "-H does not follow unspecified symlinks" "du -ksH du_test" "8\tdu_test\n" "" "" +testing "-LH does not follow unspecified symlinks" "du -ksLH du_test" "8\tdu_test\n" "" "" +testing "-H follows specified symlinks" "du -ksH du_test/xyz" "8\tdu_test/xyz\n" "" "" + +rm -rf du_test du_2 diff --git a/aosp/external/toybox/tests/echo.test b/aosp/external/toybox/tests/echo.test new file mode 100644 index 0000000000000000000000000000000000000000..80774e665735dd50b20cfc15e6b51937f0dcba6a --- /dev/null +++ b/aosp/external/toybox/tests/echo.test @@ -0,0 +1,47 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +# This one's tricky both because echo is a shell builtin (so $PATH is +# irrelevant) and because the "result" field is parsed with echo -e. +# To make it work, "$CMD" is an explicit path to the command being tested, +# so "result" keeps using the shell builtin but we test the one in toybox. + +#testing "name" "command" "result" "infile" "stdin" + +testcmd "echo" "&& echo yes" "\nyes\n" "" "" +testcmd "1 2 3" "one two three" "one two three\n" "" "" +testcmd "with spaces" "'one two three'" \ + "one two three\n" "" "" +testcmd "" "-n" "" "" "" +testcmd "" "-n one" "one" "" "" +testcmd "" "one -n" "one -n\n" "" "" +testcmd "-en" "-en 'one\ntwo'" "one\ntwo" "" "" +testcmd "" "--hello" "--hello\n" "" "" +testcmd "-e all" "-e '\a\b\c\f\n\r\t\v\\\0123' | xxd -p" "0708\n" "" "" +testcmd "-e all but \\c" "-e '"'\a\b\f\n\r\t\v\\\0123'"' | xxd -p" \ + "07080c0a0d090b5c530a\n" "" "" +testcmd "-nex hello" "-nex hello" "-nex hello\n" "" "" + +# Octal formatting tests +testcmd "-e octal values" \ + "-ne '\01234 \0060 \060 \0130\0131\0132 \077\012'" \ + "S4 0 0 XYZ ?\n" "" "" +testcmd "-e invalid oct" "-ne 'one\\079two'" "one\a9two" "" "" +testcmd "-e \\0040" "-ne '\0040'" " " "" "" + +# Hexadecimal value tests +testcmd "-e hexadecimal values" \ + "-ne '\x534 \x30 \x58\x59\x5a \x3F\x0A'"\ + "S4 0 XYZ ?\n" "" "" +testcmd "-e invalid hex 1" "-e 'one\xvdtwo'" "one\\xvdtwo\n" "" "" +testcmd "-e invalid hex 2" "-e 'one\xavtwo'" "one\nvtwo\n" "" "" + +# GNU extension for ESC +testcmd "-e \e" "-ne '\\e' | xxd -p" "1b\n" "" "" + +testcmd "-e \p" "-e '\\p'" "\\p\n" "" "" + +# http://austingroupbugs.net/view.php?id=1222 added -E +testcmd "-En" "-En 'one\ntwo'" 'one\\ntwo' "" "" +testcmd "-eE" "-eE '\e'" '\\e\n' "" "" diff --git a/aosp/external/toybox/tests/env.test b/aosp/external/toybox/tests/env.test new file mode 100644 index 0000000000000000000000000000000000000000..6d8928d16ecd6f62ec1ae65d6b845aef6e530bd5 --- /dev/null +++ b/aosp/external/toybox/tests/env.test @@ -0,0 +1,30 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +#testcmd "name "args" "result" "infile" "stdin" +#testing "name" "command" "result" "infile" "stdin" + +export WALRUS=42 BANANA=hello LETTERS= +FILTER="| egrep '^(WALRUS|BANANA|LETTERS)=' | sort" + +testcmd "read" "$FILTER" "BANANA=hello\nLETTERS=\nWALRUS=42\n" "" "" +testcmd "-u" "-u BANANA $FILTER" "LETTERS=\nWALRUS=42\n" "" "" +testcmd "-uu" "-u LETTERS -u WALRUS $FILTER" "BANANA=hello\n" "" "" +testcmd "-i" "-i env" "" "" "" +testcmd "-i =" "-i one=two three=four $C | sort" \ + "one=two\nthree=four\n" "" "" +testcmd "-0" "-i five=six seven=eight $C -0 | sort -z" "five=six\0seven=eight\0" "" "" +unset WALRUS BANANA LETTERS FILTER + +testcmd "early fail" '--oops 2> /dev/null ; echo $?' "125\n" "" "" +testcmd "why is this allowed" "=BLAH env | grep '^=BLAH\$'" "=BLAH\n" "" "" + +testcmd "replace" "A=foo PATH= `which printenv` A" "foo\n" "" "" + +# env bypasses shell builtins +echo "#!$(which sh) +echo \$@" > true +chmod a+x true +testcmd "norecurse" 'env PATH="$PWD:$PATH" true hello' "hello\n" "" "" +rm true diff --git a/aosp/external/toybox/tests/expand.test b/aosp/external/toybox/tests/expand.test new file mode 100644 index 0000000000000000000000000000000000000000..3dcdb1c3cd2e340302c1e468d9602b5c722b66c4 --- /dev/null +++ b/aosp/external/toybox/tests/expand.test @@ -0,0 +1,44 @@ +#!/bin/bash + +# POSIX 2008 compliant expand tests. +# Copyright 2012 by Jonathan Clairembault + +[ -f testing.sh ] && . testing.sh + +# some basic tests + +testing "default" "expand input" " foo bar\n" "\tfoo\tbar\n" "" +testing "default stdin" "expand" " foo bar\n" "" "\tfoo\tbar\n" +testing "single" "expand -t 2 input" " foo bar\n" "\tfoo\tbar\n" "" +testing "tablist" "expand -t 5,10,12 input" " foo bar foo\n" "\tfoo\tbar\tfoo\n" "" +testing "backspace" "expand input" "foobarfoo\b\b bar\n" "foobarfoo\b\b\tbar\n" "" + +# advanced tests + +POW=15 +TABSTOP=1 +BIGTAB=" " +for i in $(seq $POW); do + BIGTAB=$BIGTAB$BIGTAB + TABSTOP=$(($TABSTOP*2)) +done +testing "long tab single" "expand -t $TABSTOP input" "${BIGTAB}foo\n" "\tfoo\n" "" +testing "long tab tablist" "expand -t $TABSTOP,$((TABSTOP+5)) input" \ + "${BIGTAB}foo bar\n" "\tfoo\tbar\n" "" + +testing "multiline single" "expand -t 4 input" "foo \n bar\n" "foo\t\n\tbar\n" "" +testing "multiline tablist" "expand -t 4,8 input" \ + "foo bar\n bar foo\n" "foo\t\tbar\n\tbar\tfoo\n" "" +POW=15 +BIGLINE="foo " +for i in $(seq $POW); do + BIGLINE=$BIGLINE$BIGLINE +done +if [ $POW -gt 0 ]; then + EXPANDLINE="${BIGLINE} foo\n" +else + EXPANDLINE="${BIGLINE} foo\n" +fi +BIGLINE="${BIGLINE}\tfoo\n" +testing "long line single" "expand input" \ + "${EXPANDLINE}" "$BIGLINE" "" diff --git a/aosp/external/toybox/tests/expr.test b/aosp/external/toybox/tests/expr.test new file mode 100644 index 0000000000000000000000000000000000000000..da3feea1debd78d8df41d2e475476a461dc4ddad --- /dev/null +++ b/aosp/external/toybox/tests/expr.test @@ -0,0 +1,62 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +testing "integer" "expr 5" "5\n" "" "" +testing "integer negative" "expr -5" "-5\n" "" "" +testing "string" "expr astring" "astring\n" "" "" +testing "addition" "expr 1 + 3" "4\n" "" "" +testing "5 + 6 * 3" "expr 5 + 6 \* 3" "23\n" "" "" +testing "( 5 + 6 ) * 3" "expr \( 5 + 6 \) \* 3" "33\n" "" "" +testing ">" "expr 3 \> 2" "1\n" "" "" +testing "* / same priority" "expr 4 \* 3 / 2" "6\n" "" "" +testing "/ * same priority" "expr 3 / 2 \* 4" "4\n" "" "" +testing "& before |" "expr 0 \| 1 \& 0" "0\n" "" "" +testing "| after &" "expr 1 \| 0 \& 0" "1\n" "" "" +testing "| & same priority" "expr 0 \& 0 \| 1" "1\n" "" "" +testing "% * same priority" "expr 3 % 2 \* 4" "4\n" "" "" +testing "* % same priority" "expr 3 \* 2 % 4" "2\n" "" "" +testing "= > same priority" "expr 0 = 2 \> 3" "0\n" "" "" +testing "> = same priority" "expr 3 \> 2 = 1" "1\n" "" "" + +testing "00 | 1" "expr 00 \| 1" "1\n" "" "" +testing "-0 | 1" "expr -0 \| 2" "2\n" "" "" +testing '"" | 1' 'expr "" \| 3' "3\n" "" "" +testing "/ by zero" "expr 1 / 0 2>/dev/null; echo \$?" "2\n" "" "" +testing "% by zero" "expr 1 % 0 2>/dev/null; echo \$?" "2\n" "" "" + +testing "regex position" "expr ab21xx : '[^0-9]*[0-9]*'" "4\n" "" "" +testing "regex extraction" "expr ab21xx : '[^0-9]*\([0-9]*\).*'" "21\n" "" "" +testing "regex no match" "expr ab21xx : x" "0\n" "" "" +testing "long str" "expr abcdefghijklmnopqrstuvwxyz : '\(.*\)' = a" "0\n" "" "" + +# result of ':' regex match can subsequently be used for arithmetic +testing "string becomes integer" "expr ab21xx : '[^0-9]*\([0-9]*\)' + 3" \ + "24\n" "" "" + +testing "integer comparison" "expr -3 \< -2" "1\n" "" "" +testing "string comparison" "expr -3 \< -2s" "0\n" "" "" +testing "integer expression comparison" "expr 2 - 5 \< -2" "1\n" "" "" +# result of arithmetic can subsequently be compared as a string +testing "string expr comparison" "expr 2 - 5 \< -2s" "0\n" "" "" + +testing "parens around literal" "expr \( a \)" "a\n" "" "" + +testing "exit code when true" "expr a; echo \$?" "a\n0\n" "" "" +testing "exit code when false" "expr 0; echo \$?" "0\n1\n" "" "" +testing "exit code with syntax error" "expr \( 2>/dev/null; echo \$?" \ + "2\n" "" "" +testing "exit code when evaluating to 0" "expr -1 + 1; echo \$?" "0\n1\n" "" "" + +# BUG: segfaults because '3' is coerced to integer and regexc gets NULL +testing "regex segfault" "expr 3 : '\(.\)'" "3\n" "" "" + +# syntax errors +testing "no expression" "expr 2>/dev/null; echo \$?" "2\n" "" "" +testing "empty ()" "expr \( \) 2>/dev/null; echo \$?" "2\n" "" "" +testing "missing )" "expr \( 1 2>/dev/null; echo \$?" "2\n" "" "" +testing "missing outer )" "expr \( 1 + \( 2 \* 3 \) 2>/dev/null; echo \$?" \ + "2\n" "" "" +testing "bad operator" "expr 1 @ 2 2>/dev/null; echo \$?" "2\n" "" "" +testing "adjacent literals" "expr 1 2 2>/dev/null; echo \$?" "2\n" "" "" +testing "non-integer argument" "expr 1 + a 2>/dev/null; echo \$?" "2\n" "" "" diff --git a/aosp/external/toybox/tests/factor.test b/aosp/external/toybox/tests/factor.test new file mode 100644 index 0000000000000000000000000000000000000000..2ec557a33ee3f37ceebc58a2297360472303f213 --- /dev/null +++ b/aosp/external/toybox/tests/factor.test @@ -0,0 +1,22 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +#testing "name" "command" "result" "infile" "stdin" + +testing "-32" "factor -32" "-32: -1 2 2 2 2 2\n" "" "" +testing "0" "factor 0" "0: 0\n" "" "" +testing "1" "factor 1" "1: 1\n" "" "" +testing "2" "factor 2" "2: 2\n" "" "" +testing "3" "factor 3" "3: 3\n" "" "" +testing "4" "factor 4" "4: 2 2\n" "" "" +testing "10000000017" "factor 10000000017" \ + "10000000017: 3 3 3 7 7 7 1079797\n" "" "" +testing "10000000018" "factor 10000000018" \ + "10000000018: 2 131 521 73259\n" "" "" +testing "10000000019" "factor 10000000019" \ + "10000000019: 10000000019\n" "" "" + +testing "3 6 from stdin" "factor" "3: 3\n6: 2 3\n" "" "3 6" +testing "stdin newline" "factor" "3: 3\n6: 2 3\n" "" "3\n6\n" + diff --git a/aosp/external/toybox/tests/file.test b/aosp/external/toybox/tests/file.test new file mode 100644 index 0000000000000000000000000000000000000000..66c5b7ed6c7535637196163946095cb77c913044 --- /dev/null +++ b/aosp/external/toybox/tests/file.test @@ -0,0 +1,62 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +#testing "name" "command" "result" "infile" "stdin" + +touch empty +echo "#!/bin/bash" > bash.script +echo "#! /bin/bash" > bash.script2 +echo "#! /usr/bin/env python" > env.python.script +echo "Hello, world!" > ascii +echo "6465780a3033350038ca8f6ce910f94e" | xxd -r -p > android.dex +ln -s $FILES/java.class symlink +LINK=$(readlink symlink) +ln -s $FILES/java.klass dangler +BROKEN=$(readlink dangler) + +testing "directory" "file ." ".: directory\n" "" "" +testing "empty" "file empty" "empty: empty\n" "" "" +testing "bash.script" "file bash.script" "bash.script: /bin/bash script\n" "" "" +testing "bash.script with spaces" "file bash.script2" "bash.script2: /bin/bash script\n" "" "" +testing "env python script" "file env.python.script" "env.python.script: python script\n" "" "" +testing "ascii" "file ascii" "ascii: ASCII text\n" "" "" +testing "utf-8" "file $FILES/utf8/japan.txt | sed 's|$FILES/||'" \ + "utf8/japan.txt: UTF-8 text\n" "" "" +testing "java class" "file $FILES/java.class | sed 's|$FILES/||'" \ + "java.class: Java class file, version 53.0 (Java 1.9)\n" "" "" +testing "tar file" "file $FILES/tar/tar.tar | sed 's|$FILES/||'" \ + "tar/tar.tar: POSIX tar archive (GNU)\n" "" "" +testing "gzip data" "file $FILES/tar/tar.tgz | sed 's|$FILES/||'" \ + "tar/tar.tgz: gzip compressed data\n" "" "" +testing "bzip2 data" "file $FILES/tar/tar.tbz2 | sed 's|$FILES/||'" \ + "tar/tar.tbz2: bzip2 compressed data, block size = 900k\n" "" "" +testing "zip file" "file $FILES/zip/example.zip | sed 's|$FILES/||'" \ + "zip/example.zip: Zip archive data, requires at least v1.0 to extract\n" "" "" + +# TODO: check in a genuine minimal .dex +testing "Android .dex" "file android.dex" "android.dex: Android dex file, version 035\n" "" "" + +# These actually test a lot of the ELF code: 32-/64-bit, arm/arm64, PT_INTERP, +# the two kinds of NDK ELF note, BuildID, and stripped/not stripped. +toyonly testing "Android NDK full ELF note" \ + "file $FILES/elf/ndk-elf-note-full | sed 's/^.*: //'" \ + "ELF shared object, 64-bit LSB arm64, dynamic (/system/bin/linker64), for Android 24, built by NDK r19b (5304403), BuildID=0c712b8af424d57041b85326f0000fadad38ee0a, not stripped\n" "" "" +toyonly testing "Android NDK short ELF note" \ + "file $FILES/elf/ndk-elf-note-short | sed 's/^.*: //'" \ + "ELF shared object, 32-bit LSB arm, dynamic (/system/bin/linker), for Android 28, BuildID=da6a5f4ca8da163b9339326e626d8a3c, stripped\n" "" "" + +testing "broken symlink" "file dangler" "dangler: broken symbolic link to $BROKEN\n" "" "" +testing "symlink" "file symlink" "symlink: symbolic link to $LINK\n" "" "" +testing "symlink -h" "file -h symlink" "symlink: symbolic link to $LINK\n" "" "" +testing "symlink -L" "file -L symlink" "symlink: Java class file, version 53.0 (Java 1.9)\n" "" "" + +testing "- pipe" "cat $FILES/java.class | file -" "-: Java class file, version 53.0 (Java 1.9)\n" "" "" +testing "- redirect" "file - <$FILES/java.class" "-: Java class file, version 53.0 (Java 1.9)\n" "" "" + +zero_dev="1/5" +[ "$(uname)" == "Darwin" ] && zero_dev="3/3" +testing "/dev/zero" "file /dev/zero" "/dev/zero: character special ($zero_dev)\n" "" "" +testing "- = 4 +3 > 4 && 7 +3 && 4 >= 5 +3 < 4 && 0 +0 && 4 >= 4 +3 > 4 && 0 +0 && 4 >= 5 +3 > 4 && 0 +0 && 4 < 4 +3 >= 4 && 0 +0 && 4 >= 5 +3 < 4 && 7 +3 && 4 >= 4 +3 > 4 && 7 > 4 +3 >= 2 && 4 >= 5 +3 < 4 && 0 > -1 +4 < 3 && 4 >= 4 +3 > 4 && 3 == 3 +3 != 3 && 4 >= 5 +3 > 4 && 0 > 1 +0 >= 0 && 4 < 4 +3 >= 4 && 0 >= 1 +0 <= -1 && 4 >= 5 +4 || 5 +4 || 0 +0 || 5 +4 || 5 || 7 +4 || 0 || 7 +0 || 5 || 7 +4 || 5 || 0 +0 || 0 || 7 +4 || 0 || 0 +0 || 5 || 0 +!4 || 5 +!4 || 0 +!0 || 5 +4 || !5 +4 || !0 +0 || !5 +!4 || 5 || 7 +!4 || 0 || 7 +!0 || 5 || 7 +!4 || 5 || 0 +!0 || 0 || 7 +!4 || 0 || 0 +!0 || 5 || 0 +4 || !5 || 7 +4 || !0 || 7 +0 || !5 || 7 +4 || !5 || 0 +0 || !0 || 7 +4 || !0 || 0 +0 || !5 || 0 +4 || 5 || !7 +4 || 0 || !7 +0 || 5 || !7 +4 || 5 || !0 +0 || 0 || !7 +4 || 0 || !0 +0 || 5 || !0 +!4 || !5 || 7 +!4 || !0 || 7 +!0 || !5 || 7 +!4 || !5 || 0 +!0 || !0 || 7 +!4 || !0 || 0 +!0 || !5 || 0 +!4 || 5 || !7 +!4 || 0 || !7 +!0 || 5 || !7 +!4 || 5 || !0 +!0 || 0 || !7 +!4 || 0 || !0 +!0 || 5 || !0 +4 || !5 || !7 +4 || !0 || !7 +0 || !5 || !7 +4 || !5 || !0 +0 || !0 || !7 +4 || !0 || !0 +0 || !5 || !0 +!4 || !5 || !7 +!4 || !0 || !7 +!0 || !5 || !7 +!4 || !5 || !0 +!0 || !0 || !7 +!4 || !0 || !0 +!0 || !5 || !0 +3 < 4 || 7 +3 || 4 >= 4 +3 > 4 || 7 +3 || 4 >= 5 +3 < 4 || 0 +0 || 4 >= 4 +3 > 4 || 0 +0 || 4 >= 5 +3 > 4 || 0 +0 || 4 < 4 +3 >= 4 || 0 +0 || 4 >= 5 +3 < 4 || 7 +3 || 4 >= 4 +3 > 4 || 7 > 4 +3 >= 2 || 4 >= 5 +3 < 4 || 0 > -1 +4 < 3 || 4 >= 4 +3 > 4 || 3 == 3 +3 != 3 || 4 >= 5 +3 > 4 || 0 > 1 +0 >= 0 || 4 < 4 +3 >= 4 || 0 >= 1 +0 <= -1 || 4 >= 5 diff --git a/aosp/external/toybox/tests/files/bc/boolean_results.txt b/aosp/external/toybox/tests/files/bc/boolean_results.txt new file mode 100644 index 0000000000000000000000000000000000000000..ea59389c0cc35caea4f7c2d9e3da7bbabba00fce --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/boolean_results.txt @@ -0,0 +1,181 @@ +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +0 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +0 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +0 +0 diff --git a/aosp/external/toybox/tests/files/bc/cosine.txt b/aosp/external/toybox/tests/files/bc/cosine.txt new file mode 100644 index 0000000000000000000000000000000000000000..9e67df4c6f69600a67348356282b466c8b32de93 --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/cosine.txt @@ -0,0 +1,44 @@ +scale = 25 +p = 4 * a(1) +scale = 20 +c(0) +c(0.5) +c(1) +c(2) +c(3) +c(-0.5) +c(-1) +c(-2) +c(-3) +c(p / 7) +c(-p / 7) +c(p / 4) +c(-p / 4) +c(p / 3) +c(-p / 3) +c(p / 2) +c(-p / 2) +c(3 * p / 4) +c(3 * -p / 4) +c(p) +c(-p) +c(3 * p / 2) +c(3 * -p / 2) +c(7 * p / 4) +c(7 * -p / 4) +c(13 * p / 4) +c(13 * -p / 4) +c(2 * p) +c(2 * -p) +c(131231) +c(-131231) +c(859799894.3562378245) +c(859799894.3562378245) +c(4307371) +c(3522556.3323810191) +c(44961070) +c(6918619.1574479809) +c(190836996.2180244164) +c(34934) +c(2483599) +c(13720376) diff --git a/aosp/external/toybox/tests/files/bc/cosine_results.txt b/aosp/external/toybox/tests/files/bc/cosine_results.txt new file mode 100644 index 0000000000000000000000000000000000000000..43d640f002dfbecb29a5cb016ccc266fdd1b29f3 --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/cosine_results.txt @@ -0,0 +1,41 @@ +1.00000000000000000000 +.87758256189037271611 +.54030230586813971740 +-.41614683654714238699 +-.98999249660044545727 +.87758256189037271611 +.54030230586813971740 +-.41614683654714238699 +-.98999249660044545727 +.90096886790241912623 +.90096886790241912623 +.70710678118654752440 +.70710678118654752440 +.50000000000000000000 +.50000000000000000000 +0 +0 +-.70710678118654752439 +-.70710678118654752439 +-1.00000000000000000000 +-1.00000000000000000000 +0 +0 +.70710678118654752439 +.70710678118654752439 +-.70710678118654752440 +-.70710678118654752440 +1.00000000000000000000 +1.00000000000000000000 +.92427123447397657316 +.92427123447397657316 +-.04198856352825241211 +-.04198856352825241211 +-.75581969921220636368 +-.01644924448939844182 +-.97280717522127222547 +-.92573947460230585966 +-.14343824233852988038 +.87259414746802343203 +.93542606623067050616 +-.52795540572178251550 diff --git a/aosp/external/toybox/tests/files/bc/decimal.txt b/aosp/external/toybox/tests/files/bc/decimal.txt new file mode 100644 index 0000000000000000000000000000000000000000..5c6bd327c1a807f5e4b7601de07a8e0c76236933 --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/decimal.txt @@ -0,0 +1,35 @@ +0 +0.0 +000000000000000000000000.00000000000000000000000 +000000000000000000000000000135482346782356 +000000000000000000000000002 +1 +11 +123 +7505 +1023468723275435238491972521917846 +4343472432431705867392073517038270398027352709027389273920739037937960379637893607893607893670530278200795207952702873892786172916728961783907893607418973587857386079679267926737520730925372983782793652793 +-1 +-203 +-57 +-18586 +-31378682943772818461924738352952347258 +-823945628745673589495067238723986520375698237620834674509627345273096287563846592384526349872634895763257893467523987578690283762897568459072348758071071087813501875908127359018715023841710239872301387278 +.123521346523546 +0.1245923756273856 +-.1024678456387 +-0.8735863475634587 +4.0 +-6.0 +234237468293576.000000000000000000000000000000 +23987623568943567.00000000000000000005677834650000000000000 +23856934568940675.000000000000000435676782300000000000000456784 +77567648698496.000000000000000000587674750000000000458563800000000000000 +2348672354968723.2374823546000000000003256987394502346892435623870000000034578 +-2354768.000000000000000000000000000000000000 +-96739874567.000000000347683456 +-3764568345.000000000004573845000000347683460 +-356784356.934568495770004586495678300000000 +74325437345273852773827101738273127312738521733017537073520735207307570358738257390761276072160719802671980267018728630178.7082681027680521760217867841276127681270867827821768173178207830710978017738178678012767377058785378278207385237085237803278203782037237582795870 +-756752732785273851273728537852738257837283678965738527385272983678372867327835672967385278372637862738627836279863782673862783670.71738178361738718367186378610738617836781603760178367018603760178107735278372832783728367826738627836278378260736270367362073867097307925 +9812734012837410982345719208345712908357412903587192048571920458712.23957182459817249058172945781 diff --git a/aosp/external/toybox/tests/files/bc/decimal_results.txt b/aosp/external/toybox/tests/files/bc/decimal_results.txt new file mode 100644 index 0000000000000000000000000000000000000000..0e9c0647ee9433911d8ec4802a6290dff89d5cb7 --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/decimal_results.txt @@ -0,0 +1,50 @@ +0 +0 +0 +135482346782356 +2 +1 +11 +123 +7505 +1023468723275435238491972521917846 +43434724324317058673920735170382703980273527090273892739207390379379\ +60379637893607893607893670530278200795207952702873892786172916728961\ +78390789360741897358785738607967926792673752073092537298378279365279\ +3 +-1 +-203 +-57 +-18586 +-31378682943772818461924738352952347258 +-8239456287456735894950672387239865203756982376208346745096273452730\ +96287563846592384526349872634895763257893467523987578690283762897568\ +45907234875807107108781350187590812735901871502384171023987230138727\ +8 +.123521346523546 +.1245923756273856 +-.1024678456387 +-.8735863475634587 +4.0 +-6.0 +234237468293576.000000000000000000000000000000 +23987623568943567.00000000000000000005677834650000000000000 +23856934568940675.000000000000000435676782300000000000000456784 +77567648698496.00000000000000000058767475000000000045856380000000000\ +0000 +2348672354968723.237482354600000000000325698739450234689243562387000\ +0000034578 +-2354768.000000000000000000000000000000000000 +-96739874567.000000000347683456 +-3764568345.000000000004573845000000347683460 +-356784356.934568495770004586495678300000000 +74325437345273852773827101738273127312738521733017537073520735207307\ +570358738257390761276072160719802671980267018728630178.7082681027680\ +52176021786784127612768127086782782176817317820783071097801773817867\ +8012767377058785378278207385237085237803278203782037237582795870 +-7567527327852738512737285378527382578372836789657385273852729836783\ +72867327835672967385278372637862738627836279863782673862783670.71738\ +17836173871836718637861073861783678160376017836701860376017810773527\ +8372832783728367826738627836278378260736270367362073867097307925 +9812734012837410982345719208345712908357412903587192048571920458712.\ +23957182459817249058172945781 diff --git a/aosp/external/toybox/tests/files/bc/divide.txt b/aosp/external/toybox/tests/files/bc/divide.txt new file mode 100644 index 0000000000000000000000000000000000000000..4d0caddc9b5227489e26cfd56e4ab56c1ab043b3 --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/divide.txt @@ -0,0 +1,31 @@ +0 / 1 +0 / 321566 +0 / 0.3984567238456 +1 / 1 +1 / 1287469297356 +1 / 0.2395672438567234 +1 / 237586239856.0293596728392360 +1249687284356 / 3027949207835207 +378617298617396719 / 35748521 +9348576237845624358 / 0.9857829375461 +35768293846193284 / 2374568947.045762839567823 +-78987234567812345 / 876542837618936 +-356789237555535468 / 0.3375273860984786903 +-5203475364850390 / 435742903748307.70869378534043296404530458 +-0.37861723347576903 / 7385770896 +-0.399454682043962 / 0.34824389304 +-0.6920414523873204 / 356489645223.76076045304879030 +-35872917389671.7573280963748 / 73924708 +-78375896314.4836709876983 / 0.78356798637817 +-2374123896417.143789621437581 / 347821469423789.1473856783960 +-896729350238549726 / -34976289345762 +-2374568293458762348596 / -0.8792370647234987679 +-237584692306721845726038 / -21783910782374529637.978102738746189024761 +-0.23457980123576298375682 / -1375486293874612 +-0.173897061862478951264 / -0.8179327486017634987516298745 +-0.9186739823576829347586 / -0.235678293458756239846 +-0.9375896183746982374568 / -13784962873546.0928729395476283745 +-2930754618923467.12323745862937465 / -734869238465 +-23745861923467.874675129834675 / -0.23542357869124756 +-3878923750692883.7238596702834756902 / -7384192674957215364986723.9738461923487621983 +1 / 0.00000000000000000000000000000000000000000002346728372937352457354204563027 diff --git a/aosp/external/toybox/tests/files/bc/divide_results.txt b/aosp/external/toybox/tests/files/bc/divide_results.txt new file mode 100644 index 0000000000000000000000000000000000000000..c19f2f9b031f821c47d4e16197668c26591bc900 --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/divide_results.txt @@ -0,0 +1,31 @@ +0 +0 +0 +1.00000000000000000000 +.00000000000077671755 +4.17419336592637110778 +.00000000000420899796 +.00041271738677857404 +10591131829.40901859967857131767 +9483402361494453751.52388015648196297248 +15063068.13735316451497043884 +-90.11223545260531110575 +-1057067521778623447.45138528213564485251 +-11.94161814246320631346 +-.00000000005126306228 +-1.14705437777218917343 +-.00000000000194126663 +-485262.88923145638029569727 +-100024372711.74763635544535424582 +-.00682569681609989277 +25638.20711150436682153521 +2700714504347599627864.24626421085374010264 +10906.42973524078145692731 +.00000000000000017054 +.21260557443109085166 +3.89799997647407910677 +.00000000000006801538 +3988.13076601933678578945 +100864416620775.31076855630746548983 +.00000000052530099381 +42612515855353136519261264261472677699404182.78776061098893912189 diff --git a/aosp/external/toybox/tests/files/bc/exponent.txt b/aosp/external/toybox/tests/files/bc/exponent.txt new file mode 100644 index 0000000000000000000000000000000000000000..40bcf3c5a5851288817cbac9922906ab2cf847d5 --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/exponent.txt @@ -0,0 +1,22 @@ +e(0) +e(0.5) +e(1) +e(1.5) +e(1.74) +e(2) +e(3.2345) +e(5.283957) +e(13.23857) +e(100) +e(283.238957) +e(-0.5) +e(-1) +e(-1.5) +e(-1.74) +e(-2) +e(-3.2345) +e(-5.283957) +e(-13.23857) +e(-100) +e(-283.238957) +e(142.749502399) diff --git a/aosp/external/toybox/tests/files/bc/exponent_results.txt b/aosp/external/toybox/tests/files/bc/exponent_results.txt new file mode 100644 index 0000000000000000000000000000000000000000..a1f1fe2b4cfb05f5b29897bd353ff5f7c00a4f8b --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/exponent_results.txt @@ -0,0 +1,25 @@ +1.00000000000000000000 +1.64872127070012814684 +2.71828182845904523536 +4.48168907033806482260 +5.69734342267199101193 +7.38905609893065022723 +25.39367176822616278859 +197.14845034328553587817 +561613.96621445383501864766 +26881171418161354484126255515800135873611118.77374192241519160861 +10212124131159922810249757193864245307850725332411569566443792548720\ +75182918653384240389953781407569563117008113027037939783.70141667971\ +570827872 +.60653065971263342360 +.36787944117144232159 +.22313016014842982893 +.17552040061699687169 +.13533528323661269189 +.03937988996342191888 +.00507231985977442865 +.00000178058250000525 +0 +0 +98928445824097165243611240348236907682258759298273030827411201.25833\ +645622510213538 diff --git a/aosp/external/toybox/tests/files/bc/log.txt b/aosp/external/toybox/tests/files/bc/log.txt new file mode 100644 index 0000000000000000000000000000000000000000..54115e380ec77b61c0a07a4aaa1f3fc0f2e095de --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/log.txt @@ -0,0 +1,22 @@ +l(0) +l(0.5) +l(1) +l(1.5) +l(1.74) +l(2) +l(3.2345) +l(5.283957) +l(13.23857) +l(100) +l(283.238957) +l(-0.5) +l(-1) +l(-1.5) +l(-1.74) +l(-2) +l(-3.2345) +l(-5.283957) +l(-13.23857) +l(-100) +l(-283.238957) +l(10430710.3325472917) diff --git a/aosp/external/toybox/tests/files/bc/log_results.txt b/aosp/external/toybox/tests/files/bc/log_results.txt new file mode 100644 index 0000000000000000000000000000000000000000..ce840a0d9e941482fe0b7a681470f33eb73d36c3 --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/log_results.txt @@ -0,0 +1,22 @@ +-99999999999999999999.00000000000000000000 +-.69314718055994530941 +0 +.40546510810816438197 +.55388511322643765995 +.69314718055994530941 +1.17387435650190306676 +1.66467524885255369652 +2.58313453863349348434 +4.60517018598809136803 +5.64629091238730017971 +-99999999999999999999.00000000000000000000 +-99999999999999999999.00000000000000000000 +-99999999999999999999.00000000000000000000 +-99999999999999999999.00000000000000000000 +-99999999999999999999.00000000000000000000 +-99999999999999999999.00000000000000000000 +-99999999999999999999.00000000000000000000 +-99999999999999999999.00000000000000000000 +-99999999999999999999.00000000000000000000 +-99999999999999999999.00000000000000000000 +16.16026492940839137014 diff --git a/aosp/external/toybox/tests/files/bc/misc.txt b/aosp/external/toybox/tests/files/bc/misc.txt new file mode 100644 index 0000000000000000000000000000000000000000..571f4a87e262ac28aade30a071260bf9da75b08d --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/misc.txt @@ -0,0 +1,13 @@ +4.1*1.-13^ - 74 - 1284597623841*1.-13^ - 757 +4.1*1.\ +-1\ +3^ - 74 - 1284597623841*1.\ +-1\ +3^ - 757 +obase = 9 +4.1*1.-13^ - 74 - 1284597623841*1.-13^ - 757 +4.1*1.\ +-1\ +3^ - 74 - 1284597623841*1.\ +-1\ +3^ - 757 diff --git a/aosp/external/toybox/tests/files/bc/misc1.txt b/aosp/external/toybox/tests/files/bc/misc1.txt new file mode 100644 index 0000000000000000000000000000000000000000..7e9d9660457f6adce9be3d82d39a5e3491928a4f --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/misc1.txt @@ -0,0 +1,76 @@ +define x(x) { + return(x) +} +define y() { + return; +} +define z() { + return (); +} +scale = 0 +x=2 +x[0]=3 +x +x[0] +scale +ibase +obase +x ( 7 ) +x + x( 8 ) +x - x[0] +321 * x +2 ^ x[0] +x++ +--x +x += 9 +x +length(2381) +sqrt(9) +scale(238.1) +x=2 +x[0]=3 +(x) +(x[0]) +(scale) +(ibase) +(obase) +(x ( 7 )) +(x + x( 8 )) +(x - x[0]) +(321 * x) +(2 ^ x[0]) +(x++) +(--x) +(x += 9) +(length(2381)) +(sqrt(9)) +(scale(238.1)) +(scale = 0) +(x = 10) +(x += 100) +(x -= 10) +(x *= 10) +(x /= 100) +(x ^= 10) +(x = sqrt(x)) +(x[1 - 1]) +x[(1 - 1)] +2 + \ +3 +++ibase +--ibase +++obase +--obase +++last +--last +last +last = 100 +last +. = 150 +. +++scale +--scale +y() +z() +2 + /* +*/3 diff --git a/aosp/external/toybox/tests/files/bc/misc1_results.txt b/aosp/external/toybox/tests/files/bc/misc1_results.txt new file mode 100644 index 0000000000000000000000000000000000000000..a9c278069439c1d1cae21195935bcfa8eaf6801f --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/misc1_results.txt @@ -0,0 +1,57 @@ +2 +3 +0 +10 +10 +7 +10 +-1 +642 +8 +2 +2 +11 +4 +3 +1 +2 +3 +0 +10 +10 +7 +10 +-1 +642 +8 +2 +2 +11 +4 +3 +1 +0 +10 +110 +100 +1000 +10 +10000000000 +100000 +3 +3 +5 +11 +10 +10 +10 +11 +10 +10 +100 +150 +1 +0 +0 +0 +5 diff --git a/aosp/external/toybox/tests/files/bc/misc2.txt b/aosp/external/toybox/tests/files/bc/misc2.txt new file mode 100644 index 0000000000000000000000000000000000000000..f5a6a6b138a9e25384fb44c41589d998b1f51ffd --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/misc2.txt @@ -0,0 +1,45 @@ +define x() { +"x" +return ( 1 ) +} +define y() { +"y" +return (2) +} +define z() { +"z" +return (3) +} + +if ( x() == y() ) {1} +1 +if ( x() <= y() ) {2} +if ( y() >= x() ) {3} +if ( x() != y() ) {4} +if ( x() < y() ) {5} +if ( y() > x() ) {6} + +if ( x() == z() ) {11} +11 +if ( x() <= z() ) {12} +if ( z() >= x() ) {13} +if ( x() != z() ) {14} +if ( x() < z() ) {15} +if ( z() > x() ) {16} + +x = -10 +while (x <= 0) { + x + if (x == -5) break; + x += 1 +} + +define u() { + auto a[]; + return a[0] +} + +u() + +if (x == -4) x +else x - 4 diff --git a/aosp/external/toybox/tests/files/bc/misc2_results.txt b/aosp/external/toybox/tests/files/bc/misc2_results.txt new file mode 100644 index 0000000000000000000000000000000000000000..022ca872873ffeae38cb9e7a92ffecefdb3fcf32 --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/misc2_results.txt @@ -0,0 +1,20 @@ +xy1 +xy2 +yx3 +xy4 +xy5 +yx6 +xz11 +xz12 +zx13 +xz14 +xz15 +zx16 +-10 +-9 +-8 +-7 +-6 +-5 +0 +-9 diff --git a/aosp/external/toybox/tests/files/bc/misc_results.txt b/aosp/external/toybox/tests/files/bc/misc_results.txt new file mode 100644 index 0000000000000000000000000000000000000000..e2db76e0ef900554b7185cee37dae6a42409d40f --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/misc_results.txt @@ -0,0 +1,4 @@ +-1284597623836.9 +-1284597623836.9 +-4483684050181.80 +-4483684050181.80 diff --git a/aosp/external/toybox/tests/files/bc/modulus.txt b/aosp/external/toybox/tests/files/bc/modulus.txt new file mode 100644 index 0000000000000000000000000000000000000000..965600c18a1d4dfaf62e33aeda7de96f4b842440 --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/modulus.txt @@ -0,0 +1,69 @@ +1 % 1 +2 % 1 +16 % 4 +15 % 4 +17 % 4 +2389473 % 5 +39240687239 % 1 +346728934 % 23958 +3496723859067234 % 298375462837546928347623059375486 +-1 % 1 +-2 % 1 +-47589634875689345 % 37869235 +-1274852934765 % 2387628935486273546 +-6324758963 % 237854962 +1 % -1 +2 % -1 +2 % -2 +2 % -3 +16 % 5 +15 % 5 +14 % 5 +89237423 % -237856923854 +123647238946 % -12467 +-1 % -1 +-2 % -1 +-2 % -2 +-2 % -3 +-13 % -7 +-14 % -7 +-15 % -7 +-12784956 % -32746 +-127849612 % -23712347682193 +scale = 0 +1 % 1 +2 % 1 +16 % 4 +15 % 4 +17 % 4 +2389473 % 5 +39240687239 % 1 +346728934 % 23958 +3496723859067234 % 298375462837546928347623059375486 +-1 % 1 +-2 % 1 +-47589634875689345 % 37869235 +-1274852934765 % 2387628935486273546 +-6324758963 % 237854962 +1 % -1 +2 % -1 +2 % -2 +2 % -3 +16 % 5 +15 % 5 +14 % 5 +89237423 % -237856923854 +123647238946 % -12467 +-1 % -1 +-2 % -1 +-2 % -2 +-2 % -3 +-13 % -7 +-14 % -7 +-15 % -7 +-12784956 % -32746 +-127849612 % -23712347682193 +-3191280681 % 641165986 +scale = 0; -899510228 % -2448300078.40314 +scale = 0; -7424863 % -207.2609738667 +scale = 0; 3769798918 % 0.6 diff --git a/aosp/external/toybox/tests/files/bc/modulus_results.txt b/aosp/external/toybox/tests/files/bc/modulus_results.txt new file mode 100644 index 0000000000000000000000000000000000000000..7d718d22a43994cfd13909e210d9c08ec638b8ef --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/modulus_results.txt @@ -0,0 +1,68 @@ +0 +0 +0 +0 +0 +0 +0 +.00000000000000002026 +2747189239559.46904933397471305894 +0 +0 +-.00000000000011057855 +-.00076922992566770712 +-.00000000000050364144 +0 +0 +0 +.00000000000000000002 +0 +0 +0 +.00000000070585524350 +.00000000000000002898 +0 +0 +0 +-.00000000000000000002 +-.00000000000000000005 +0 +-.00000000000000000002 +-.00000000000000011722 +-.00000002640923745817 +0 +0 +0 +3 +1 +3 +0 +8758 +3496723859067234 +0 +0 +-8236960 +-1274852934765 +-140529951 +0 +0 +0 +2 +1 +0 +4 +89237423 +6692 +0 +0 +0 +-2 +-6 +0 +-1 +-14016 +-127849612 +-626616737 +-899510228.00000 +-153.1331732059 +.4 diff --git a/aosp/external/toybox/tests/files/bc/multiply.txt b/aosp/external/toybox/tests/files/bc/multiply.txt new file mode 100644 index 0000000000000000000000000000000000000000..d960f02ae97927b191b8d7682e5780b9cb12bc49 --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/multiply.txt @@ -0,0 +1,41 @@ +0 * 0 +0.000 * 0 +1 * 0 +0 * 1 +0 * 2498752389672835476 +873246913745129084576134 * 0 +1 * 472638590273489273456 +12374861230476103672835496 * 1 +1 * 1 +2 * 1 +1 * 2 +2 * 2 +3 * 14 +17 * 8 +1892467513846753 * 1872439821374591038746 +328962735862.2973546835638947635 * 1728465791348762356 +38745962374538.387427384672934867234 * 0.1932476528394672837568923754 +9878894576289457634856.2738627161689017387608947567654 * 37842939768237596237854203.29874372139852739126739621793162 +-1 * 1 +-1 * 2 +78893457 * -34876238956 +235678324957634 * -0.2349578349672389576 +-12849567821934 * 12738462937681 +1274861293467.927843682937462 * -28935678239 +2936077239872.12937462836 * -0.012842357682435762 +2387692387566.2378569237546 * -272189345628.123875629835876 +0.012348629356782835962 * -23487692356 +0.4768349567348675934 * -0.23756834576934857638495 +0.98748395367485962735486 * -4675839462354867.376834956738456 +-321784627934586 * -235762378596 +-32578623567892356 * -0.32567384579638456 +-35768232346876 * -2348672935602387620.28375682349576237856 +-0.2356728394765234 * -238759624356978 +-0.2345768212346780 * -0.235768124697074385948943532045 +-0.370873860736785306278630 * -7835678398607.7086378076867096270 +-78365713707.7089637863786730 * -738580798679306780 +-73867038956790490258249 * -0.7379862716391723672803679 +-378621971598721837710387 * -98465373878350798.09743896037963078560 +37164201 * 2931559660 +679468076118972457796560530571.46287161642138401685 * 93762.2836 +.000000000000000000000000001 * .0000000000000000000000001 diff --git a/aosp/external/toybox/tests/files/bc/multiply_results.txt b/aosp/external/toybox/tests/files/bc/multiply_results.txt new file mode 100644 index 0000000000000000000000000000000000000000..6dac3b71e776a917ca72c9830817ffc111bd72c6 --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/multiply_results.txt @@ -0,0 +1,42 @@ +0 +0 +0 +0 +0 +0 +472638590273489273456 +12374861230476103672835496 +1 +2 +2 +4 +42 +136 +3543531533584430580556128344529291738 +568600835566479683035874339053.4411638427543228060 +7487566285885.8557453089005171423976251098 +373846412427291014394738378015501363938345620046.7869650248829232267\ +2297002026819 +-1 +-2 +-2751507058396910892 +-55374468980751.0837656919743223184 +-163683743464924630346895054 +-36888976187143312550878.567134791289418 +-37706154097.69662826215753378160 +-649904428532907022680241.94791869424754101064 +-290040807.350385412976669306472 +-.11328089187650139309272 +-4617316439035114.40320367843985107357898 +75864709277486862054521256 +10610005628108234.92015040406042336 +84007879267445533366251128067927.91168012197674537856 +56269158624557.1027018519702852 +.055305737239900889424090264801 +2906048299183.472237078104362540110129 +57879411419313585866282299201.3825582163029400 +54512860676747314187949.9414724679950990587298071 +37281153992026463004361915151761464058058.54968338992209002720 +108949072447731660 +63708478450213482928510139572007971.83536929222529239687 +0 diff --git a/aosp/external/toybox/tests/files/bc/parse.txt b/aosp/external/toybox/tests/files/bc/parse.txt new file mode 100644 index 0000000000000000000000000000000000000000..ba99df5770fcfd4b08e1a32ef7207afa4079bd19 --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/parse.txt @@ -0,0 +1,14406 @@ +ibase = A; ibase = 2 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +1000 +0.1000 +1.1000 +1000.1000 +1001 +0.1001 +1.1001 +1001.1001 +1010 +0.1010 +1.1010 +1010.1010 +1011 +0.1011 +1.1011 +1011.1011 +1100 +0.1100 +1.1100 +1100.1100 +1101 +0.1101 +1.1101 +1101.1101 +1110 +0.1110 +1.1110 +1110.1110 +1111 +0.1111 +1.1111 +1111.1111 +10000 +0.10000 +1.10000 +10000.10000 +10001 +0.10001 +1.10001 +10001.10001 +10010 +0.10010 +1.10010 +10010.10010 +10011 +0.10011 +1.10011 +10011.10011 +10100 +0.10100 +1.10100 +10100.10100 +10101 +0.10101 +1.10101 +10101.10101 +10110 +0.10110 +1.10110 +10110.10110 +10111 +0.10111 +1.10111 +10111.10111 +11000 +0.11000 +1.11000 +11000.11000 +11001 +0.11001 +1.11001 +11001.11001 +11010 +0.11010 +1.11010 +11010.11010 +11011 +0.11011 +1.11011 +11011.11011 +11100 +0.11100 +1.11100 +11100.11100 +11101 +0.11101 +1.11101 +11101.11101 +11110 +0.11110 +1.11110 +11110.11110 +11111 +0.11111 +1.11111 +11111.11111 +100000 +0.100000 +1.100000 +100000.100000 +100001 +0.100001 +1.100001 +100001.100001 +100010 +0.100010 +1.100010 +100010.100010 +100011 +0.100011 +1.100011 +100011.100011 +100100 +0.100100 +1.100100 +100100.100100 +100101 +0.100101 +1.100101 +100101.100101 +100110 +0.100110 +1.100110 +100110.100110 +100111 +0.100111 +1.100111 +100111.100111 +101000 +0.101000 +1.101000 +101000.101000 +101001 +0.101001 +1.101001 +101001.101001 +101010 +0.101010 +1.101010 +101010.101010 +101011 +0.101011 +1.101011 +101011.101011 +101100 +0.101100 +1.101100 +101100.101100 +101101 +0.101101 +1.101101 +101101.101101 +101110 +0.101110 +1.101110 +101110.101110 +101111 +0.101111 +1.101111 +101111.101111 +110000 +0.110000 +1.110000 +110000.110000 +110001 +0.110001 +1.110001 +110001.110001 +110010 +0.110010 +1.110010 +110010.110010 +110011 +0.110011 +1.110011 +110011.110011 +110100 +0.110100 +1.110100 +110100.110100 +110101 +0.110101 +1.110101 +110101.110101 +110110 +0.110110 +1.110110 +110110.110110 +110111 +0.110111 +1.110111 +110111.110111 +111000 +0.111000 +1.111000 +111000.111000 +111001 +0.111001 +1.111001 +111001.111001 +111010 +0.111010 +1.111010 +111010.111010 +111011 +0.111011 +1.111011 +111011.111011 +111100 +0.111100 +1.111100 +111100.111100 +111101 +0.111101 +1.111101 +111101.111101 +111110 +0.111110 +1.111110 +111110.111110 +111111 +0.111111 +1.111111 +111111.111111 +1000000 +0.1000000 +1.1000000 +1000000.1000000 +1000001 +0.1000001 +1.1000001 +1000001.1000001 +1000010 +0.1000010 +1.1000010 +1000010.1000010 +1000011 +0.1000011 +1.1000011 +1000011.1000011 +1000100 +0.1000100 +1.1000100 +1000100.1000100 +1000101 +0.1000101 +1.1000101 +1000101.1000101 +1000110 +0.1000110 +1.1000110 +1000110.1000110 +1000111 +0.1000111 +1.1000111 +1000111.1000111 +1001000 +0.1001000 +1.1001000 +1001000.1001000 +1001001 +0.1001001 +1.1001001 +1001001.1001001 +1001010 +0.1001010 +1.1001010 +1001010.1001010 +1001011 +0.1001011 +1.1001011 +1001011.1001011 +1001100 +0.1001100 +1.1001100 +1001100.1001100 +1001101 +0.1001101 +1.1001101 +1001101.1001101 +1001110 +0.1001110 +1.1001110 +1001110.1001110 +1001111 +0.1001111 +1.1001111 +1001111.1001111 +1010000 +0.1010000 +1.1010000 +1010000.1010000 +1010001 +0.1010001 +1.1010001 +1010001.1010001 +1010010 +0.1010010 +1.1010010 +1010010.1010010 +1010011 +0.1010011 +1.1010011 +1010011.1010011 +1010100 +0.1010100 +1.1010100 +1010100.1010100 +1010101 +0.1010101 +1.1010101 +1010101.1010101 +1010110 +0.1010110 +1.1010110 +1010110.1010110 +1010111 +0.1010111 +1.1010111 +1010111.1010111 +1011000 +0.1011000 +1.1011000 +1011000.1011000 +1011001 +0.1011001 +1.1011001 +1011001.1011001 +1011010 +0.1011010 +1.1011010 +1011010.1011010 +1011011 +0.1011011 +1.1011011 +1011011.1011011 +1011100 +0.1011100 +1.1011100 +1011100.1011100 +1011101 +0.1011101 +1.1011101 +1011101.1011101 +1011110 +0.1011110 +1.1011110 +1011110.1011110 +1011111 +0.1011111 +1.1011111 +1011111.1011111 +1100000 +0.1100000 +1.1100000 +1100000.1100000 +1100001 +0.1100001 +1.1100001 +1100001.1100001 +1100010 +0.1100010 +1.1100010 +1100010.1100010 +1100011 +0.1100011 +1.1100011 +1100011.1100011 +1100100 +0.1100100 +1.1100100 +1100100.1100100 +1100101 +0.1100101 +1.1100101 +1100101.1100101 +1100110 +0.1100110 +1.1100110 +1100110.1100110 +1100111 +0.1100111 +1.1100111 +1100111.1100111 +1101000 +0.1101000 +1.1101000 +1101000.1101000 +1101001 +0.1101001 +1.1101001 +1101001.1101001 +1101010 +0.1101010 +1.1101010 +1101010.1101010 +1101011 +0.1101011 +1.1101011 +1101011.1101011 +1101100 +0.1101100 +1.1101100 +1101100.1101100 +1101101 +0.1101101 +1.1101101 +1101101.1101101 +1101110 +0.1101110 +1.1101110 +1101110.1101110 +1101111 +0.1101111 +1.1101111 +1101111.1101111 +1110000 +0.1110000 +1.1110000 +1110000.1110000 +1110001 +0.1110001 +1.1110001 +1110001.1110001 +1110010 +0.1110010 +1.1110010 +1110010.1110010 +1110011 +0.1110011 +1.1110011 +1110011.1110011 +1110100 +0.1110100 +1.1110100 +1110100.1110100 +1110101 +0.1110101 +1.1110101 +1110101.1110101 +1110110 +0.1110110 +1.1110110 +1110110.1110110 +1110111 +0.1110111 +1.1110111 +1110111.1110111 +1111000 +0.1111000 +1.1111000 +1111000.1111000 +1111001 +0.1111001 +1.1111001 +1111001.1111001 +1111010 +0.1111010 +1.1111010 +1111010.1111010 +1111011 +0.1111011 +1.1111011 +1111011.1111011 +1111100 +0.1111100 +1.1111100 +1111100.1111100 +1111101 +0.1111101 +1.1111101 +1111101.1111101 +1111110 +0.1111110 +1.1111110 +1111110.1111110 +1111111 +0.1111111 +1.1111111 +1111111.1111111 +10000000 +0.10000000 +1.10000000 +10000000.10000000 +10000001 +0.10000001 +1.10000001 +10000001.10000001 +10000010 +0.10000010 +1.10000010 +10000010.10000010 +10000011 +0.10000011 +1.10000011 +10000011.10000011 +10000100 +0.10000100 +1.10000100 +10000100.10000100 +10000101 +0.10000101 +1.10000101 +10000101.10000101 +10000110 +0.10000110 +1.10000110 +10000110.10000110 +10000111 +0.10000111 +1.10000111 +10000111.10000111 +10001000 +0.10001000 +1.10001000 +10001000.10001000 +10001001 +0.10001001 +1.10001001 +10001001.10001001 +10001010 +0.10001010 +1.10001010 +10001010.10001010 +10001011 +0.10001011 +1.10001011 +10001011.10001011 +10001100 +0.10001100 +1.10001100 +10001100.10001100 +10001101 +0.10001101 +1.10001101 +10001101.10001101 +10001110 +0.10001110 +1.10001110 +10001110.10001110 +10001111 +0.10001111 +1.10001111 +10001111.10001111 +10010000 +0.10010000 +1.10010000 +10010000.10010000 +10010001 +0.10010001 +1.10010001 +10010001.10010001 +10010010 +0.10010010 +1.10010010 +10010010.10010010 +10010011 +0.10010011 +1.10010011 +10010011.10010011 +10010100 +0.10010100 +1.10010100 +10010100.10010100 +10010101 +0.10010101 +1.10010101 +10010101.10010101 +10010110 +0.10010110 +1.10010110 +10010110.10010110 +10010111 +0.10010111 +1.10010111 +10010111.10010111 +10011000 +0.10011000 +1.10011000 +10011000.10011000 +10011001 +0.10011001 +1.10011001 +10011001.10011001 +10011010 +0.10011010 +1.10011010 +10011010.10011010 +10011011 +0.10011011 +1.10011011 +10011011.10011011 +10011100 +0.10011100 +1.10011100 +10011100.10011100 +10011101 +0.10011101 +1.10011101 +10011101.10011101 +10011110 +0.10011110 +1.10011110 +10011110.10011110 +10011111 +0.10011111 +1.10011111 +10011111.10011111 +10100000 +0.10100000 +1.10100000 +10100000.10100000 +10100001 +0.10100001 +1.10100001 +10100001.10100001 +10100010 +0.10100010 +1.10100010 +10100010.10100010 +10100011 +0.10100011 +1.10100011 +10100011.10100011 +10100100 +0.10100100 +1.10100100 +10100100.10100100 +10100101 +0.10100101 +1.10100101 +10100101.10100101 +10100110 +0.10100110 +1.10100110 +10100110.10100110 +10100111 +0.10100111 +1.10100111 +10100111.10100111 +10101000 +0.10101000 +1.10101000 +10101000.10101000 +10101001 +0.10101001 +1.10101001 +10101001.10101001 +10101010 +0.10101010 +1.10101010 +10101010.10101010 +10101011 +0.10101011 +1.10101011 +10101011.10101011 +10101100 +0.10101100 +1.10101100 +10101100.10101100 +10101101 +0.10101101 +1.10101101 +10101101.10101101 +10101110 +0.10101110 +1.10101110 +10101110.10101110 +10101111 +0.10101111 +1.10101111 +10101111.10101111 +10110000 +0.10110000 +1.10110000 +10110000.10110000 +10110001 +0.10110001 +1.10110001 +10110001.10110001 +10110010 +0.10110010 +1.10110010 +10110010.10110010 +10110011 +0.10110011 +1.10110011 +10110011.10110011 +10110100 +0.10110100 +1.10110100 +10110100.10110100 +10110101 +0.10110101 +1.10110101 +10110101.10110101 +10110110 +0.10110110 +1.10110110 +10110110.10110110 +10110111 +0.10110111 +1.10110111 +10110111.10110111 +10111000 +0.10111000 +1.10111000 +10111000.10111000 +10111001 +0.10111001 +1.10111001 +10111001.10111001 +10111010 +0.10111010 +1.10111010 +10111010.10111010 +10111011 +0.10111011 +1.10111011 +10111011.10111011 +10111100 +0.10111100 +1.10111100 +10111100.10111100 +10111101 +0.10111101 +1.10111101 +10111101.10111101 +10111110 +0.10111110 +1.10111110 +10111110.10111110 +10111111 +0.10111111 +1.10111111 +10111111.10111111 +11000000 +0.11000000 +1.11000000 +11000000.11000000 +11000001 +0.11000001 +1.11000001 +11000001.11000001 +11000010 +0.11000010 +1.11000010 +11000010.11000010 +11000011 +0.11000011 +1.11000011 +11000011.11000011 +11000100 +0.11000100 +1.11000100 +11000100.11000100 +11000101 +0.11000101 +1.11000101 +11000101.11000101 +11000110 +0.11000110 +1.11000110 +11000110.11000110 +11000111 +0.11000111 +1.11000111 +11000111.11000111 +11001000 +0.11001000 +1.11001000 +11001000.11001000 +11001001 +0.11001001 +1.11001001 +11001001.11001001 +11001010 +0.11001010 +1.11001010 +11001010.11001010 +11001011 +0.11001011 +1.11001011 +11001011.11001011 +11001100 +0.11001100 +1.11001100 +11001100.11001100 +11001101 +0.11001101 +1.11001101 +11001101.11001101 +11001110 +0.11001110 +1.11001110 +11001110.11001110 +11001111 +0.11001111 +1.11001111 +11001111.11001111 +11010000 +0.11010000 +1.11010000 +11010000.11010000 +11010001 +0.11010001 +1.11010001 +11010001.11010001 +11010010 +0.11010010 +1.11010010 +11010010.11010010 +11010011 +0.11010011 +1.11010011 +11010011.11010011 +11010100 +0.11010100 +1.11010100 +11010100.11010100 +11010101 +0.11010101 +1.11010101 +11010101.11010101 +11010110 +0.11010110 +1.11010110 +11010110.11010110 +11010111 +0.11010111 +1.11010111 +11010111.11010111 +11011000 +0.11011000 +1.11011000 +11011000.11011000 +11011001 +0.11011001 +1.11011001 +11011001.11011001 +11011010 +0.11011010 +1.11011010 +11011010.11011010 +11011011 +0.11011011 +1.11011011 +11011011.11011011 +11011100 +0.11011100 +1.11011100 +11011100.11011100 +11011101 +0.11011101 +1.11011101 +11011101.11011101 +11011110 +0.11011110 +1.11011110 +11011110.11011110 +11011111 +0.11011111 +1.11011111 +11011111.11011111 +11100000 +0.11100000 +1.11100000 +11100000.11100000 +11100001 +0.11100001 +1.11100001 +11100001.11100001 +11100010 +0.11100010 +1.11100010 +11100010.11100010 +11100011 +0.11100011 +1.11100011 +11100011.11100011 +11100100 +0.11100100 +1.11100100 +11100100.11100100 +11100101 +0.11100101 +1.11100101 +11100101.11100101 +11100110 +0.11100110 +1.11100110 +11100110.11100110 +11100111 +0.11100111 +1.11100111 +11100111.11100111 +11101000 +0.11101000 +1.11101000 +11101000.11101000 +11101001 +0.11101001 +1.11101001 +11101001.11101001 +11101010 +0.11101010 +1.11101010 +11101010.11101010 +11101011 +0.11101011 +1.11101011 +11101011.11101011 +11101100 +0.11101100 +1.11101100 +11101100.11101100 +11101101 +0.11101101 +1.11101101 +11101101.11101101 +11101110 +0.11101110 +1.11101110 +11101110.11101110 +11101111 +0.11101111 +1.11101111 +11101111.11101111 +11110000 +0.11110000 +1.11110000 +11110000.11110000 +11110001 +0.11110001 +1.11110001 +11110001.11110001 +11110010 +0.11110010 +1.11110010 +11110010.11110010 +11110011 +0.11110011 +1.11110011 +11110011.11110011 +11110100 +0.11110100 +1.11110100 +11110100.11110100 +11110101 +0.11110101 +1.11110101 +11110101.11110101 +11110110 +0.11110110 +1.11110110 +11110110.11110110 +11110111 +0.11110111 +1.11110111 +11110111.11110111 +11111000 +0.11111000 +1.11111000 +11111000.11111000 +11111001 +0.11111001 +1.11111001 +11111001.11111001 +11111010 +0.11111010 +1.11111010 +11111010.11111010 +11111011 +0.11111011 +1.11111011 +11111011.11111011 +11111100 +0.11111100 +1.11111100 +11111100.11111100 +11111101 +0.11111101 +1.11111101 +11111101.11111101 +11111110 +0.11111110 +1.11111110 +11111110.11111110 +11111111 +0.11111111 +1.11111111 +11111111.11111111 +100000000 +0.100000000 +1.100000000 +100000000.100000000 +ibase = A; ibase = 3 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +122 +0.122 +1.122 +122.122 +200 +0.200 +1.200 +200.200 +201 +0.201 +1.201 +201.201 +202 +0.202 +1.202 +202.202 +210 +0.210 +1.210 +210.210 +211 +0.211 +1.211 +211.211 +212 +0.212 +1.212 +212.212 +220 +0.220 +1.220 +220.220 +221 +0.221 +1.221 +221.221 +222 +0.222 +1.222 +222.222 +1000 +0.1000 +1.1000 +1000.1000 +1001 +0.1001 +1.1001 +1001.1001 +1002 +0.1002 +1.1002 +1002.1002 +1010 +0.1010 +1.1010 +1010.1010 +1011 +0.1011 +1.1011 +1011.1011 +1012 +0.1012 +1.1012 +1012.1012 +1020 +0.1020 +1.1020 +1020.1020 +1021 +0.1021 +1.1021 +1021.1021 +1022 +0.1022 +1.1022 +1022.1022 +1100 +0.1100 +1.1100 +1100.1100 +1101 +0.1101 +1.1101 +1101.1101 +1102 +0.1102 +1.1102 +1102.1102 +1110 +0.1110 +1.1110 +1110.1110 +1111 +0.1111 +1.1111 +1111.1111 +1112 +0.1112 +1.1112 +1112.1112 +1120 +0.1120 +1.1120 +1120.1120 +1121 +0.1121 +1.1121 +1121.1121 +1122 +0.1122 +1.1122 +1122.1122 +1200 +0.1200 +1.1200 +1200.1200 +1201 +0.1201 +1.1201 +1201.1201 +1202 +0.1202 +1.1202 +1202.1202 +1210 +0.1210 +1.1210 +1210.1210 +1211 +0.1211 +1.1211 +1211.1211 +1212 +0.1212 +1.1212 +1212.1212 +1220 +0.1220 +1.1220 +1220.1220 +1221 +0.1221 +1.1221 +1221.1221 +1222 +0.1222 +1.1222 +1222.1222 +2000 +0.2000 +1.2000 +2000.2000 +2001 +0.2001 +1.2001 +2001.2001 +2002 +0.2002 +1.2002 +2002.2002 +2010 +0.2010 +1.2010 +2010.2010 +2011 +0.2011 +1.2011 +2011.2011 +2012 +0.2012 +1.2012 +2012.2012 +2020 +0.2020 +1.2020 +2020.2020 +2021 +0.2021 +1.2021 +2021.2021 +2022 +0.2022 +1.2022 +2022.2022 +2100 +0.2100 +1.2100 +2100.2100 +2101 +0.2101 +1.2101 +2101.2101 +2102 +0.2102 +1.2102 +2102.2102 +2110 +0.2110 +1.2110 +2110.2110 +2111 +0.2111 +1.2111 +2111.2111 +2112 +0.2112 +1.2112 +2112.2112 +2120 +0.2120 +1.2120 +2120.2120 +2121 +0.2121 +1.2121 +2121.2121 +2122 +0.2122 +1.2122 +2122.2122 +2200 +0.2200 +1.2200 +2200.2200 +2201 +0.2201 +1.2201 +2201.2201 +2202 +0.2202 +1.2202 +2202.2202 +2210 +0.2210 +1.2210 +2210.2210 +2211 +0.2211 +1.2211 +2211.2211 +2212 +0.2212 +1.2212 +2212.2212 +2220 +0.2220 +1.2220 +2220.2220 +2221 +0.2221 +1.2221 +2221.2221 +2222 +0.2222 +1.2222 +2222.2222 +10000 +0.10000 +1.10000 +10000.10000 +10001 +0.10001 +1.10001 +10001.10001 +10002 +0.10002 +1.10002 +10002.10002 +10010 +0.10010 +1.10010 +10010.10010 +10011 +0.10011 +1.10011 +10011.10011 +10012 +0.10012 +1.10012 +10012.10012 +10020 +0.10020 +1.10020 +10020.10020 +10021 +0.10021 +1.10021 +10021.10021 +10022 +0.10022 +1.10022 +10022.10022 +10100 +0.10100 +1.10100 +10100.10100 +10101 +0.10101 +1.10101 +10101.10101 +10102 +0.10102 +1.10102 +10102.10102 +10110 +0.10110 +1.10110 +10110.10110 +10111 +0.10111 +1.10111 +10111.10111 +10112 +0.10112 +1.10112 +10112.10112 +10120 +0.10120 +1.10120 +10120.10120 +10121 +0.10121 +1.10121 +10121.10121 +10122 +0.10122 +1.10122 +10122.10122 +10200 +0.10200 +1.10200 +10200.10200 +10201 +0.10201 +1.10201 +10201.10201 +10202 +0.10202 +1.10202 +10202.10202 +10210 +0.10210 +1.10210 +10210.10210 +10211 +0.10211 +1.10211 +10211.10211 +10212 +0.10212 +1.10212 +10212.10212 +10220 +0.10220 +1.10220 +10220.10220 +10221 +0.10221 +1.10221 +10221.10221 +10222 +0.10222 +1.10222 +10222.10222 +11000 +0.11000 +1.11000 +11000.11000 +11001 +0.11001 +1.11001 +11001.11001 +11002 +0.11002 +1.11002 +11002.11002 +11010 +0.11010 +1.11010 +11010.11010 +11011 +0.11011 +1.11011 +11011.11011 +11012 +0.11012 +1.11012 +11012.11012 +11020 +0.11020 +1.11020 +11020.11020 +11021 +0.11021 +1.11021 +11021.11021 +11022 +0.11022 +1.11022 +11022.11022 +11100 +0.11100 +1.11100 +11100.11100 +11101 +0.11101 +1.11101 +11101.11101 +11102 +0.11102 +1.11102 +11102.11102 +11110 +0.11110 +1.11110 +11110.11110 +11111 +0.11111 +1.11111 +11111.11111 +11112 +0.11112 +1.11112 +11112.11112 +11120 +0.11120 +1.11120 +11120.11120 +11121 +0.11121 +1.11121 +11121.11121 +11122 +0.11122 +1.11122 +11122.11122 +11200 +0.11200 +1.11200 +11200.11200 +11201 +0.11201 +1.11201 +11201.11201 +11202 +0.11202 +1.11202 +11202.11202 +11210 +0.11210 +1.11210 +11210.11210 +11211 +0.11211 +1.11211 +11211.11211 +11212 +0.11212 +1.11212 +11212.11212 +11220 +0.11220 +1.11220 +11220.11220 +11221 +0.11221 +1.11221 +11221.11221 +11222 +0.11222 +1.11222 +11222.11222 +12000 +0.12000 +1.12000 +12000.12000 +12001 +0.12001 +1.12001 +12001.12001 +12002 +0.12002 +1.12002 +12002.12002 +12010 +0.12010 +1.12010 +12010.12010 +12011 +0.12011 +1.12011 +12011.12011 +12012 +0.12012 +1.12012 +12012.12012 +12020 +0.12020 +1.12020 +12020.12020 +12021 +0.12021 +1.12021 +12021.12021 +12022 +0.12022 +1.12022 +12022.12022 +12100 +0.12100 +1.12100 +12100.12100 +12101 +0.12101 +1.12101 +12101.12101 +12102 +0.12102 +1.12102 +12102.12102 +12110 +0.12110 +1.12110 +12110.12110 +12111 +0.12111 +1.12111 +12111.12111 +12112 +0.12112 +1.12112 +12112.12112 +12120 +0.12120 +1.12120 +12120.12120 +12121 +0.12121 +1.12121 +12121.12121 +12122 +0.12122 +1.12122 +12122.12122 +12200 +0.12200 +1.12200 +12200.12200 +12201 +0.12201 +1.12201 +12201.12201 +12202 +0.12202 +1.12202 +12202.12202 +12210 +0.12210 +1.12210 +12210.12210 +12211 +0.12211 +1.12211 +12211.12211 +12212 +0.12212 +1.12212 +12212.12212 +12220 +0.12220 +1.12220 +12220.12220 +12221 +0.12221 +1.12221 +12221.12221 +12222 +0.12222 +1.12222 +12222.12222 +20000 +0.20000 +1.20000 +20000.20000 +20001 +0.20001 +1.20001 +20001.20001 +20002 +0.20002 +1.20002 +20002.20002 +20010 +0.20010 +1.20010 +20010.20010 +20011 +0.20011 +1.20011 +20011.20011 +20012 +0.20012 +1.20012 +20012.20012 +20020 +0.20020 +1.20020 +20020.20020 +20021 +0.20021 +1.20021 +20021.20021 +20022 +0.20022 +1.20022 +20022.20022 +20100 +0.20100 +1.20100 +20100.20100 +20101 +0.20101 +1.20101 +20101.20101 +20102 +0.20102 +1.20102 +20102.20102 +20110 +0.20110 +1.20110 +20110.20110 +20111 +0.20111 +1.20111 +20111.20111 +20112 +0.20112 +1.20112 +20112.20112 +20120 +0.20120 +1.20120 +20120.20120 +20121 +0.20121 +1.20121 +20121.20121 +20122 +0.20122 +1.20122 +20122.20122 +20200 +0.20200 +1.20200 +20200.20200 +20201 +0.20201 +1.20201 +20201.20201 +20202 +0.20202 +1.20202 +20202.20202 +20210 +0.20210 +1.20210 +20210.20210 +20211 +0.20211 +1.20211 +20211.20211 +20212 +0.20212 +1.20212 +20212.20212 +20220 +0.20220 +1.20220 +20220.20220 +20221 +0.20221 +1.20221 +20221.20221 +20222 +0.20222 +1.20222 +20222.20222 +21000 +0.21000 +1.21000 +21000.21000 +21001 +0.21001 +1.21001 +21001.21001 +21002 +0.21002 +1.21002 +21002.21002 +21010 +0.21010 +1.21010 +21010.21010 +21011 +0.21011 +1.21011 +21011.21011 +21012 +0.21012 +1.21012 +21012.21012 +21020 +0.21020 +1.21020 +21020.21020 +21021 +0.21021 +1.21021 +21021.21021 +21022 +0.21022 +1.21022 +21022.21022 +21100 +0.21100 +1.21100 +21100.21100 +21101 +0.21101 +1.21101 +21101.21101 +21102 +0.21102 +1.21102 +21102.21102 +21110 +0.21110 +1.21110 +21110.21110 +21111 +0.21111 +1.21111 +21111.21111 +21112 +0.21112 +1.21112 +21112.21112 +21120 +0.21120 +1.21120 +21120.21120 +21121 +0.21121 +1.21121 +21121.21121 +21122 +0.21122 +1.21122 +21122.21122 +21200 +0.21200 +1.21200 +21200.21200 +21201 +0.21201 +1.21201 +21201.21201 +21202 +0.21202 +1.21202 +21202.21202 +21210 +0.21210 +1.21210 +21210.21210 +21211 +0.21211 +1.21211 +21211.21211 +21212 +0.21212 +1.21212 +21212.21212 +21220 +0.21220 +1.21220 +21220.21220 +21221 +0.21221 +1.21221 +21221.21221 +21222 +0.21222 +1.21222 +21222.21222 +22000 +0.22000 +1.22000 +22000.22000 +22001 +0.22001 +1.22001 +22001.22001 +22002 +0.22002 +1.22002 +22002.22002 +22010 +0.22010 +1.22010 +22010.22010 +22011 +0.22011 +1.22011 +22011.22011 +22012 +0.22012 +1.22012 +22012.22012 +22020 +0.22020 +1.22020 +22020.22020 +22021 +0.22021 +1.22021 +22021.22021 +22022 +0.22022 +1.22022 +22022.22022 +22100 +0.22100 +1.22100 +22100.22100 +22101 +0.22101 +1.22101 +22101.22101 +22102 +0.22102 +1.22102 +22102.22102 +22110 +0.22110 +1.22110 +22110.22110 +22111 +0.22111 +1.22111 +22111.22111 +22112 +0.22112 +1.22112 +22112.22112 +22120 +0.22120 +1.22120 +22120.22120 +22121 +0.22121 +1.22121 +22121.22121 +22122 +0.22122 +1.22122 +22122.22122 +22200 +0.22200 +1.22200 +22200.22200 +22201 +0.22201 +1.22201 +22201.22201 +22202 +0.22202 +1.22202 +22202.22202 +22210 +0.22210 +1.22210 +22210.22210 +22211 +0.22211 +1.22211 +22211.22211 +22212 +0.22212 +1.22212 +22212.22212 +22220 +0.22220 +1.22220 +22220.22220 +22221 +0.22221 +1.22221 +22221.22221 +22222 +0.22222 +1.22222 +22222.22222 +100000 +0.100000 +1.100000 +100000.100000 +100001 +0.100001 +1.100001 +100001.100001 +100002 +0.100002 +1.100002 +100002.100002 +100010 +0.100010 +1.100010 +100010.100010 +100011 +0.100011 +1.100011 +100011.100011 +100012 +0.100012 +1.100012 +100012.100012 +100020 +0.100020 +1.100020 +100020.100020 +100021 +0.100021 +1.100021 +100021.100021 +100022 +0.100022 +1.100022 +100022.100022 +100100 +0.100100 +1.100100 +100100.100100 +100101 +0.100101 +1.100101 +100101.100101 +100102 +0.100102 +1.100102 +100102.100102 +100110 +0.100110 +1.100110 +100110.100110 +100111 +0.100111 +1.100111 +100111.100111 +ibase = A; ibase = 4 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +103 +0.103 +1.103 +103.103 +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +113 +0.113 +1.113 +113.113 +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +122 +0.122 +1.122 +122.122 +123 +0.123 +1.123 +123.123 +130 +0.130 +1.130 +130.130 +131 +0.131 +1.131 +131.131 +132 +0.132 +1.132 +132.132 +133 +0.133 +1.133 +133.133 +200 +0.200 +1.200 +200.200 +201 +0.201 +1.201 +201.201 +202 +0.202 +1.202 +202.202 +203 +0.203 +1.203 +203.203 +210 +0.210 +1.210 +210.210 +211 +0.211 +1.211 +211.211 +212 +0.212 +1.212 +212.212 +213 +0.213 +1.213 +213.213 +220 +0.220 +1.220 +220.220 +221 +0.221 +1.221 +221.221 +222 +0.222 +1.222 +222.222 +223 +0.223 +1.223 +223.223 +230 +0.230 +1.230 +230.230 +231 +0.231 +1.231 +231.231 +232 +0.232 +1.232 +232.232 +233 +0.233 +1.233 +233.233 +300 +0.300 +1.300 +300.300 +301 +0.301 +1.301 +301.301 +302 +0.302 +1.302 +302.302 +303 +0.303 +1.303 +303.303 +310 +0.310 +1.310 +310.310 +311 +0.311 +1.311 +311.311 +312 +0.312 +1.312 +312.312 +313 +0.313 +1.313 +313.313 +320 +0.320 +1.320 +320.320 +321 +0.321 +1.321 +321.321 +322 +0.322 +1.322 +322.322 +323 +0.323 +1.323 +323.323 +330 +0.330 +1.330 +330.330 +331 +0.331 +1.331 +331.331 +332 +0.332 +1.332 +332.332 +333 +0.333 +1.333 +333.333 +1000 +0.1000 +1.1000 +1000.1000 +1001 +0.1001 +1.1001 +1001.1001 +1002 +0.1002 +1.1002 +1002.1002 +1003 +0.1003 +1.1003 +1003.1003 +1010 +0.1010 +1.1010 +1010.1010 +1011 +0.1011 +1.1011 +1011.1011 +1012 +0.1012 +1.1012 +1012.1012 +1013 +0.1013 +1.1013 +1013.1013 +1020 +0.1020 +1.1020 +1020.1020 +1021 +0.1021 +1.1021 +1021.1021 +1022 +0.1022 +1.1022 +1022.1022 +1023 +0.1023 +1.1023 +1023.1023 +1030 +0.1030 +1.1030 +1030.1030 +1031 +0.1031 +1.1031 +1031.1031 +1032 +0.1032 +1.1032 +1032.1032 +1033 +0.1033 +1.1033 +1033.1033 +1100 +0.1100 +1.1100 +1100.1100 +1101 +0.1101 +1.1101 +1101.1101 +1102 +0.1102 +1.1102 +1102.1102 +1103 +0.1103 +1.1103 +1103.1103 +1110 +0.1110 +1.1110 +1110.1110 +1111 +0.1111 +1.1111 +1111.1111 +1112 +0.1112 +1.1112 +1112.1112 +1113 +0.1113 +1.1113 +1113.1113 +1120 +0.1120 +1.1120 +1120.1120 +1121 +0.1121 +1.1121 +1121.1121 +1122 +0.1122 +1.1122 +1122.1122 +1123 +0.1123 +1.1123 +1123.1123 +1130 +0.1130 +1.1130 +1130.1130 +1131 +0.1131 +1.1131 +1131.1131 +1132 +0.1132 +1.1132 +1132.1132 +1133 +0.1133 +1.1133 +1133.1133 +1200 +0.1200 +1.1200 +1200.1200 +1201 +0.1201 +1.1201 +1201.1201 +1202 +0.1202 +1.1202 +1202.1202 +1203 +0.1203 +1.1203 +1203.1203 +1210 +0.1210 +1.1210 +1210.1210 +1211 +0.1211 +1.1211 +1211.1211 +1212 +0.1212 +1.1212 +1212.1212 +1213 +0.1213 +1.1213 +1213.1213 +1220 +0.1220 +1.1220 +1220.1220 +1221 +0.1221 +1.1221 +1221.1221 +1222 +0.1222 +1.1222 +1222.1222 +1223 +0.1223 +1.1223 +1223.1223 +1230 +0.1230 +1.1230 +1230.1230 +1231 +0.1231 +1.1231 +1231.1231 +1232 +0.1232 +1.1232 +1232.1232 +1233 +0.1233 +1.1233 +1233.1233 +1300 +0.1300 +1.1300 +1300.1300 +1301 +0.1301 +1.1301 +1301.1301 +1302 +0.1302 +1.1302 +1302.1302 +1303 +0.1303 +1.1303 +1303.1303 +1310 +0.1310 +1.1310 +1310.1310 +1311 +0.1311 +1.1311 +1311.1311 +1312 +0.1312 +1.1312 +1312.1312 +1313 +0.1313 +1.1313 +1313.1313 +1320 +0.1320 +1.1320 +1320.1320 +1321 +0.1321 +1.1321 +1321.1321 +1322 +0.1322 +1.1322 +1322.1322 +1323 +0.1323 +1.1323 +1323.1323 +1330 +0.1330 +1.1330 +1330.1330 +1331 +0.1331 +1.1331 +1331.1331 +1332 +0.1332 +1.1332 +1332.1332 +1333 +0.1333 +1.1333 +1333.1333 +2000 +0.2000 +1.2000 +2000.2000 +2001 +0.2001 +1.2001 +2001.2001 +2002 +0.2002 +1.2002 +2002.2002 +2003 +0.2003 +1.2003 +2003.2003 +2010 +0.2010 +1.2010 +2010.2010 +2011 +0.2011 +1.2011 +2011.2011 +2012 +0.2012 +1.2012 +2012.2012 +2013 +0.2013 +1.2013 +2013.2013 +2020 +0.2020 +1.2020 +2020.2020 +2021 +0.2021 +1.2021 +2021.2021 +2022 +0.2022 +1.2022 +2022.2022 +2023 +0.2023 +1.2023 +2023.2023 +2030 +0.2030 +1.2030 +2030.2030 +2031 +0.2031 +1.2031 +2031.2031 +2032 +0.2032 +1.2032 +2032.2032 +2033 +0.2033 +1.2033 +2033.2033 +2100 +0.2100 +1.2100 +2100.2100 +2101 +0.2101 +1.2101 +2101.2101 +2102 +0.2102 +1.2102 +2102.2102 +2103 +0.2103 +1.2103 +2103.2103 +2110 +0.2110 +1.2110 +2110.2110 +2111 +0.2111 +1.2111 +2111.2111 +2112 +0.2112 +1.2112 +2112.2112 +2113 +0.2113 +1.2113 +2113.2113 +2120 +0.2120 +1.2120 +2120.2120 +2121 +0.2121 +1.2121 +2121.2121 +2122 +0.2122 +1.2122 +2122.2122 +2123 +0.2123 +1.2123 +2123.2123 +2130 +0.2130 +1.2130 +2130.2130 +2131 +0.2131 +1.2131 +2131.2131 +2132 +0.2132 +1.2132 +2132.2132 +2133 +0.2133 +1.2133 +2133.2133 +2200 +0.2200 +1.2200 +2200.2200 +2201 +0.2201 +1.2201 +2201.2201 +2202 +0.2202 +1.2202 +2202.2202 +2203 +0.2203 +1.2203 +2203.2203 +2210 +0.2210 +1.2210 +2210.2210 +2211 +0.2211 +1.2211 +2211.2211 +2212 +0.2212 +1.2212 +2212.2212 +2213 +0.2213 +1.2213 +2213.2213 +2220 +0.2220 +1.2220 +2220.2220 +2221 +0.2221 +1.2221 +2221.2221 +2222 +0.2222 +1.2222 +2222.2222 +2223 +0.2223 +1.2223 +2223.2223 +2230 +0.2230 +1.2230 +2230.2230 +2231 +0.2231 +1.2231 +2231.2231 +2232 +0.2232 +1.2232 +2232.2232 +2233 +0.2233 +1.2233 +2233.2233 +2300 +0.2300 +1.2300 +2300.2300 +2301 +0.2301 +1.2301 +2301.2301 +2302 +0.2302 +1.2302 +2302.2302 +2303 +0.2303 +1.2303 +2303.2303 +2310 +0.2310 +1.2310 +2310.2310 +2311 +0.2311 +1.2311 +2311.2311 +2312 +0.2312 +1.2312 +2312.2312 +2313 +0.2313 +1.2313 +2313.2313 +2320 +0.2320 +1.2320 +2320.2320 +2321 +0.2321 +1.2321 +2321.2321 +2322 +0.2322 +1.2322 +2322.2322 +2323 +0.2323 +1.2323 +2323.2323 +2330 +0.2330 +1.2330 +2330.2330 +2331 +0.2331 +1.2331 +2331.2331 +2332 +0.2332 +1.2332 +2332.2332 +2333 +0.2333 +1.2333 +2333.2333 +3000 +0.3000 +1.3000 +3000.3000 +3001 +0.3001 +1.3001 +3001.3001 +3002 +0.3002 +1.3002 +3002.3002 +3003 +0.3003 +1.3003 +3003.3003 +3010 +0.3010 +1.3010 +3010.3010 +3011 +0.3011 +1.3011 +3011.3011 +3012 +0.3012 +1.3012 +3012.3012 +3013 +0.3013 +1.3013 +3013.3013 +3020 +0.3020 +1.3020 +3020.3020 +3021 +0.3021 +1.3021 +3021.3021 +3022 +0.3022 +1.3022 +3022.3022 +3023 +0.3023 +1.3023 +3023.3023 +3030 +0.3030 +1.3030 +3030.3030 +3031 +0.3031 +1.3031 +3031.3031 +3032 +0.3032 +1.3032 +3032.3032 +3033 +0.3033 +1.3033 +3033.3033 +3100 +0.3100 +1.3100 +3100.3100 +3101 +0.3101 +1.3101 +3101.3101 +3102 +0.3102 +1.3102 +3102.3102 +3103 +0.3103 +1.3103 +3103.3103 +3110 +0.3110 +1.3110 +3110.3110 +3111 +0.3111 +1.3111 +3111.3111 +3112 +0.3112 +1.3112 +3112.3112 +3113 +0.3113 +1.3113 +3113.3113 +3120 +0.3120 +1.3120 +3120.3120 +3121 +0.3121 +1.3121 +3121.3121 +3122 +0.3122 +1.3122 +3122.3122 +3123 +0.3123 +1.3123 +3123.3123 +3130 +0.3130 +1.3130 +3130.3130 +3131 +0.3131 +1.3131 +3131.3131 +3132 +0.3132 +1.3132 +3132.3132 +3133 +0.3133 +1.3133 +3133.3133 +3200 +0.3200 +1.3200 +3200.3200 +3201 +0.3201 +1.3201 +3201.3201 +3202 +0.3202 +1.3202 +3202.3202 +3203 +0.3203 +1.3203 +3203.3203 +3210 +0.3210 +1.3210 +3210.3210 +3211 +0.3211 +1.3211 +3211.3211 +3212 +0.3212 +1.3212 +3212.3212 +3213 +0.3213 +1.3213 +3213.3213 +3220 +0.3220 +1.3220 +3220.3220 +3221 +0.3221 +1.3221 +3221.3221 +3222 +0.3222 +1.3222 +3222.3222 +3223 +0.3223 +1.3223 +3223.3223 +3230 +0.3230 +1.3230 +3230.3230 +3231 +0.3231 +1.3231 +3231.3231 +3232 +0.3232 +1.3232 +3232.3232 +3233 +0.3233 +1.3233 +3233.3233 +3300 +0.3300 +1.3300 +3300.3300 +3301 +0.3301 +1.3301 +3301.3301 +3302 +0.3302 +1.3302 +3302.3302 +3303 +0.3303 +1.3303 +3303.3303 +3310 +0.3310 +1.3310 +3310.3310 +3311 +0.3311 +1.3311 +3311.3311 +3312 +0.3312 +1.3312 +3312.3312 +3313 +0.3313 +1.3313 +3313.3313 +3320 +0.3320 +1.3320 +3320.3320 +3321 +0.3321 +1.3321 +3321.3321 +3322 +0.3322 +1.3322 +3322.3322 +3323 +0.3323 +1.3323 +3323.3323 +3330 +0.3330 +1.3330 +3330.3330 +3331 +0.3331 +1.3331 +3331.3331 +3332 +0.3332 +1.3332 +3332.3332 +3333 +0.3333 +1.3333 +3333.3333 +10000 +0.10000 +1.10000 +10000.10000 +ibase = A; ibase = 5 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +103 +0.103 +1.103 +103.103 +104 +0.104 +1.104 +104.104 +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +113 +0.113 +1.113 +113.113 +114 +0.114 +1.114 +114.114 +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +122 +0.122 +1.122 +122.122 +123 +0.123 +1.123 +123.123 +124 +0.124 +1.124 +124.124 +130 +0.130 +1.130 +130.130 +131 +0.131 +1.131 +131.131 +132 +0.132 +1.132 +132.132 +133 +0.133 +1.133 +133.133 +134 +0.134 +1.134 +134.134 +140 +0.140 +1.140 +140.140 +141 +0.141 +1.141 +141.141 +142 +0.142 +1.142 +142.142 +143 +0.143 +1.143 +143.143 +144 +0.144 +1.144 +144.144 +200 +0.200 +1.200 +200.200 +201 +0.201 +1.201 +201.201 +202 +0.202 +1.202 +202.202 +203 +0.203 +1.203 +203.203 +204 +0.204 +1.204 +204.204 +210 +0.210 +1.210 +210.210 +211 +0.211 +1.211 +211.211 +212 +0.212 +1.212 +212.212 +213 +0.213 +1.213 +213.213 +214 +0.214 +1.214 +214.214 +220 +0.220 +1.220 +220.220 +221 +0.221 +1.221 +221.221 +222 +0.222 +1.222 +222.222 +223 +0.223 +1.223 +223.223 +224 +0.224 +1.224 +224.224 +230 +0.230 +1.230 +230.230 +231 +0.231 +1.231 +231.231 +232 +0.232 +1.232 +232.232 +233 +0.233 +1.233 +233.233 +234 +0.234 +1.234 +234.234 +240 +0.240 +1.240 +240.240 +241 +0.241 +1.241 +241.241 +242 +0.242 +1.242 +242.242 +243 +0.243 +1.243 +243.243 +244 +0.244 +1.244 +244.244 +300 +0.300 +1.300 +300.300 +301 +0.301 +1.301 +301.301 +302 +0.302 +1.302 +302.302 +303 +0.303 +1.303 +303.303 +304 +0.304 +1.304 +304.304 +310 +0.310 +1.310 +310.310 +311 +0.311 +1.311 +311.311 +312 +0.312 +1.312 +312.312 +313 +0.313 +1.313 +313.313 +314 +0.314 +1.314 +314.314 +320 +0.320 +1.320 +320.320 +321 +0.321 +1.321 +321.321 +322 +0.322 +1.322 +322.322 +323 +0.323 +1.323 +323.323 +324 +0.324 +1.324 +324.324 +330 +0.330 +1.330 +330.330 +331 +0.331 +1.331 +331.331 +332 +0.332 +1.332 +332.332 +333 +0.333 +1.333 +333.333 +334 +0.334 +1.334 +334.334 +340 +0.340 +1.340 +340.340 +341 +0.341 +1.341 +341.341 +342 +0.342 +1.342 +342.342 +343 +0.343 +1.343 +343.343 +344 +0.344 +1.344 +344.344 +400 +0.400 +1.400 +400.400 +401 +0.401 +1.401 +401.401 +402 +0.402 +1.402 +402.402 +403 +0.403 +1.403 +403.403 +404 +0.404 +1.404 +404.404 +410 +0.410 +1.410 +410.410 +411 +0.411 +1.411 +411.411 +412 +0.412 +1.412 +412.412 +413 +0.413 +1.413 +413.413 +414 +0.414 +1.414 +414.414 +420 +0.420 +1.420 +420.420 +421 +0.421 +1.421 +421.421 +422 +0.422 +1.422 +422.422 +423 +0.423 +1.423 +423.423 +424 +0.424 +1.424 +424.424 +430 +0.430 +1.430 +430.430 +431 +0.431 +1.431 +431.431 +432 +0.432 +1.432 +432.432 +433 +0.433 +1.433 +433.433 +434 +0.434 +1.434 +434.434 +440 +0.440 +1.440 +440.440 +441 +0.441 +1.441 +441.441 +442 +0.442 +1.442 +442.442 +443 +0.443 +1.443 +443.443 +444 +0.444 +1.444 +444.444 +1000 +0.1000 +1.1000 +1000.1000 +1001 +0.1001 +1.1001 +1001.1001 +1002 +0.1002 +1.1002 +1002.1002 +1003 +0.1003 +1.1003 +1003.1003 +1004 +0.1004 +1.1004 +1004.1004 +1010 +0.1010 +1.1010 +1010.1010 +1011 +0.1011 +1.1011 +1011.1011 +1012 +0.1012 +1.1012 +1012.1012 +1013 +0.1013 +1.1013 +1013.1013 +1014 +0.1014 +1.1014 +1014.1014 +1020 +0.1020 +1.1020 +1020.1020 +1021 +0.1021 +1.1021 +1021.1021 +1022 +0.1022 +1.1022 +1022.1022 +1023 +0.1023 +1.1023 +1023.1023 +1024 +0.1024 +1.1024 +1024.1024 +1030 +0.1030 +1.1030 +1030.1030 +1031 +0.1031 +1.1031 +1031.1031 +1032 +0.1032 +1.1032 +1032.1032 +1033 +0.1033 +1.1033 +1033.1033 +1034 +0.1034 +1.1034 +1034.1034 +1040 +0.1040 +1.1040 +1040.1040 +1041 +0.1041 +1.1041 +1041.1041 +1042 +0.1042 +1.1042 +1042.1042 +1043 +0.1043 +1.1043 +1043.1043 +1044 +0.1044 +1.1044 +1044.1044 +1100 +0.1100 +1.1100 +1100.1100 +1101 +0.1101 +1.1101 +1101.1101 +1102 +0.1102 +1.1102 +1102.1102 +1103 +0.1103 +1.1103 +1103.1103 +1104 +0.1104 +1.1104 +1104.1104 +1110 +0.1110 +1.1110 +1110.1110 +1111 +0.1111 +1.1111 +1111.1111 +1112 +0.1112 +1.1112 +1112.1112 +1113 +0.1113 +1.1113 +1113.1113 +1114 +0.1114 +1.1114 +1114.1114 +1120 +0.1120 +1.1120 +1120.1120 +1121 +0.1121 +1.1121 +1121.1121 +1122 +0.1122 +1.1122 +1122.1122 +1123 +0.1123 +1.1123 +1123.1123 +1124 +0.1124 +1.1124 +1124.1124 +1130 +0.1130 +1.1130 +1130.1130 +1131 +0.1131 +1.1131 +1131.1131 +1132 +0.1132 +1.1132 +1132.1132 +1133 +0.1133 +1.1133 +1133.1133 +1134 +0.1134 +1.1134 +1134.1134 +1140 +0.1140 +1.1140 +1140.1140 +1141 +0.1141 +1.1141 +1141.1141 +1142 +0.1142 +1.1142 +1142.1142 +1143 +0.1143 +1.1143 +1143.1143 +1144 +0.1144 +1.1144 +1144.1144 +1200 +0.1200 +1.1200 +1200.1200 +1201 +0.1201 +1.1201 +1201.1201 +1202 +0.1202 +1.1202 +1202.1202 +1203 +0.1203 +1.1203 +1203.1203 +1204 +0.1204 +1.1204 +1204.1204 +1210 +0.1210 +1.1210 +1210.1210 +1211 +0.1211 +1.1211 +1211.1211 +1212 +0.1212 +1.1212 +1212.1212 +1213 +0.1213 +1.1213 +1213.1213 +1214 +0.1214 +1.1214 +1214.1214 +1220 +0.1220 +1.1220 +1220.1220 +1221 +0.1221 +1.1221 +1221.1221 +1222 +0.1222 +1.1222 +1222.1222 +1223 +0.1223 +1.1223 +1223.1223 +1224 +0.1224 +1.1224 +1224.1224 +1230 +0.1230 +1.1230 +1230.1230 +1231 +0.1231 +1.1231 +1231.1231 +1232 +0.1232 +1.1232 +1232.1232 +1233 +0.1233 +1.1233 +1233.1233 +1234 +0.1234 +1.1234 +1234.1234 +1240 +0.1240 +1.1240 +1240.1240 +1241 +0.1241 +1.1241 +1241.1241 +1242 +0.1242 +1.1242 +1242.1242 +1243 +0.1243 +1.1243 +1243.1243 +1244 +0.1244 +1.1244 +1244.1244 +1300 +0.1300 +1.1300 +1300.1300 +1301 +0.1301 +1.1301 +1301.1301 +1302 +0.1302 +1.1302 +1302.1302 +1303 +0.1303 +1.1303 +1303.1303 +1304 +0.1304 +1.1304 +1304.1304 +1310 +0.1310 +1.1310 +1310.1310 +1311 +0.1311 +1.1311 +1311.1311 +1312 +0.1312 +1.1312 +1312.1312 +1313 +0.1313 +1.1313 +1313.1313 +1314 +0.1314 +1.1314 +1314.1314 +1320 +0.1320 +1.1320 +1320.1320 +1321 +0.1321 +1.1321 +1321.1321 +1322 +0.1322 +1.1322 +1322.1322 +1323 +0.1323 +1.1323 +1323.1323 +1324 +0.1324 +1.1324 +1324.1324 +1330 +0.1330 +1.1330 +1330.1330 +1331 +0.1331 +1.1331 +1331.1331 +1332 +0.1332 +1.1332 +1332.1332 +1333 +0.1333 +1.1333 +1333.1333 +1334 +0.1334 +1.1334 +1334.1334 +1340 +0.1340 +1.1340 +1340.1340 +1341 +0.1341 +1.1341 +1341.1341 +1342 +0.1342 +1.1342 +1342.1342 +1343 +0.1343 +1.1343 +1343.1343 +1344 +0.1344 +1.1344 +1344.1344 +1400 +0.1400 +1.1400 +1400.1400 +1401 +0.1401 +1.1401 +1401.1401 +1402 +0.1402 +1.1402 +1402.1402 +1403 +0.1403 +1.1403 +1403.1403 +1404 +0.1404 +1.1404 +1404.1404 +1410 +0.1410 +1.1410 +1410.1410 +1411 +0.1411 +1.1411 +1411.1411 +1412 +0.1412 +1.1412 +1412.1412 +1413 +0.1413 +1.1413 +1413.1413 +1414 +0.1414 +1.1414 +1414.1414 +1420 +0.1420 +1.1420 +1420.1420 +1421 +0.1421 +1.1421 +1421.1421 +1422 +0.1422 +1.1422 +1422.1422 +1423 +0.1423 +1.1423 +1423.1423 +1424 +0.1424 +1.1424 +1424.1424 +1430 +0.1430 +1.1430 +1430.1430 +1431 +0.1431 +1.1431 +1431.1431 +1432 +0.1432 +1.1432 +1432.1432 +1433 +0.1433 +1.1433 +1433.1433 +1434 +0.1434 +1.1434 +1434.1434 +1440 +0.1440 +1.1440 +1440.1440 +1441 +0.1441 +1.1441 +1441.1441 +1442 +0.1442 +1.1442 +1442.1442 +1443 +0.1443 +1.1443 +1443.1443 +1444 +0.1444 +1.1444 +1444.1444 +2000 +0.2000 +1.2000 +2000.2000 +2001 +0.2001 +1.2001 +2001.2001 +2002 +0.2002 +1.2002 +2002.2002 +2003 +0.2003 +1.2003 +2003.2003 +2004 +0.2004 +1.2004 +2004.2004 +2010 +0.2010 +1.2010 +2010.2010 +2011 +0.2011 +1.2011 +2011.2011 +ibase = A; ibase = 6 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +103 +0.103 +1.103 +103.103 +104 +0.104 +1.104 +104.104 +105 +0.105 +1.105 +105.105 +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +113 +0.113 +1.113 +113.113 +114 +0.114 +1.114 +114.114 +115 +0.115 +1.115 +115.115 +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +122 +0.122 +1.122 +122.122 +123 +0.123 +1.123 +123.123 +124 +0.124 +1.124 +124.124 +125 +0.125 +1.125 +125.125 +130 +0.130 +1.130 +130.130 +131 +0.131 +1.131 +131.131 +132 +0.132 +1.132 +132.132 +133 +0.133 +1.133 +133.133 +134 +0.134 +1.134 +134.134 +135 +0.135 +1.135 +135.135 +140 +0.140 +1.140 +140.140 +141 +0.141 +1.141 +141.141 +142 +0.142 +1.142 +142.142 +143 +0.143 +1.143 +143.143 +144 +0.144 +1.144 +144.144 +145 +0.145 +1.145 +145.145 +150 +0.150 +1.150 +150.150 +151 +0.151 +1.151 +151.151 +152 +0.152 +1.152 +152.152 +153 +0.153 +1.153 +153.153 +154 +0.154 +1.154 +154.154 +155 +0.155 +1.155 +155.155 +200 +0.200 +1.200 +200.200 +201 +0.201 +1.201 +201.201 +202 +0.202 +1.202 +202.202 +203 +0.203 +1.203 +203.203 +204 +0.204 +1.204 +204.204 +205 +0.205 +1.205 +205.205 +210 +0.210 +1.210 +210.210 +211 +0.211 +1.211 +211.211 +212 +0.212 +1.212 +212.212 +213 +0.213 +1.213 +213.213 +214 +0.214 +1.214 +214.214 +215 +0.215 +1.215 +215.215 +220 +0.220 +1.220 +220.220 +221 +0.221 +1.221 +221.221 +222 +0.222 +1.222 +222.222 +223 +0.223 +1.223 +223.223 +224 +0.224 +1.224 +224.224 +225 +0.225 +1.225 +225.225 +230 +0.230 +1.230 +230.230 +231 +0.231 +1.231 +231.231 +232 +0.232 +1.232 +232.232 +233 +0.233 +1.233 +233.233 +234 +0.234 +1.234 +234.234 +235 +0.235 +1.235 +235.235 +240 +0.240 +1.240 +240.240 +241 +0.241 +1.241 +241.241 +242 +0.242 +1.242 +242.242 +243 +0.243 +1.243 +243.243 +244 +0.244 +1.244 +244.244 +245 +0.245 +1.245 +245.245 +250 +0.250 +1.250 +250.250 +251 +0.251 +1.251 +251.251 +252 +0.252 +1.252 +252.252 +253 +0.253 +1.253 +253.253 +254 +0.254 +1.254 +254.254 +255 +0.255 +1.255 +255.255 +300 +0.300 +1.300 +300.300 +301 +0.301 +1.301 +301.301 +302 +0.302 +1.302 +302.302 +303 +0.303 +1.303 +303.303 +304 +0.304 +1.304 +304.304 +305 +0.305 +1.305 +305.305 +310 +0.310 +1.310 +310.310 +311 +0.311 +1.311 +311.311 +312 +0.312 +1.312 +312.312 +313 +0.313 +1.313 +313.313 +314 +0.314 +1.314 +314.314 +315 +0.315 +1.315 +315.315 +320 +0.320 +1.320 +320.320 +321 +0.321 +1.321 +321.321 +322 +0.322 +1.322 +322.322 +323 +0.323 +1.323 +323.323 +324 +0.324 +1.324 +324.324 +325 +0.325 +1.325 +325.325 +330 +0.330 +1.330 +330.330 +331 +0.331 +1.331 +331.331 +332 +0.332 +1.332 +332.332 +333 +0.333 +1.333 +333.333 +334 +0.334 +1.334 +334.334 +335 +0.335 +1.335 +335.335 +340 +0.340 +1.340 +340.340 +341 +0.341 +1.341 +341.341 +342 +0.342 +1.342 +342.342 +343 +0.343 +1.343 +343.343 +344 +0.344 +1.344 +344.344 +345 +0.345 +1.345 +345.345 +350 +0.350 +1.350 +350.350 +351 +0.351 +1.351 +351.351 +352 +0.352 +1.352 +352.352 +353 +0.353 +1.353 +353.353 +354 +0.354 +1.354 +354.354 +355 +0.355 +1.355 +355.355 +400 +0.400 +1.400 +400.400 +401 +0.401 +1.401 +401.401 +402 +0.402 +1.402 +402.402 +403 +0.403 +1.403 +403.403 +404 +0.404 +1.404 +404.404 +405 +0.405 +1.405 +405.405 +410 +0.410 +1.410 +410.410 +411 +0.411 +1.411 +411.411 +412 +0.412 +1.412 +412.412 +413 +0.413 +1.413 +413.413 +414 +0.414 +1.414 +414.414 +415 +0.415 +1.415 +415.415 +420 +0.420 +1.420 +420.420 +421 +0.421 +1.421 +421.421 +422 +0.422 +1.422 +422.422 +423 +0.423 +1.423 +423.423 +424 +0.424 +1.424 +424.424 +425 +0.425 +1.425 +425.425 +430 +0.430 +1.430 +430.430 +431 +0.431 +1.431 +431.431 +432 +0.432 +1.432 +432.432 +433 +0.433 +1.433 +433.433 +434 +0.434 +1.434 +434.434 +435 +0.435 +1.435 +435.435 +440 +0.440 +1.440 +440.440 +441 +0.441 +1.441 +441.441 +442 +0.442 +1.442 +442.442 +443 +0.443 +1.443 +443.443 +444 +0.444 +1.444 +444.444 +445 +0.445 +1.445 +445.445 +450 +0.450 +1.450 +450.450 +451 +0.451 +1.451 +451.451 +452 +0.452 +1.452 +452.452 +453 +0.453 +1.453 +453.453 +454 +0.454 +1.454 +454.454 +455 +0.455 +1.455 +455.455 +500 +0.500 +1.500 +500.500 +501 +0.501 +1.501 +501.501 +502 +0.502 +1.502 +502.502 +503 +0.503 +1.503 +503.503 +504 +0.504 +1.504 +504.504 +505 +0.505 +1.505 +505.505 +510 +0.510 +1.510 +510.510 +511 +0.511 +1.511 +511.511 +512 +0.512 +1.512 +512.512 +513 +0.513 +1.513 +513.513 +514 +0.514 +1.514 +514.514 +515 +0.515 +1.515 +515.515 +520 +0.520 +1.520 +520.520 +521 +0.521 +1.521 +521.521 +522 +0.522 +1.522 +522.522 +523 +0.523 +1.523 +523.523 +524 +0.524 +1.524 +524.524 +525 +0.525 +1.525 +525.525 +530 +0.530 +1.530 +530.530 +531 +0.531 +1.531 +531.531 +532 +0.532 +1.532 +532.532 +533 +0.533 +1.533 +533.533 +534 +0.534 +1.534 +534.534 +535 +0.535 +1.535 +535.535 +540 +0.540 +1.540 +540.540 +541 +0.541 +1.541 +541.541 +542 +0.542 +1.542 +542.542 +543 +0.543 +1.543 +543.543 +544 +0.544 +1.544 +544.544 +545 +0.545 +1.545 +545.545 +550 +0.550 +1.550 +550.550 +551 +0.551 +1.551 +551.551 +552 +0.552 +1.552 +552.552 +553 +0.553 +1.553 +553.553 +554 +0.554 +1.554 +554.554 +555 +0.555 +1.555 +555.555 +1000 +0.1000 +1.1000 +1000.1000 +1001 +0.1001 +1.1001 +1001.1001 +1002 +0.1002 +1.1002 +1002.1002 +1003 +0.1003 +1.1003 +1003.1003 +1004 +0.1004 +1.1004 +1004.1004 +1005 +0.1005 +1.1005 +1005.1005 +1010 +0.1010 +1.1010 +1010.1010 +1011 +0.1011 +1.1011 +1011.1011 +1012 +0.1012 +1.1012 +1012.1012 +1013 +0.1013 +1.1013 +1013.1013 +1014 +0.1014 +1.1014 +1014.1014 +1015 +0.1015 +1.1015 +1015.1015 +1020 +0.1020 +1.1020 +1020.1020 +1021 +0.1021 +1.1021 +1021.1021 +1022 +0.1022 +1.1022 +1022.1022 +1023 +0.1023 +1.1023 +1023.1023 +1024 +0.1024 +1.1024 +1024.1024 +1025 +0.1025 +1.1025 +1025.1025 +1030 +0.1030 +1.1030 +1030.1030 +1031 +0.1031 +1.1031 +1031.1031 +1032 +0.1032 +1.1032 +1032.1032 +1033 +0.1033 +1.1033 +1033.1033 +1034 +0.1034 +1.1034 +1034.1034 +1035 +0.1035 +1.1035 +1035.1035 +1040 +0.1040 +1.1040 +1040.1040 +1041 +0.1041 +1.1041 +1041.1041 +1042 +0.1042 +1.1042 +1042.1042 +1043 +0.1043 +1.1043 +1043.1043 +1044 +0.1044 +1.1044 +1044.1044 +1045 +0.1045 +1.1045 +1045.1045 +1050 +0.1050 +1.1050 +1050.1050 +1051 +0.1051 +1.1051 +1051.1051 +1052 +0.1052 +1.1052 +1052.1052 +1053 +0.1053 +1.1053 +1053.1053 +1054 +0.1054 +1.1054 +1054.1054 +1055 +0.1055 +1.1055 +1055.1055 +1100 +0.1100 +1.1100 +1100.1100 +1101 +0.1101 +1.1101 +1101.1101 +1102 +0.1102 +1.1102 +1102.1102 +1103 +0.1103 +1.1103 +1103.1103 +1104 +0.1104 +1.1104 +1104.1104 +ibase = A; ibase = 7 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +56 +0.56 +1.56 +56.56 +60 +0.60 +1.60 +60.60 +61 +0.61 +1.61 +61.61 +62 +0.62 +1.62 +62.62 +63 +0.63 +1.63 +63.63 +64 +0.64 +1.64 +64.64 +65 +0.65 +1.65 +65.65 +66 +0.66 +1.66 +66.66 +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +103 +0.103 +1.103 +103.103 +104 +0.104 +1.104 +104.104 +105 +0.105 +1.105 +105.105 +106 +0.106 +1.106 +106.106 +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +113 +0.113 +1.113 +113.113 +114 +0.114 +1.114 +114.114 +115 +0.115 +1.115 +115.115 +116 +0.116 +1.116 +116.116 +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +122 +0.122 +1.122 +122.122 +123 +0.123 +1.123 +123.123 +124 +0.124 +1.124 +124.124 +125 +0.125 +1.125 +125.125 +126 +0.126 +1.126 +126.126 +130 +0.130 +1.130 +130.130 +131 +0.131 +1.131 +131.131 +132 +0.132 +1.132 +132.132 +133 +0.133 +1.133 +133.133 +134 +0.134 +1.134 +134.134 +135 +0.135 +1.135 +135.135 +136 +0.136 +1.136 +136.136 +140 +0.140 +1.140 +140.140 +141 +0.141 +1.141 +141.141 +142 +0.142 +1.142 +142.142 +143 +0.143 +1.143 +143.143 +144 +0.144 +1.144 +144.144 +145 +0.145 +1.145 +145.145 +146 +0.146 +1.146 +146.146 +150 +0.150 +1.150 +150.150 +151 +0.151 +1.151 +151.151 +152 +0.152 +1.152 +152.152 +153 +0.153 +1.153 +153.153 +154 +0.154 +1.154 +154.154 +155 +0.155 +1.155 +155.155 +156 +0.156 +1.156 +156.156 +160 +0.160 +1.160 +160.160 +161 +0.161 +1.161 +161.161 +162 +0.162 +1.162 +162.162 +163 +0.163 +1.163 +163.163 +164 +0.164 +1.164 +164.164 +165 +0.165 +1.165 +165.165 +166 +0.166 +1.166 +166.166 +200 +0.200 +1.200 +200.200 +201 +0.201 +1.201 +201.201 +202 +0.202 +1.202 +202.202 +203 +0.203 +1.203 +203.203 +204 +0.204 +1.204 +204.204 +205 +0.205 +1.205 +205.205 +206 +0.206 +1.206 +206.206 +210 +0.210 +1.210 +210.210 +211 +0.211 +1.211 +211.211 +212 +0.212 +1.212 +212.212 +213 +0.213 +1.213 +213.213 +214 +0.214 +1.214 +214.214 +215 +0.215 +1.215 +215.215 +216 +0.216 +1.216 +216.216 +220 +0.220 +1.220 +220.220 +221 +0.221 +1.221 +221.221 +222 +0.222 +1.222 +222.222 +223 +0.223 +1.223 +223.223 +224 +0.224 +1.224 +224.224 +225 +0.225 +1.225 +225.225 +226 +0.226 +1.226 +226.226 +230 +0.230 +1.230 +230.230 +231 +0.231 +1.231 +231.231 +232 +0.232 +1.232 +232.232 +233 +0.233 +1.233 +233.233 +234 +0.234 +1.234 +234.234 +235 +0.235 +1.235 +235.235 +236 +0.236 +1.236 +236.236 +240 +0.240 +1.240 +240.240 +241 +0.241 +1.241 +241.241 +242 +0.242 +1.242 +242.242 +243 +0.243 +1.243 +243.243 +244 +0.244 +1.244 +244.244 +245 +0.245 +1.245 +245.245 +246 +0.246 +1.246 +246.246 +250 +0.250 +1.250 +250.250 +251 +0.251 +1.251 +251.251 +252 +0.252 +1.252 +252.252 +253 +0.253 +1.253 +253.253 +254 +0.254 +1.254 +254.254 +255 +0.255 +1.255 +255.255 +256 +0.256 +1.256 +256.256 +260 +0.260 +1.260 +260.260 +261 +0.261 +1.261 +261.261 +262 +0.262 +1.262 +262.262 +263 +0.263 +1.263 +263.263 +264 +0.264 +1.264 +264.264 +265 +0.265 +1.265 +265.265 +266 +0.266 +1.266 +266.266 +300 +0.300 +1.300 +300.300 +301 +0.301 +1.301 +301.301 +302 +0.302 +1.302 +302.302 +303 +0.303 +1.303 +303.303 +304 +0.304 +1.304 +304.304 +305 +0.305 +1.305 +305.305 +306 +0.306 +1.306 +306.306 +310 +0.310 +1.310 +310.310 +311 +0.311 +1.311 +311.311 +312 +0.312 +1.312 +312.312 +313 +0.313 +1.313 +313.313 +314 +0.314 +1.314 +314.314 +315 +0.315 +1.315 +315.315 +316 +0.316 +1.316 +316.316 +320 +0.320 +1.320 +320.320 +321 +0.321 +1.321 +321.321 +322 +0.322 +1.322 +322.322 +323 +0.323 +1.323 +323.323 +324 +0.324 +1.324 +324.324 +325 +0.325 +1.325 +325.325 +326 +0.326 +1.326 +326.326 +330 +0.330 +1.330 +330.330 +331 +0.331 +1.331 +331.331 +332 +0.332 +1.332 +332.332 +333 +0.333 +1.333 +333.333 +334 +0.334 +1.334 +334.334 +335 +0.335 +1.335 +335.335 +336 +0.336 +1.336 +336.336 +340 +0.340 +1.340 +340.340 +341 +0.341 +1.341 +341.341 +342 +0.342 +1.342 +342.342 +343 +0.343 +1.343 +343.343 +344 +0.344 +1.344 +344.344 +345 +0.345 +1.345 +345.345 +346 +0.346 +1.346 +346.346 +350 +0.350 +1.350 +350.350 +351 +0.351 +1.351 +351.351 +352 +0.352 +1.352 +352.352 +353 +0.353 +1.353 +353.353 +354 +0.354 +1.354 +354.354 +355 +0.355 +1.355 +355.355 +356 +0.356 +1.356 +356.356 +360 +0.360 +1.360 +360.360 +361 +0.361 +1.361 +361.361 +362 +0.362 +1.362 +362.362 +363 +0.363 +1.363 +363.363 +364 +0.364 +1.364 +364.364 +365 +0.365 +1.365 +365.365 +366 +0.366 +1.366 +366.366 +400 +0.400 +1.400 +400.400 +401 +0.401 +1.401 +401.401 +402 +0.402 +1.402 +402.402 +403 +0.403 +1.403 +403.403 +404 +0.404 +1.404 +404.404 +405 +0.405 +1.405 +405.405 +406 +0.406 +1.406 +406.406 +410 +0.410 +1.410 +410.410 +411 +0.411 +1.411 +411.411 +412 +0.412 +1.412 +412.412 +413 +0.413 +1.413 +413.413 +414 +0.414 +1.414 +414.414 +415 +0.415 +1.415 +415.415 +416 +0.416 +1.416 +416.416 +420 +0.420 +1.420 +420.420 +421 +0.421 +1.421 +421.421 +422 +0.422 +1.422 +422.422 +423 +0.423 +1.423 +423.423 +424 +0.424 +1.424 +424.424 +425 +0.425 +1.425 +425.425 +426 +0.426 +1.426 +426.426 +430 +0.430 +1.430 +430.430 +431 +0.431 +1.431 +431.431 +432 +0.432 +1.432 +432.432 +433 +0.433 +1.433 +433.433 +434 +0.434 +1.434 +434.434 +435 +0.435 +1.435 +435.435 +436 +0.436 +1.436 +436.436 +440 +0.440 +1.440 +440.440 +441 +0.441 +1.441 +441.441 +442 +0.442 +1.442 +442.442 +443 +0.443 +1.443 +443.443 +444 +0.444 +1.444 +444.444 +445 +0.445 +1.445 +445.445 +446 +0.446 +1.446 +446.446 +450 +0.450 +1.450 +450.450 +451 +0.451 +1.451 +451.451 +452 +0.452 +1.452 +452.452 +453 +0.453 +1.453 +453.453 +454 +0.454 +1.454 +454.454 +455 +0.455 +1.455 +455.455 +456 +0.456 +1.456 +456.456 +460 +0.460 +1.460 +460.460 +461 +0.461 +1.461 +461.461 +462 +0.462 +1.462 +462.462 +463 +0.463 +1.463 +463.463 +464 +0.464 +1.464 +464.464 +465 +0.465 +1.465 +465.465 +466 +0.466 +1.466 +466.466 +500 +0.500 +1.500 +500.500 +501 +0.501 +1.501 +501.501 +502 +0.502 +1.502 +502.502 +503 +0.503 +1.503 +503.503 +504 +0.504 +1.504 +504.504 +505 +0.505 +1.505 +505.505 +506 +0.506 +1.506 +506.506 +510 +0.510 +1.510 +510.510 +511 +0.511 +1.511 +511.511 +512 +0.512 +1.512 +512.512 +513 +0.513 +1.513 +513.513 +514 +0.514 +1.514 +514.514 +ibase = A; ibase = 8 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +37 +0.37 +1.37 +37.37 +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +47 +0.47 +1.47 +47.47 +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +56 +0.56 +1.56 +56.56 +57 +0.57 +1.57 +57.57 +60 +0.60 +1.60 +60.60 +61 +0.61 +1.61 +61.61 +62 +0.62 +1.62 +62.62 +63 +0.63 +1.63 +63.63 +64 +0.64 +1.64 +64.64 +65 +0.65 +1.65 +65.65 +66 +0.66 +1.66 +66.66 +67 +0.67 +1.67 +67.67 +70 +0.70 +1.70 +70.70 +71 +0.71 +1.71 +71.71 +72 +0.72 +1.72 +72.72 +73 +0.73 +1.73 +73.73 +74 +0.74 +1.74 +74.74 +75 +0.75 +1.75 +75.75 +76 +0.76 +1.76 +76.76 +77 +0.77 +1.77 +77.77 +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +103 +0.103 +1.103 +103.103 +104 +0.104 +1.104 +104.104 +105 +0.105 +1.105 +105.105 +106 +0.106 +1.106 +106.106 +107 +0.107 +1.107 +107.107 +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +113 +0.113 +1.113 +113.113 +114 +0.114 +1.114 +114.114 +115 +0.115 +1.115 +115.115 +116 +0.116 +1.116 +116.116 +117 +0.117 +1.117 +117.117 +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +122 +0.122 +1.122 +122.122 +123 +0.123 +1.123 +123.123 +124 +0.124 +1.124 +124.124 +125 +0.125 +1.125 +125.125 +126 +0.126 +1.126 +126.126 +127 +0.127 +1.127 +127.127 +130 +0.130 +1.130 +130.130 +131 +0.131 +1.131 +131.131 +132 +0.132 +1.132 +132.132 +133 +0.133 +1.133 +133.133 +134 +0.134 +1.134 +134.134 +135 +0.135 +1.135 +135.135 +136 +0.136 +1.136 +136.136 +137 +0.137 +1.137 +137.137 +140 +0.140 +1.140 +140.140 +141 +0.141 +1.141 +141.141 +142 +0.142 +1.142 +142.142 +143 +0.143 +1.143 +143.143 +144 +0.144 +1.144 +144.144 +145 +0.145 +1.145 +145.145 +146 +0.146 +1.146 +146.146 +147 +0.147 +1.147 +147.147 +150 +0.150 +1.150 +150.150 +151 +0.151 +1.151 +151.151 +152 +0.152 +1.152 +152.152 +153 +0.153 +1.153 +153.153 +154 +0.154 +1.154 +154.154 +155 +0.155 +1.155 +155.155 +156 +0.156 +1.156 +156.156 +157 +0.157 +1.157 +157.157 +160 +0.160 +1.160 +160.160 +161 +0.161 +1.161 +161.161 +162 +0.162 +1.162 +162.162 +163 +0.163 +1.163 +163.163 +164 +0.164 +1.164 +164.164 +165 +0.165 +1.165 +165.165 +166 +0.166 +1.166 +166.166 +167 +0.167 +1.167 +167.167 +170 +0.170 +1.170 +170.170 +171 +0.171 +1.171 +171.171 +172 +0.172 +1.172 +172.172 +173 +0.173 +1.173 +173.173 +174 +0.174 +1.174 +174.174 +175 +0.175 +1.175 +175.175 +176 +0.176 +1.176 +176.176 +177 +0.177 +1.177 +177.177 +200 +0.200 +1.200 +200.200 +201 +0.201 +1.201 +201.201 +202 +0.202 +1.202 +202.202 +203 +0.203 +1.203 +203.203 +204 +0.204 +1.204 +204.204 +205 +0.205 +1.205 +205.205 +206 +0.206 +1.206 +206.206 +207 +0.207 +1.207 +207.207 +210 +0.210 +1.210 +210.210 +211 +0.211 +1.211 +211.211 +212 +0.212 +1.212 +212.212 +213 +0.213 +1.213 +213.213 +214 +0.214 +1.214 +214.214 +215 +0.215 +1.215 +215.215 +216 +0.216 +1.216 +216.216 +217 +0.217 +1.217 +217.217 +220 +0.220 +1.220 +220.220 +221 +0.221 +1.221 +221.221 +222 +0.222 +1.222 +222.222 +223 +0.223 +1.223 +223.223 +224 +0.224 +1.224 +224.224 +225 +0.225 +1.225 +225.225 +226 +0.226 +1.226 +226.226 +227 +0.227 +1.227 +227.227 +230 +0.230 +1.230 +230.230 +231 +0.231 +1.231 +231.231 +232 +0.232 +1.232 +232.232 +233 +0.233 +1.233 +233.233 +234 +0.234 +1.234 +234.234 +235 +0.235 +1.235 +235.235 +236 +0.236 +1.236 +236.236 +237 +0.237 +1.237 +237.237 +240 +0.240 +1.240 +240.240 +241 +0.241 +1.241 +241.241 +242 +0.242 +1.242 +242.242 +243 +0.243 +1.243 +243.243 +244 +0.244 +1.244 +244.244 +245 +0.245 +1.245 +245.245 +246 +0.246 +1.246 +246.246 +247 +0.247 +1.247 +247.247 +250 +0.250 +1.250 +250.250 +251 +0.251 +1.251 +251.251 +252 +0.252 +1.252 +252.252 +253 +0.253 +1.253 +253.253 +254 +0.254 +1.254 +254.254 +255 +0.255 +1.255 +255.255 +256 +0.256 +1.256 +256.256 +257 +0.257 +1.257 +257.257 +260 +0.260 +1.260 +260.260 +261 +0.261 +1.261 +261.261 +262 +0.262 +1.262 +262.262 +263 +0.263 +1.263 +263.263 +264 +0.264 +1.264 +264.264 +265 +0.265 +1.265 +265.265 +266 +0.266 +1.266 +266.266 +267 +0.267 +1.267 +267.267 +270 +0.270 +1.270 +270.270 +271 +0.271 +1.271 +271.271 +272 +0.272 +1.272 +272.272 +273 +0.273 +1.273 +273.273 +274 +0.274 +1.274 +274.274 +275 +0.275 +1.275 +275.275 +276 +0.276 +1.276 +276.276 +277 +0.277 +1.277 +277.277 +300 +0.300 +1.300 +300.300 +301 +0.301 +1.301 +301.301 +302 +0.302 +1.302 +302.302 +303 +0.303 +1.303 +303.303 +304 +0.304 +1.304 +304.304 +305 +0.305 +1.305 +305.305 +306 +0.306 +1.306 +306.306 +307 +0.307 +1.307 +307.307 +310 +0.310 +1.310 +310.310 +311 +0.311 +1.311 +311.311 +312 +0.312 +1.312 +312.312 +313 +0.313 +1.313 +313.313 +314 +0.314 +1.314 +314.314 +315 +0.315 +1.315 +315.315 +316 +0.316 +1.316 +316.316 +317 +0.317 +1.317 +317.317 +320 +0.320 +1.320 +320.320 +321 +0.321 +1.321 +321.321 +322 +0.322 +1.322 +322.322 +323 +0.323 +1.323 +323.323 +324 +0.324 +1.324 +324.324 +325 +0.325 +1.325 +325.325 +326 +0.326 +1.326 +326.326 +327 +0.327 +1.327 +327.327 +330 +0.330 +1.330 +330.330 +331 +0.331 +1.331 +331.331 +332 +0.332 +1.332 +332.332 +333 +0.333 +1.333 +333.333 +334 +0.334 +1.334 +334.334 +335 +0.335 +1.335 +335.335 +336 +0.336 +1.336 +336.336 +337 +0.337 +1.337 +337.337 +340 +0.340 +1.340 +340.340 +341 +0.341 +1.341 +341.341 +342 +0.342 +1.342 +342.342 +343 +0.343 +1.343 +343.343 +344 +0.344 +1.344 +344.344 +345 +0.345 +1.345 +345.345 +346 +0.346 +1.346 +346.346 +347 +0.347 +1.347 +347.347 +350 +0.350 +1.350 +350.350 +351 +0.351 +1.351 +351.351 +352 +0.352 +1.352 +352.352 +353 +0.353 +1.353 +353.353 +354 +0.354 +1.354 +354.354 +355 +0.355 +1.355 +355.355 +356 +0.356 +1.356 +356.356 +357 +0.357 +1.357 +357.357 +360 +0.360 +1.360 +360.360 +361 +0.361 +1.361 +361.361 +362 +0.362 +1.362 +362.362 +363 +0.363 +1.363 +363.363 +364 +0.364 +1.364 +364.364 +365 +0.365 +1.365 +365.365 +366 +0.366 +1.366 +366.366 +367 +0.367 +1.367 +367.367 +370 +0.370 +1.370 +370.370 +371 +0.371 +1.371 +371.371 +372 +0.372 +1.372 +372.372 +373 +0.373 +1.373 +373.373 +374 +0.374 +1.374 +374.374 +375 +0.375 +1.375 +375.375 +376 +0.376 +1.376 +376.376 +377 +0.377 +1.377 +377.377 +400 +0.400 +1.400 +400.400 +ibase = A; ibase = 9 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +28 +0.28 +1.28 +28.28 +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +37 +0.37 +1.37 +37.37 +38 +0.38 +1.38 +38.38 +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +47 +0.47 +1.47 +47.47 +48 +0.48 +1.48 +48.48 +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +56 +0.56 +1.56 +56.56 +57 +0.57 +1.57 +57.57 +58 +0.58 +1.58 +58.58 +60 +0.60 +1.60 +60.60 +61 +0.61 +1.61 +61.61 +62 +0.62 +1.62 +62.62 +63 +0.63 +1.63 +63.63 +64 +0.64 +1.64 +64.64 +65 +0.65 +1.65 +65.65 +66 +0.66 +1.66 +66.66 +67 +0.67 +1.67 +67.67 +68 +0.68 +1.68 +68.68 +70 +0.70 +1.70 +70.70 +71 +0.71 +1.71 +71.71 +72 +0.72 +1.72 +72.72 +73 +0.73 +1.73 +73.73 +74 +0.74 +1.74 +74.74 +75 +0.75 +1.75 +75.75 +76 +0.76 +1.76 +76.76 +77 +0.77 +1.77 +77.77 +78 +0.78 +1.78 +78.78 +80 +0.80 +1.80 +80.80 +81 +0.81 +1.81 +81.81 +82 +0.82 +1.82 +82.82 +83 +0.83 +1.83 +83.83 +84 +0.84 +1.84 +84.84 +85 +0.85 +1.85 +85.85 +86 +0.86 +1.86 +86.86 +87 +0.87 +1.87 +87.87 +88 +0.88 +1.88 +88.88 +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +103 +0.103 +1.103 +103.103 +104 +0.104 +1.104 +104.104 +105 +0.105 +1.105 +105.105 +106 +0.106 +1.106 +106.106 +107 +0.107 +1.107 +107.107 +108 +0.108 +1.108 +108.108 +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +113 +0.113 +1.113 +113.113 +114 +0.114 +1.114 +114.114 +115 +0.115 +1.115 +115.115 +116 +0.116 +1.116 +116.116 +117 +0.117 +1.117 +117.117 +118 +0.118 +1.118 +118.118 +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +122 +0.122 +1.122 +122.122 +123 +0.123 +1.123 +123.123 +124 +0.124 +1.124 +124.124 +125 +0.125 +1.125 +125.125 +126 +0.126 +1.126 +126.126 +127 +0.127 +1.127 +127.127 +128 +0.128 +1.128 +128.128 +130 +0.130 +1.130 +130.130 +131 +0.131 +1.131 +131.131 +132 +0.132 +1.132 +132.132 +133 +0.133 +1.133 +133.133 +134 +0.134 +1.134 +134.134 +135 +0.135 +1.135 +135.135 +136 +0.136 +1.136 +136.136 +137 +0.137 +1.137 +137.137 +138 +0.138 +1.138 +138.138 +140 +0.140 +1.140 +140.140 +141 +0.141 +1.141 +141.141 +142 +0.142 +1.142 +142.142 +143 +0.143 +1.143 +143.143 +144 +0.144 +1.144 +144.144 +145 +0.145 +1.145 +145.145 +146 +0.146 +1.146 +146.146 +147 +0.147 +1.147 +147.147 +148 +0.148 +1.148 +148.148 +150 +0.150 +1.150 +150.150 +151 +0.151 +1.151 +151.151 +152 +0.152 +1.152 +152.152 +153 +0.153 +1.153 +153.153 +154 +0.154 +1.154 +154.154 +155 +0.155 +1.155 +155.155 +156 +0.156 +1.156 +156.156 +157 +0.157 +1.157 +157.157 +158 +0.158 +1.158 +158.158 +160 +0.160 +1.160 +160.160 +161 +0.161 +1.161 +161.161 +162 +0.162 +1.162 +162.162 +163 +0.163 +1.163 +163.163 +164 +0.164 +1.164 +164.164 +165 +0.165 +1.165 +165.165 +166 +0.166 +1.166 +166.166 +167 +0.167 +1.167 +167.167 +168 +0.168 +1.168 +168.168 +170 +0.170 +1.170 +170.170 +171 +0.171 +1.171 +171.171 +172 +0.172 +1.172 +172.172 +173 +0.173 +1.173 +173.173 +174 +0.174 +1.174 +174.174 +175 +0.175 +1.175 +175.175 +176 +0.176 +1.176 +176.176 +177 +0.177 +1.177 +177.177 +178 +0.178 +1.178 +178.178 +180 +0.180 +1.180 +180.180 +181 +0.181 +1.181 +181.181 +182 +0.182 +1.182 +182.182 +183 +0.183 +1.183 +183.183 +184 +0.184 +1.184 +184.184 +185 +0.185 +1.185 +185.185 +186 +0.186 +1.186 +186.186 +187 +0.187 +1.187 +187.187 +188 +0.188 +1.188 +188.188 +200 +0.200 +1.200 +200.200 +201 +0.201 +1.201 +201.201 +202 +0.202 +1.202 +202.202 +203 +0.203 +1.203 +203.203 +204 +0.204 +1.204 +204.204 +205 +0.205 +1.205 +205.205 +206 +0.206 +1.206 +206.206 +207 +0.207 +1.207 +207.207 +208 +0.208 +1.208 +208.208 +210 +0.210 +1.210 +210.210 +211 +0.211 +1.211 +211.211 +212 +0.212 +1.212 +212.212 +213 +0.213 +1.213 +213.213 +214 +0.214 +1.214 +214.214 +215 +0.215 +1.215 +215.215 +216 +0.216 +1.216 +216.216 +217 +0.217 +1.217 +217.217 +218 +0.218 +1.218 +218.218 +220 +0.220 +1.220 +220.220 +221 +0.221 +1.221 +221.221 +222 +0.222 +1.222 +222.222 +223 +0.223 +1.223 +223.223 +224 +0.224 +1.224 +224.224 +225 +0.225 +1.225 +225.225 +226 +0.226 +1.226 +226.226 +227 +0.227 +1.227 +227.227 +228 +0.228 +1.228 +228.228 +230 +0.230 +1.230 +230.230 +231 +0.231 +1.231 +231.231 +232 +0.232 +1.232 +232.232 +233 +0.233 +1.233 +233.233 +234 +0.234 +1.234 +234.234 +235 +0.235 +1.235 +235.235 +236 +0.236 +1.236 +236.236 +237 +0.237 +1.237 +237.237 +238 +0.238 +1.238 +238.238 +240 +0.240 +1.240 +240.240 +241 +0.241 +1.241 +241.241 +242 +0.242 +1.242 +242.242 +243 +0.243 +1.243 +243.243 +244 +0.244 +1.244 +244.244 +245 +0.245 +1.245 +245.245 +246 +0.246 +1.246 +246.246 +247 +0.247 +1.247 +247.247 +248 +0.248 +1.248 +248.248 +250 +0.250 +1.250 +250.250 +251 +0.251 +1.251 +251.251 +252 +0.252 +1.252 +252.252 +253 +0.253 +1.253 +253.253 +254 +0.254 +1.254 +254.254 +255 +0.255 +1.255 +255.255 +256 +0.256 +1.256 +256.256 +257 +0.257 +1.257 +257.257 +258 +0.258 +1.258 +258.258 +260 +0.260 +1.260 +260.260 +261 +0.261 +1.261 +261.261 +262 +0.262 +1.262 +262.262 +263 +0.263 +1.263 +263.263 +264 +0.264 +1.264 +264.264 +265 +0.265 +1.265 +265.265 +266 +0.266 +1.266 +266.266 +267 +0.267 +1.267 +267.267 +268 +0.268 +1.268 +268.268 +270 +0.270 +1.270 +270.270 +271 +0.271 +1.271 +271.271 +272 +0.272 +1.272 +272.272 +273 +0.273 +1.273 +273.273 +274 +0.274 +1.274 +274.274 +275 +0.275 +1.275 +275.275 +276 +0.276 +1.276 +276.276 +277 +0.277 +1.277 +277.277 +278 +0.278 +1.278 +278.278 +280 +0.280 +1.280 +280.280 +281 +0.281 +1.281 +281.281 +282 +0.282 +1.282 +282.282 +283 +0.283 +1.283 +283.283 +284 +0.284 +1.284 +284.284 +285 +0.285 +1.285 +285.285 +286 +0.286 +1.286 +286.286 +287 +0.287 +1.287 +287.287 +288 +0.288 +1.288 +288.288 +300 +0.300 +1.300 +300.300 +301 +0.301 +1.301 +301.301 +302 +0.302 +1.302 +302.302 +303 +0.303 +1.303 +303.303 +304 +0.304 +1.304 +304.304 +305 +0.305 +1.305 +305.305 +306 +0.306 +1.306 +306.306 +307 +0.307 +1.307 +307.307 +308 +0.308 +1.308 +308.308 +310 +0.310 +1.310 +310.310 +311 +0.311 +1.311 +311.311 +312 +0.312 +1.312 +312.312 +313 +0.313 +1.313 +313.313 +314 +0.314 +1.314 +314.314 +ibase = A; ibase = 11 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +A +0.A +1.A +A.A +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +19 +0.19 +1.19 +19.19 +1A +0.1A +1.1A +1A.1A +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +28 +0.28 +1.28 +28.28 +29 +0.29 +1.29 +29.29 +2A +0.2A +1.2A +2A.2A +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +37 +0.37 +1.37 +37.37 +38 +0.38 +1.38 +38.38 +39 +0.39 +1.39 +39.39 +3A +0.3A +1.3A +3A.3A +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +47 +0.47 +1.47 +47.47 +48 +0.48 +1.48 +48.48 +49 +0.49 +1.49 +49.49 +4A +0.4A +1.4A +4A.4A +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +56 +0.56 +1.56 +56.56 +57 +0.57 +1.57 +57.57 +58 +0.58 +1.58 +58.58 +59 +0.59 +1.59 +59.59 +5A +0.5A +1.5A +5A.5A +60 +0.60 +1.60 +60.60 +61 +0.61 +1.61 +61.61 +62 +0.62 +1.62 +62.62 +63 +0.63 +1.63 +63.63 +64 +0.64 +1.64 +64.64 +65 +0.65 +1.65 +65.65 +66 +0.66 +1.66 +66.66 +67 +0.67 +1.67 +67.67 +68 +0.68 +1.68 +68.68 +69 +0.69 +1.69 +69.69 +6A +0.6A +1.6A +6A.6A +70 +0.70 +1.70 +70.70 +71 +0.71 +1.71 +71.71 +72 +0.72 +1.72 +72.72 +73 +0.73 +1.73 +73.73 +74 +0.74 +1.74 +74.74 +75 +0.75 +1.75 +75.75 +76 +0.76 +1.76 +76.76 +77 +0.77 +1.77 +77.77 +78 +0.78 +1.78 +78.78 +79 +0.79 +1.79 +79.79 +7A +0.7A +1.7A +7A.7A +80 +0.80 +1.80 +80.80 +81 +0.81 +1.81 +81.81 +82 +0.82 +1.82 +82.82 +83 +0.83 +1.83 +83.83 +84 +0.84 +1.84 +84.84 +85 +0.85 +1.85 +85.85 +86 +0.86 +1.86 +86.86 +87 +0.87 +1.87 +87.87 +88 +0.88 +1.88 +88.88 +89 +0.89 +1.89 +89.89 +8A +0.8A +1.8A +8A.8A +90 +0.90 +1.90 +90.90 +91 +0.91 +1.91 +91.91 +92 +0.92 +1.92 +92.92 +93 +0.93 +1.93 +93.93 +94 +0.94 +1.94 +94.94 +95 +0.95 +1.95 +95.95 +96 +0.96 +1.96 +96.96 +97 +0.97 +1.97 +97.97 +98 +0.98 +1.98 +98.98 +99 +0.99 +1.99 +99.99 +9A +0.9A +1.9A +9A.9A +A0 +0.A0 +1.A0 +A0.A0 +A1 +0.A1 +1.A1 +A1.A1 +A2 +0.A2 +1.A2 +A2.A2 +A3 +0.A3 +1.A3 +A3.A3 +A4 +0.A4 +1.A4 +A4.A4 +A5 +0.A5 +1.A5 +A5.A5 +A6 +0.A6 +1.A6 +A6.A6 +A7 +0.A7 +1.A7 +A7.A7 +A8 +0.A8 +1.A8 +A8.A8 +A9 +0.A9 +1.A9 +A9.A9 +AA +0.AA +1.AA +AA.AA +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +103 +0.103 +1.103 +103.103 +104 +0.104 +1.104 +104.104 +105 +0.105 +1.105 +105.105 +106 +0.106 +1.106 +106.106 +107 +0.107 +1.107 +107.107 +108 +0.108 +1.108 +108.108 +109 +0.109 +1.109 +109.109 +10A +0.10A +1.10A +10A.10A +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +113 +0.113 +1.113 +113.113 +114 +0.114 +1.114 +114.114 +115 +0.115 +1.115 +115.115 +116 +0.116 +1.116 +116.116 +117 +0.117 +1.117 +117.117 +118 +0.118 +1.118 +118.118 +119 +0.119 +1.119 +119.119 +11A +0.11A +1.11A +11A.11A +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +122 +0.122 +1.122 +122.122 +123 +0.123 +1.123 +123.123 +124 +0.124 +1.124 +124.124 +125 +0.125 +1.125 +125.125 +126 +0.126 +1.126 +126.126 +127 +0.127 +1.127 +127.127 +128 +0.128 +1.128 +128.128 +129 +0.129 +1.129 +129.129 +12A +0.12A +1.12A +12A.12A +130 +0.130 +1.130 +130.130 +131 +0.131 +1.131 +131.131 +132 +0.132 +1.132 +132.132 +133 +0.133 +1.133 +133.133 +134 +0.134 +1.134 +134.134 +135 +0.135 +1.135 +135.135 +136 +0.136 +1.136 +136.136 +137 +0.137 +1.137 +137.137 +138 +0.138 +1.138 +138.138 +139 +0.139 +1.139 +139.139 +13A +0.13A +1.13A +13A.13A +140 +0.140 +1.140 +140.140 +141 +0.141 +1.141 +141.141 +142 +0.142 +1.142 +142.142 +143 +0.143 +1.143 +143.143 +144 +0.144 +1.144 +144.144 +145 +0.145 +1.145 +145.145 +146 +0.146 +1.146 +146.146 +147 +0.147 +1.147 +147.147 +148 +0.148 +1.148 +148.148 +149 +0.149 +1.149 +149.149 +14A +0.14A +1.14A +14A.14A +150 +0.150 +1.150 +150.150 +151 +0.151 +1.151 +151.151 +152 +0.152 +1.152 +152.152 +153 +0.153 +1.153 +153.153 +154 +0.154 +1.154 +154.154 +155 +0.155 +1.155 +155.155 +156 +0.156 +1.156 +156.156 +157 +0.157 +1.157 +157.157 +158 +0.158 +1.158 +158.158 +159 +0.159 +1.159 +159.159 +15A +0.15A +1.15A +15A.15A +160 +0.160 +1.160 +160.160 +161 +0.161 +1.161 +161.161 +162 +0.162 +1.162 +162.162 +163 +0.163 +1.163 +163.163 +164 +0.164 +1.164 +164.164 +165 +0.165 +1.165 +165.165 +166 +0.166 +1.166 +166.166 +167 +0.167 +1.167 +167.167 +168 +0.168 +1.168 +168.168 +169 +0.169 +1.169 +169.169 +16A +0.16A +1.16A +16A.16A +170 +0.170 +1.170 +170.170 +171 +0.171 +1.171 +171.171 +172 +0.172 +1.172 +172.172 +173 +0.173 +1.173 +173.173 +174 +0.174 +1.174 +174.174 +175 +0.175 +1.175 +175.175 +176 +0.176 +1.176 +176.176 +177 +0.177 +1.177 +177.177 +178 +0.178 +1.178 +178.178 +179 +0.179 +1.179 +179.179 +17A +0.17A +1.17A +17A.17A +180 +0.180 +1.180 +180.180 +181 +0.181 +1.181 +181.181 +182 +0.182 +1.182 +182.182 +183 +0.183 +1.183 +183.183 +184 +0.184 +1.184 +184.184 +185 +0.185 +1.185 +185.185 +186 +0.186 +1.186 +186.186 +187 +0.187 +1.187 +187.187 +188 +0.188 +1.188 +188.188 +189 +0.189 +1.189 +189.189 +18A +0.18A +1.18A +18A.18A +190 +0.190 +1.190 +190.190 +191 +0.191 +1.191 +191.191 +192 +0.192 +1.192 +192.192 +193 +0.193 +1.193 +193.193 +194 +0.194 +1.194 +194.194 +195 +0.195 +1.195 +195.195 +196 +0.196 +1.196 +196.196 +197 +0.197 +1.197 +197.197 +198 +0.198 +1.198 +198.198 +199 +0.199 +1.199 +199.199 +19A +0.19A +1.19A +19A.19A +1A0 +0.1A0 +1.1A0 +1A0.1A0 +1A1 +0.1A1 +1.1A1 +1A1.1A1 +1A2 +0.1A2 +1.1A2 +1A2.1A2 +1A3 +0.1A3 +1.1A3 +1A3.1A3 +1A4 +0.1A4 +1.1A4 +1A4.1A4 +1A5 +0.1A5 +1.1A5 +1A5.1A5 +1A6 +0.1A6 +1.1A6 +1A6.1A6 +1A7 +0.1A7 +1.1A7 +1A7.1A7 +1A8 +0.1A8 +1.1A8 +1A8.1A8 +1A9 +0.1A9 +1.1A9 +1A9.1A9 +1AA +0.1AA +1.1AA +1AA.1AA +200 +0.200 +1.200 +200.200 +201 +0.201 +1.201 +201.201 +202 +0.202 +1.202 +202.202 +203 +0.203 +1.203 +203.203 +204 +0.204 +1.204 +204.204 +205 +0.205 +1.205 +205.205 +206 +0.206 +1.206 +206.206 +207 +0.207 +1.207 +207.207 +208 +0.208 +1.208 +208.208 +209 +0.209 +1.209 +209.209 +20A +0.20A +1.20A +20A.20A +210 +0.210 +1.210 +210.210 +211 +0.211 +1.211 +211.211 +212 +0.212 +1.212 +212.212 +213 +0.213 +1.213 +213.213 +ibase = A; ibase = 12 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +A +0.A +1.A +A.A +B +0.B +1.B +B.B +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +19 +0.19 +1.19 +19.19 +1A +0.1A +1.1A +1A.1A +1B +0.1B +1.1B +1B.1B +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +28 +0.28 +1.28 +28.28 +29 +0.29 +1.29 +29.29 +2A +0.2A +1.2A +2A.2A +2B +0.2B +1.2B +2B.2B +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +37 +0.37 +1.37 +37.37 +38 +0.38 +1.38 +38.38 +39 +0.39 +1.39 +39.39 +3A +0.3A +1.3A +3A.3A +3B +0.3B +1.3B +3B.3B +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +47 +0.47 +1.47 +47.47 +48 +0.48 +1.48 +48.48 +49 +0.49 +1.49 +49.49 +4A +0.4A +1.4A +4A.4A +4B +0.4B +1.4B +4B.4B +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +56 +0.56 +1.56 +56.56 +57 +0.57 +1.57 +57.57 +58 +0.58 +1.58 +58.58 +59 +0.59 +1.59 +59.59 +5A +0.5A +1.5A +5A.5A +5B +0.5B +1.5B +5B.5B +60 +0.60 +1.60 +60.60 +61 +0.61 +1.61 +61.61 +62 +0.62 +1.62 +62.62 +63 +0.63 +1.63 +63.63 +64 +0.64 +1.64 +64.64 +65 +0.65 +1.65 +65.65 +66 +0.66 +1.66 +66.66 +67 +0.67 +1.67 +67.67 +68 +0.68 +1.68 +68.68 +69 +0.69 +1.69 +69.69 +6A +0.6A +1.6A +6A.6A +6B +0.6B +1.6B +6B.6B +70 +0.70 +1.70 +70.70 +71 +0.71 +1.71 +71.71 +72 +0.72 +1.72 +72.72 +73 +0.73 +1.73 +73.73 +74 +0.74 +1.74 +74.74 +75 +0.75 +1.75 +75.75 +76 +0.76 +1.76 +76.76 +77 +0.77 +1.77 +77.77 +78 +0.78 +1.78 +78.78 +79 +0.79 +1.79 +79.79 +7A +0.7A +1.7A +7A.7A +7B +0.7B +1.7B +7B.7B +80 +0.80 +1.80 +80.80 +81 +0.81 +1.81 +81.81 +82 +0.82 +1.82 +82.82 +83 +0.83 +1.83 +83.83 +84 +0.84 +1.84 +84.84 +85 +0.85 +1.85 +85.85 +86 +0.86 +1.86 +86.86 +87 +0.87 +1.87 +87.87 +88 +0.88 +1.88 +88.88 +89 +0.89 +1.89 +89.89 +8A +0.8A +1.8A +8A.8A +8B +0.8B +1.8B +8B.8B +90 +0.90 +1.90 +90.90 +91 +0.91 +1.91 +91.91 +92 +0.92 +1.92 +92.92 +93 +0.93 +1.93 +93.93 +94 +0.94 +1.94 +94.94 +95 +0.95 +1.95 +95.95 +96 +0.96 +1.96 +96.96 +97 +0.97 +1.97 +97.97 +98 +0.98 +1.98 +98.98 +99 +0.99 +1.99 +99.99 +9A +0.9A +1.9A +9A.9A +9B +0.9B +1.9B +9B.9B +A0 +0.A0 +1.A0 +A0.A0 +A1 +0.A1 +1.A1 +A1.A1 +A2 +0.A2 +1.A2 +A2.A2 +A3 +0.A3 +1.A3 +A3.A3 +A4 +0.A4 +1.A4 +A4.A4 +A5 +0.A5 +1.A5 +A5.A5 +A6 +0.A6 +1.A6 +A6.A6 +A7 +0.A7 +1.A7 +A7.A7 +A8 +0.A8 +1.A8 +A8.A8 +A9 +0.A9 +1.A9 +A9.A9 +AA +0.AA +1.AA +AA.AA +AB +0.AB +1.AB +AB.AB +B0 +0.B0 +1.B0 +B0.B0 +B1 +0.B1 +1.B1 +B1.B1 +B2 +0.B2 +1.B2 +B2.B2 +B3 +0.B3 +1.B3 +B3.B3 +B4 +0.B4 +1.B4 +B4.B4 +B5 +0.B5 +1.B5 +B5.B5 +B6 +0.B6 +1.B6 +B6.B6 +B7 +0.B7 +1.B7 +B7.B7 +B8 +0.B8 +1.B8 +B8.B8 +B9 +0.B9 +1.B9 +B9.B9 +BA +0.BA +1.BA +BA.BA +BB +0.BB +1.BB +BB.BB +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +103 +0.103 +1.103 +103.103 +104 +0.104 +1.104 +104.104 +105 +0.105 +1.105 +105.105 +106 +0.106 +1.106 +106.106 +107 +0.107 +1.107 +107.107 +108 +0.108 +1.108 +108.108 +109 +0.109 +1.109 +109.109 +10A +0.10A +1.10A +10A.10A +10B +0.10B +1.10B +10B.10B +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +113 +0.113 +1.113 +113.113 +114 +0.114 +1.114 +114.114 +115 +0.115 +1.115 +115.115 +116 +0.116 +1.116 +116.116 +117 +0.117 +1.117 +117.117 +118 +0.118 +1.118 +118.118 +119 +0.119 +1.119 +119.119 +11A +0.11A +1.11A +11A.11A +11B +0.11B +1.11B +11B.11B +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +122 +0.122 +1.122 +122.122 +123 +0.123 +1.123 +123.123 +124 +0.124 +1.124 +124.124 +125 +0.125 +1.125 +125.125 +126 +0.126 +1.126 +126.126 +127 +0.127 +1.127 +127.127 +128 +0.128 +1.128 +128.128 +129 +0.129 +1.129 +129.129 +12A +0.12A +1.12A +12A.12A +12B +0.12B +1.12B +12B.12B +130 +0.130 +1.130 +130.130 +131 +0.131 +1.131 +131.131 +132 +0.132 +1.132 +132.132 +133 +0.133 +1.133 +133.133 +134 +0.134 +1.134 +134.134 +135 +0.135 +1.135 +135.135 +136 +0.136 +1.136 +136.136 +137 +0.137 +1.137 +137.137 +138 +0.138 +1.138 +138.138 +139 +0.139 +1.139 +139.139 +13A +0.13A +1.13A +13A.13A +13B +0.13B +1.13B +13B.13B +140 +0.140 +1.140 +140.140 +141 +0.141 +1.141 +141.141 +142 +0.142 +1.142 +142.142 +143 +0.143 +1.143 +143.143 +144 +0.144 +1.144 +144.144 +145 +0.145 +1.145 +145.145 +146 +0.146 +1.146 +146.146 +147 +0.147 +1.147 +147.147 +148 +0.148 +1.148 +148.148 +149 +0.149 +1.149 +149.149 +14A +0.14A +1.14A +14A.14A +14B +0.14B +1.14B +14B.14B +150 +0.150 +1.150 +150.150 +151 +0.151 +1.151 +151.151 +152 +0.152 +1.152 +152.152 +153 +0.153 +1.153 +153.153 +154 +0.154 +1.154 +154.154 +155 +0.155 +1.155 +155.155 +156 +0.156 +1.156 +156.156 +157 +0.157 +1.157 +157.157 +158 +0.158 +1.158 +158.158 +159 +0.159 +1.159 +159.159 +15A +0.15A +1.15A +15A.15A +15B +0.15B +1.15B +15B.15B +160 +0.160 +1.160 +160.160 +161 +0.161 +1.161 +161.161 +162 +0.162 +1.162 +162.162 +163 +0.163 +1.163 +163.163 +164 +0.164 +1.164 +164.164 +165 +0.165 +1.165 +165.165 +166 +0.166 +1.166 +166.166 +167 +0.167 +1.167 +167.167 +168 +0.168 +1.168 +168.168 +169 +0.169 +1.169 +169.169 +16A +0.16A +1.16A +16A.16A +16B +0.16B +1.16B +16B.16B +170 +0.170 +1.170 +170.170 +171 +0.171 +1.171 +171.171 +172 +0.172 +1.172 +172.172 +173 +0.173 +1.173 +173.173 +174 +0.174 +1.174 +174.174 +175 +0.175 +1.175 +175.175 +176 +0.176 +1.176 +176.176 +177 +0.177 +1.177 +177.177 +178 +0.178 +1.178 +178.178 +179 +0.179 +1.179 +179.179 +17A +0.17A +1.17A +17A.17A +17B +0.17B +1.17B +17B.17B +180 +0.180 +1.180 +180.180 +181 +0.181 +1.181 +181.181 +182 +0.182 +1.182 +182.182 +183 +0.183 +1.183 +183.183 +184 +0.184 +1.184 +184.184 +185 +0.185 +1.185 +185.185 +186 +0.186 +1.186 +186.186 +187 +0.187 +1.187 +187.187 +188 +0.188 +1.188 +188.188 +189 +0.189 +1.189 +189.189 +18A +0.18A +1.18A +18A.18A +18B +0.18B +1.18B +18B.18B +190 +0.190 +1.190 +190.190 +191 +0.191 +1.191 +191.191 +192 +0.192 +1.192 +192.192 +193 +0.193 +1.193 +193.193 +194 +0.194 +1.194 +194.194 +ibase = A; ibase = 13 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +A +0.A +1.A +A.A +B +0.B +1.B +B.B +C +0.C +1.C +C.C +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +19 +0.19 +1.19 +19.19 +1A +0.1A +1.1A +1A.1A +1B +0.1B +1.1B +1B.1B +1C +0.1C +1.1C +1C.1C +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +28 +0.28 +1.28 +28.28 +29 +0.29 +1.29 +29.29 +2A +0.2A +1.2A +2A.2A +2B +0.2B +1.2B +2B.2B +2C +0.2C +1.2C +2C.2C +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +37 +0.37 +1.37 +37.37 +38 +0.38 +1.38 +38.38 +39 +0.39 +1.39 +39.39 +3A +0.3A +1.3A +3A.3A +3B +0.3B +1.3B +3B.3B +3C +0.3C +1.3C +3C.3C +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +47 +0.47 +1.47 +47.47 +48 +0.48 +1.48 +48.48 +49 +0.49 +1.49 +49.49 +4A +0.4A +1.4A +4A.4A +4B +0.4B +1.4B +4B.4B +4C +0.4C +1.4C +4C.4C +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +56 +0.56 +1.56 +56.56 +57 +0.57 +1.57 +57.57 +58 +0.58 +1.58 +58.58 +59 +0.59 +1.59 +59.59 +5A +0.5A +1.5A +5A.5A +5B +0.5B +1.5B +5B.5B +5C +0.5C +1.5C +5C.5C +60 +0.60 +1.60 +60.60 +61 +0.61 +1.61 +61.61 +62 +0.62 +1.62 +62.62 +63 +0.63 +1.63 +63.63 +64 +0.64 +1.64 +64.64 +65 +0.65 +1.65 +65.65 +66 +0.66 +1.66 +66.66 +67 +0.67 +1.67 +67.67 +68 +0.68 +1.68 +68.68 +69 +0.69 +1.69 +69.69 +6A +0.6A +1.6A +6A.6A +6B +0.6B +1.6B +6B.6B +6C +0.6C +1.6C +6C.6C +70 +0.70 +1.70 +70.70 +71 +0.71 +1.71 +71.71 +72 +0.72 +1.72 +72.72 +73 +0.73 +1.73 +73.73 +74 +0.74 +1.74 +74.74 +75 +0.75 +1.75 +75.75 +76 +0.76 +1.76 +76.76 +77 +0.77 +1.77 +77.77 +78 +0.78 +1.78 +78.78 +79 +0.79 +1.79 +79.79 +7A +0.7A +1.7A +7A.7A +7B +0.7B +1.7B +7B.7B +7C +0.7C +1.7C +7C.7C +80 +0.80 +1.80 +80.80 +81 +0.81 +1.81 +81.81 +82 +0.82 +1.82 +82.82 +83 +0.83 +1.83 +83.83 +84 +0.84 +1.84 +84.84 +85 +0.85 +1.85 +85.85 +86 +0.86 +1.86 +86.86 +87 +0.87 +1.87 +87.87 +88 +0.88 +1.88 +88.88 +89 +0.89 +1.89 +89.89 +8A +0.8A +1.8A +8A.8A +8B +0.8B +1.8B +8B.8B +8C +0.8C +1.8C +8C.8C +90 +0.90 +1.90 +90.90 +91 +0.91 +1.91 +91.91 +92 +0.92 +1.92 +92.92 +93 +0.93 +1.93 +93.93 +94 +0.94 +1.94 +94.94 +95 +0.95 +1.95 +95.95 +96 +0.96 +1.96 +96.96 +97 +0.97 +1.97 +97.97 +98 +0.98 +1.98 +98.98 +99 +0.99 +1.99 +99.99 +9A +0.9A +1.9A +9A.9A +9B +0.9B +1.9B +9B.9B +9C +0.9C +1.9C +9C.9C +A0 +0.A0 +1.A0 +A0.A0 +A1 +0.A1 +1.A1 +A1.A1 +A2 +0.A2 +1.A2 +A2.A2 +A3 +0.A3 +1.A3 +A3.A3 +A4 +0.A4 +1.A4 +A4.A4 +A5 +0.A5 +1.A5 +A5.A5 +A6 +0.A6 +1.A6 +A6.A6 +A7 +0.A7 +1.A7 +A7.A7 +A8 +0.A8 +1.A8 +A8.A8 +A9 +0.A9 +1.A9 +A9.A9 +AA +0.AA +1.AA +AA.AA +AB +0.AB +1.AB +AB.AB +AC +0.AC +1.AC +AC.AC +B0 +0.B0 +1.B0 +B0.B0 +B1 +0.B1 +1.B1 +B1.B1 +B2 +0.B2 +1.B2 +B2.B2 +B3 +0.B3 +1.B3 +B3.B3 +B4 +0.B4 +1.B4 +B4.B4 +B5 +0.B5 +1.B5 +B5.B5 +B6 +0.B6 +1.B6 +B6.B6 +B7 +0.B7 +1.B7 +B7.B7 +B8 +0.B8 +1.B8 +B8.B8 +B9 +0.B9 +1.B9 +B9.B9 +BA +0.BA +1.BA +BA.BA +BB +0.BB +1.BB +BB.BB +BC +0.BC +1.BC +BC.BC +C0 +0.C0 +1.C0 +C0.C0 +C1 +0.C1 +1.C1 +C1.C1 +C2 +0.C2 +1.C2 +C2.C2 +C3 +0.C3 +1.C3 +C3.C3 +C4 +0.C4 +1.C4 +C4.C4 +C5 +0.C5 +1.C5 +C5.C5 +C6 +0.C6 +1.C6 +C6.C6 +C7 +0.C7 +1.C7 +C7.C7 +C8 +0.C8 +1.C8 +C8.C8 +C9 +0.C9 +1.C9 +C9.C9 +CA +0.CA +1.CA +CA.CA +CB +0.CB +1.CB +CB.CB +CC +0.CC +1.CC +CC.CC +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +103 +0.103 +1.103 +103.103 +104 +0.104 +1.104 +104.104 +105 +0.105 +1.105 +105.105 +106 +0.106 +1.106 +106.106 +107 +0.107 +1.107 +107.107 +108 +0.108 +1.108 +108.108 +109 +0.109 +1.109 +109.109 +10A +0.10A +1.10A +10A.10A +10B +0.10B +1.10B +10B.10B +10C +0.10C +1.10C +10C.10C +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +113 +0.113 +1.113 +113.113 +114 +0.114 +1.114 +114.114 +115 +0.115 +1.115 +115.115 +116 +0.116 +1.116 +116.116 +117 +0.117 +1.117 +117.117 +118 +0.118 +1.118 +118.118 +119 +0.119 +1.119 +119.119 +11A +0.11A +1.11A +11A.11A +11B +0.11B +1.11B +11B.11B +11C +0.11C +1.11C +11C.11C +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +122 +0.122 +1.122 +122.122 +123 +0.123 +1.123 +123.123 +124 +0.124 +1.124 +124.124 +125 +0.125 +1.125 +125.125 +126 +0.126 +1.126 +126.126 +127 +0.127 +1.127 +127.127 +128 +0.128 +1.128 +128.128 +129 +0.129 +1.129 +129.129 +12A +0.12A +1.12A +12A.12A +12B +0.12B +1.12B +12B.12B +12C +0.12C +1.12C +12C.12C +130 +0.130 +1.130 +130.130 +131 +0.131 +1.131 +131.131 +132 +0.132 +1.132 +132.132 +133 +0.133 +1.133 +133.133 +134 +0.134 +1.134 +134.134 +135 +0.135 +1.135 +135.135 +136 +0.136 +1.136 +136.136 +137 +0.137 +1.137 +137.137 +138 +0.138 +1.138 +138.138 +139 +0.139 +1.139 +139.139 +13A +0.13A +1.13A +13A.13A +13B +0.13B +1.13B +13B.13B +13C +0.13C +1.13C +13C.13C +140 +0.140 +1.140 +140.140 +141 +0.141 +1.141 +141.141 +142 +0.142 +1.142 +142.142 +143 +0.143 +1.143 +143.143 +144 +0.144 +1.144 +144.144 +145 +0.145 +1.145 +145.145 +146 +0.146 +1.146 +146.146 +147 +0.147 +1.147 +147.147 +148 +0.148 +1.148 +148.148 +149 +0.149 +1.149 +149.149 +14A +0.14A +1.14A +14A.14A +14B +0.14B +1.14B +14B.14B +14C +0.14C +1.14C +14C.14C +150 +0.150 +1.150 +150.150 +151 +0.151 +1.151 +151.151 +152 +0.152 +1.152 +152.152 +153 +0.153 +1.153 +153.153 +154 +0.154 +1.154 +154.154 +155 +0.155 +1.155 +155.155 +156 +0.156 +1.156 +156.156 +157 +0.157 +1.157 +157.157 +158 +0.158 +1.158 +158.158 +159 +0.159 +1.159 +159.159 +15A +0.15A +1.15A +15A.15A +15B +0.15B +1.15B +15B.15B +15C +0.15C +1.15C +15C.15C +160 +0.160 +1.160 +160.160 +161 +0.161 +1.161 +161.161 +162 +0.162 +1.162 +162.162 +163 +0.163 +1.163 +163.163 +164 +0.164 +1.164 +164.164 +165 +0.165 +1.165 +165.165 +166 +0.166 +1.166 +166.166 +167 +0.167 +1.167 +167.167 +168 +0.168 +1.168 +168.168 +169 +0.169 +1.169 +169.169 +ibase = A; ibase = 14 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +A +0.A +1.A +A.A +B +0.B +1.B +B.B +C +0.C +1.C +C.C +D +0.D +1.D +D.D +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +19 +0.19 +1.19 +19.19 +1A +0.1A +1.1A +1A.1A +1B +0.1B +1.1B +1B.1B +1C +0.1C +1.1C +1C.1C +1D +0.1D +1.1D +1D.1D +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +28 +0.28 +1.28 +28.28 +29 +0.29 +1.29 +29.29 +2A +0.2A +1.2A +2A.2A +2B +0.2B +1.2B +2B.2B +2C +0.2C +1.2C +2C.2C +2D +0.2D +1.2D +2D.2D +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +37 +0.37 +1.37 +37.37 +38 +0.38 +1.38 +38.38 +39 +0.39 +1.39 +39.39 +3A +0.3A +1.3A +3A.3A +3B +0.3B +1.3B +3B.3B +3C +0.3C +1.3C +3C.3C +3D +0.3D +1.3D +3D.3D +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +47 +0.47 +1.47 +47.47 +48 +0.48 +1.48 +48.48 +49 +0.49 +1.49 +49.49 +4A +0.4A +1.4A +4A.4A +4B +0.4B +1.4B +4B.4B +4C +0.4C +1.4C +4C.4C +4D +0.4D +1.4D +4D.4D +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +56 +0.56 +1.56 +56.56 +57 +0.57 +1.57 +57.57 +58 +0.58 +1.58 +58.58 +59 +0.59 +1.59 +59.59 +5A +0.5A +1.5A +5A.5A +5B +0.5B +1.5B +5B.5B +5C +0.5C +1.5C +5C.5C +5D +0.5D +1.5D +5D.5D +60 +0.60 +1.60 +60.60 +61 +0.61 +1.61 +61.61 +62 +0.62 +1.62 +62.62 +63 +0.63 +1.63 +63.63 +64 +0.64 +1.64 +64.64 +65 +0.65 +1.65 +65.65 +66 +0.66 +1.66 +66.66 +67 +0.67 +1.67 +67.67 +68 +0.68 +1.68 +68.68 +69 +0.69 +1.69 +69.69 +6A +0.6A +1.6A +6A.6A +6B +0.6B +1.6B +6B.6B +6C +0.6C +1.6C +6C.6C +6D +0.6D +1.6D +6D.6D +70 +0.70 +1.70 +70.70 +71 +0.71 +1.71 +71.71 +72 +0.72 +1.72 +72.72 +73 +0.73 +1.73 +73.73 +74 +0.74 +1.74 +74.74 +75 +0.75 +1.75 +75.75 +76 +0.76 +1.76 +76.76 +77 +0.77 +1.77 +77.77 +78 +0.78 +1.78 +78.78 +79 +0.79 +1.79 +79.79 +7A +0.7A +1.7A +7A.7A +7B +0.7B +1.7B +7B.7B +7C +0.7C +1.7C +7C.7C +7D +0.7D +1.7D +7D.7D +80 +0.80 +1.80 +80.80 +81 +0.81 +1.81 +81.81 +82 +0.82 +1.82 +82.82 +83 +0.83 +1.83 +83.83 +84 +0.84 +1.84 +84.84 +85 +0.85 +1.85 +85.85 +86 +0.86 +1.86 +86.86 +87 +0.87 +1.87 +87.87 +88 +0.88 +1.88 +88.88 +89 +0.89 +1.89 +89.89 +8A +0.8A +1.8A +8A.8A +8B +0.8B +1.8B +8B.8B +8C +0.8C +1.8C +8C.8C +8D +0.8D +1.8D +8D.8D +90 +0.90 +1.90 +90.90 +91 +0.91 +1.91 +91.91 +92 +0.92 +1.92 +92.92 +93 +0.93 +1.93 +93.93 +94 +0.94 +1.94 +94.94 +95 +0.95 +1.95 +95.95 +96 +0.96 +1.96 +96.96 +97 +0.97 +1.97 +97.97 +98 +0.98 +1.98 +98.98 +99 +0.99 +1.99 +99.99 +9A +0.9A +1.9A +9A.9A +9B +0.9B +1.9B +9B.9B +9C +0.9C +1.9C +9C.9C +9D +0.9D +1.9D +9D.9D +A0 +0.A0 +1.A0 +A0.A0 +A1 +0.A1 +1.A1 +A1.A1 +A2 +0.A2 +1.A2 +A2.A2 +A3 +0.A3 +1.A3 +A3.A3 +A4 +0.A4 +1.A4 +A4.A4 +A5 +0.A5 +1.A5 +A5.A5 +A6 +0.A6 +1.A6 +A6.A6 +A7 +0.A7 +1.A7 +A7.A7 +A8 +0.A8 +1.A8 +A8.A8 +A9 +0.A9 +1.A9 +A9.A9 +AA +0.AA +1.AA +AA.AA +AB +0.AB +1.AB +AB.AB +AC +0.AC +1.AC +AC.AC +AD +0.AD +1.AD +AD.AD +B0 +0.B0 +1.B0 +B0.B0 +B1 +0.B1 +1.B1 +B1.B1 +B2 +0.B2 +1.B2 +B2.B2 +B3 +0.B3 +1.B3 +B3.B3 +B4 +0.B4 +1.B4 +B4.B4 +B5 +0.B5 +1.B5 +B5.B5 +B6 +0.B6 +1.B6 +B6.B6 +B7 +0.B7 +1.B7 +B7.B7 +B8 +0.B8 +1.B8 +B8.B8 +B9 +0.B9 +1.B9 +B9.B9 +BA +0.BA +1.BA +BA.BA +BB +0.BB +1.BB +BB.BB +BC +0.BC +1.BC +BC.BC +BD +0.BD +1.BD +BD.BD +C0 +0.C0 +1.C0 +C0.C0 +C1 +0.C1 +1.C1 +C1.C1 +C2 +0.C2 +1.C2 +C2.C2 +C3 +0.C3 +1.C3 +C3.C3 +C4 +0.C4 +1.C4 +C4.C4 +C5 +0.C5 +1.C5 +C5.C5 +C6 +0.C6 +1.C6 +C6.C6 +C7 +0.C7 +1.C7 +C7.C7 +C8 +0.C8 +1.C8 +C8.C8 +C9 +0.C9 +1.C9 +C9.C9 +CA +0.CA +1.CA +CA.CA +CB +0.CB +1.CB +CB.CB +CC +0.CC +1.CC +CC.CC +CD +0.CD +1.CD +CD.CD +D0 +0.D0 +1.D0 +D0.D0 +D1 +0.D1 +1.D1 +D1.D1 +D2 +0.D2 +1.D2 +D2.D2 +D3 +0.D3 +1.D3 +D3.D3 +D4 +0.D4 +1.D4 +D4.D4 +D5 +0.D5 +1.D5 +D5.D5 +D6 +0.D6 +1.D6 +D6.D6 +D7 +0.D7 +1.D7 +D7.D7 +D8 +0.D8 +1.D8 +D8.D8 +D9 +0.D9 +1.D9 +D9.D9 +DA +0.DA +1.DA +DA.DA +DB +0.DB +1.DB +DB.DB +DC +0.DC +1.DC +DC.DC +DD +0.DD +1.DD +DD.DD +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +103 +0.103 +1.103 +103.103 +104 +0.104 +1.104 +104.104 +105 +0.105 +1.105 +105.105 +106 +0.106 +1.106 +106.106 +107 +0.107 +1.107 +107.107 +108 +0.108 +1.108 +108.108 +109 +0.109 +1.109 +109.109 +10A +0.10A +1.10A +10A.10A +10B +0.10B +1.10B +10B.10B +10C +0.10C +1.10C +10C.10C +10D +0.10D +1.10D +10D.10D +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +113 +0.113 +1.113 +113.113 +114 +0.114 +1.114 +114.114 +115 +0.115 +1.115 +115.115 +116 +0.116 +1.116 +116.116 +117 +0.117 +1.117 +117.117 +118 +0.118 +1.118 +118.118 +119 +0.119 +1.119 +119.119 +11A +0.11A +1.11A +11A.11A +11B +0.11B +1.11B +11B.11B +11C +0.11C +1.11C +11C.11C +11D +0.11D +1.11D +11D.11D +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +122 +0.122 +1.122 +122.122 +123 +0.123 +1.123 +123.123 +124 +0.124 +1.124 +124.124 +125 +0.125 +1.125 +125.125 +126 +0.126 +1.126 +126.126 +127 +0.127 +1.127 +127.127 +128 +0.128 +1.128 +128.128 +129 +0.129 +1.129 +129.129 +12A +0.12A +1.12A +12A.12A +12B +0.12B +1.12B +12B.12B +12C +0.12C +1.12C +12C.12C +12D +0.12D +1.12D +12D.12D +130 +0.130 +1.130 +130.130 +131 +0.131 +1.131 +131.131 +132 +0.132 +1.132 +132.132 +133 +0.133 +1.133 +133.133 +134 +0.134 +1.134 +134.134 +135 +0.135 +1.135 +135.135 +136 +0.136 +1.136 +136.136 +137 +0.137 +1.137 +137.137 +138 +0.138 +1.138 +138.138 +139 +0.139 +1.139 +139.139 +13A +0.13A +1.13A +13A.13A +13B +0.13B +1.13B +13B.13B +13C +0.13C +1.13C +13C.13C +13D +0.13D +1.13D +13D.13D +140 +0.140 +1.140 +140.140 +141 +0.141 +1.141 +141.141 +142 +0.142 +1.142 +142.142 +143 +0.143 +1.143 +143.143 +144 +0.144 +1.144 +144.144 +ibase = A; ibase = 15 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +A +0.A +1.A +A.A +B +0.B +1.B +B.B +C +0.C +1.C +C.C +D +0.D +1.D +D.D +E +0.E +1.E +E.E +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +19 +0.19 +1.19 +19.19 +1A +0.1A +1.1A +1A.1A +1B +0.1B +1.1B +1B.1B +1C +0.1C +1.1C +1C.1C +1D +0.1D +1.1D +1D.1D +1E +0.1E +1.1E +1E.1E +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +28 +0.28 +1.28 +28.28 +29 +0.29 +1.29 +29.29 +2A +0.2A +1.2A +2A.2A +2B +0.2B +1.2B +2B.2B +2C +0.2C +1.2C +2C.2C +2D +0.2D +1.2D +2D.2D +2E +0.2E +1.2E +2E.2E +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +37 +0.37 +1.37 +37.37 +38 +0.38 +1.38 +38.38 +39 +0.39 +1.39 +39.39 +3A +0.3A +1.3A +3A.3A +3B +0.3B +1.3B +3B.3B +3C +0.3C +1.3C +3C.3C +3D +0.3D +1.3D +3D.3D +3E +0.3E +1.3E +3E.3E +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +47 +0.47 +1.47 +47.47 +48 +0.48 +1.48 +48.48 +49 +0.49 +1.49 +49.49 +4A +0.4A +1.4A +4A.4A +4B +0.4B +1.4B +4B.4B +4C +0.4C +1.4C +4C.4C +4D +0.4D +1.4D +4D.4D +4E +0.4E +1.4E +4E.4E +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +56 +0.56 +1.56 +56.56 +57 +0.57 +1.57 +57.57 +58 +0.58 +1.58 +58.58 +59 +0.59 +1.59 +59.59 +5A +0.5A +1.5A +5A.5A +5B +0.5B +1.5B +5B.5B +5C +0.5C +1.5C +5C.5C +5D +0.5D +1.5D +5D.5D +5E +0.5E +1.5E +5E.5E +60 +0.60 +1.60 +60.60 +61 +0.61 +1.61 +61.61 +62 +0.62 +1.62 +62.62 +63 +0.63 +1.63 +63.63 +64 +0.64 +1.64 +64.64 +65 +0.65 +1.65 +65.65 +66 +0.66 +1.66 +66.66 +67 +0.67 +1.67 +67.67 +68 +0.68 +1.68 +68.68 +69 +0.69 +1.69 +69.69 +6A +0.6A +1.6A +6A.6A +6B +0.6B +1.6B +6B.6B +6C +0.6C +1.6C +6C.6C +6D +0.6D +1.6D +6D.6D +6E +0.6E +1.6E +6E.6E +70 +0.70 +1.70 +70.70 +71 +0.71 +1.71 +71.71 +72 +0.72 +1.72 +72.72 +73 +0.73 +1.73 +73.73 +74 +0.74 +1.74 +74.74 +75 +0.75 +1.75 +75.75 +76 +0.76 +1.76 +76.76 +77 +0.77 +1.77 +77.77 +78 +0.78 +1.78 +78.78 +79 +0.79 +1.79 +79.79 +7A +0.7A +1.7A +7A.7A +7B +0.7B +1.7B +7B.7B +7C +0.7C +1.7C +7C.7C +7D +0.7D +1.7D +7D.7D +7E +0.7E +1.7E +7E.7E +80 +0.80 +1.80 +80.80 +81 +0.81 +1.81 +81.81 +82 +0.82 +1.82 +82.82 +83 +0.83 +1.83 +83.83 +84 +0.84 +1.84 +84.84 +85 +0.85 +1.85 +85.85 +86 +0.86 +1.86 +86.86 +87 +0.87 +1.87 +87.87 +88 +0.88 +1.88 +88.88 +89 +0.89 +1.89 +89.89 +8A +0.8A +1.8A +8A.8A +8B +0.8B +1.8B +8B.8B +8C +0.8C +1.8C +8C.8C +8D +0.8D +1.8D +8D.8D +8E +0.8E +1.8E +8E.8E +90 +0.90 +1.90 +90.90 +91 +0.91 +1.91 +91.91 +92 +0.92 +1.92 +92.92 +93 +0.93 +1.93 +93.93 +94 +0.94 +1.94 +94.94 +95 +0.95 +1.95 +95.95 +96 +0.96 +1.96 +96.96 +97 +0.97 +1.97 +97.97 +98 +0.98 +1.98 +98.98 +99 +0.99 +1.99 +99.99 +9A +0.9A +1.9A +9A.9A +9B +0.9B +1.9B +9B.9B +9C +0.9C +1.9C +9C.9C +9D +0.9D +1.9D +9D.9D +9E +0.9E +1.9E +9E.9E +A0 +0.A0 +1.A0 +A0.A0 +A1 +0.A1 +1.A1 +A1.A1 +A2 +0.A2 +1.A2 +A2.A2 +A3 +0.A3 +1.A3 +A3.A3 +A4 +0.A4 +1.A4 +A4.A4 +A5 +0.A5 +1.A5 +A5.A5 +A6 +0.A6 +1.A6 +A6.A6 +A7 +0.A7 +1.A7 +A7.A7 +A8 +0.A8 +1.A8 +A8.A8 +A9 +0.A9 +1.A9 +A9.A9 +AA +0.AA +1.AA +AA.AA +AB +0.AB +1.AB +AB.AB +AC +0.AC +1.AC +AC.AC +AD +0.AD +1.AD +AD.AD +AE +0.AE +1.AE +AE.AE +B0 +0.B0 +1.B0 +B0.B0 +B1 +0.B1 +1.B1 +B1.B1 +B2 +0.B2 +1.B2 +B2.B2 +B3 +0.B3 +1.B3 +B3.B3 +B4 +0.B4 +1.B4 +B4.B4 +B5 +0.B5 +1.B5 +B5.B5 +B6 +0.B6 +1.B6 +B6.B6 +B7 +0.B7 +1.B7 +B7.B7 +B8 +0.B8 +1.B8 +B8.B8 +B9 +0.B9 +1.B9 +B9.B9 +BA +0.BA +1.BA +BA.BA +BB +0.BB +1.BB +BB.BB +BC +0.BC +1.BC +BC.BC +BD +0.BD +1.BD +BD.BD +BE +0.BE +1.BE +BE.BE +C0 +0.C0 +1.C0 +C0.C0 +C1 +0.C1 +1.C1 +C1.C1 +C2 +0.C2 +1.C2 +C2.C2 +C3 +0.C3 +1.C3 +C3.C3 +C4 +0.C4 +1.C4 +C4.C4 +C5 +0.C5 +1.C5 +C5.C5 +C6 +0.C6 +1.C6 +C6.C6 +C7 +0.C7 +1.C7 +C7.C7 +C8 +0.C8 +1.C8 +C8.C8 +C9 +0.C9 +1.C9 +C9.C9 +CA +0.CA +1.CA +CA.CA +CB +0.CB +1.CB +CB.CB +CC +0.CC +1.CC +CC.CC +CD +0.CD +1.CD +CD.CD +CE +0.CE +1.CE +CE.CE +D0 +0.D0 +1.D0 +D0.D0 +D1 +0.D1 +1.D1 +D1.D1 +D2 +0.D2 +1.D2 +D2.D2 +D3 +0.D3 +1.D3 +D3.D3 +D4 +0.D4 +1.D4 +D4.D4 +D5 +0.D5 +1.D5 +D5.D5 +D6 +0.D6 +1.D6 +D6.D6 +D7 +0.D7 +1.D7 +D7.D7 +D8 +0.D8 +1.D8 +D8.D8 +D9 +0.D9 +1.D9 +D9.D9 +DA +0.DA +1.DA +DA.DA +DB +0.DB +1.DB +DB.DB +DC +0.DC +1.DC +DC.DC +DD +0.DD +1.DD +DD.DD +DE +0.DE +1.DE +DE.DE +E0 +0.E0 +1.E0 +E0.E0 +E1 +0.E1 +1.E1 +E1.E1 +E2 +0.E2 +1.E2 +E2.E2 +E3 +0.E3 +1.E3 +E3.E3 +E4 +0.E4 +1.E4 +E4.E4 +E5 +0.E5 +1.E5 +E5.E5 +E6 +0.E6 +1.E6 +E6.E6 +E7 +0.E7 +1.E7 +E7.E7 +E8 +0.E8 +1.E8 +E8.E8 +E9 +0.E9 +1.E9 +E9.E9 +EA +0.EA +1.EA +EA.EA +EB +0.EB +1.EB +EB.EB +EC +0.EC +1.EC +EC.EC +ED +0.ED +1.ED +ED.ED +EE +0.EE +1.EE +EE.EE +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +103 +0.103 +1.103 +103.103 +104 +0.104 +1.104 +104.104 +105 +0.105 +1.105 +105.105 +106 +0.106 +1.106 +106.106 +107 +0.107 +1.107 +107.107 +108 +0.108 +1.108 +108.108 +109 +0.109 +1.109 +109.109 +10A +0.10A +1.10A +10A.10A +10B +0.10B +1.10B +10B.10B +10C +0.10C +1.10C +10C.10C +10D +0.10D +1.10D +10D.10D +10E +0.10E +1.10E +10E.10E +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +113 +0.113 +1.113 +113.113 +114 +0.114 +1.114 +114.114 +115 +0.115 +1.115 +115.115 +116 +0.116 +1.116 +116.116 +117 +0.117 +1.117 +117.117 +118 +0.118 +1.118 +118.118 +119 +0.119 +1.119 +119.119 +11A +0.11A +1.11A +11A.11A +11B +0.11B +1.11B +11B.11B +11C +0.11C +1.11C +11C.11C +11D +0.11D +1.11D +11D.11D +11E +0.11E +1.11E +11E.11E +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +ibase = A; ibase = 16 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +A +0.A +1.A +A.A +B +0.B +1.B +B.B +C +0.C +1.C +C.C +D +0.D +1.D +D.D +E +0.E +1.E +E.E +F +0.F +1.F +F.F +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +19 +0.19 +1.19 +19.19 +1A +0.1A +1.1A +1A.1A +1B +0.1B +1.1B +1B.1B +1C +0.1C +1.1C +1C.1C +1D +0.1D +1.1D +1D.1D +1E +0.1E +1.1E +1E.1E +1F +0.1F +1.1F +1F.1F +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +28 +0.28 +1.28 +28.28 +29 +0.29 +1.29 +29.29 +2A +0.2A +1.2A +2A.2A +2B +0.2B +1.2B +2B.2B +2C +0.2C +1.2C +2C.2C +2D +0.2D +1.2D +2D.2D +2E +0.2E +1.2E +2E.2E +2F +0.2F +1.2F +2F.2F +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +37 +0.37 +1.37 +37.37 +38 +0.38 +1.38 +38.38 +39 +0.39 +1.39 +39.39 +3A +0.3A +1.3A +3A.3A +3B +0.3B +1.3B +3B.3B +3C +0.3C +1.3C +3C.3C +3D +0.3D +1.3D +3D.3D +3E +0.3E +1.3E +3E.3E +3F +0.3F +1.3F +3F.3F +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +47 +0.47 +1.47 +47.47 +48 +0.48 +1.48 +48.48 +49 +0.49 +1.49 +49.49 +4A +0.4A +1.4A +4A.4A +4B +0.4B +1.4B +4B.4B +4C +0.4C +1.4C +4C.4C +4D +0.4D +1.4D +4D.4D +4E +0.4E +1.4E +4E.4E +4F +0.4F +1.4F +4F.4F +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +56 +0.56 +1.56 +56.56 +57 +0.57 +1.57 +57.57 +58 +0.58 +1.58 +58.58 +59 +0.59 +1.59 +59.59 +5A +0.5A +1.5A +5A.5A +5B +0.5B +1.5B +5B.5B +5C +0.5C +1.5C +5C.5C +5D +0.5D +1.5D +5D.5D +5E +0.5E +1.5E +5E.5E +5F +0.5F +1.5F +5F.5F +60 +0.60 +1.60 +60.60 +61 +0.61 +1.61 +61.61 +62 +0.62 +1.62 +62.62 +63 +0.63 +1.63 +63.63 +64 +0.64 +1.64 +64.64 +65 +0.65 +1.65 +65.65 +66 +0.66 +1.66 +66.66 +67 +0.67 +1.67 +67.67 +68 +0.68 +1.68 +68.68 +69 +0.69 +1.69 +69.69 +6A +0.6A +1.6A +6A.6A +6B +0.6B +1.6B +6B.6B +6C +0.6C +1.6C +6C.6C +6D +0.6D +1.6D +6D.6D +6E +0.6E +1.6E +6E.6E +6F +0.6F +1.6F +6F.6F +70 +0.70 +1.70 +70.70 +71 +0.71 +1.71 +71.71 +72 +0.72 +1.72 +72.72 +73 +0.73 +1.73 +73.73 +74 +0.74 +1.74 +74.74 +75 +0.75 +1.75 +75.75 +76 +0.76 +1.76 +76.76 +77 +0.77 +1.77 +77.77 +78 +0.78 +1.78 +78.78 +79 +0.79 +1.79 +79.79 +7A +0.7A +1.7A +7A.7A +7B +0.7B +1.7B +7B.7B +7C +0.7C +1.7C +7C.7C +7D +0.7D +1.7D +7D.7D +7E +0.7E +1.7E +7E.7E +7F +0.7F +1.7F +7F.7F +80 +0.80 +1.80 +80.80 +81 +0.81 +1.81 +81.81 +82 +0.82 +1.82 +82.82 +83 +0.83 +1.83 +83.83 +84 +0.84 +1.84 +84.84 +85 +0.85 +1.85 +85.85 +86 +0.86 +1.86 +86.86 +87 +0.87 +1.87 +87.87 +88 +0.88 +1.88 +88.88 +89 +0.89 +1.89 +89.89 +8A +0.8A +1.8A +8A.8A +8B +0.8B +1.8B +8B.8B +8C +0.8C +1.8C +8C.8C +8D +0.8D +1.8D +8D.8D +8E +0.8E +1.8E +8E.8E +8F +0.8F +1.8F +8F.8F +90 +0.90 +1.90 +90.90 +91 +0.91 +1.91 +91.91 +92 +0.92 +1.92 +92.92 +93 +0.93 +1.93 +93.93 +94 +0.94 +1.94 +94.94 +95 +0.95 +1.95 +95.95 +96 +0.96 +1.96 +96.96 +97 +0.97 +1.97 +97.97 +98 +0.98 +1.98 +98.98 +99 +0.99 +1.99 +99.99 +9A +0.9A +1.9A +9A.9A +9B +0.9B +1.9B +9B.9B +9C +0.9C +1.9C +9C.9C +9D +0.9D +1.9D +9D.9D +9E +0.9E +1.9E +9E.9E +9F +0.9F +1.9F +9F.9F +A0 +0.A0 +1.A0 +A0.A0 +A1 +0.A1 +1.A1 +A1.A1 +A2 +0.A2 +1.A2 +A2.A2 +A3 +0.A3 +1.A3 +A3.A3 +A4 +0.A4 +1.A4 +A4.A4 +A5 +0.A5 +1.A5 +A5.A5 +A6 +0.A6 +1.A6 +A6.A6 +A7 +0.A7 +1.A7 +A7.A7 +A8 +0.A8 +1.A8 +A8.A8 +A9 +0.A9 +1.A9 +A9.A9 +AA +0.AA +1.AA +AA.AA +AB +0.AB +1.AB +AB.AB +AC +0.AC +1.AC +AC.AC +AD +0.AD +1.AD +AD.AD +AE +0.AE +1.AE +AE.AE +AF +0.AF +1.AF +AF.AF +B0 +0.B0 +1.B0 +B0.B0 +B1 +0.B1 +1.B1 +B1.B1 +B2 +0.B2 +1.B2 +B2.B2 +B3 +0.B3 +1.B3 +B3.B3 +B4 +0.B4 +1.B4 +B4.B4 +B5 +0.B5 +1.B5 +B5.B5 +B6 +0.B6 +1.B6 +B6.B6 +B7 +0.B7 +1.B7 +B7.B7 +B8 +0.B8 +1.B8 +B8.B8 +B9 +0.B9 +1.B9 +B9.B9 +BA +0.BA +1.BA +BA.BA +BB +0.BB +1.BB +BB.BB +BC +0.BC +1.BC +BC.BC +BD +0.BD +1.BD +BD.BD +BE +0.BE +1.BE +BE.BE +BF +0.BF +1.BF +BF.BF +C0 +0.C0 +1.C0 +C0.C0 +C1 +0.C1 +1.C1 +C1.C1 +C2 +0.C2 +1.C2 +C2.C2 +C3 +0.C3 +1.C3 +C3.C3 +C4 +0.C4 +1.C4 +C4.C4 +C5 +0.C5 +1.C5 +C5.C5 +C6 +0.C6 +1.C6 +C6.C6 +C7 +0.C7 +1.C7 +C7.C7 +C8 +0.C8 +1.C8 +C8.C8 +C9 +0.C9 +1.C9 +C9.C9 +CA +0.CA +1.CA +CA.CA +CB +0.CB +1.CB +CB.CB +CC +0.CC +1.CC +CC.CC +CD +0.CD +1.CD +CD.CD +CE +0.CE +1.CE +CE.CE +CF +0.CF +1.CF +CF.CF +D0 +0.D0 +1.D0 +D0.D0 +D1 +0.D1 +1.D1 +D1.D1 +D2 +0.D2 +1.D2 +D2.D2 +D3 +0.D3 +1.D3 +D3.D3 +D4 +0.D4 +1.D4 +D4.D4 +D5 +0.D5 +1.D5 +D5.D5 +D6 +0.D6 +1.D6 +D6.D6 +D7 +0.D7 +1.D7 +D7.D7 +D8 +0.D8 +1.D8 +D8.D8 +D9 +0.D9 +1.D9 +D9.D9 +DA +0.DA +1.DA +DA.DA +DB +0.DB +1.DB +DB.DB +DC +0.DC +1.DC +DC.DC +DD +0.DD +1.DD +DD.DD +DE +0.DE +1.DE +DE.DE +DF +0.DF +1.DF +DF.DF +E0 +0.E0 +1.E0 +E0.E0 +E1 +0.E1 +1.E1 +E1.E1 +E2 +0.E2 +1.E2 +E2.E2 +E3 +0.E3 +1.E3 +E3.E3 +E4 +0.E4 +1.E4 +E4.E4 +E5 +0.E5 +1.E5 +E5.E5 +E6 +0.E6 +1.E6 +E6.E6 +E7 +0.E7 +1.E7 +E7.E7 +E8 +0.E8 +1.E8 +E8.E8 +E9 +0.E9 +1.E9 +E9.E9 +EA +0.EA +1.EA +EA.EA +EB +0.EB +1.EB +EB.EB +EC +0.EC +1.EC +EC.EC +ED +0.ED +1.ED +ED.ED +EE +0.EE +1.EE +EE.EE +EF +0.EF +1.EF +EF.EF +F0 +0.F0 +1.F0 +F0.F0 +F1 +0.F1 +1.F1 +F1.F1 +F2 +0.F2 +1.F2 +F2.F2 +F3 +0.F3 +1.F3 +F3.F3 +F4 +0.F4 +1.F4 +F4.F4 +F5 +0.F5 +1.F5 +F5.F5 +F6 +0.F6 +1.F6 +F6.F6 +F7 +0.F7 +1.F7 +F7.F7 +F8 +0.F8 +1.F8 +F8.F8 +F9 +0.F9 +1.F9 +F9.F9 +FA +0.FA +1.FA +FA.FA +FB +0.FB +1.FB +FB.FB +FC +0.FC +1.FC +FC.FC +FD +0.FD +1.FD +FD.FD +FE +0.FE +1.FE +FE.FE +FF +0.FF +1.FF +FF.FF +100 +0.100 +1.100 +100.100 diff --git a/aosp/external/toybox/tests/files/bc/parse_results.txt b/aosp/external/toybox/tests/files/bc/parse_results.txt new file mode 100644 index 0000000000000000000000000000000000000000..3ea3fadc605f6afdb901162713b0e99035bf0a4c --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/parse_results.txt @@ -0,0 +1,14392 @@ +0 +0 +1.0 +0 +1 +.5 +1.5 +1.5 +2 +.50 +1.50 +2.50 +3 +.75 +1.75 +3.75 +4 +.500 +1.500 +4.500 +5 +.625 +1.625 +5.625 +6 +.750 +1.750 +6.750 +7 +.875 +1.875 +7.875 +8 +.5000 +1.5000 +8.5000 +9 +.5625 +1.5625 +9.5625 +10 +.6250 +1.6250 +10.6250 +11 +.6875 +1.6875 +11.6875 +12 +.7500 +1.7500 +12.7500 +13 +.8125 +1.8125 +13.8125 +14 +.8750 +1.8750 +14.8750 +15 +.9375 +1.9375 +15.9375 +16 +.50000 +1.50000 +16.50000 +17 +.53125 +1.53125 +17.53125 +18 +.56250 +1.56250 +18.56250 +19 +.59375 +1.59375 +19.59375 +20 +.62500 +1.62500 +20.62500 +21 +.65625 +1.65625 +21.65625 +22 +.68750 +1.68750 +22.68750 +23 +.71875 +1.71875 +23.71875 +24 +.75000 +1.75000 +24.75000 +25 +.78125 +1.78125 +25.78125 +26 +.81250 +1.81250 +26.81250 +27 +.84375 +1.84375 +27.84375 +28 +.87500 +1.87500 +28.87500 +29 +.90625 +1.90625 +29.90625 +30 +.93750 +1.93750 +30.93750 +31 +.96875 +1.96875 +31.96875 +32 +.500000 +1.500000 +32.500000 +33 +.515625 +1.515625 +33.515625 +34 +.531250 +1.531250 +34.531250 +35 +.546875 +1.546875 +35.546875 +36 +.562500 +1.562500 +36.562500 +37 +.578125 +1.578125 +37.578125 +38 +.593750 +1.593750 +38.593750 +39 +.609375 +1.609375 +39.609375 +40 +.625000 +1.625000 +40.625000 +41 +.640625 +1.640625 +41.640625 +42 +.656250 +1.656250 +42.656250 +43 +.671875 +1.671875 +43.671875 +44 +.687500 +1.687500 +44.687500 +45 +.703125 +1.703125 +45.703125 +46 +.718750 +1.718750 +46.718750 +47 +.734375 +1.734375 +47.734375 +48 +.750000 +1.750000 +48.750000 +49 +.765625 +1.765625 +49.765625 +50 +.781250 +1.781250 +50.781250 +51 +.796875 +1.796875 +51.796875 +52 +.812500 +1.812500 +52.812500 +53 +.828125 +1.828125 +53.828125 +54 +.843750 +1.843750 +54.843750 +55 +.859375 +1.859375 +55.859375 +56 +.875000 +1.875000 +56.875000 +57 +.890625 +1.890625 +57.890625 +58 +.906250 +1.906250 +58.906250 +59 +.921875 +1.921875 +59.921875 +60 +.937500 +1.937500 +60.937500 +61 +.953125 +1.953125 +61.953125 +62 +.968750 +1.968750 +62.968750 +63 +.984375 +1.984375 +63.984375 +64 +.5000000 +1.5000000 +64.5000000 +65 +.5078125 +1.5078125 +65.5078125 +66 +.5156250 +1.5156250 +66.5156250 +67 +.5234375 +1.5234375 +67.5234375 +68 +.5312500 +1.5312500 +68.5312500 +69 +.5390625 +1.5390625 +69.5390625 +70 +.5468750 +1.5468750 +70.5468750 +71 +.5546875 +1.5546875 +71.5546875 +72 +.5625000 +1.5625000 +72.5625000 +73 +.5703125 +1.5703125 +73.5703125 +74 +.5781250 +1.5781250 +74.5781250 +75 +.5859375 +1.5859375 +75.5859375 +76 +.5937500 +1.5937500 +76.5937500 +77 +.6015625 +1.6015625 +77.6015625 +78 +.6093750 +1.6093750 +78.6093750 +79 +.6171875 +1.6171875 +79.6171875 +80 +.6250000 +1.6250000 +80.6250000 +81 +.6328125 +1.6328125 +81.6328125 +82 +.6406250 +1.6406250 +82.6406250 +83 +.6484375 +1.6484375 +83.6484375 +84 +.6562500 +1.6562500 +84.6562500 +85 +.6640625 +1.6640625 +85.6640625 +86 +.6718750 +1.6718750 +86.6718750 +87 +.6796875 +1.6796875 +87.6796875 +88 +.6875000 +1.6875000 +88.6875000 +89 +.6953125 +1.6953125 +89.6953125 +90 +.7031250 +1.7031250 +90.7031250 +91 +.7109375 +1.7109375 +91.7109375 +92 +.7187500 +1.7187500 +92.7187500 +93 +.7265625 +1.7265625 +93.7265625 +94 +.7343750 +1.7343750 +94.7343750 +95 +.7421875 +1.7421875 +95.7421875 +96 +.7500000 +1.7500000 +96.7500000 +97 +.7578125 +1.7578125 +97.7578125 +98 +.7656250 +1.7656250 +98.7656250 +99 +.7734375 +1.7734375 +99.7734375 +100 +.7812500 +1.7812500 +100.7812500 +101 +.7890625 +1.7890625 +101.7890625 +102 +.7968750 +1.7968750 +102.7968750 +103 +.8046875 +1.8046875 +103.8046875 +104 +.8125000 +1.8125000 +104.8125000 +105 +.8203125 +1.8203125 +105.8203125 +106 +.8281250 +1.8281250 +106.8281250 +107 +.8359375 +1.8359375 +107.8359375 +108 +.8437500 +1.8437500 +108.8437500 +109 +.8515625 +1.8515625 +109.8515625 +110 +.8593750 +1.8593750 +110.8593750 +111 +.8671875 +1.8671875 +111.8671875 +112 +.8750000 +1.8750000 +112.8750000 +113 +.8828125 +1.8828125 +113.8828125 +114 +.8906250 +1.8906250 +114.8906250 +115 +.8984375 +1.8984375 +115.8984375 +116 +.9062500 +1.9062500 +116.9062500 +117 +.9140625 +1.9140625 +117.9140625 +118 +.9218750 +1.9218750 +118.9218750 +119 +.9296875 +1.9296875 +119.9296875 +120 +.9375000 +1.9375000 +120.9375000 +121 +.9453125 +1.9453125 +121.9453125 +122 +.9531250 +1.9531250 +122.9531250 +123 +.9609375 +1.9609375 +123.9609375 +124 +.9687500 +1.9687500 +124.9687500 +125 +.9765625 +1.9765625 +125.9765625 +126 +.9843750 +1.9843750 +126.9843750 +127 +.9921875 +1.9921875 +127.9921875 +128 +.50000000 +1.50000000 +128.50000000 +129 +.50390625 +1.50390625 +129.50390625 +130 +.50781250 +1.50781250 +130.50781250 +131 +.51171875 +1.51171875 +131.51171875 +132 +.51562500 +1.51562500 +132.51562500 +133 +.51953125 +1.51953125 +133.51953125 +134 +.52343750 +1.52343750 +134.52343750 +135 +.52734375 +1.52734375 +135.52734375 +136 +.53125000 +1.53125000 +136.53125000 +137 +.53515625 +1.53515625 +137.53515625 +138 +.53906250 +1.53906250 +138.53906250 +139 +.54296875 +1.54296875 +139.54296875 +140 +.54687500 +1.54687500 +140.54687500 +141 +.55078125 +1.55078125 +141.55078125 +142 +.55468750 +1.55468750 +142.55468750 +143 +.55859375 +1.55859375 +143.55859375 +144 +.56250000 +1.56250000 +144.56250000 +145 +.56640625 +1.56640625 +145.56640625 +146 +.57031250 +1.57031250 +146.57031250 +147 +.57421875 +1.57421875 +147.57421875 +148 +.57812500 +1.57812500 +148.57812500 +149 +.58203125 +1.58203125 +149.58203125 +150 +.58593750 +1.58593750 +150.58593750 +151 +.58984375 +1.58984375 +151.58984375 +152 +.59375000 +1.59375000 +152.59375000 +153 +.59765625 +1.59765625 +153.59765625 +154 +.60156250 +1.60156250 +154.60156250 +155 +.60546875 +1.60546875 +155.60546875 +156 +.60937500 +1.60937500 +156.60937500 +157 +.61328125 +1.61328125 +157.61328125 +158 +.61718750 +1.61718750 +158.61718750 +159 +.62109375 +1.62109375 +159.62109375 +160 +.62500000 +1.62500000 +160.62500000 +161 +.62890625 +1.62890625 +161.62890625 +162 +.63281250 +1.63281250 +162.63281250 +163 +.63671875 +1.63671875 +163.63671875 +164 +.64062500 +1.64062500 +164.64062500 +165 +.64453125 +1.64453125 +165.64453125 +166 +.64843750 +1.64843750 +166.64843750 +167 +.65234375 +1.65234375 +167.65234375 +168 +.65625000 +1.65625000 +168.65625000 +169 +.66015625 +1.66015625 +169.66015625 +170 +.66406250 +1.66406250 +170.66406250 +171 +.66796875 +1.66796875 +171.66796875 +172 +.67187500 +1.67187500 +172.67187500 +173 +.67578125 +1.67578125 +173.67578125 +174 +.67968750 +1.67968750 +174.67968750 +175 +.68359375 +1.68359375 +175.68359375 +176 +.68750000 +1.68750000 +176.68750000 +177 +.69140625 +1.69140625 +177.69140625 +178 +.69531250 +1.69531250 +178.69531250 +179 +.69921875 +1.69921875 +179.69921875 +180 +.70312500 +1.70312500 +180.70312500 +181 +.70703125 +1.70703125 +181.70703125 +182 +.71093750 +1.71093750 +182.71093750 +183 +.71484375 +1.71484375 +183.71484375 +184 +.71875000 +1.71875000 +184.71875000 +185 +.72265625 +1.72265625 +185.72265625 +186 +.72656250 +1.72656250 +186.72656250 +187 +.73046875 +1.73046875 +187.73046875 +188 +.73437500 +1.73437500 +188.73437500 +189 +.73828125 +1.73828125 +189.73828125 +190 +.74218750 +1.74218750 +190.74218750 +191 +.74609375 +1.74609375 +191.74609375 +192 +.75000000 +1.75000000 +192.75000000 +193 +.75390625 +1.75390625 +193.75390625 +194 +.75781250 +1.75781250 +194.75781250 +195 +.76171875 +1.76171875 +195.76171875 +196 +.76562500 +1.76562500 +196.76562500 +197 +.76953125 +1.76953125 +197.76953125 +198 +.77343750 +1.77343750 +198.77343750 +199 +.77734375 +1.77734375 +199.77734375 +200 +.78125000 +1.78125000 +200.78125000 +201 +.78515625 +1.78515625 +201.78515625 +202 +.78906250 +1.78906250 +202.78906250 +203 +.79296875 +1.79296875 +203.79296875 +204 +.79687500 +1.79687500 +204.79687500 +205 +.80078125 +1.80078125 +205.80078125 +206 +.80468750 +1.80468750 +206.80468750 +207 +.80859375 +1.80859375 +207.80859375 +208 +.81250000 +1.81250000 +208.81250000 +209 +.81640625 +1.81640625 +209.81640625 +210 +.82031250 +1.82031250 +210.82031250 +211 +.82421875 +1.82421875 +211.82421875 +212 +.82812500 +1.82812500 +212.82812500 +213 +.83203125 +1.83203125 +213.83203125 +214 +.83593750 +1.83593750 +214.83593750 +215 +.83984375 +1.83984375 +215.83984375 +216 +.84375000 +1.84375000 +216.84375000 +217 +.84765625 +1.84765625 +217.84765625 +218 +.85156250 +1.85156250 +218.85156250 +219 +.85546875 +1.85546875 +219.85546875 +220 +.85937500 +1.85937500 +220.85937500 +221 +.86328125 +1.86328125 +221.86328125 +222 +.86718750 +1.86718750 +222.86718750 +223 +.87109375 +1.87109375 +223.87109375 +224 +.87500000 +1.87500000 +224.87500000 +225 +.87890625 +1.87890625 +225.87890625 +226 +.88281250 +1.88281250 +226.88281250 +227 +.88671875 +1.88671875 +227.88671875 +228 +.89062500 +1.89062500 +228.89062500 +229 +.89453125 +1.89453125 +229.89453125 +230 +.89843750 +1.89843750 +230.89843750 +231 +.90234375 +1.90234375 +231.90234375 +232 +.90625000 +1.90625000 +232.90625000 +233 +.91015625 +1.91015625 +233.91015625 +234 +.91406250 +1.91406250 +234.91406250 +235 +.91796875 +1.91796875 +235.91796875 +236 +.92187500 +1.92187500 +236.92187500 +237 +.92578125 +1.92578125 +237.92578125 +238 +.92968750 +1.92968750 +238.92968750 +239 +.93359375 +1.93359375 +239.93359375 +240 +.93750000 +1.93750000 +240.93750000 +241 +.94140625 +1.94140625 +241.94140625 +242 +.94531250 +1.94531250 +242.94531250 +243 +.94921875 +1.94921875 +243.94921875 +244 +.95312500 +1.95312500 +244.95312500 +245 +.95703125 +1.95703125 +245.95703125 +246 +.96093750 +1.96093750 +246.96093750 +247 +.96484375 +1.96484375 +247.96484375 +248 +.96875000 +1.96875000 +248.96875000 +249 +.97265625 +1.97265625 +249.97265625 +250 +.97656250 +1.97656250 +250.97656250 +251 +.98046875 +1.98046875 +251.98046875 +252 +.98437500 +1.98437500 +252.98437500 +253 +.98828125 +1.98828125 +253.98828125 +254 +.99218750 +1.99218750 +254.99218750 +255 +.99609375 +1.99609375 +255.99609375 +256 +.500000000 +1.500000000 +256.500000000 +0 +0 +1.0 +0 +1 +.3 +1.3 +1.3 +2 +.6 +1.6 +2.6 +3 +.33 +1.33 +3.33 +4 +.44 +1.44 +4.44 +5 +.55 +1.55 +5.55 +6 +.66 +1.66 +6.66 +7 +.77 +1.77 +7.77 +8 +.88 +1.88 +8.88 +9 +.333 +1.333 +9.333 +10 +.370 +1.370 +10.370 +11 +.407 +1.407 +11.407 +12 +.444 +1.444 +12.444 +13 +.481 +1.481 +13.481 +14 +.518 +1.518 +14.518 +15 +.555 +1.555 +15.555 +16 +.592 +1.592 +16.592 +17 +.629 +1.629 +17.629 +18 +.666 +1.666 +18.666 +19 +.703 +1.703 +19.703 +20 +.740 +1.740 +20.740 +21 +.777 +1.777 +21.777 +22 +.814 +1.814 +22.814 +23 +.851 +1.851 +23.851 +24 +.888 +1.888 +24.888 +25 +.925 +1.925 +25.925 +26 +.962 +1.962 +26.962 +27 +.3333 +1.3333 +27.3333 +28 +.3456 +1.3456 +28.3456 +29 +.3580 +1.3580 +29.3580 +30 +.3703 +1.3703 +30.3703 +31 +.3827 +1.3827 +31.3827 +32 +.3950 +1.3950 +32.3950 +33 +.4074 +1.4074 +33.4074 +34 +.4197 +1.4197 +34.4197 +35 +.4320 +1.4320 +35.4320 +36 +.4444 +1.4444 +36.4444 +37 +.4567 +1.4567 +37.4567 +38 +.4691 +1.4691 +38.4691 +39 +.4814 +1.4814 +39.4814 +40 +.4938 +1.4938 +40.4938 +41 +.5061 +1.5061 +41.5061 +42 +.5185 +1.5185 +42.5185 +43 +.5308 +1.5308 +43.5308 +44 +.5432 +1.5432 +44.5432 +45 +.5555 +1.5555 +45.5555 +46 +.5679 +1.5679 +46.5679 +47 +.5802 +1.5802 +47.5802 +48 +.5925 +1.5925 +48.5925 +49 +.6049 +1.6049 +49.6049 +50 +.6172 +1.6172 +50.6172 +51 +.6296 +1.6296 +51.6296 +52 +.6419 +1.6419 +52.6419 +53 +.6543 +1.6543 +53.6543 +54 +.6666 +1.6666 +54.6666 +55 +.6790 +1.6790 +55.6790 +56 +.6913 +1.6913 +56.6913 +57 +.7037 +1.7037 +57.7037 +58 +.7160 +1.7160 +58.7160 +59 +.7283 +1.7283 +59.7283 +60 +.7407 +1.7407 +60.7407 +61 +.7530 +1.7530 +61.7530 +62 +.7654 +1.7654 +62.7654 +63 +.7777 +1.7777 +63.7777 +64 +.7901 +1.7901 +64.7901 +65 +.8024 +1.8024 +65.8024 +66 +.8148 +1.8148 +66.8148 +67 +.8271 +1.8271 +67.8271 +68 +.8395 +1.8395 +68.8395 +69 +.8518 +1.8518 +69.8518 +70 +.8641 +1.8641 +70.8641 +71 +.8765 +1.8765 +71.8765 +72 +.8888 +1.8888 +72.8888 +73 +.9012 +1.9012 +73.9012 +74 +.9135 +1.9135 +74.9135 +75 +.9259 +1.9259 +75.9259 +76 +.9382 +1.9382 +76.9382 +77 +.9506 +1.9506 +77.9506 +78 +.9629 +1.9629 +78.9629 +79 +.9753 +1.9753 +79.9753 +80 +.9876 +1.9876 +80.9876 +81 +.33333 +1.33333 +81.33333 +82 +.33744 +1.33744 +82.33744 +83 +.34156 +1.34156 +83.34156 +84 +.34567 +1.34567 +84.34567 +85 +.34979 +1.34979 +85.34979 +86 +.35390 +1.35390 +86.35390 +87 +.35802 +1.35802 +87.35802 +88 +.36213 +1.36213 +88.36213 +89 +.36625 +1.36625 +89.36625 +90 +.37037 +1.37037 +90.37037 +91 +.37448 +1.37448 +91.37448 +92 +.37860 +1.37860 +92.37860 +93 +.38271 +1.38271 +93.38271 +94 +.38683 +1.38683 +94.38683 +95 +.39094 +1.39094 +95.39094 +96 +.39506 +1.39506 +96.39506 +97 +.39917 +1.39917 +97.39917 +98 +.40329 +1.40329 +98.40329 +99 +.40740 +1.40740 +99.40740 +100 +.41152 +1.41152 +100.41152 +101 +.41563 +1.41563 +101.41563 +102 +.41975 +1.41975 +102.41975 +103 +.42386 +1.42386 +103.42386 +104 +.42798 +1.42798 +104.42798 +105 +.43209 +1.43209 +105.43209 +106 +.43621 +1.43621 +106.43621 +107 +.44032 +1.44032 +107.44032 +108 +.44444 +1.44444 +108.44444 +109 +.44855 +1.44855 +109.44855 +110 +.45267 +1.45267 +110.45267 +111 +.45679 +1.45679 +111.45679 +112 +.46090 +1.46090 +112.46090 +113 +.46502 +1.46502 +113.46502 +114 +.46913 +1.46913 +114.46913 +115 +.47325 +1.47325 +115.47325 +116 +.47736 +1.47736 +116.47736 +117 +.48148 +1.48148 +117.48148 +118 +.48559 +1.48559 +118.48559 +119 +.48971 +1.48971 +119.48971 +120 +.49382 +1.49382 +120.49382 +121 +.49794 +1.49794 +121.49794 +122 +.50205 +1.50205 +122.50205 +123 +.50617 +1.50617 +123.50617 +124 +.51028 +1.51028 +124.51028 +125 +.51440 +1.51440 +125.51440 +126 +.51851 +1.51851 +126.51851 +127 +.52263 +1.52263 +127.52263 +128 +.52674 +1.52674 +128.52674 +129 +.53086 +1.53086 +129.53086 +130 +.53497 +1.53497 +130.53497 +131 +.53909 +1.53909 +131.53909 +132 +.54320 +1.54320 +132.54320 +133 +.54732 +1.54732 +133.54732 +134 +.55144 +1.55144 +134.55144 +135 +.55555 +1.55555 +135.55555 +136 +.55967 +1.55967 +136.55967 +137 +.56378 +1.56378 +137.56378 +138 +.56790 +1.56790 +138.56790 +139 +.57201 +1.57201 +139.57201 +140 +.57613 +1.57613 +140.57613 +141 +.58024 +1.58024 +141.58024 +142 +.58436 +1.58436 +142.58436 +143 +.58847 +1.58847 +143.58847 +144 +.59259 +1.59259 +144.59259 +145 +.59670 +1.59670 +145.59670 +146 +.60082 +1.60082 +146.60082 +147 +.60493 +1.60493 +147.60493 +148 +.60905 +1.60905 +148.60905 +149 +.61316 +1.61316 +149.61316 +150 +.61728 +1.61728 +150.61728 +151 +.62139 +1.62139 +151.62139 +152 +.62551 +1.62551 +152.62551 +153 +.62962 +1.62962 +153.62962 +154 +.63374 +1.63374 +154.63374 +155 +.63786 +1.63786 +155.63786 +156 +.64197 +1.64197 +156.64197 +157 +.64609 +1.64609 +157.64609 +158 +.65020 +1.65020 +158.65020 +159 +.65432 +1.65432 +159.65432 +160 +.65843 +1.65843 +160.65843 +161 +.66255 +1.66255 +161.66255 +162 +.66666 +1.66666 +162.66666 +163 +.67078 +1.67078 +163.67078 +164 +.67489 +1.67489 +164.67489 +165 +.67901 +1.67901 +165.67901 +166 +.68312 +1.68312 +166.68312 +167 +.68724 +1.68724 +167.68724 +168 +.69135 +1.69135 +168.69135 +169 +.69547 +1.69547 +169.69547 +170 +.69958 +1.69958 +170.69958 +171 +.70370 +1.70370 +171.70370 +172 +.70781 +1.70781 +172.70781 +173 +.71193 +1.71193 +173.71193 +174 +.71604 +1.71604 +174.71604 +175 +.72016 +1.72016 +175.72016 +176 +.72427 +1.72427 +176.72427 +177 +.72839 +1.72839 +177.72839 +178 +.73251 +1.73251 +178.73251 +179 +.73662 +1.73662 +179.73662 +180 +.74074 +1.74074 +180.74074 +181 +.74485 +1.74485 +181.74485 +182 +.74897 +1.74897 +182.74897 +183 +.75308 +1.75308 +183.75308 +184 +.75720 +1.75720 +184.75720 +185 +.76131 +1.76131 +185.76131 +186 +.76543 +1.76543 +186.76543 +187 +.76954 +1.76954 +187.76954 +188 +.77366 +1.77366 +188.77366 +189 +.77777 +1.77777 +189.77777 +190 +.78189 +1.78189 +190.78189 +191 +.78600 +1.78600 +191.78600 +192 +.79012 +1.79012 +192.79012 +193 +.79423 +1.79423 +193.79423 +194 +.79835 +1.79835 +194.79835 +195 +.80246 +1.80246 +195.80246 +196 +.80658 +1.80658 +196.80658 +197 +.81069 +1.81069 +197.81069 +198 +.81481 +1.81481 +198.81481 +199 +.81893 +1.81893 +199.81893 +200 +.82304 +1.82304 +200.82304 +201 +.82716 +1.82716 +201.82716 +202 +.83127 +1.83127 +202.83127 +203 +.83539 +1.83539 +203.83539 +204 +.83950 +1.83950 +204.83950 +205 +.84362 +1.84362 +205.84362 +206 +.84773 +1.84773 +206.84773 +207 +.85185 +1.85185 +207.85185 +208 +.85596 +1.85596 +208.85596 +209 +.86008 +1.86008 +209.86008 +210 +.86419 +1.86419 +210.86419 +211 +.86831 +1.86831 +211.86831 +212 +.87242 +1.87242 +212.87242 +213 +.87654 +1.87654 +213.87654 +214 +.88065 +1.88065 +214.88065 +215 +.88477 +1.88477 +215.88477 +216 +.88888 +1.88888 +216.88888 +217 +.89300 +1.89300 +217.89300 +218 +.89711 +1.89711 +218.89711 +219 +.90123 +1.90123 +219.90123 +220 +.90534 +1.90534 +220.90534 +221 +.90946 +1.90946 +221.90946 +222 +.91358 +1.91358 +222.91358 +223 +.91769 +1.91769 +223.91769 +224 +.92181 +1.92181 +224.92181 +225 +.92592 +1.92592 +225.92592 +226 +.93004 +1.93004 +226.93004 +227 +.93415 +1.93415 +227.93415 +228 +.93827 +1.93827 +228.93827 +229 +.94238 +1.94238 +229.94238 +230 +.94650 +1.94650 +230.94650 +231 +.95061 +1.95061 +231.95061 +232 +.95473 +1.95473 +232.95473 +233 +.95884 +1.95884 +233.95884 +234 +.96296 +1.96296 +234.96296 +235 +.96707 +1.96707 +235.96707 +236 +.97119 +1.97119 +236.97119 +237 +.97530 +1.97530 +237.97530 +238 +.97942 +1.97942 +238.97942 +239 +.98353 +1.98353 +239.98353 +240 +.98765 +1.98765 +240.98765 +241 +.99176 +1.99176 +241.99176 +242 +.99588 +1.99588 +242.99588 +243 +.333333 +1.333333 +243.333333 +244 +.334705 +1.334705 +244.334705 +245 +.336076 +1.336076 +245.336076 +246 +.337448 +1.337448 +246.337448 +247 +.338820 +1.338820 +247.338820 +248 +.340192 +1.340192 +248.340192 +249 +.341563 +1.341563 +249.341563 +250 +.342935 +1.342935 +250.342935 +251 +.344307 +1.344307 +251.344307 +252 +.345679 +1.345679 +252.345679 +253 +.347050 +1.347050 +253.347050 +254 +.348422 +1.348422 +254.348422 +255 +.349794 +1.349794 +255.349794 +256 +.351165 +1.351165 +256.351165 +0 +0 +1.0 +0 +1 +.2 +1.2 +1.2 +2 +.5 +1.5 +2.5 +3 +.7 +1.7 +3.7 +4 +.25 +1.25 +4.25 +5 +.31 +1.31 +5.31 +6 +.37 +1.37 +6.37 +7 +.43 +1.43 +7.43 +8 +.50 +1.50 +8.50 +9 +.56 +1.56 +9.56 +10 +.62 +1.62 +10.62 +11 +.68 +1.68 +11.68 +12 +.75 +1.75 +12.75 +13 +.81 +1.81 +13.81 +14 +.87 +1.87 +14.87 +15 +.93 +1.93 +15.93 +16 +.250 +1.250 +16.250 +17 +.265 +1.265 +17.265 +18 +.281 +1.281 +18.281 +19 +.296 +1.296 +19.296 +20 +.312 +1.312 +20.312 +21 +.328 +1.328 +21.328 +22 +.343 +1.343 +22.343 +23 +.359 +1.359 +23.359 +24 +.375 +1.375 +24.375 +25 +.390 +1.390 +25.390 +26 +.406 +1.406 +26.406 +27 +.421 +1.421 +27.421 +28 +.437 +1.437 +28.437 +29 +.453 +1.453 +29.453 +30 +.468 +1.468 +30.468 +31 +.484 +1.484 +31.484 +32 +.500 +1.500 +32.500 +33 +.515 +1.515 +33.515 +34 +.531 +1.531 +34.531 +35 +.546 +1.546 +35.546 +36 +.562 +1.562 +36.562 +37 +.578 +1.578 +37.578 +38 +.593 +1.593 +38.593 +39 +.609 +1.609 +39.609 +40 +.625 +1.625 +40.625 +41 +.640 +1.640 +41.640 +42 +.656 +1.656 +42.656 +43 +.671 +1.671 +43.671 +44 +.687 +1.687 +44.687 +45 +.703 +1.703 +45.703 +46 +.718 +1.718 +46.718 +47 +.734 +1.734 +47.734 +48 +.750 +1.750 +48.750 +49 +.765 +1.765 +49.765 +50 +.781 +1.781 +50.781 +51 +.796 +1.796 +51.796 +52 +.812 +1.812 +52.812 +53 +.828 +1.828 +53.828 +54 +.843 +1.843 +54.843 +55 +.859 +1.859 +55.859 +56 +.875 +1.875 +56.875 +57 +.890 +1.890 +57.890 +58 +.906 +1.906 +58.906 +59 +.921 +1.921 +59.921 +60 +.937 +1.937 +60.937 +61 +.953 +1.953 +61.953 +62 +.968 +1.968 +62.968 +63 +.984 +1.984 +63.984 +64 +.2500 +1.2500 +64.2500 +65 +.2539 +1.2539 +65.2539 +66 +.2578 +1.2578 +66.2578 +67 +.2617 +1.2617 +67.2617 +68 +.2656 +1.2656 +68.2656 +69 +.2695 +1.2695 +69.2695 +70 +.2734 +1.2734 +70.2734 +71 +.2773 +1.2773 +71.2773 +72 +.2812 +1.2812 +72.2812 +73 +.2851 +1.2851 +73.2851 +74 +.2890 +1.2890 +74.2890 +75 +.2929 +1.2929 +75.2929 +76 +.2968 +1.2968 +76.2968 +77 +.3007 +1.3007 +77.3007 +78 +.3046 +1.3046 +78.3046 +79 +.3085 +1.3085 +79.3085 +80 +.3125 +1.3125 +80.3125 +81 +.3164 +1.3164 +81.3164 +82 +.3203 +1.3203 +82.3203 +83 +.3242 +1.3242 +83.3242 +84 +.3281 +1.3281 +84.3281 +85 +.3320 +1.3320 +85.3320 +86 +.3359 +1.3359 +86.3359 +87 +.3398 +1.3398 +87.3398 +88 +.3437 +1.3437 +88.3437 +89 +.3476 +1.3476 +89.3476 +90 +.3515 +1.3515 +90.3515 +91 +.3554 +1.3554 +91.3554 +92 +.3593 +1.3593 +92.3593 +93 +.3632 +1.3632 +93.3632 +94 +.3671 +1.3671 +94.3671 +95 +.3710 +1.3710 +95.3710 +96 +.3750 +1.3750 +96.3750 +97 +.3789 +1.3789 +97.3789 +98 +.3828 +1.3828 +98.3828 +99 +.3867 +1.3867 +99.3867 +100 +.3906 +1.3906 +100.3906 +101 +.3945 +1.3945 +101.3945 +102 +.3984 +1.3984 +102.3984 +103 +.4023 +1.4023 +103.4023 +104 +.4062 +1.4062 +104.4062 +105 +.4101 +1.4101 +105.4101 +106 +.4140 +1.4140 +106.4140 +107 +.4179 +1.4179 +107.4179 +108 +.4218 +1.4218 +108.4218 +109 +.4257 +1.4257 +109.4257 +110 +.4296 +1.4296 +110.4296 +111 +.4335 +1.4335 +111.4335 +112 +.4375 +1.4375 +112.4375 +113 +.4414 +1.4414 +113.4414 +114 +.4453 +1.4453 +114.4453 +115 +.4492 +1.4492 +115.4492 +116 +.4531 +1.4531 +116.4531 +117 +.4570 +1.4570 +117.4570 +118 +.4609 +1.4609 +118.4609 +119 +.4648 +1.4648 +119.4648 +120 +.4687 +1.4687 +120.4687 +121 +.4726 +1.4726 +121.4726 +122 +.4765 +1.4765 +122.4765 +123 +.4804 +1.4804 +123.4804 +124 +.4843 +1.4843 +124.4843 +125 +.4882 +1.4882 +125.4882 +126 +.4921 +1.4921 +126.4921 +127 +.4960 +1.4960 +127.4960 +128 +.5000 +1.5000 +128.5000 +129 +.5039 +1.5039 +129.5039 +130 +.5078 +1.5078 +130.5078 +131 +.5117 +1.5117 +131.5117 +132 +.5156 +1.5156 +132.5156 +133 +.5195 +1.5195 +133.5195 +134 +.5234 +1.5234 +134.5234 +135 +.5273 +1.5273 +135.5273 +136 +.5312 +1.5312 +136.5312 +137 +.5351 +1.5351 +137.5351 +138 +.5390 +1.5390 +138.5390 +139 +.5429 +1.5429 +139.5429 +140 +.5468 +1.5468 +140.5468 +141 +.5507 +1.5507 +141.5507 +142 +.5546 +1.5546 +142.5546 +143 +.5585 +1.5585 +143.5585 +144 +.5625 +1.5625 +144.5625 +145 +.5664 +1.5664 +145.5664 +146 +.5703 +1.5703 +146.5703 +147 +.5742 +1.5742 +147.5742 +148 +.5781 +1.5781 +148.5781 +149 +.5820 +1.5820 +149.5820 +150 +.5859 +1.5859 +150.5859 +151 +.5898 +1.5898 +151.5898 +152 +.5937 +1.5937 +152.5937 +153 +.5976 +1.5976 +153.5976 +154 +.6015 +1.6015 +154.6015 +155 +.6054 +1.6054 +155.6054 +156 +.6093 +1.6093 +156.6093 +157 +.6132 +1.6132 +157.6132 +158 +.6171 +1.6171 +158.6171 +159 +.6210 +1.6210 +159.6210 +160 +.6250 +1.6250 +160.6250 +161 +.6289 +1.6289 +161.6289 +162 +.6328 +1.6328 +162.6328 +163 +.6367 +1.6367 +163.6367 +164 +.6406 +1.6406 +164.6406 +165 +.6445 +1.6445 +165.6445 +166 +.6484 +1.6484 +166.6484 +167 +.6523 +1.6523 +167.6523 +168 +.6562 +1.6562 +168.6562 +169 +.6601 +1.6601 +169.6601 +170 +.6640 +1.6640 +170.6640 +171 +.6679 +1.6679 +171.6679 +172 +.6718 +1.6718 +172.6718 +173 +.6757 +1.6757 +173.6757 +174 +.6796 +1.6796 +174.6796 +175 +.6835 +1.6835 +175.6835 +176 +.6875 +1.6875 +176.6875 +177 +.6914 +1.6914 +177.6914 +178 +.6953 +1.6953 +178.6953 +179 +.6992 +1.6992 +179.6992 +180 +.7031 +1.7031 +180.7031 +181 +.7070 +1.7070 +181.7070 +182 +.7109 +1.7109 +182.7109 +183 +.7148 +1.7148 +183.7148 +184 +.7187 +1.7187 +184.7187 +185 +.7226 +1.7226 +185.7226 +186 +.7265 +1.7265 +186.7265 +187 +.7304 +1.7304 +187.7304 +188 +.7343 +1.7343 +188.7343 +189 +.7382 +1.7382 +189.7382 +190 +.7421 +1.7421 +190.7421 +191 +.7460 +1.7460 +191.7460 +192 +.7500 +1.7500 +192.7500 +193 +.7539 +1.7539 +193.7539 +194 +.7578 +1.7578 +194.7578 +195 +.7617 +1.7617 +195.7617 +196 +.7656 +1.7656 +196.7656 +197 +.7695 +1.7695 +197.7695 +198 +.7734 +1.7734 +198.7734 +199 +.7773 +1.7773 +199.7773 +200 +.7812 +1.7812 +200.7812 +201 +.7851 +1.7851 +201.7851 +202 +.7890 +1.7890 +202.7890 +203 +.7929 +1.7929 +203.7929 +204 +.7968 +1.7968 +204.7968 +205 +.8007 +1.8007 +205.8007 +206 +.8046 +1.8046 +206.8046 +207 +.8085 +1.8085 +207.8085 +208 +.8125 +1.8125 +208.8125 +209 +.8164 +1.8164 +209.8164 +210 +.8203 +1.8203 +210.8203 +211 +.8242 +1.8242 +211.8242 +212 +.8281 +1.8281 +212.8281 +213 +.8320 +1.8320 +213.8320 +214 +.8359 +1.8359 +214.8359 +215 +.8398 +1.8398 +215.8398 +216 +.8437 +1.8437 +216.8437 +217 +.8476 +1.8476 +217.8476 +218 +.8515 +1.8515 +218.8515 +219 +.8554 +1.8554 +219.8554 +220 +.8593 +1.8593 +220.8593 +221 +.8632 +1.8632 +221.8632 +222 +.8671 +1.8671 +222.8671 +223 +.8710 +1.8710 +223.8710 +224 +.8750 +1.8750 +224.8750 +225 +.8789 +1.8789 +225.8789 +226 +.8828 +1.8828 +226.8828 +227 +.8867 +1.8867 +227.8867 +228 +.8906 +1.8906 +228.8906 +229 +.8945 +1.8945 +229.8945 +230 +.8984 +1.8984 +230.8984 +231 +.9023 +1.9023 +231.9023 +232 +.9062 +1.9062 +232.9062 +233 +.9101 +1.9101 +233.9101 +234 +.9140 +1.9140 +234.9140 +235 +.9179 +1.9179 +235.9179 +236 +.9218 +1.9218 +236.9218 +237 +.9257 +1.9257 +237.9257 +238 +.9296 +1.9296 +238.9296 +239 +.9335 +1.9335 +239.9335 +240 +.9375 +1.9375 +240.9375 +241 +.9414 +1.9414 +241.9414 +242 +.9453 +1.9453 +242.9453 +243 +.9492 +1.9492 +243.9492 +244 +.9531 +1.9531 +244.9531 +245 +.9570 +1.9570 +245.9570 +246 +.9609 +1.9609 +246.9609 +247 +.9648 +1.9648 +247.9648 +248 +.9687 +1.9687 +248.9687 +249 +.9726 +1.9726 +249.9726 +250 +.9765 +1.9765 +250.9765 +251 +.9804 +1.9804 +251.9804 +252 +.9843 +1.9843 +252.9843 +253 +.9882 +1.9882 +253.9882 +254 +.9921 +1.9921 +254.9921 +255 +.9960 +1.9960 +255.9960 +256 +.25000 +1.25000 +256.25000 +0 +0 +1.0 +0 +1 +.2 +1.2 +1.2 +2 +.4 +1.4 +2.4 +3 +.6 +1.6 +3.6 +4 +.8 +1.8 +4.8 +5 +.20 +1.20 +5.20 +6 +.24 +1.24 +6.24 +7 +.28 +1.28 +7.28 +8 +.32 +1.32 +8.32 +9 +.36 +1.36 +9.36 +10 +.40 +1.40 +10.40 +11 +.44 +1.44 +11.44 +12 +.48 +1.48 +12.48 +13 +.52 +1.52 +13.52 +14 +.56 +1.56 +14.56 +15 +.60 +1.60 +15.60 +16 +.64 +1.64 +16.64 +17 +.68 +1.68 +17.68 +18 +.72 +1.72 +18.72 +19 +.76 +1.76 +19.76 +20 +.80 +1.80 +20.80 +21 +.84 +1.84 +21.84 +22 +.88 +1.88 +22.88 +23 +.92 +1.92 +23.92 +24 +.96 +1.96 +24.96 +25 +.200 +1.200 +25.200 +26 +.208 +1.208 +26.208 +27 +.216 +1.216 +27.216 +28 +.224 +1.224 +28.224 +29 +.232 +1.232 +29.232 +30 +.240 +1.240 +30.240 +31 +.248 +1.248 +31.248 +32 +.256 +1.256 +32.256 +33 +.264 +1.264 +33.264 +34 +.272 +1.272 +34.272 +35 +.280 +1.280 +35.280 +36 +.288 +1.288 +36.288 +37 +.296 +1.296 +37.296 +38 +.304 +1.304 +38.304 +39 +.312 +1.312 +39.312 +40 +.320 +1.320 +40.320 +41 +.328 +1.328 +41.328 +42 +.336 +1.336 +42.336 +43 +.344 +1.344 +43.344 +44 +.352 +1.352 +44.352 +45 +.360 +1.360 +45.360 +46 +.368 +1.368 +46.368 +47 +.376 +1.376 +47.376 +48 +.384 +1.384 +48.384 +49 +.392 +1.392 +49.392 +50 +.400 +1.400 +50.400 +51 +.408 +1.408 +51.408 +52 +.416 +1.416 +52.416 +53 +.424 +1.424 +53.424 +54 +.432 +1.432 +54.432 +55 +.440 +1.440 +55.440 +56 +.448 +1.448 +56.448 +57 +.456 +1.456 +57.456 +58 +.464 +1.464 +58.464 +59 +.472 +1.472 +59.472 +60 +.480 +1.480 +60.480 +61 +.488 +1.488 +61.488 +62 +.496 +1.496 +62.496 +63 +.504 +1.504 +63.504 +64 +.512 +1.512 +64.512 +65 +.520 +1.520 +65.520 +66 +.528 +1.528 +66.528 +67 +.536 +1.536 +67.536 +68 +.544 +1.544 +68.544 +69 +.552 +1.552 +69.552 +70 +.560 +1.560 +70.560 +71 +.568 +1.568 +71.568 +72 +.576 +1.576 +72.576 +73 +.584 +1.584 +73.584 +74 +.592 +1.592 +74.592 +75 +.600 +1.600 +75.600 +76 +.608 +1.608 +76.608 +77 +.616 +1.616 +77.616 +78 +.624 +1.624 +78.624 +79 +.632 +1.632 +79.632 +80 +.640 +1.640 +80.640 +81 +.648 +1.648 +81.648 +82 +.656 +1.656 +82.656 +83 +.664 +1.664 +83.664 +84 +.672 +1.672 +84.672 +85 +.680 +1.680 +85.680 +86 +.688 +1.688 +86.688 +87 +.696 +1.696 +87.696 +88 +.704 +1.704 +88.704 +89 +.712 +1.712 +89.712 +90 +.720 +1.720 +90.720 +91 +.728 +1.728 +91.728 +92 +.736 +1.736 +92.736 +93 +.744 +1.744 +93.744 +94 +.752 +1.752 +94.752 +95 +.760 +1.760 +95.760 +96 +.768 +1.768 +96.768 +97 +.776 +1.776 +97.776 +98 +.784 +1.784 +98.784 +99 +.792 +1.792 +99.792 +100 +.800 +1.800 +100.800 +101 +.808 +1.808 +101.808 +102 +.816 +1.816 +102.816 +103 +.824 +1.824 +103.824 +104 +.832 +1.832 +104.832 +105 +.840 +1.840 +105.840 +106 +.848 +1.848 +106.848 +107 +.856 +1.856 +107.856 +108 +.864 +1.864 +108.864 +109 +.872 +1.872 +109.872 +110 +.880 +1.880 +110.880 +111 +.888 +1.888 +111.888 +112 +.896 +1.896 +112.896 +113 +.904 +1.904 +113.904 +114 +.912 +1.912 +114.912 +115 +.920 +1.920 +115.920 +116 +.928 +1.928 +116.928 +117 +.936 +1.936 +117.936 +118 +.944 +1.944 +118.944 +119 +.952 +1.952 +119.952 +120 +.960 +1.960 +120.960 +121 +.968 +1.968 +121.968 +122 +.976 +1.976 +122.976 +123 +.984 +1.984 +123.984 +124 +.992 +1.992 +124.992 +125 +.2000 +1.2000 +125.2000 +126 +.2016 +1.2016 +126.2016 +127 +.2032 +1.2032 +127.2032 +128 +.2048 +1.2048 +128.2048 +129 +.2064 +1.2064 +129.2064 +130 +.2080 +1.2080 +130.2080 +131 +.2096 +1.2096 +131.2096 +132 +.2112 +1.2112 +132.2112 +133 +.2128 +1.2128 +133.2128 +134 +.2144 +1.2144 +134.2144 +135 +.2160 +1.2160 +135.2160 +136 +.2176 +1.2176 +136.2176 +137 +.2192 +1.2192 +137.2192 +138 +.2208 +1.2208 +138.2208 +139 +.2224 +1.2224 +139.2224 +140 +.2240 +1.2240 +140.2240 +141 +.2256 +1.2256 +141.2256 +142 +.2272 +1.2272 +142.2272 +143 +.2288 +1.2288 +143.2288 +144 +.2304 +1.2304 +144.2304 +145 +.2320 +1.2320 +145.2320 +146 +.2336 +1.2336 +146.2336 +147 +.2352 +1.2352 +147.2352 +148 +.2368 +1.2368 +148.2368 +149 +.2384 +1.2384 +149.2384 +150 +.2400 +1.2400 +150.2400 +151 +.2416 +1.2416 +151.2416 +152 +.2432 +1.2432 +152.2432 +153 +.2448 +1.2448 +153.2448 +154 +.2464 +1.2464 +154.2464 +155 +.2480 +1.2480 +155.2480 +156 +.2496 +1.2496 +156.2496 +157 +.2512 +1.2512 +157.2512 +158 +.2528 +1.2528 +158.2528 +159 +.2544 +1.2544 +159.2544 +160 +.2560 +1.2560 +160.2560 +161 +.2576 +1.2576 +161.2576 +162 +.2592 +1.2592 +162.2592 +163 +.2608 +1.2608 +163.2608 +164 +.2624 +1.2624 +164.2624 +165 +.2640 +1.2640 +165.2640 +166 +.2656 +1.2656 +166.2656 +167 +.2672 +1.2672 +167.2672 +168 +.2688 +1.2688 +168.2688 +169 +.2704 +1.2704 +169.2704 +170 +.2720 +1.2720 +170.2720 +171 +.2736 +1.2736 +171.2736 +172 +.2752 +1.2752 +172.2752 +173 +.2768 +1.2768 +173.2768 +174 +.2784 +1.2784 +174.2784 +175 +.2800 +1.2800 +175.2800 +176 +.2816 +1.2816 +176.2816 +177 +.2832 +1.2832 +177.2832 +178 +.2848 +1.2848 +178.2848 +179 +.2864 +1.2864 +179.2864 +180 +.2880 +1.2880 +180.2880 +181 +.2896 +1.2896 +181.2896 +182 +.2912 +1.2912 +182.2912 +183 +.2928 +1.2928 +183.2928 +184 +.2944 +1.2944 +184.2944 +185 +.2960 +1.2960 +185.2960 +186 +.2976 +1.2976 +186.2976 +187 +.2992 +1.2992 +187.2992 +188 +.3008 +1.3008 +188.3008 +189 +.3024 +1.3024 +189.3024 +190 +.3040 +1.3040 +190.3040 +191 +.3056 +1.3056 +191.3056 +192 +.3072 +1.3072 +192.3072 +193 +.3088 +1.3088 +193.3088 +194 +.3104 +1.3104 +194.3104 +195 +.3120 +1.3120 +195.3120 +196 +.3136 +1.3136 +196.3136 +197 +.3152 +1.3152 +197.3152 +198 +.3168 +1.3168 +198.3168 +199 +.3184 +1.3184 +199.3184 +200 +.3200 +1.3200 +200.3200 +201 +.3216 +1.3216 +201.3216 +202 +.3232 +1.3232 +202.3232 +203 +.3248 +1.3248 +203.3248 +204 +.3264 +1.3264 +204.3264 +205 +.3280 +1.3280 +205.3280 +206 +.3296 +1.3296 +206.3296 +207 +.3312 +1.3312 +207.3312 +208 +.3328 +1.3328 +208.3328 +209 +.3344 +1.3344 +209.3344 +210 +.3360 +1.3360 +210.3360 +211 +.3376 +1.3376 +211.3376 +212 +.3392 +1.3392 +212.3392 +213 +.3408 +1.3408 +213.3408 +214 +.3424 +1.3424 +214.3424 +215 +.3440 +1.3440 +215.3440 +216 +.3456 +1.3456 +216.3456 +217 +.3472 +1.3472 +217.3472 +218 +.3488 +1.3488 +218.3488 +219 +.3504 +1.3504 +219.3504 +220 +.3520 +1.3520 +220.3520 +221 +.3536 +1.3536 +221.3536 +222 +.3552 +1.3552 +222.3552 +223 +.3568 +1.3568 +223.3568 +224 +.3584 +1.3584 +224.3584 +225 +.3600 +1.3600 +225.3600 +226 +.3616 +1.3616 +226.3616 +227 +.3632 +1.3632 +227.3632 +228 +.3648 +1.3648 +228.3648 +229 +.3664 +1.3664 +229.3664 +230 +.3680 +1.3680 +230.3680 +231 +.3696 +1.3696 +231.3696 +232 +.3712 +1.3712 +232.3712 +233 +.3728 +1.3728 +233.3728 +234 +.3744 +1.3744 +234.3744 +235 +.3760 +1.3760 +235.3760 +236 +.3776 +1.3776 +236.3776 +237 +.3792 +1.3792 +237.3792 +238 +.3808 +1.3808 +238.3808 +239 +.3824 +1.3824 +239.3824 +240 +.3840 +1.3840 +240.3840 +241 +.3856 +1.3856 +241.3856 +242 +.3872 +1.3872 +242.3872 +243 +.3888 +1.3888 +243.3888 +244 +.3904 +1.3904 +244.3904 +245 +.3920 +1.3920 +245.3920 +246 +.3936 +1.3936 +246.3936 +247 +.3952 +1.3952 +247.3952 +248 +.3968 +1.3968 +248.3968 +249 +.3984 +1.3984 +249.3984 +250 +.4000 +1.4000 +250.4000 +251 +.4016 +1.4016 +251.4016 +252 +.4032 +1.4032 +252.4032 +253 +.4048 +1.4048 +253.4048 +254 +.4064 +1.4064 +254.4064 +255 +.4080 +1.4080 +255.4080 +256 +.4096 +1.4096 +256.4096 +0 +0 +1.0 +0 +1 +.1 +1.1 +1.1 +2 +.3 +1.3 +2.3 +3 +.5 +1.5 +3.5 +4 +.6 +1.6 +4.6 +5 +.8 +1.8 +5.8 +6 +.16 +1.16 +6.16 +7 +.19 +1.19 +7.19 +8 +.22 +1.22 +8.22 +9 +.25 +1.25 +9.25 +10 +.27 +1.27 +10.27 +11 +.30 +1.30 +11.30 +12 +.33 +1.33 +12.33 +13 +.36 +1.36 +13.36 +14 +.38 +1.38 +14.38 +15 +.41 +1.41 +15.41 +16 +.44 +1.44 +16.44 +17 +.47 +1.47 +17.47 +18 +.50 +1.50 +18.50 +19 +.52 +1.52 +19.52 +20 +.55 +1.55 +20.55 +21 +.58 +1.58 +21.58 +22 +.61 +1.61 +22.61 +23 +.63 +1.63 +23.63 +24 +.66 +1.66 +24.66 +25 +.69 +1.69 +25.69 +26 +.72 +1.72 +26.72 +27 +.75 +1.75 +27.75 +28 +.77 +1.77 +28.77 +29 +.80 +1.80 +29.80 +30 +.83 +1.83 +30.83 +31 +.86 +1.86 +31.86 +32 +.88 +1.88 +32.88 +33 +.91 +1.91 +33.91 +34 +.94 +1.94 +34.94 +35 +.97 +1.97 +35.97 +36 +.166 +1.166 +36.166 +37 +.171 +1.171 +37.171 +38 +.175 +1.175 +38.175 +39 +.180 +1.180 +39.180 +40 +.185 +1.185 +40.185 +41 +.189 +1.189 +41.189 +42 +.194 +1.194 +42.194 +43 +.199 +1.199 +43.199 +44 +.203 +1.203 +44.203 +45 +.208 +1.208 +45.208 +46 +.212 +1.212 +46.212 +47 +.217 +1.217 +47.217 +48 +.222 +1.222 +48.222 +49 +.226 +1.226 +49.226 +50 +.231 +1.231 +50.231 +51 +.236 +1.236 +51.236 +52 +.240 +1.240 +52.240 +53 +.245 +1.245 +53.245 +54 +.250 +1.250 +54.250 +55 +.254 +1.254 +55.254 +56 +.259 +1.259 +56.259 +57 +.263 +1.263 +57.263 +58 +.268 +1.268 +58.268 +59 +.273 +1.273 +59.273 +60 +.277 +1.277 +60.277 +61 +.282 +1.282 +61.282 +62 +.287 +1.287 +62.287 +63 +.291 +1.291 +63.291 +64 +.296 +1.296 +64.296 +65 +.300 +1.300 +65.300 +66 +.305 +1.305 +66.305 +67 +.310 +1.310 +67.310 +68 +.314 +1.314 +68.314 +69 +.319 +1.319 +69.319 +70 +.324 +1.324 +70.324 +71 +.328 +1.328 +71.328 +72 +.333 +1.333 +72.333 +73 +.337 +1.337 +73.337 +74 +.342 +1.342 +74.342 +75 +.347 +1.347 +75.347 +76 +.351 +1.351 +76.351 +77 +.356 +1.356 +77.356 +78 +.361 +1.361 +78.361 +79 +.365 +1.365 +79.365 +80 +.370 +1.370 +80.370 +81 +.375 +1.375 +81.375 +82 +.379 +1.379 +82.379 +83 +.384 +1.384 +83.384 +84 +.388 +1.388 +84.388 +85 +.393 +1.393 +85.393 +86 +.398 +1.398 +86.398 +87 +.402 +1.402 +87.402 +88 +.407 +1.407 +88.407 +89 +.412 +1.412 +89.412 +90 +.416 +1.416 +90.416 +91 +.421 +1.421 +91.421 +92 +.425 +1.425 +92.425 +93 +.430 +1.430 +93.430 +94 +.435 +1.435 +94.435 +95 +.439 +1.439 +95.439 +96 +.444 +1.444 +96.444 +97 +.449 +1.449 +97.449 +98 +.453 +1.453 +98.453 +99 +.458 +1.458 +99.458 +100 +.462 +1.462 +100.462 +101 +.467 +1.467 +101.467 +102 +.472 +1.472 +102.472 +103 +.476 +1.476 +103.476 +104 +.481 +1.481 +104.481 +105 +.486 +1.486 +105.486 +106 +.490 +1.490 +106.490 +107 +.495 +1.495 +107.495 +108 +.500 +1.500 +108.500 +109 +.504 +1.504 +109.504 +110 +.509 +1.509 +110.509 +111 +.513 +1.513 +111.513 +112 +.518 +1.518 +112.518 +113 +.523 +1.523 +113.523 +114 +.527 +1.527 +114.527 +115 +.532 +1.532 +115.532 +116 +.537 +1.537 +116.537 +117 +.541 +1.541 +117.541 +118 +.546 +1.546 +118.546 +119 +.550 +1.550 +119.550 +120 +.555 +1.555 +120.555 +121 +.560 +1.560 +121.560 +122 +.564 +1.564 +122.564 +123 +.569 +1.569 +123.569 +124 +.574 +1.574 +124.574 +125 +.578 +1.578 +125.578 +126 +.583 +1.583 +126.583 +127 +.587 +1.587 +127.587 +128 +.592 +1.592 +128.592 +129 +.597 +1.597 +129.597 +130 +.601 +1.601 +130.601 +131 +.606 +1.606 +131.606 +132 +.611 +1.611 +132.611 +133 +.615 +1.615 +133.615 +134 +.620 +1.620 +134.620 +135 +.625 +1.625 +135.625 +136 +.629 +1.629 +136.629 +137 +.634 +1.634 +137.634 +138 +.638 +1.638 +138.638 +139 +.643 +1.643 +139.643 +140 +.648 +1.648 +140.648 +141 +.652 +1.652 +141.652 +142 +.657 +1.657 +142.657 +143 +.662 +1.662 +143.662 +144 +.666 +1.666 +144.666 +145 +.671 +1.671 +145.671 +146 +.675 +1.675 +146.675 +147 +.680 +1.680 +147.680 +148 +.685 +1.685 +148.685 +149 +.689 +1.689 +149.689 +150 +.694 +1.694 +150.694 +151 +.699 +1.699 +151.699 +152 +.703 +1.703 +152.703 +153 +.708 +1.708 +153.708 +154 +.712 +1.712 +154.712 +155 +.717 +1.717 +155.717 +156 +.722 +1.722 +156.722 +157 +.726 +1.726 +157.726 +158 +.731 +1.731 +158.731 +159 +.736 +1.736 +159.736 +160 +.740 +1.740 +160.740 +161 +.745 +1.745 +161.745 +162 +.750 +1.750 +162.750 +163 +.754 +1.754 +163.754 +164 +.759 +1.759 +164.759 +165 +.763 +1.763 +165.763 +166 +.768 +1.768 +166.768 +167 +.773 +1.773 +167.773 +168 +.777 +1.777 +168.777 +169 +.782 +1.782 +169.782 +170 +.787 +1.787 +170.787 +171 +.791 +1.791 +171.791 +172 +.796 +1.796 +172.796 +173 +.800 +1.800 +173.800 +174 +.805 +1.805 +174.805 +175 +.810 +1.810 +175.810 +176 +.814 +1.814 +176.814 +177 +.819 +1.819 +177.819 +178 +.824 +1.824 +178.824 +179 +.828 +1.828 +179.828 +180 +.833 +1.833 +180.833 +181 +.837 +1.837 +181.837 +182 +.842 +1.842 +182.842 +183 +.847 +1.847 +183.847 +184 +.851 +1.851 +184.851 +185 +.856 +1.856 +185.856 +186 +.861 +1.861 +186.861 +187 +.865 +1.865 +187.865 +188 +.870 +1.870 +188.870 +189 +.875 +1.875 +189.875 +190 +.879 +1.879 +190.879 +191 +.884 +1.884 +191.884 +192 +.888 +1.888 +192.888 +193 +.893 +1.893 +193.893 +194 +.898 +1.898 +194.898 +195 +.902 +1.902 +195.902 +196 +.907 +1.907 +196.907 +197 +.912 +1.912 +197.912 +198 +.916 +1.916 +198.916 +199 +.921 +1.921 +199.921 +200 +.925 +1.925 +200.925 +201 +.930 +1.930 +201.930 +202 +.935 +1.935 +202.935 +203 +.939 +1.939 +203.939 +204 +.944 +1.944 +204.944 +205 +.949 +1.949 +205.949 +206 +.953 +1.953 +206.953 +207 +.958 +1.958 +207.958 +208 +.962 +1.962 +208.962 +209 +.967 +1.967 +209.967 +210 +.972 +1.972 +210.972 +211 +.976 +1.976 +211.976 +212 +.981 +1.981 +212.981 +213 +.986 +1.986 +213.986 +214 +.990 +1.990 +214.990 +215 +.995 +1.995 +215.995 +216 +.1666 +1.1666 +216.1666 +217 +.1674 +1.1674 +217.1674 +218 +.1682 +1.1682 +218.1682 +219 +.1689 +1.1689 +219.1689 +220 +.1697 +1.1697 +220.1697 +221 +.1705 +1.1705 +221.1705 +222 +.1712 +1.1712 +222.1712 +223 +.1720 +1.1720 +223.1720 +224 +.1728 +1.1728 +224.1728 +225 +.1736 +1.1736 +225.1736 +226 +.1743 +1.1743 +226.1743 +227 +.1751 +1.1751 +227.1751 +228 +.1759 +1.1759 +228.1759 +229 +.1766 +1.1766 +229.1766 +230 +.1774 +1.1774 +230.1774 +231 +.1782 +1.1782 +231.1782 +232 +.1790 +1.1790 +232.1790 +233 +.1797 +1.1797 +233.1797 +234 +.1805 +1.1805 +234.1805 +235 +.1813 +1.1813 +235.1813 +236 +.1820 +1.1820 +236.1820 +237 +.1828 +1.1828 +237.1828 +238 +.1836 +1.1836 +238.1836 +239 +.1844 +1.1844 +239.1844 +240 +.1851 +1.1851 +240.1851 +241 +.1859 +1.1859 +241.1859 +242 +.1867 +1.1867 +242.1867 +243 +.1875 +1.1875 +243.1875 +244 +.1882 +1.1882 +244.1882 +245 +.1890 +1.1890 +245.1890 +246 +.1898 +1.1898 +246.1898 +247 +.1905 +1.1905 +247.1905 +248 +.1913 +1.1913 +248.1913 +249 +.1921 +1.1921 +249.1921 +250 +.1929 +1.1929 +250.1929 +251 +.1936 +1.1936 +251.1936 +252 +.1944 +1.1944 +252.1944 +253 +.1952 +1.1952 +253.1952 +254 +.1959 +1.1959 +254.1959 +255 +.1967 +1.1967 +255.1967 +256 +.1975 +1.1975 +256.1975 +0 +0 +1.0 +0 +1 +.1 +1.1 +1.1 +2 +.2 +1.2 +2.2 +3 +.4 +1.4 +3.4 +4 +.5 +1.5 +4.5 +5 +.7 +1.7 +5.7 +6 +.8 +1.8 +6.8 +7 +.14 +1.14 +7.14 +8 +.16 +1.16 +8.16 +9 +.18 +1.18 +9.18 +10 +.20 +1.20 +10.20 +11 +.22 +1.22 +11.22 +12 +.24 +1.24 +12.24 +13 +.26 +1.26 +13.26 +14 +.28 +1.28 +14.28 +15 +.30 +1.30 +15.30 +16 +.32 +1.32 +16.32 +17 +.34 +1.34 +17.34 +18 +.36 +1.36 +18.36 +19 +.38 +1.38 +19.38 +20 +.40 +1.40 +20.40 +21 +.42 +1.42 +21.42 +22 +.44 +1.44 +22.44 +23 +.46 +1.46 +23.46 +24 +.48 +1.48 +24.48 +25 +.51 +1.51 +25.51 +26 +.53 +1.53 +26.53 +27 +.55 +1.55 +27.55 +28 +.57 +1.57 +28.57 +29 +.59 +1.59 +29.59 +30 +.61 +1.61 +30.61 +31 +.63 +1.63 +31.63 +32 +.65 +1.65 +32.65 +33 +.67 +1.67 +33.67 +34 +.69 +1.69 +34.69 +35 +.71 +1.71 +35.71 +36 +.73 +1.73 +36.73 +37 +.75 +1.75 +37.75 +38 +.77 +1.77 +38.77 +39 +.79 +1.79 +39.79 +40 +.81 +1.81 +40.81 +41 +.83 +1.83 +41.83 +42 +.85 +1.85 +42.85 +43 +.87 +1.87 +43.87 +44 +.89 +1.89 +44.89 +45 +.91 +1.91 +45.91 +46 +.93 +1.93 +46.93 +47 +.95 +1.95 +47.95 +48 +.97 +1.97 +48.97 +49 +.142 +1.142 +49.142 +50 +.145 +1.145 +50.145 +51 +.148 +1.148 +51.148 +52 +.151 +1.151 +52.151 +53 +.154 +1.154 +53.154 +54 +.157 +1.157 +54.157 +55 +.160 +1.160 +55.160 +56 +.163 +1.163 +56.163 +57 +.166 +1.166 +57.166 +58 +.169 +1.169 +58.169 +59 +.172 +1.172 +59.172 +60 +.174 +1.174 +60.174 +61 +.177 +1.177 +61.177 +62 +.180 +1.180 +62.180 +63 +.183 +1.183 +63.183 +64 +.186 +1.186 +64.186 +65 +.189 +1.189 +65.189 +66 +.192 +1.192 +66.192 +67 +.195 +1.195 +67.195 +68 +.198 +1.198 +68.198 +69 +.201 +1.201 +69.201 +70 +.204 +1.204 +70.204 +71 +.206 +1.206 +71.206 +72 +.209 +1.209 +72.209 +73 +.212 +1.212 +73.212 +74 +.215 +1.215 +74.215 +75 +.218 +1.218 +75.218 +76 +.221 +1.221 +76.221 +77 +.224 +1.224 +77.224 +78 +.227 +1.227 +78.227 +79 +.230 +1.230 +79.230 +80 +.233 +1.233 +80.233 +81 +.236 +1.236 +81.236 +82 +.239 +1.239 +82.239 +83 +.241 +1.241 +83.241 +84 +.244 +1.244 +84.244 +85 +.247 +1.247 +85.247 +86 +.250 +1.250 +86.250 +87 +.253 +1.253 +87.253 +88 +.256 +1.256 +88.256 +89 +.259 +1.259 +89.259 +90 +.262 +1.262 +90.262 +91 +.265 +1.265 +91.265 +92 +.268 +1.268 +92.268 +93 +.271 +1.271 +93.271 +94 +.274 +1.274 +94.274 +95 +.276 +1.276 +95.276 +96 +.279 +1.279 +96.279 +97 +.282 +1.282 +97.282 +98 +.285 +1.285 +98.285 +99 +.288 +1.288 +99.288 +100 +.291 +1.291 +100.291 +101 +.294 +1.294 +101.294 +102 +.297 +1.297 +102.297 +103 +.300 +1.300 +103.300 +104 +.303 +1.303 +104.303 +105 +.306 +1.306 +105.306 +106 +.309 +1.309 +106.309 +107 +.311 +1.311 +107.311 +108 +.314 +1.314 +108.314 +109 +.317 +1.317 +109.317 +110 +.320 +1.320 +110.320 +111 +.323 +1.323 +111.323 +112 +.326 +1.326 +112.326 +113 +.329 +1.329 +113.329 +114 +.332 +1.332 +114.332 +115 +.335 +1.335 +115.335 +116 +.338 +1.338 +116.338 +117 +.341 +1.341 +117.341 +118 +.344 +1.344 +118.344 +119 +.346 +1.346 +119.346 +120 +.349 +1.349 +120.349 +121 +.352 +1.352 +121.352 +122 +.355 +1.355 +122.355 +123 +.358 +1.358 +123.358 +124 +.361 +1.361 +124.361 +125 +.364 +1.364 +125.364 +126 +.367 +1.367 +126.367 +127 +.370 +1.370 +127.370 +128 +.373 +1.373 +128.373 +129 +.376 +1.376 +129.376 +130 +.379 +1.379 +130.379 +131 +.381 +1.381 +131.381 +132 +.384 +1.384 +132.384 +133 +.387 +1.387 +133.387 +134 +.390 +1.390 +134.390 +135 +.393 +1.393 +135.393 +136 +.396 +1.396 +136.396 +137 +.399 +1.399 +137.399 +138 +.402 +1.402 +138.402 +139 +.405 +1.405 +139.405 +140 +.408 +1.408 +140.408 +141 +.411 +1.411 +141.411 +142 +.413 +1.413 +142.413 +143 +.416 +1.416 +143.416 +144 +.419 +1.419 +144.419 +145 +.422 +1.422 +145.422 +146 +.425 +1.425 +146.425 +147 +.428 +1.428 +147.428 +148 +.431 +1.431 +148.431 +149 +.434 +1.434 +149.434 +150 +.437 +1.437 +150.437 +151 +.440 +1.440 +151.440 +152 +.443 +1.443 +152.443 +153 +.446 +1.446 +153.446 +154 +.448 +1.448 +154.448 +155 +.451 +1.451 +155.451 +156 +.454 +1.454 +156.454 +157 +.457 +1.457 +157.457 +158 +.460 +1.460 +158.460 +159 +.463 +1.463 +159.463 +160 +.466 +1.466 +160.466 +161 +.469 +1.469 +161.469 +162 +.472 +1.472 +162.472 +163 +.475 +1.475 +163.475 +164 +.478 +1.478 +164.478 +165 +.481 +1.481 +165.481 +166 +.483 +1.483 +166.483 +167 +.486 +1.486 +167.486 +168 +.489 +1.489 +168.489 +169 +.492 +1.492 +169.492 +170 +.495 +1.495 +170.495 +171 +.498 +1.498 +171.498 +172 +.501 +1.501 +172.501 +173 +.504 +1.504 +173.504 +174 +.507 +1.507 +174.507 +175 +.510 +1.510 +175.510 +176 +.513 +1.513 +176.513 +177 +.516 +1.516 +177.516 +178 +.518 +1.518 +178.518 +179 +.521 +1.521 +179.521 +180 +.524 +1.524 +180.524 +181 +.527 +1.527 +181.527 +182 +.530 +1.530 +182.530 +183 +.533 +1.533 +183.533 +184 +.536 +1.536 +184.536 +185 +.539 +1.539 +185.539 +186 +.542 +1.542 +186.542 +187 +.545 +1.545 +187.545 +188 +.548 +1.548 +188.548 +189 +.551 +1.551 +189.551 +190 +.553 +1.553 +190.553 +191 +.556 +1.556 +191.556 +192 +.559 +1.559 +192.559 +193 +.562 +1.562 +193.562 +194 +.565 +1.565 +194.565 +195 +.568 +1.568 +195.568 +196 +.571 +1.571 +196.571 +197 +.574 +1.574 +197.574 +198 +.577 +1.577 +198.577 +199 +.580 +1.580 +199.580 +200 +.583 +1.583 +200.583 +201 +.586 +1.586 +201.586 +202 +.588 +1.588 +202.588 +203 +.591 +1.591 +203.591 +204 +.594 +1.594 +204.594 +205 +.597 +1.597 +205.597 +206 +.600 +1.600 +206.600 +207 +.603 +1.603 +207.603 +208 +.606 +1.606 +208.606 +209 +.609 +1.609 +209.609 +210 +.612 +1.612 +210.612 +211 +.615 +1.615 +211.615 +212 +.618 +1.618 +212.618 +213 +.620 +1.620 +213.620 +214 +.623 +1.623 +214.623 +215 +.626 +1.626 +215.626 +216 +.629 +1.629 +216.629 +217 +.632 +1.632 +217.632 +218 +.635 +1.635 +218.635 +219 +.638 +1.638 +219.638 +220 +.641 +1.641 +220.641 +221 +.644 +1.644 +221.644 +222 +.647 +1.647 +222.647 +223 +.650 +1.650 +223.650 +224 +.653 +1.653 +224.653 +225 +.655 +1.655 +225.655 +226 +.658 +1.658 +226.658 +227 +.661 +1.661 +227.661 +228 +.664 +1.664 +228.664 +229 +.667 +1.667 +229.667 +230 +.670 +1.670 +230.670 +231 +.673 +1.673 +231.673 +232 +.676 +1.676 +232.676 +233 +.679 +1.679 +233.679 +234 +.682 +1.682 +234.682 +235 +.685 +1.685 +235.685 +236 +.688 +1.688 +236.688 +237 +.690 +1.690 +237.690 +238 +.693 +1.693 +238.693 +239 +.696 +1.696 +239.696 +240 +.699 +1.699 +240.699 +241 +.702 +1.702 +241.702 +242 +.705 +1.705 +242.705 +243 +.708 +1.708 +243.708 +244 +.711 +1.711 +244.711 +245 +.714 +1.714 +245.714 +246 +.717 +1.717 +246.717 +247 +.720 +1.720 +247.720 +248 +.723 +1.723 +248.723 +249 +.725 +1.725 +249.725 +250 +.728 +1.728 +250.728 +251 +.731 +1.731 +251.731 +252 +.734 +1.734 +252.734 +253 +.737 +1.737 +253.737 +254 +.740 +1.740 +254.740 +255 +.743 +1.743 +255.743 +256 +.746 +1.746 +256.746 +0 +0 +1.0 +0 +1 +.1 +1.1 +1.1 +2 +.2 +1.2 +2.2 +3 +.3 +1.3 +3.3 +4 +.5 +1.5 +4.5 +5 +.6 +1.6 +5.6 +6 +.7 +1.7 +6.7 +7 +.8 +1.8 +7.8 +8 +.12 +1.12 +8.12 +9 +.14 +1.14 +9.14 +10 +.15 +1.15 +10.15 +11 +.17 +1.17 +11.17 +12 +.18 +1.18 +12.18 +13 +.20 +1.20 +13.20 +14 +.21 +1.21 +14.21 +15 +.23 +1.23 +15.23 +16 +.25 +1.25 +16.25 +17 +.26 +1.26 +17.26 +18 +.28 +1.28 +18.28 +19 +.29 +1.29 +19.29 +20 +.31 +1.31 +20.31 +21 +.32 +1.32 +21.32 +22 +.34 +1.34 +22.34 +23 +.35 +1.35 +23.35 +24 +.37 +1.37 +24.37 +25 +.39 +1.39 +25.39 +26 +.40 +1.40 +26.40 +27 +.42 +1.42 +27.42 +28 +.43 +1.43 +28.43 +29 +.45 +1.45 +29.45 +30 +.46 +1.46 +30.46 +31 +.48 +1.48 +31.48 +32 +.50 +1.50 +32.50 +33 +.51 +1.51 +33.51 +34 +.53 +1.53 +34.53 +35 +.54 +1.54 +35.54 +36 +.56 +1.56 +36.56 +37 +.57 +1.57 +37.57 +38 +.59 +1.59 +38.59 +39 +.60 +1.60 +39.60 +40 +.62 +1.62 +40.62 +41 +.64 +1.64 +41.64 +42 +.65 +1.65 +42.65 +43 +.67 +1.67 +43.67 +44 +.68 +1.68 +44.68 +45 +.70 +1.70 +45.70 +46 +.71 +1.71 +46.71 +47 +.73 +1.73 +47.73 +48 +.75 +1.75 +48.75 +49 +.76 +1.76 +49.76 +50 +.78 +1.78 +50.78 +51 +.79 +1.79 +51.79 +52 +.81 +1.81 +52.81 +53 +.82 +1.82 +53.82 +54 +.84 +1.84 +54.84 +55 +.85 +1.85 +55.85 +56 +.87 +1.87 +56.87 +57 +.89 +1.89 +57.89 +58 +.90 +1.90 +58.90 +59 +.92 +1.92 +59.92 +60 +.93 +1.93 +60.93 +61 +.95 +1.95 +61.95 +62 +.96 +1.96 +62.96 +63 +.98 +1.98 +63.98 +64 +.125 +1.125 +64.125 +65 +.126 +1.126 +65.126 +66 +.128 +1.128 +66.128 +67 +.130 +1.130 +67.130 +68 +.132 +1.132 +68.132 +69 +.134 +1.134 +69.134 +70 +.136 +1.136 +70.136 +71 +.138 +1.138 +71.138 +72 +.140 +1.140 +72.140 +73 +.142 +1.142 +73.142 +74 +.144 +1.144 +74.144 +75 +.146 +1.146 +75.146 +76 +.148 +1.148 +76.148 +77 +.150 +1.150 +77.150 +78 +.152 +1.152 +78.152 +79 +.154 +1.154 +79.154 +80 +.156 +1.156 +80.156 +81 +.158 +1.158 +81.158 +82 +.160 +1.160 +82.160 +83 +.162 +1.162 +83.162 +84 +.164 +1.164 +84.164 +85 +.166 +1.166 +85.166 +86 +.167 +1.167 +86.167 +87 +.169 +1.169 +87.169 +88 +.171 +1.171 +88.171 +89 +.173 +1.173 +89.173 +90 +.175 +1.175 +90.175 +91 +.177 +1.177 +91.177 +92 +.179 +1.179 +92.179 +93 +.181 +1.181 +93.181 +94 +.183 +1.183 +94.183 +95 +.185 +1.185 +95.185 +96 +.187 +1.187 +96.187 +97 +.189 +1.189 +97.189 +98 +.191 +1.191 +98.191 +99 +.193 +1.193 +99.193 +100 +.195 +1.195 +100.195 +101 +.197 +1.197 +101.197 +102 +.199 +1.199 +102.199 +103 +.201 +1.201 +103.201 +104 +.203 +1.203 +104.203 +105 +.205 +1.205 +105.205 +106 +.207 +1.207 +106.207 +107 +.208 +1.208 +107.208 +108 +.210 +1.210 +108.210 +109 +.212 +1.212 +109.212 +110 +.214 +1.214 +110.214 +111 +.216 +1.216 +111.216 +112 +.218 +1.218 +112.218 +113 +.220 +1.220 +113.220 +114 +.222 +1.222 +114.222 +115 +.224 +1.224 +115.224 +116 +.226 +1.226 +116.226 +117 +.228 +1.228 +117.228 +118 +.230 +1.230 +118.230 +119 +.232 +1.232 +119.232 +120 +.234 +1.234 +120.234 +121 +.236 +1.236 +121.236 +122 +.238 +1.238 +122.238 +123 +.240 +1.240 +123.240 +124 +.242 +1.242 +124.242 +125 +.244 +1.244 +125.244 +126 +.246 +1.246 +126.246 +127 +.248 +1.248 +127.248 +128 +.250 +1.250 +128.250 +129 +.251 +1.251 +129.251 +130 +.253 +1.253 +130.253 +131 +.255 +1.255 +131.255 +132 +.257 +1.257 +132.257 +133 +.259 +1.259 +133.259 +134 +.261 +1.261 +134.261 +135 +.263 +1.263 +135.263 +136 +.265 +1.265 +136.265 +137 +.267 +1.267 +137.267 +138 +.269 +1.269 +138.269 +139 +.271 +1.271 +139.271 +140 +.273 +1.273 +140.273 +141 +.275 +1.275 +141.275 +142 +.277 +1.277 +142.277 +143 +.279 +1.279 +143.279 +144 +.281 +1.281 +144.281 +145 +.283 +1.283 +145.283 +146 +.285 +1.285 +146.285 +147 +.287 +1.287 +147.287 +148 +.289 +1.289 +148.289 +149 +.291 +1.291 +149.291 +150 +.292 +1.292 +150.292 +151 +.294 +1.294 +151.294 +152 +.296 +1.296 +152.296 +153 +.298 +1.298 +153.298 +154 +.300 +1.300 +154.300 +155 +.302 +1.302 +155.302 +156 +.304 +1.304 +156.304 +157 +.306 +1.306 +157.306 +158 +.308 +1.308 +158.308 +159 +.310 +1.310 +159.310 +160 +.312 +1.312 +160.312 +161 +.314 +1.314 +161.314 +162 +.316 +1.316 +162.316 +163 +.318 +1.318 +163.318 +164 +.320 +1.320 +164.320 +165 +.322 +1.322 +165.322 +166 +.324 +1.324 +166.324 +167 +.326 +1.326 +167.326 +168 +.328 +1.328 +168.328 +169 +.330 +1.330 +169.330 +170 +.332 +1.332 +170.332 +171 +.333 +1.333 +171.333 +172 +.335 +1.335 +172.335 +173 +.337 +1.337 +173.337 +174 +.339 +1.339 +174.339 +175 +.341 +1.341 +175.341 +176 +.343 +1.343 +176.343 +177 +.345 +1.345 +177.345 +178 +.347 +1.347 +178.347 +179 +.349 +1.349 +179.349 +180 +.351 +1.351 +180.351 +181 +.353 +1.353 +181.353 +182 +.355 +1.355 +182.355 +183 +.357 +1.357 +183.357 +184 +.359 +1.359 +184.359 +185 +.361 +1.361 +185.361 +186 +.363 +1.363 +186.363 +187 +.365 +1.365 +187.365 +188 +.367 +1.367 +188.367 +189 +.369 +1.369 +189.369 +190 +.371 +1.371 +190.371 +191 +.373 +1.373 +191.373 +192 +.375 +1.375 +192.375 +193 +.376 +1.376 +193.376 +194 +.378 +1.378 +194.378 +195 +.380 +1.380 +195.380 +196 +.382 +1.382 +196.382 +197 +.384 +1.384 +197.384 +198 +.386 +1.386 +198.386 +199 +.388 +1.388 +199.388 +200 +.390 +1.390 +200.390 +201 +.392 +1.392 +201.392 +202 +.394 +1.394 +202.394 +203 +.396 +1.396 +203.396 +204 +.398 +1.398 +204.398 +205 +.400 +1.400 +205.400 +206 +.402 +1.402 +206.402 +207 +.404 +1.404 +207.404 +208 +.406 +1.406 +208.406 +209 +.408 +1.408 +209.408 +210 +.410 +1.410 +210.410 +211 +.412 +1.412 +211.412 +212 +.414 +1.414 +212.414 +213 +.416 +1.416 +213.416 +214 +.417 +1.417 +214.417 +215 +.419 +1.419 +215.419 +216 +.421 +1.421 +216.421 +217 +.423 +1.423 +217.423 +218 +.425 +1.425 +218.425 +219 +.427 +1.427 +219.427 +220 +.429 +1.429 +220.429 +221 +.431 +1.431 +221.431 +222 +.433 +1.433 +222.433 +223 +.435 +1.435 +223.435 +224 +.437 +1.437 +224.437 +225 +.439 +1.439 +225.439 +226 +.441 +1.441 +226.441 +227 +.443 +1.443 +227.443 +228 +.445 +1.445 +228.445 +229 +.447 +1.447 +229.447 +230 +.449 +1.449 +230.449 +231 +.451 +1.451 +231.451 +232 +.453 +1.453 +232.453 +233 +.455 +1.455 +233.455 +234 +.457 +1.457 +234.457 +235 +.458 +1.458 +235.458 +236 +.460 +1.460 +236.460 +237 +.462 +1.462 +237.462 +238 +.464 +1.464 +238.464 +239 +.466 +1.466 +239.466 +240 +.468 +1.468 +240.468 +241 +.470 +1.470 +241.470 +242 +.472 +1.472 +242.472 +243 +.474 +1.474 +243.474 +244 +.476 +1.476 +244.476 +245 +.478 +1.478 +245.478 +246 +.480 +1.480 +246.480 +247 +.482 +1.482 +247.482 +248 +.484 +1.484 +248.484 +249 +.486 +1.486 +249.486 +250 +.488 +1.488 +250.488 +251 +.490 +1.490 +251.490 +252 +.492 +1.492 +252.492 +253 +.494 +1.494 +253.494 +254 +.496 +1.496 +254.496 +255 +.498 +1.498 +255.498 +256 +.500 +1.500 +256.500 +0 +0 +1.0 +0 +1 +.1 +1.1 +1.1 +2 +.2 +1.2 +2.2 +3 +.3 +1.3 +3.3 +4 +.4 +1.4 +4.4 +5 +.5 +1.5 +5.5 +6 +.6 +1.6 +6.6 +7 +.7 +1.7 +7.7 +8 +.8 +1.8 +8.8 +9 +.11 +1.11 +9.11 +10 +.12 +1.12 +10.12 +11 +.13 +1.13 +11.13 +12 +.14 +1.14 +12.14 +13 +.16 +1.16 +13.16 +14 +.17 +1.17 +14.17 +15 +.18 +1.18 +15.18 +16 +.19 +1.19 +16.19 +17 +.20 +1.20 +17.20 +18 +.22 +1.22 +18.22 +19 +.23 +1.23 +19.23 +20 +.24 +1.24 +20.24 +21 +.25 +1.25 +21.25 +22 +.27 +1.27 +22.27 +23 +.28 +1.28 +23.28 +24 +.29 +1.29 +24.29 +25 +.30 +1.30 +25.30 +26 +.32 +1.32 +26.32 +27 +.33 +1.33 +27.33 +28 +.34 +1.34 +28.34 +29 +.35 +1.35 +29.35 +30 +.37 +1.37 +30.37 +31 +.38 +1.38 +31.38 +32 +.39 +1.39 +32.39 +33 +.40 +1.40 +33.40 +34 +.41 +1.41 +34.41 +35 +.43 +1.43 +35.43 +36 +.44 +1.44 +36.44 +37 +.45 +1.45 +37.45 +38 +.46 +1.46 +38.46 +39 +.48 +1.48 +39.48 +40 +.49 +1.49 +40.49 +41 +.50 +1.50 +41.50 +42 +.51 +1.51 +42.51 +43 +.53 +1.53 +43.53 +44 +.54 +1.54 +44.54 +45 +.55 +1.55 +45.55 +46 +.56 +1.56 +46.56 +47 +.58 +1.58 +47.58 +48 +.59 +1.59 +48.59 +49 +.60 +1.60 +49.60 +50 +.61 +1.61 +50.61 +51 +.62 +1.62 +51.62 +52 +.64 +1.64 +52.64 +53 +.65 +1.65 +53.65 +54 +.66 +1.66 +54.66 +55 +.67 +1.67 +55.67 +56 +.69 +1.69 +56.69 +57 +.70 +1.70 +57.70 +58 +.71 +1.71 +58.71 +59 +.72 +1.72 +59.72 +60 +.74 +1.74 +60.74 +61 +.75 +1.75 +61.75 +62 +.76 +1.76 +62.76 +63 +.77 +1.77 +63.77 +64 +.79 +1.79 +64.79 +65 +.80 +1.80 +65.80 +66 +.81 +1.81 +66.81 +67 +.82 +1.82 +67.82 +68 +.83 +1.83 +68.83 +69 +.85 +1.85 +69.85 +70 +.86 +1.86 +70.86 +71 +.87 +1.87 +71.87 +72 +.88 +1.88 +72.88 +73 +.90 +1.90 +73.90 +74 +.91 +1.91 +74.91 +75 +.92 +1.92 +75.92 +76 +.93 +1.93 +76.93 +77 +.95 +1.95 +77.95 +78 +.96 +1.96 +78.96 +79 +.97 +1.97 +79.97 +80 +.98 +1.98 +80.98 +81 +.111 +1.111 +81.111 +82 +.112 +1.112 +82.112 +83 +.113 +1.113 +83.113 +84 +.115 +1.115 +84.115 +85 +.116 +1.116 +85.116 +86 +.117 +1.117 +86.117 +87 +.119 +1.119 +87.119 +88 +.120 +1.120 +88.120 +89 +.122 +1.122 +89.122 +90 +.123 +1.123 +90.123 +91 +.124 +1.124 +91.124 +92 +.126 +1.126 +92.126 +93 +.127 +1.127 +93.127 +94 +.128 +1.128 +94.128 +95 +.130 +1.130 +95.130 +96 +.131 +1.131 +96.131 +97 +.133 +1.133 +97.133 +98 +.134 +1.134 +98.134 +99 +.135 +1.135 +99.135 +100 +.137 +1.137 +100.137 +101 +.138 +1.138 +101.138 +102 +.139 +1.139 +102.139 +103 +.141 +1.141 +103.141 +104 +.142 +1.142 +104.142 +105 +.144 +1.144 +105.144 +106 +.145 +1.145 +106.145 +107 +.146 +1.146 +107.146 +108 +.148 +1.148 +108.148 +109 +.149 +1.149 +109.149 +110 +.150 +1.150 +110.150 +111 +.152 +1.152 +111.152 +112 +.153 +1.153 +112.153 +113 +.155 +1.155 +113.155 +114 +.156 +1.156 +114.156 +115 +.157 +1.157 +115.157 +116 +.159 +1.159 +116.159 +117 +.160 +1.160 +117.160 +118 +.161 +1.161 +118.161 +119 +.163 +1.163 +119.163 +120 +.164 +1.164 +120.164 +121 +.165 +1.165 +121.165 +122 +.167 +1.167 +122.167 +123 +.168 +1.168 +123.168 +124 +.170 +1.170 +124.170 +125 +.171 +1.171 +125.171 +126 +.172 +1.172 +126.172 +127 +.174 +1.174 +127.174 +128 +.175 +1.175 +128.175 +129 +.176 +1.176 +129.176 +130 +.178 +1.178 +130.178 +131 +.179 +1.179 +131.179 +132 +.181 +1.181 +132.181 +133 +.182 +1.182 +133.182 +134 +.183 +1.183 +134.183 +135 +.185 +1.185 +135.185 +136 +.186 +1.186 +136.186 +137 +.187 +1.187 +137.187 +138 +.189 +1.189 +138.189 +139 +.190 +1.190 +139.190 +140 +.192 +1.192 +140.192 +141 +.193 +1.193 +141.193 +142 +.194 +1.194 +142.194 +143 +.196 +1.196 +143.196 +144 +.197 +1.197 +144.197 +145 +.198 +1.198 +145.198 +146 +.200 +1.200 +146.200 +147 +.201 +1.201 +147.201 +148 +.203 +1.203 +148.203 +149 +.204 +1.204 +149.204 +150 +.205 +1.205 +150.205 +151 +.207 +1.207 +151.207 +152 +.208 +1.208 +152.208 +153 +.209 +1.209 +153.209 +154 +.211 +1.211 +154.211 +155 +.212 +1.212 +155.212 +156 +.213 +1.213 +156.213 +157 +.215 +1.215 +157.215 +158 +.216 +1.216 +158.216 +159 +.218 +1.218 +159.218 +160 +.219 +1.219 +160.219 +161 +.220 +1.220 +161.220 +162 +.222 +1.222 +162.222 +163 +.223 +1.223 +163.223 +164 +.224 +1.224 +164.224 +165 +.226 +1.226 +165.226 +166 +.227 +1.227 +166.227 +167 +.229 +1.229 +167.229 +168 +.230 +1.230 +168.230 +169 +.231 +1.231 +169.231 +170 +.233 +1.233 +170.233 +171 +.234 +1.234 +171.234 +172 +.235 +1.235 +172.235 +173 +.237 +1.237 +173.237 +174 +.238 +1.238 +174.238 +175 +.240 +1.240 +175.240 +176 +.241 +1.241 +176.241 +177 +.242 +1.242 +177.242 +178 +.244 +1.244 +178.244 +179 +.245 +1.245 +179.245 +180 +.246 +1.246 +180.246 +181 +.248 +1.248 +181.248 +182 +.249 +1.249 +182.249 +183 +.251 +1.251 +183.251 +184 +.252 +1.252 +184.252 +185 +.253 +1.253 +185.253 +186 +.255 +1.255 +186.255 +187 +.256 +1.256 +187.256 +188 +.257 +1.257 +188.257 +189 +.259 +1.259 +189.259 +190 +.260 +1.260 +190.260 +191 +.262 +1.262 +191.262 +192 +.263 +1.263 +192.263 +193 +.264 +1.264 +193.264 +194 +.266 +1.266 +194.266 +195 +.267 +1.267 +195.267 +196 +.268 +1.268 +196.268 +197 +.270 +1.270 +197.270 +198 +.271 +1.271 +198.271 +199 +.272 +1.272 +199.272 +200 +.274 +1.274 +200.274 +201 +.275 +1.275 +201.275 +202 +.277 +1.277 +202.277 +203 +.278 +1.278 +203.278 +204 +.279 +1.279 +204.279 +205 +.281 +1.281 +205.281 +206 +.282 +1.282 +206.282 +207 +.283 +1.283 +207.283 +208 +.285 +1.285 +208.285 +209 +.286 +1.286 +209.286 +210 +.288 +1.288 +210.288 +211 +.289 +1.289 +211.289 +212 +.290 +1.290 +212.290 +213 +.292 +1.292 +213.292 +214 +.293 +1.293 +214.293 +215 +.294 +1.294 +215.294 +216 +.296 +1.296 +216.296 +217 +.297 +1.297 +217.297 +218 +.299 +1.299 +218.299 +219 +.300 +1.300 +219.300 +220 +.301 +1.301 +220.301 +221 +.303 +1.303 +221.303 +222 +.304 +1.304 +222.304 +223 +.305 +1.305 +223.305 +224 +.307 +1.307 +224.307 +225 +.308 +1.308 +225.308 +226 +.310 +1.310 +226.310 +227 +.311 +1.311 +227.311 +228 +.312 +1.312 +228.312 +229 +.314 +1.314 +229.314 +230 +.315 +1.315 +230.315 +231 +.316 +1.316 +231.316 +232 +.318 +1.318 +232.318 +233 +.319 +1.319 +233.319 +234 +.320 +1.320 +234.320 +235 +.322 +1.322 +235.322 +236 +.323 +1.323 +236.323 +237 +.325 +1.325 +237.325 +238 +.326 +1.326 +238.326 +239 +.327 +1.327 +239.327 +240 +.329 +1.329 +240.329 +241 +.330 +1.330 +241.330 +242 +.331 +1.331 +242.331 +243 +.333 +1.333 +243.333 +244 +.334 +1.334 +244.334 +245 +.336 +1.336 +245.336 +246 +.337 +1.337 +246.337 +247 +.338 +1.338 +247.338 +248 +.340 +1.340 +248.340 +249 +.341 +1.341 +249.341 +250 +.342 +1.342 +250.342 +251 +.344 +1.344 +251.344 +252 +.345 +1.345 +252.345 +253 +.347 +1.347 +253.347 +254 +.348 +1.348 +254.348 +255 +.349 +1.349 +255.349 +256 +.351 +1.351 +256.351 +0 +0 +1.0 +0 +1 +0 +1.0 +1.0 +2 +.1 +1.1 +2.1 +3 +.2 +1.2 +3.2 +4 +.3 +1.3 +4.3 +5 +.4 +1.4 +5.4 +6 +.5 +1.5 +6.5 +7 +.6 +1.6 +7.6 +8 +.7 +1.7 +8.7 +9 +.8 +1.8 +9.8 +10 +.9 +1.9 +10.9 +11 +.09 +1.09 +11.09 +12 +.09 +1.09 +12.09 +13 +.10 +1.10 +13.10 +14 +.11 +1.11 +14.11 +15 +.12 +1.12 +15.12 +16 +.13 +1.13 +16.13 +17 +.14 +1.14 +17.14 +18 +.14 +1.14 +18.14 +19 +.15 +1.15 +19.15 +20 +.16 +1.16 +20.16 +21 +.17 +1.17 +21.17 +22 +.18 +1.18 +22.18 +23 +.19 +1.19 +23.19 +24 +.19 +1.19 +24.19 +25 +.20 +1.20 +25.20 +26 +.21 +1.21 +26.21 +27 +.22 +1.22 +27.22 +28 +.23 +1.23 +28.23 +29 +.23 +1.23 +29.23 +30 +.24 +1.24 +30.24 +31 +.25 +1.25 +31.25 +32 +.26 +1.26 +32.26 +33 +.27 +1.27 +33.27 +34 +.28 +1.28 +34.28 +35 +.28 +1.28 +35.28 +36 +.29 +1.29 +36.29 +37 +.30 +1.30 +37.30 +38 +.31 +1.31 +38.31 +39 +.32 +1.32 +39.32 +40 +.33 +1.33 +40.33 +41 +.33 +1.33 +41.33 +42 +.34 +1.34 +42.34 +43 +.35 +1.35 +43.35 +44 +.36 +1.36 +44.36 +45 +.37 +1.37 +45.37 +46 +.38 +1.38 +46.38 +47 +.38 +1.38 +47.38 +48 +.39 +1.39 +48.39 +49 +.40 +1.40 +49.40 +50 +.41 +1.41 +50.41 +51 +.42 +1.42 +51.42 +52 +.42 +1.42 +52.42 +53 +.43 +1.43 +53.43 +54 +.44 +1.44 +54.44 +55 +.45 +1.45 +55.45 +56 +.46 +1.46 +56.46 +57 +.47 +1.47 +57.47 +58 +.47 +1.47 +58.47 +59 +.48 +1.48 +59.48 +60 +.49 +1.49 +60.49 +61 +.50 +1.50 +61.50 +62 +.51 +1.51 +62.51 +63 +.52 +1.52 +63.52 +64 +.52 +1.52 +64.52 +65 +.53 +1.53 +65.53 +66 +.54 +1.54 +66.54 +67 +.55 +1.55 +67.55 +68 +.56 +1.56 +68.56 +69 +.57 +1.57 +69.57 +70 +.57 +1.57 +70.57 +71 +.58 +1.58 +71.58 +72 +.59 +1.59 +72.59 +73 +.60 +1.60 +73.60 +74 +.61 +1.61 +74.61 +75 +.61 +1.61 +75.61 +76 +.62 +1.62 +76.62 +77 +.63 +1.63 +77.63 +78 +.64 +1.64 +78.64 +79 +.65 +1.65 +79.65 +80 +.66 +1.66 +80.66 +81 +.66 +1.66 +81.66 +82 +.67 +1.67 +82.67 +83 +.68 +1.68 +83.68 +84 +.69 +1.69 +84.69 +85 +.70 +1.70 +85.70 +86 +.71 +1.71 +86.71 +87 +.71 +1.71 +87.71 +88 +.72 +1.72 +88.72 +89 +.73 +1.73 +89.73 +90 +.74 +1.74 +90.74 +91 +.75 +1.75 +91.75 +92 +.76 +1.76 +92.76 +93 +.76 +1.76 +93.76 +94 +.77 +1.77 +94.77 +95 +.78 +1.78 +95.78 +96 +.79 +1.79 +96.79 +97 +.80 +1.80 +97.80 +98 +.80 +1.80 +98.80 +99 +.81 +1.81 +99.81 +100 +.82 +1.82 +100.82 +101 +.83 +1.83 +101.83 +102 +.84 +1.84 +102.84 +103 +.85 +1.85 +103.85 +104 +.85 +1.85 +104.85 +105 +.86 +1.86 +105.86 +106 +.87 +1.87 +106.87 +107 +.88 +1.88 +107.88 +108 +.89 +1.89 +108.89 +109 +.90 +1.90 +109.90 +110 +.90 +1.90 +110.90 +111 +.91 +1.91 +111.91 +112 +.92 +1.92 +112.92 +113 +.93 +1.93 +113.93 +114 +.94 +1.94 +114.94 +115 +.95 +1.95 +115.95 +116 +.95 +1.95 +116.95 +117 +.96 +1.96 +117.96 +118 +.97 +1.97 +118.97 +119 +.98 +1.98 +119.98 +120 +.99 +1.99 +120.99 +121 +.090 +1.090 +121.090 +122 +.091 +1.091 +122.091 +123 +.092 +1.092 +123.092 +124 +.093 +1.093 +124.093 +125 +.093 +1.093 +125.093 +126 +.094 +1.094 +126.094 +127 +.095 +1.095 +127.095 +128 +.096 +1.096 +128.096 +129 +.096 +1.096 +129.096 +130 +.097 +1.097 +130.097 +131 +.098 +1.098 +131.098 +132 +.099 +1.099 +132.099 +133 +.099 +1.099 +133.099 +134 +.100 +1.100 +134.100 +135 +.101 +1.101 +135.101 +136 +.102 +1.102 +136.102 +137 +.102 +1.102 +137.102 +138 +.103 +1.103 +138.103 +139 +.104 +1.104 +139.104 +140 +.105 +1.105 +140.105 +141 +.105 +1.105 +141.105 +142 +.106 +1.106 +142.106 +143 +.107 +1.107 +143.107 +144 +.108 +1.108 +144.108 +145 +.108 +1.108 +145.108 +146 +.109 +1.109 +146.109 +147 +.110 +1.110 +147.110 +148 +.111 +1.111 +148.111 +149 +.111 +1.111 +149.111 +150 +.112 +1.112 +150.112 +151 +.113 +1.113 +151.113 +152 +.114 +1.114 +152.114 +153 +.114 +1.114 +153.114 +154 +.115 +1.115 +154.115 +155 +.116 +1.116 +155.116 +156 +.117 +1.117 +156.117 +157 +.117 +1.117 +157.117 +158 +.118 +1.118 +158.118 +159 +.119 +1.119 +159.119 +160 +.120 +1.120 +160.120 +161 +.120 +1.120 +161.120 +162 +.121 +1.121 +162.121 +163 +.122 +1.122 +163.122 +164 +.123 +1.123 +164.123 +165 +.123 +1.123 +165.123 +166 +.124 +1.124 +166.124 +167 +.125 +1.125 +167.125 +168 +.126 +1.126 +168.126 +169 +.126 +1.126 +169.126 +170 +.127 +1.127 +170.127 +171 +.128 +1.128 +171.128 +172 +.129 +1.129 +172.129 +173 +.129 +1.129 +173.129 +174 +.130 +1.130 +174.130 +175 +.131 +1.131 +175.131 +176 +.132 +1.132 +176.132 +177 +.132 +1.132 +177.132 +178 +.133 +1.133 +178.133 +179 +.134 +1.134 +179.134 +180 +.135 +1.135 +180.135 +181 +.135 +1.135 +181.135 +182 +.136 +1.136 +182.136 +183 +.137 +1.137 +183.137 +184 +.138 +1.138 +184.138 +185 +.138 +1.138 +185.138 +186 +.139 +1.139 +186.139 +187 +.140 +1.140 +187.140 +188 +.141 +1.141 +188.141 +189 +.141 +1.141 +189.141 +190 +.142 +1.142 +190.142 +191 +.143 +1.143 +191.143 +192 +.144 +1.144 +192.144 +193 +.145 +1.145 +193.145 +194 +.145 +1.145 +194.145 +195 +.146 +1.146 +195.146 +196 +.147 +1.147 +196.147 +197 +.148 +1.148 +197.148 +198 +.148 +1.148 +198.148 +199 +.149 +1.149 +199.149 +200 +.150 +1.150 +200.150 +201 +.151 +1.151 +201.151 +202 +.151 +1.151 +202.151 +203 +.152 +1.152 +203.152 +204 +.153 +1.153 +204.153 +205 +.154 +1.154 +205.154 +206 +.154 +1.154 +206.154 +207 +.155 +1.155 +207.155 +208 +.156 +1.156 +208.156 +209 +.157 +1.157 +209.157 +210 +.157 +1.157 +210.157 +211 +.158 +1.158 +211.158 +212 +.159 +1.159 +212.159 +213 +.160 +1.160 +213.160 +214 +.160 +1.160 +214.160 +215 +.161 +1.161 +215.161 +216 +.162 +1.162 +216.162 +217 +.163 +1.163 +217.163 +218 +.163 +1.163 +218.163 +219 +.164 +1.164 +219.164 +220 +.165 +1.165 +220.165 +221 +.166 +1.166 +221.166 +222 +.166 +1.166 +222.166 +223 +.167 +1.167 +223.167 +224 +.168 +1.168 +224.168 +225 +.169 +1.169 +225.169 +226 +.169 +1.169 +226.169 +227 +.170 +1.170 +227.170 +228 +.171 +1.171 +228.171 +229 +.172 +1.172 +229.172 +230 +.172 +1.172 +230.172 +231 +.173 +1.173 +231.173 +232 +.174 +1.174 +232.174 +233 +.175 +1.175 +233.175 +234 +.175 +1.175 +234.175 +235 +.176 +1.176 +235.176 +236 +.177 +1.177 +236.177 +237 +.178 +1.178 +237.178 +238 +.178 +1.178 +238.178 +239 +.179 +1.179 +239.179 +240 +.180 +1.180 +240.180 +241 +.181 +1.181 +241.181 +242 +.181 +1.181 +242.181 +243 +.182 +1.182 +243.182 +244 +.183 +1.183 +244.183 +245 +.184 +1.184 +245.184 +246 +.184 +1.184 +246.184 +247 +.185 +1.185 +247.185 +248 +.186 +1.186 +248.186 +249 +.187 +1.187 +249.187 +250 +.187 +1.187 +250.187 +251 +.188 +1.188 +251.188 +252 +.189 +1.189 +252.189 +253 +.190 +1.190 +253.190 +254 +.190 +1.190 +254.190 +255 +.191 +1.191 +255.191 +256 +.192 +1.192 +256.192 +0 +0 +1.0 +0 +1 +0 +1.0 +1.0 +2 +.1 +1.1 +2.1 +3 +.2 +1.2 +3.2 +4 +.3 +1.3 +4.3 +5 +.4 +1.4 +5.4 +6 +.5 +1.5 +6.5 +7 +.5 +1.5 +7.5 +8 +.6 +1.6 +8.6 +9 +.7 +1.7 +9.7 +10 +.8 +1.8 +10.8 +11 +.9 +1.9 +11.9 +12 +.08 +1.08 +12.08 +13 +.09 +1.09 +13.09 +14 +.09 +1.09 +14.09 +15 +.10 +1.10 +15.10 +16 +.11 +1.11 +16.11 +17 +.11 +1.11 +17.11 +18 +.12 +1.12 +18.12 +19 +.13 +1.13 +19.13 +20 +.13 +1.13 +20.13 +21 +.14 +1.14 +21.14 +22 +.15 +1.15 +22.15 +23 +.15 +1.15 +23.15 +24 +.16 +1.16 +24.16 +25 +.17 +1.17 +25.17 +26 +.18 +1.18 +26.18 +27 +.18 +1.18 +27.18 +28 +.19 +1.19 +28.19 +29 +.20 +1.20 +29.20 +30 +.20 +1.20 +30.20 +31 +.21 +1.21 +31.21 +32 +.22 +1.22 +32.22 +33 +.22 +1.22 +33.22 +34 +.23 +1.23 +34.23 +35 +.24 +1.24 +35.24 +36 +.25 +1.25 +36.25 +37 +.25 +1.25 +37.25 +38 +.26 +1.26 +38.26 +39 +.27 +1.27 +39.27 +40 +.27 +1.27 +40.27 +41 +.28 +1.28 +41.28 +42 +.29 +1.29 +42.29 +43 +.29 +1.29 +43.29 +44 +.30 +1.30 +44.30 +45 +.31 +1.31 +45.31 +46 +.31 +1.31 +46.31 +47 +.32 +1.32 +47.32 +48 +.33 +1.33 +48.33 +49 +.34 +1.34 +49.34 +50 +.34 +1.34 +50.34 +51 +.35 +1.35 +51.35 +52 +.36 +1.36 +52.36 +53 +.36 +1.36 +53.36 +54 +.37 +1.37 +54.37 +55 +.38 +1.38 +55.38 +56 +.38 +1.38 +56.38 +57 +.39 +1.39 +57.39 +58 +.40 +1.40 +58.40 +59 +.40 +1.40 +59.40 +60 +.41 +1.41 +60.41 +61 +.42 +1.42 +61.42 +62 +.43 +1.43 +62.43 +63 +.43 +1.43 +63.43 +64 +.44 +1.44 +64.44 +65 +.45 +1.45 +65.45 +66 +.45 +1.45 +66.45 +67 +.46 +1.46 +67.46 +68 +.47 +1.47 +68.47 +69 +.47 +1.47 +69.47 +70 +.48 +1.48 +70.48 +71 +.49 +1.49 +71.49 +72 +.50 +1.50 +72.50 +73 +.50 +1.50 +73.50 +74 +.51 +1.51 +74.51 +75 +.52 +1.52 +75.52 +76 +.52 +1.52 +76.52 +77 +.53 +1.53 +77.53 +78 +.54 +1.54 +78.54 +79 +.54 +1.54 +79.54 +80 +.55 +1.55 +80.55 +81 +.56 +1.56 +81.56 +82 +.56 +1.56 +82.56 +83 +.57 +1.57 +83.57 +84 +.58 +1.58 +84.58 +85 +.59 +1.59 +85.59 +86 +.59 +1.59 +86.59 +87 +.60 +1.60 +87.60 +88 +.61 +1.61 +88.61 +89 +.61 +1.61 +89.61 +90 +.62 +1.62 +90.62 +91 +.63 +1.63 +91.63 +92 +.63 +1.63 +92.63 +93 +.64 +1.64 +93.64 +94 +.65 +1.65 +94.65 +95 +.65 +1.65 +95.65 +96 +.66 +1.66 +96.66 +97 +.67 +1.67 +97.67 +98 +.68 +1.68 +98.68 +99 +.68 +1.68 +99.68 +100 +.69 +1.69 +100.69 +101 +.70 +1.70 +101.70 +102 +.70 +1.70 +102.70 +103 +.71 +1.71 +103.71 +104 +.72 +1.72 +104.72 +105 +.72 +1.72 +105.72 +106 +.73 +1.73 +106.73 +107 +.74 +1.74 +107.74 +108 +.75 +1.75 +108.75 +109 +.75 +1.75 +109.75 +110 +.76 +1.76 +110.76 +111 +.77 +1.77 +111.77 +112 +.77 +1.77 +112.77 +113 +.78 +1.78 +113.78 +114 +.79 +1.79 +114.79 +115 +.79 +1.79 +115.79 +116 +.80 +1.80 +116.80 +117 +.81 +1.81 +117.81 +118 +.81 +1.81 +118.81 +119 +.82 +1.82 +119.82 +120 +.83 +1.83 +120.83 +121 +.84 +1.84 +121.84 +122 +.84 +1.84 +122.84 +123 +.85 +1.85 +123.85 +124 +.86 +1.86 +124.86 +125 +.86 +1.86 +125.86 +126 +.87 +1.87 +126.87 +127 +.88 +1.88 +127.88 +128 +.88 +1.88 +128.88 +129 +.89 +1.89 +129.89 +130 +.90 +1.90 +130.90 +131 +.90 +1.90 +131.90 +132 +.91 +1.91 +132.91 +133 +.92 +1.92 +133.92 +134 +.93 +1.93 +134.93 +135 +.93 +1.93 +135.93 +136 +.94 +1.94 +136.94 +137 +.95 +1.95 +137.95 +138 +.95 +1.95 +138.95 +139 +.96 +1.96 +139.96 +140 +.97 +1.97 +140.97 +141 +.97 +1.97 +141.97 +142 +.98 +1.98 +142.98 +143 +.99 +1.99 +143.99 +144 +.083 +1.083 +144.083 +145 +.083 +1.083 +145.083 +146 +.084 +1.084 +146.084 +147 +.085 +1.085 +147.085 +148 +.085 +1.085 +148.085 +149 +.086 +1.086 +149.086 +150 +.086 +1.086 +150.086 +151 +.087 +1.087 +151.087 +152 +.087 +1.087 +152.087 +153 +.088 +1.088 +153.088 +154 +.089 +1.089 +154.089 +155 +.089 +1.089 +155.089 +156 +.090 +1.090 +156.090 +157 +.090 +1.090 +157.090 +158 +.091 +1.091 +158.091 +159 +.092 +1.092 +159.092 +160 +.092 +1.092 +160.092 +161 +.093 +1.093 +161.093 +162 +.093 +1.093 +162.093 +163 +.094 +1.094 +163.094 +164 +.094 +1.094 +164.094 +165 +.095 +1.095 +165.095 +166 +.096 +1.096 +166.096 +167 +.096 +1.096 +167.096 +168 +.097 +1.097 +168.097 +169 +.097 +1.097 +169.097 +170 +.098 +1.098 +170.098 +171 +.098 +1.098 +171.098 +172 +.099 +1.099 +172.099 +173 +.100 +1.100 +173.100 +174 +.100 +1.100 +174.100 +175 +.101 +1.101 +175.101 +176 +.101 +1.101 +176.101 +177 +.102 +1.102 +177.102 +178 +.103 +1.103 +178.103 +179 +.103 +1.103 +179.103 +180 +.104 +1.104 +180.104 +181 +.104 +1.104 +181.104 +182 +.105 +1.105 +182.105 +183 +.105 +1.105 +183.105 +184 +.106 +1.106 +184.106 +185 +.107 +1.107 +185.107 +186 +.107 +1.107 +186.107 +187 +.108 +1.108 +187.108 +188 +.108 +1.108 +188.108 +189 +.109 +1.109 +189.109 +190 +.109 +1.109 +190.109 +191 +.110 +1.110 +191.110 +192 +.111 +1.111 +192.111 +193 +.111 +1.111 +193.111 +194 +.112 +1.112 +194.112 +195 +.112 +1.112 +195.112 +196 +.113 +1.113 +196.113 +197 +.114 +1.114 +197.114 +198 +.114 +1.114 +198.114 +199 +.115 +1.115 +199.115 +200 +.115 +1.115 +200.115 +201 +.116 +1.116 +201.116 +202 +.116 +1.116 +202.116 +203 +.117 +1.117 +203.117 +204 +.118 +1.118 +204.118 +205 +.118 +1.118 +205.118 +206 +.119 +1.119 +206.119 +207 +.119 +1.119 +207.119 +208 +.120 +1.120 +208.120 +209 +.120 +1.120 +209.120 +210 +.121 +1.121 +210.121 +211 +.122 +1.122 +211.122 +212 +.122 +1.122 +212.122 +213 +.123 +1.123 +213.123 +214 +.123 +1.123 +214.123 +215 +.124 +1.124 +215.124 +216 +.125 +1.125 +216.125 +217 +.125 +1.125 +217.125 +218 +.126 +1.126 +218.126 +219 +.126 +1.126 +219.126 +220 +.127 +1.127 +220.127 +221 +.127 +1.127 +221.127 +222 +.128 +1.128 +222.128 +223 +.129 +1.129 +223.129 +224 +.129 +1.129 +224.129 +225 +.130 +1.130 +225.130 +226 +.130 +1.130 +226.130 +227 +.131 +1.131 +227.131 +228 +.131 +1.131 +228.131 +229 +.132 +1.132 +229.132 +230 +.133 +1.133 +230.133 +231 +.133 +1.133 +231.133 +232 +.134 +1.134 +232.134 +233 +.134 +1.134 +233.134 +234 +.135 +1.135 +234.135 +235 +.135 +1.135 +235.135 +236 +.136 +1.136 +236.136 +237 +.137 +1.137 +237.137 +238 +.137 +1.137 +238.137 +239 +.138 +1.138 +239.138 +240 +.138 +1.138 +240.138 +241 +.139 +1.139 +241.139 +242 +.140 +1.140 +242.140 +243 +.140 +1.140 +243.140 +244 +.141 +1.141 +244.141 +245 +.141 +1.141 +245.141 +246 +.142 +1.142 +246.142 +247 +.142 +1.142 +247.142 +248 +.143 +1.143 +248.143 +249 +.144 +1.144 +249.144 +250 +.144 +1.144 +250.144 +251 +.145 +1.145 +251.145 +252 +.145 +1.145 +252.145 +253 +.146 +1.146 +253.146 +254 +.146 +1.146 +254.146 +255 +.147 +1.147 +255.147 +256 +.148 +1.148 +256.148 +0 +0 +1.0 +0 +1 +0 +1.0 +1.0 +2 +.1 +1.1 +2.1 +3 +.2 +1.2 +3.2 +4 +.3 +1.3 +4.3 +5 +.3 +1.3 +5.3 +6 +.4 +1.4 +6.4 +7 +.5 +1.5 +7.5 +8 +.6 +1.6 +8.6 +9 +.6 +1.6 +9.6 +10 +.7 +1.7 +10.7 +11 +.8 +1.8 +11.8 +12 +.9 +1.9 +12.9 +13 +.07 +1.07 +13.07 +14 +.08 +1.08 +14.08 +15 +.08 +1.08 +15.08 +16 +.09 +1.09 +16.09 +17 +.10 +1.10 +17.10 +18 +.10 +1.10 +18.10 +19 +.11 +1.11 +19.11 +20 +.11 +1.11 +20.11 +21 +.12 +1.12 +21.12 +22 +.13 +1.13 +22.13 +23 +.13 +1.13 +23.13 +24 +.14 +1.14 +24.14 +25 +.14 +1.14 +25.14 +26 +.15 +1.15 +26.15 +27 +.15 +1.15 +27.15 +28 +.16 +1.16 +28.16 +29 +.17 +1.17 +29.17 +30 +.17 +1.17 +30.17 +31 +.18 +1.18 +31.18 +32 +.18 +1.18 +32.18 +33 +.19 +1.19 +33.19 +34 +.20 +1.20 +34.20 +35 +.20 +1.20 +35.20 +36 +.21 +1.21 +36.21 +37 +.21 +1.21 +37.21 +38 +.22 +1.22 +38.22 +39 +.23 +1.23 +39.23 +40 +.23 +1.23 +40.23 +41 +.24 +1.24 +41.24 +42 +.24 +1.24 +42.24 +43 +.25 +1.25 +43.25 +44 +.26 +1.26 +44.26 +45 +.26 +1.26 +45.26 +46 +.27 +1.27 +46.27 +47 +.27 +1.27 +47.27 +48 +.28 +1.28 +48.28 +49 +.28 +1.28 +49.28 +50 +.29 +1.29 +50.29 +51 +.30 +1.30 +51.30 +52 +.30 +1.30 +52.30 +53 +.31 +1.31 +53.31 +54 +.31 +1.31 +54.31 +55 +.32 +1.32 +55.32 +56 +.33 +1.33 +56.33 +57 +.33 +1.33 +57.33 +58 +.34 +1.34 +58.34 +59 +.34 +1.34 +59.34 +60 +.35 +1.35 +60.35 +61 +.36 +1.36 +61.36 +62 +.36 +1.36 +62.36 +63 +.37 +1.37 +63.37 +64 +.37 +1.37 +64.37 +65 +.38 +1.38 +65.38 +66 +.39 +1.39 +66.39 +67 +.39 +1.39 +67.39 +68 +.40 +1.40 +68.40 +69 +.40 +1.40 +69.40 +70 +.41 +1.41 +70.41 +71 +.42 +1.42 +71.42 +72 +.42 +1.42 +72.42 +73 +.43 +1.43 +73.43 +74 +.43 +1.43 +74.43 +75 +.44 +1.44 +75.44 +76 +.44 +1.44 +76.44 +77 +.45 +1.45 +77.45 +78 +.46 +1.46 +78.46 +79 +.46 +1.46 +79.46 +80 +.47 +1.47 +80.47 +81 +.47 +1.47 +81.47 +82 +.48 +1.48 +82.48 +83 +.49 +1.49 +83.49 +84 +.49 +1.49 +84.49 +85 +.50 +1.50 +85.50 +86 +.50 +1.50 +86.50 +87 +.51 +1.51 +87.51 +88 +.52 +1.52 +88.52 +89 +.52 +1.52 +89.52 +90 +.53 +1.53 +90.53 +91 +.53 +1.53 +91.53 +92 +.54 +1.54 +92.54 +93 +.55 +1.55 +93.55 +94 +.55 +1.55 +94.55 +95 +.56 +1.56 +95.56 +96 +.56 +1.56 +96.56 +97 +.57 +1.57 +97.57 +98 +.57 +1.57 +98.57 +99 +.58 +1.58 +99.58 +100 +.59 +1.59 +100.59 +101 +.59 +1.59 +101.59 +102 +.60 +1.60 +102.60 +103 +.60 +1.60 +103.60 +104 +.61 +1.61 +104.61 +105 +.62 +1.62 +105.62 +106 +.62 +1.62 +106.62 +107 +.63 +1.63 +107.63 +108 +.63 +1.63 +108.63 +109 +.64 +1.64 +109.64 +110 +.65 +1.65 +110.65 +111 +.65 +1.65 +111.65 +112 +.66 +1.66 +112.66 +113 +.66 +1.66 +113.66 +114 +.67 +1.67 +114.67 +115 +.68 +1.68 +115.68 +116 +.68 +1.68 +116.68 +117 +.69 +1.69 +117.69 +118 +.69 +1.69 +118.69 +119 +.70 +1.70 +119.70 +120 +.71 +1.71 +120.71 +121 +.71 +1.71 +121.71 +122 +.72 +1.72 +122.72 +123 +.72 +1.72 +123.72 +124 +.73 +1.73 +124.73 +125 +.73 +1.73 +125.73 +126 +.74 +1.74 +126.74 +127 +.75 +1.75 +127.75 +128 +.75 +1.75 +128.75 +129 +.76 +1.76 +129.76 +130 +.76 +1.76 +130.76 +131 +.77 +1.77 +131.77 +132 +.78 +1.78 +132.78 +133 +.78 +1.78 +133.78 +134 +.79 +1.79 +134.79 +135 +.79 +1.79 +135.79 +136 +.80 +1.80 +136.80 +137 +.81 +1.81 +137.81 +138 +.81 +1.81 +138.81 +139 +.82 +1.82 +139.82 +140 +.82 +1.82 +140.82 +141 +.83 +1.83 +141.83 +142 +.84 +1.84 +142.84 +143 +.84 +1.84 +143.84 +144 +.85 +1.85 +144.85 +145 +.85 +1.85 +145.85 +146 +.86 +1.86 +146.86 +147 +.86 +1.86 +147.86 +148 +.87 +1.87 +148.87 +149 +.88 +1.88 +149.88 +150 +.88 +1.88 +150.88 +151 +.89 +1.89 +151.89 +152 +.89 +1.89 +152.89 +153 +.90 +1.90 +153.90 +154 +.91 +1.91 +154.91 +155 +.91 +1.91 +155.91 +156 +.92 +1.92 +156.92 +157 +.92 +1.92 +157.92 +158 +.93 +1.93 +158.93 +159 +.94 +1.94 +159.94 +160 +.94 +1.94 +160.94 +161 +.95 +1.95 +161.95 +162 +.95 +1.95 +162.95 +163 +.96 +1.96 +163.96 +164 +.97 +1.97 +164.97 +165 +.97 +1.97 +165.97 +166 +.98 +1.98 +166.98 +167 +.98 +1.98 +167.98 +168 +.99 +1.99 +168.99 +169 +.076 +1.076 +169.076 +170 +.077 +1.077 +170.077 +171 +.077 +1.077 +171.077 +172 +.078 +1.078 +172.078 +173 +.078 +1.078 +173.078 +174 +.079 +1.079 +174.079 +175 +.079 +1.079 +175.079 +176 +.080 +1.080 +176.080 +177 +.080 +1.080 +177.080 +178 +.081 +1.081 +178.081 +179 +.081 +1.081 +179.081 +180 +.081 +1.081 +180.081 +181 +.082 +1.082 +181.082 +182 +.082 +1.082 +182.082 +183 +.083 +1.083 +183.083 +184 +.083 +1.083 +184.083 +185 +.084 +1.084 +185.084 +186 +.084 +1.084 +186.084 +187 +.085 +1.085 +187.085 +188 +.085 +1.085 +188.085 +189 +.086 +1.086 +189.086 +190 +.086 +1.086 +190.086 +191 +.086 +1.086 +191.086 +192 +.087 +1.087 +192.087 +193 +.087 +1.087 +193.087 +194 +.088 +1.088 +194.088 +195 +.088 +1.088 +195.088 +196 +.089 +1.089 +196.089 +197 +.089 +1.089 +197.089 +198 +.090 +1.090 +198.090 +199 +.090 +1.090 +199.090 +200 +.091 +1.091 +200.091 +201 +.091 +1.091 +201.091 +202 +.091 +1.091 +202.091 +203 +.092 +1.092 +203.092 +204 +.092 +1.092 +204.092 +205 +.093 +1.093 +205.093 +206 +.093 +1.093 +206.093 +207 +.094 +1.094 +207.094 +208 +.094 +1.094 +208.094 +209 +.095 +1.095 +209.095 +210 +.095 +1.095 +210.095 +211 +.096 +1.096 +211.096 +212 +.096 +1.096 +212.096 +213 +.096 +1.096 +213.096 +214 +.097 +1.097 +214.097 +215 +.097 +1.097 +215.097 +216 +.098 +1.098 +216.098 +217 +.098 +1.098 +217.098 +218 +.099 +1.099 +218.099 +219 +.099 +1.099 +219.099 +220 +.100 +1.100 +220.100 +221 +.100 +1.100 +221.100 +222 +.101 +1.101 +222.101 +223 +.101 +1.101 +223.101 +224 +.101 +1.101 +224.101 +225 +.102 +1.102 +225.102 +226 +.102 +1.102 +226.102 +227 +.103 +1.103 +227.103 +228 +.103 +1.103 +228.103 +229 +.104 +1.104 +229.104 +230 +.104 +1.104 +230.104 +231 +.105 +1.105 +231.105 +232 +.105 +1.105 +232.105 +233 +.106 +1.106 +233.106 +234 +.106 +1.106 +234.106 +235 +.106 +1.106 +235.106 +236 +.107 +1.107 +236.107 +237 +.107 +1.107 +237.107 +238 +.108 +1.108 +238.108 +239 +.108 +1.108 +239.108 +240 +.109 +1.109 +240.109 +241 +.109 +1.109 +241.109 +242 +.110 +1.110 +242.110 +243 +.110 +1.110 +243.110 +244 +.111 +1.111 +244.111 +245 +.111 +1.111 +245.111 +246 +.111 +1.111 +246.111 +247 +.112 +1.112 +247.112 +248 +.112 +1.112 +248.112 +249 +.113 +1.113 +249.113 +250 +.113 +1.113 +250.113 +251 +.114 +1.114 +251.114 +252 +.114 +1.114 +252.114 +253 +.115 +1.115 +253.115 +254 +.115 +1.115 +254.115 +255 +.116 +1.116 +255.116 +256 +.116 +1.116 +256.116 +0 +0 +1.0 +0 +1 +0 +1.0 +1.0 +2 +.1 +1.1 +2.1 +3 +.2 +1.2 +3.2 +4 +.2 +1.2 +4.2 +5 +.3 +1.3 +5.3 +6 +.4 +1.4 +6.4 +7 +.5 +1.5 +7.5 +8 +.5 +1.5 +8.5 +9 +.6 +1.6 +9.6 +10 +.7 +1.7 +10.7 +11 +.7 +1.7 +11.7 +12 +.8 +1.8 +12.8 +13 +.9 +1.9 +13.9 +14 +.07 +1.07 +14.07 +15 +.07 +1.07 +15.07 +16 +.08 +1.08 +16.08 +17 +.08 +1.08 +17.08 +18 +.09 +1.09 +18.09 +19 +.09 +1.09 +19.09 +20 +.10 +1.10 +20.10 +21 +.10 +1.10 +21.10 +22 +.11 +1.11 +22.11 +23 +.11 +1.11 +23.11 +24 +.12 +1.12 +24.12 +25 +.12 +1.12 +25.12 +26 +.13 +1.13 +26.13 +27 +.13 +1.13 +27.13 +28 +.14 +1.14 +28.14 +29 +.14 +1.14 +29.14 +30 +.15 +1.15 +30.15 +31 +.15 +1.15 +31.15 +32 +.16 +1.16 +32.16 +33 +.16 +1.16 +33.16 +34 +.17 +1.17 +34.17 +35 +.17 +1.17 +35.17 +36 +.18 +1.18 +36.18 +37 +.18 +1.18 +37.18 +38 +.19 +1.19 +38.19 +39 +.19 +1.19 +39.19 +40 +.20 +1.20 +40.20 +41 +.20 +1.20 +41.20 +42 +.21 +1.21 +42.21 +43 +.21 +1.21 +43.21 +44 +.22 +1.22 +44.22 +45 +.22 +1.22 +45.22 +46 +.23 +1.23 +46.23 +47 +.23 +1.23 +47.23 +48 +.24 +1.24 +48.24 +49 +.25 +1.25 +49.25 +50 +.25 +1.25 +50.25 +51 +.26 +1.26 +51.26 +52 +.26 +1.26 +52.26 +53 +.27 +1.27 +53.27 +54 +.27 +1.27 +54.27 +55 +.28 +1.28 +55.28 +56 +.28 +1.28 +56.28 +57 +.29 +1.29 +57.29 +58 +.29 +1.29 +58.29 +59 +.30 +1.30 +59.30 +60 +.30 +1.30 +60.30 +61 +.31 +1.31 +61.31 +62 +.31 +1.31 +62.31 +63 +.32 +1.32 +63.32 +64 +.32 +1.32 +64.32 +65 +.33 +1.33 +65.33 +66 +.33 +1.33 +66.33 +67 +.34 +1.34 +67.34 +68 +.34 +1.34 +68.34 +69 +.35 +1.35 +69.35 +70 +.35 +1.35 +70.35 +71 +.36 +1.36 +71.36 +72 +.36 +1.36 +72.36 +73 +.37 +1.37 +73.37 +74 +.37 +1.37 +74.37 +75 +.38 +1.38 +75.38 +76 +.38 +1.38 +76.38 +77 +.39 +1.39 +77.39 +78 +.39 +1.39 +78.39 +79 +.40 +1.40 +79.40 +80 +.40 +1.40 +80.40 +81 +.41 +1.41 +81.41 +82 +.41 +1.41 +82.41 +83 +.42 +1.42 +83.42 +84 +.42 +1.42 +84.42 +85 +.43 +1.43 +85.43 +86 +.43 +1.43 +86.43 +87 +.44 +1.44 +87.44 +88 +.44 +1.44 +88.44 +89 +.45 +1.45 +89.45 +90 +.45 +1.45 +90.45 +91 +.46 +1.46 +91.46 +92 +.46 +1.46 +92.46 +93 +.47 +1.47 +93.47 +94 +.47 +1.47 +94.47 +95 +.48 +1.48 +95.48 +96 +.48 +1.48 +96.48 +97 +.49 +1.49 +97.49 +98 +.50 +1.50 +98.50 +99 +.50 +1.50 +99.50 +100 +.51 +1.51 +100.51 +101 +.51 +1.51 +101.51 +102 +.52 +1.52 +102.52 +103 +.52 +1.52 +103.52 +104 +.53 +1.53 +104.53 +105 +.53 +1.53 +105.53 +106 +.54 +1.54 +106.54 +107 +.54 +1.54 +107.54 +108 +.55 +1.55 +108.55 +109 +.55 +1.55 +109.55 +110 +.56 +1.56 +110.56 +111 +.56 +1.56 +111.56 +112 +.57 +1.57 +112.57 +113 +.57 +1.57 +113.57 +114 +.58 +1.58 +114.58 +115 +.58 +1.58 +115.58 +116 +.59 +1.59 +116.59 +117 +.59 +1.59 +117.59 +118 +.60 +1.60 +118.60 +119 +.60 +1.60 +119.60 +120 +.61 +1.61 +120.61 +121 +.61 +1.61 +121.61 +122 +.62 +1.62 +122.62 +123 +.62 +1.62 +123.62 +124 +.63 +1.63 +124.63 +125 +.63 +1.63 +125.63 +126 +.64 +1.64 +126.64 +127 +.64 +1.64 +127.64 +128 +.65 +1.65 +128.65 +129 +.65 +1.65 +129.65 +130 +.66 +1.66 +130.66 +131 +.66 +1.66 +131.66 +132 +.67 +1.67 +132.67 +133 +.67 +1.67 +133.67 +134 +.68 +1.68 +134.68 +135 +.68 +1.68 +135.68 +136 +.69 +1.69 +136.69 +137 +.69 +1.69 +137.69 +138 +.70 +1.70 +138.70 +139 +.70 +1.70 +139.70 +140 +.71 +1.71 +140.71 +141 +.71 +1.71 +141.71 +142 +.72 +1.72 +142.72 +143 +.72 +1.72 +143.72 +144 +.73 +1.73 +144.73 +145 +.73 +1.73 +145.73 +146 +.74 +1.74 +146.74 +147 +.75 +1.75 +147.75 +148 +.75 +1.75 +148.75 +149 +.76 +1.76 +149.76 +150 +.76 +1.76 +150.76 +151 +.77 +1.77 +151.77 +152 +.77 +1.77 +152.77 +153 +.78 +1.78 +153.78 +154 +.78 +1.78 +154.78 +155 +.79 +1.79 +155.79 +156 +.79 +1.79 +156.79 +157 +.80 +1.80 +157.80 +158 +.80 +1.80 +158.80 +159 +.81 +1.81 +159.81 +160 +.81 +1.81 +160.81 +161 +.82 +1.82 +161.82 +162 +.82 +1.82 +162.82 +163 +.83 +1.83 +163.83 +164 +.83 +1.83 +164.83 +165 +.84 +1.84 +165.84 +166 +.84 +1.84 +166.84 +167 +.85 +1.85 +167.85 +168 +.85 +1.85 +168.85 +169 +.86 +1.86 +169.86 +170 +.86 +1.86 +170.86 +171 +.87 +1.87 +171.87 +172 +.87 +1.87 +172.87 +173 +.88 +1.88 +173.88 +174 +.88 +1.88 +174.88 +175 +.89 +1.89 +175.89 +176 +.89 +1.89 +176.89 +177 +.90 +1.90 +177.90 +178 +.90 +1.90 +178.90 +179 +.91 +1.91 +179.91 +180 +.91 +1.91 +180.91 +181 +.92 +1.92 +181.92 +182 +.92 +1.92 +182.92 +183 +.93 +1.93 +183.93 +184 +.93 +1.93 +184.93 +185 +.94 +1.94 +185.94 +186 +.94 +1.94 +186.94 +187 +.95 +1.95 +187.95 +188 +.95 +1.95 +188.95 +189 +.96 +1.96 +189.96 +190 +.96 +1.96 +190.96 +191 +.97 +1.97 +191.97 +192 +.97 +1.97 +192.97 +193 +.98 +1.98 +193.98 +194 +.98 +1.98 +194.98 +195 +.99 +1.99 +195.99 +196 +.071 +1.071 +196.071 +197 +.071 +1.071 +197.071 +198 +.072 +1.072 +198.072 +199 +.072 +1.072 +199.072 +200 +.072 +1.072 +200.072 +201 +.073 +1.073 +201.073 +202 +.073 +1.073 +202.073 +203 +.073 +1.073 +203.073 +204 +.074 +1.074 +204.074 +205 +.074 +1.074 +205.074 +206 +.075 +1.075 +206.075 +207 +.075 +1.075 +207.075 +208 +.075 +1.075 +208.075 +209 +.076 +1.076 +209.076 +210 +.076 +1.076 +210.076 +211 +.076 +1.076 +211.076 +212 +.077 +1.077 +212.077 +213 +.077 +1.077 +213.077 +214 +.077 +1.077 +214.077 +215 +.078 +1.078 +215.078 +216 +.078 +1.078 +216.078 +217 +.079 +1.079 +217.079 +218 +.079 +1.079 +218.079 +219 +.079 +1.079 +219.079 +220 +.080 +1.080 +220.080 +221 +.080 +1.080 +221.080 +222 +.080 +1.080 +222.080 +223 +.081 +1.081 +223.081 +224 +.081 +1.081 +224.081 +225 +.081 +1.081 +225.081 +226 +.082 +1.082 +226.082 +227 +.082 +1.082 +227.082 +228 +.083 +1.083 +228.083 +229 +.083 +1.083 +229.083 +230 +.083 +1.083 +230.083 +231 +.084 +1.084 +231.084 +232 +.084 +1.084 +232.084 +233 +.084 +1.084 +233.084 +234 +.085 +1.085 +234.085 +235 +.085 +1.085 +235.085 +236 +.086 +1.086 +236.086 +237 +.086 +1.086 +237.086 +238 +.086 +1.086 +238.086 +239 +.087 +1.087 +239.087 +240 +.087 +1.087 +240.087 +241 +.087 +1.087 +241.087 +242 +.088 +1.088 +242.088 +243 +.088 +1.088 +243.088 +244 +.088 +1.088 +244.088 +245 +.089 +1.089 +245.089 +246 +.089 +1.089 +246.089 +247 +.090 +1.090 +247.090 +248 +.090 +1.090 +248.090 +249 +.090 +1.090 +249.090 +250 +.091 +1.091 +250.091 +251 +.091 +1.091 +251.091 +252 +.091 +1.091 +252.091 +253 +.092 +1.092 +253.092 +254 +.092 +1.092 +254.092 +255 +.092 +1.092 +255.092 +256 +.093 +1.093 +256.093 +0 +0 +1.0 +0 +1 +0 +1.0 +1.0 +2 +.1 +1.1 +2.1 +3 +.2 +1.2 +3.2 +4 +.2 +1.2 +4.2 +5 +.3 +1.3 +5.3 +6 +.4 +1.4 +6.4 +7 +.4 +1.4 +7.4 +8 +.5 +1.5 +8.5 +9 +.6 +1.6 +9.6 +10 +.6 +1.6 +10.6 +11 +.7 +1.7 +11.7 +12 +.8 +1.8 +12.8 +13 +.8 +1.8 +13.8 +14 +.9 +1.9 +14.9 +15 +.06 +1.06 +15.06 +16 +.07 +1.07 +16.07 +17 +.07 +1.07 +17.07 +18 +.08 +1.08 +18.08 +19 +.08 +1.08 +19.08 +20 +.08 +1.08 +20.08 +21 +.09 +1.09 +21.09 +22 +.09 +1.09 +22.09 +23 +.10 +1.10 +23.10 +24 +.10 +1.10 +24.10 +25 +.11 +1.11 +25.11 +26 +.11 +1.11 +26.11 +27 +.12 +1.12 +27.12 +28 +.12 +1.12 +28.12 +29 +.12 +1.12 +29.12 +30 +.13 +1.13 +30.13 +31 +.13 +1.13 +31.13 +32 +.14 +1.14 +32.14 +33 +.14 +1.14 +33.14 +34 +.15 +1.15 +34.15 +35 +.15 +1.15 +35.15 +36 +.16 +1.16 +36.16 +37 +.16 +1.16 +37.16 +38 +.16 +1.16 +38.16 +39 +.17 +1.17 +39.17 +40 +.17 +1.17 +40.17 +41 +.18 +1.18 +41.18 +42 +.18 +1.18 +42.18 +43 +.19 +1.19 +43.19 +44 +.19 +1.19 +44.19 +45 +.20 +1.20 +45.20 +46 +.20 +1.20 +46.20 +47 +.20 +1.20 +47.20 +48 +.21 +1.21 +48.21 +49 +.21 +1.21 +49.21 +50 +.22 +1.22 +50.22 +51 +.22 +1.22 +51.22 +52 +.23 +1.23 +52.23 +53 +.23 +1.23 +53.23 +54 +.24 +1.24 +54.24 +55 +.24 +1.24 +55.24 +56 +.24 +1.24 +56.24 +57 +.25 +1.25 +57.25 +58 +.25 +1.25 +58.25 +59 +.26 +1.26 +59.26 +60 +.26 +1.26 +60.26 +61 +.27 +1.27 +61.27 +62 +.27 +1.27 +62.27 +63 +.28 +1.28 +63.28 +64 +.28 +1.28 +64.28 +65 +.28 +1.28 +65.28 +66 +.29 +1.29 +66.29 +67 +.29 +1.29 +67.29 +68 +.30 +1.30 +68.30 +69 +.30 +1.30 +69.30 +70 +.31 +1.31 +70.31 +71 +.31 +1.31 +71.31 +72 +.32 +1.32 +72.32 +73 +.32 +1.32 +73.32 +74 +.32 +1.32 +74.32 +75 +.33 +1.33 +75.33 +76 +.33 +1.33 +76.33 +77 +.34 +1.34 +77.34 +78 +.34 +1.34 +78.34 +79 +.35 +1.35 +79.35 +80 +.35 +1.35 +80.35 +81 +.36 +1.36 +81.36 +82 +.36 +1.36 +82.36 +83 +.36 +1.36 +83.36 +84 +.37 +1.37 +84.37 +85 +.37 +1.37 +85.37 +86 +.38 +1.38 +86.38 +87 +.38 +1.38 +87.38 +88 +.39 +1.39 +88.39 +89 +.39 +1.39 +89.39 +90 +.40 +1.40 +90.40 +91 +.40 +1.40 +91.40 +92 +.40 +1.40 +92.40 +93 +.41 +1.41 +93.41 +94 +.41 +1.41 +94.41 +95 +.42 +1.42 +95.42 +96 +.42 +1.42 +96.42 +97 +.43 +1.43 +97.43 +98 +.43 +1.43 +98.43 +99 +.44 +1.44 +99.44 +100 +.44 +1.44 +100.44 +101 +.44 +1.44 +101.44 +102 +.45 +1.45 +102.45 +103 +.45 +1.45 +103.45 +104 +.46 +1.46 +104.46 +105 +.46 +1.46 +105.46 +106 +.47 +1.47 +106.47 +107 +.47 +1.47 +107.47 +108 +.48 +1.48 +108.48 +109 +.48 +1.48 +109.48 +110 +.48 +1.48 +110.48 +111 +.49 +1.49 +111.49 +112 +.49 +1.49 +112.49 +113 +.50 +1.50 +113.50 +114 +.50 +1.50 +114.50 +115 +.51 +1.51 +115.51 +116 +.51 +1.51 +116.51 +117 +.52 +1.52 +117.52 +118 +.52 +1.52 +118.52 +119 +.52 +1.52 +119.52 +120 +.53 +1.53 +120.53 +121 +.53 +1.53 +121.53 +122 +.54 +1.54 +122.54 +123 +.54 +1.54 +123.54 +124 +.55 +1.55 +124.55 +125 +.55 +1.55 +125.55 +126 +.56 +1.56 +126.56 +127 +.56 +1.56 +127.56 +128 +.56 +1.56 +128.56 +129 +.57 +1.57 +129.57 +130 +.57 +1.57 +130.57 +131 +.58 +1.58 +131.58 +132 +.58 +1.58 +132.58 +133 +.59 +1.59 +133.59 +134 +.59 +1.59 +134.59 +135 +.60 +1.60 +135.60 +136 +.60 +1.60 +136.60 +137 +.60 +1.60 +137.60 +138 +.61 +1.61 +138.61 +139 +.61 +1.61 +139.61 +140 +.62 +1.62 +140.62 +141 +.62 +1.62 +141.62 +142 +.63 +1.63 +142.63 +143 +.63 +1.63 +143.63 +144 +.64 +1.64 +144.64 +145 +.64 +1.64 +145.64 +146 +.64 +1.64 +146.64 +147 +.65 +1.65 +147.65 +148 +.65 +1.65 +148.65 +149 +.66 +1.66 +149.66 +150 +.66 +1.66 +150.66 +151 +.67 +1.67 +151.67 +152 +.67 +1.67 +152.67 +153 +.68 +1.68 +153.68 +154 +.68 +1.68 +154.68 +155 +.68 +1.68 +155.68 +156 +.69 +1.69 +156.69 +157 +.69 +1.69 +157.69 +158 +.70 +1.70 +158.70 +159 +.70 +1.70 +159.70 +160 +.71 +1.71 +160.71 +161 +.71 +1.71 +161.71 +162 +.72 +1.72 +162.72 +163 +.72 +1.72 +163.72 +164 +.72 +1.72 +164.72 +165 +.73 +1.73 +165.73 +166 +.73 +1.73 +166.73 +167 +.74 +1.74 +167.74 +168 +.74 +1.74 +168.74 +169 +.75 +1.75 +169.75 +170 +.75 +1.75 +170.75 +171 +.76 +1.76 +171.76 +172 +.76 +1.76 +172.76 +173 +.76 +1.76 +173.76 +174 +.77 +1.77 +174.77 +175 +.77 +1.77 +175.77 +176 +.78 +1.78 +176.78 +177 +.78 +1.78 +177.78 +178 +.79 +1.79 +178.79 +179 +.79 +1.79 +179.79 +180 +.80 +1.80 +180.80 +181 +.80 +1.80 +181.80 +182 +.80 +1.80 +182.80 +183 +.81 +1.81 +183.81 +184 +.81 +1.81 +184.81 +185 +.82 +1.82 +185.82 +186 +.82 +1.82 +186.82 +187 +.83 +1.83 +187.83 +188 +.83 +1.83 +188.83 +189 +.84 +1.84 +189.84 +190 +.84 +1.84 +190.84 +191 +.84 +1.84 +191.84 +192 +.85 +1.85 +192.85 +193 +.85 +1.85 +193.85 +194 +.86 +1.86 +194.86 +195 +.86 +1.86 +195.86 +196 +.87 +1.87 +196.87 +197 +.87 +1.87 +197.87 +198 +.88 +1.88 +198.88 +199 +.88 +1.88 +199.88 +200 +.88 +1.88 +200.88 +201 +.89 +1.89 +201.89 +202 +.89 +1.89 +202.89 +203 +.90 +1.90 +203.90 +204 +.90 +1.90 +204.90 +205 +.91 +1.91 +205.91 +206 +.91 +1.91 +206.91 +207 +.92 +1.92 +207.92 +208 +.92 +1.92 +208.92 +209 +.92 +1.92 +209.92 +210 +.93 +1.93 +210.93 +211 +.93 +1.93 +211.93 +212 +.94 +1.94 +212.94 +213 +.94 +1.94 +213.94 +214 +.95 +1.95 +214.95 +215 +.95 +1.95 +215.95 +216 +.96 +1.96 +216.96 +217 +.96 +1.96 +217.96 +218 +.96 +1.96 +218.96 +219 +.97 +1.97 +219.97 +220 +.97 +1.97 +220.97 +221 +.98 +1.98 +221.98 +222 +.98 +1.98 +222.98 +223 +.99 +1.99 +223.99 +224 +.99 +1.99 +224.99 +225 +.066 +1.066 +225.066 +226 +.066 +1.066 +226.066 +227 +.067 +1.067 +227.067 +228 +.067 +1.067 +228.067 +229 +.067 +1.067 +229.067 +230 +.068 +1.068 +230.068 +231 +.068 +1.068 +231.068 +232 +.068 +1.068 +232.068 +233 +.069 +1.069 +233.069 +234 +.069 +1.069 +234.069 +235 +.069 +1.069 +235.069 +236 +.069 +1.069 +236.069 +237 +.070 +1.070 +237.070 +238 +.070 +1.070 +238.070 +239 +.070 +1.070 +239.070 +240 +.071 +1.071 +240.071 +241 +.071 +1.071 +241.071 +242 +.071 +1.071 +242.071 +243 +.072 +1.072 +243.072 +244 +.072 +1.072 +244.072 +245 +.072 +1.072 +245.072 +246 +.072 +1.072 +246.072 +247 +.073 +1.073 +247.073 +248 +.073 +1.073 +248.073 +249 +.073 +1.073 +249.073 +250 +.074 +1.074 +250.074 +251 +.074 +1.074 +251.074 +252 +.074 +1.074 +252.074 +253 +.074 +1.074 +253.074 +254 +.075 +1.075 +254.075 +255 +.075 +1.075 +255.075 +256 +.075 +1.075 +256.075 +0 +0 +1.0 +0 +1 +0 +1.0 +1.0 +2 +.1 +1.1 +2.1 +3 +.1 +1.1 +3.1 +4 +.2 +1.2 +4.2 +5 +.3 +1.3 +5.3 +6 +.3 +1.3 +6.3 +7 +.4 +1.4 +7.4 +8 +.5 +1.5 +8.5 +9 +.5 +1.5 +9.5 +10 +.6 +1.6 +10.6 +11 +.6 +1.6 +11.6 +12 +.7 +1.7 +12.7 +13 +.8 +1.8 +13.8 +14 +.8 +1.8 +14.8 +15 +.9 +1.9 +15.9 +16 +.06 +1.06 +16.06 +17 +.06 +1.06 +17.06 +18 +.07 +1.07 +18.07 +19 +.07 +1.07 +19.07 +20 +.07 +1.07 +20.07 +21 +.08 +1.08 +21.08 +22 +.08 +1.08 +22.08 +23 +.08 +1.08 +23.08 +24 +.09 +1.09 +24.09 +25 +.09 +1.09 +25.09 +26 +.10 +1.10 +26.10 +27 +.10 +1.10 +27.10 +28 +.10 +1.10 +28.10 +29 +.11 +1.11 +29.11 +30 +.11 +1.11 +30.11 +31 +.12 +1.12 +31.12 +32 +.12 +1.12 +32.12 +33 +.12 +1.12 +33.12 +34 +.13 +1.13 +34.13 +35 +.13 +1.13 +35.13 +36 +.14 +1.14 +36.14 +37 +.14 +1.14 +37.14 +38 +.14 +1.14 +38.14 +39 +.15 +1.15 +39.15 +40 +.15 +1.15 +40.15 +41 +.16 +1.16 +41.16 +42 +.16 +1.16 +42.16 +43 +.16 +1.16 +43.16 +44 +.17 +1.17 +44.17 +45 +.17 +1.17 +45.17 +46 +.17 +1.17 +46.17 +47 +.18 +1.18 +47.18 +48 +.18 +1.18 +48.18 +49 +.19 +1.19 +49.19 +50 +.19 +1.19 +50.19 +51 +.19 +1.19 +51.19 +52 +.20 +1.20 +52.20 +53 +.20 +1.20 +53.20 +54 +.21 +1.21 +54.21 +55 +.21 +1.21 +55.21 +56 +.21 +1.21 +56.21 +57 +.22 +1.22 +57.22 +58 +.22 +1.22 +58.22 +59 +.23 +1.23 +59.23 +60 +.23 +1.23 +60.23 +61 +.23 +1.23 +61.23 +62 +.24 +1.24 +62.24 +63 +.24 +1.24 +63.24 +64 +.25 +1.25 +64.25 +65 +.25 +1.25 +65.25 +66 +.25 +1.25 +66.25 +67 +.26 +1.26 +67.26 +68 +.26 +1.26 +68.26 +69 +.26 +1.26 +69.26 +70 +.27 +1.27 +70.27 +71 +.27 +1.27 +71.27 +72 +.28 +1.28 +72.28 +73 +.28 +1.28 +73.28 +74 +.28 +1.28 +74.28 +75 +.29 +1.29 +75.29 +76 +.29 +1.29 +76.29 +77 +.30 +1.30 +77.30 +78 +.30 +1.30 +78.30 +79 +.30 +1.30 +79.30 +80 +.31 +1.31 +80.31 +81 +.31 +1.31 +81.31 +82 +.32 +1.32 +82.32 +83 +.32 +1.32 +83.32 +84 +.32 +1.32 +84.32 +85 +.33 +1.33 +85.33 +86 +.33 +1.33 +86.33 +87 +.33 +1.33 +87.33 +88 +.34 +1.34 +88.34 +89 +.34 +1.34 +89.34 +90 +.35 +1.35 +90.35 +91 +.35 +1.35 +91.35 +92 +.35 +1.35 +92.35 +93 +.36 +1.36 +93.36 +94 +.36 +1.36 +94.36 +95 +.37 +1.37 +95.37 +96 +.37 +1.37 +96.37 +97 +.37 +1.37 +97.37 +98 +.38 +1.38 +98.38 +99 +.38 +1.38 +99.38 +100 +.39 +1.39 +100.39 +101 +.39 +1.39 +101.39 +102 +.39 +1.39 +102.39 +103 +.40 +1.40 +103.40 +104 +.40 +1.40 +104.40 +105 +.41 +1.41 +105.41 +106 +.41 +1.41 +106.41 +107 +.41 +1.41 +107.41 +108 +.42 +1.42 +108.42 +109 +.42 +1.42 +109.42 +110 +.42 +1.42 +110.42 +111 +.43 +1.43 +111.43 +112 +.43 +1.43 +112.43 +113 +.44 +1.44 +113.44 +114 +.44 +1.44 +114.44 +115 +.44 +1.44 +115.44 +116 +.45 +1.45 +116.45 +117 +.45 +1.45 +117.45 +118 +.46 +1.46 +118.46 +119 +.46 +1.46 +119.46 +120 +.46 +1.46 +120.46 +121 +.47 +1.47 +121.47 +122 +.47 +1.47 +122.47 +123 +.48 +1.48 +123.48 +124 +.48 +1.48 +124.48 +125 +.48 +1.48 +125.48 +126 +.49 +1.49 +126.49 +127 +.49 +1.49 +127.49 +128 +.50 +1.50 +128.50 +129 +.50 +1.50 +129.50 +130 +.50 +1.50 +130.50 +131 +.51 +1.51 +131.51 +132 +.51 +1.51 +132.51 +133 +.51 +1.51 +133.51 +134 +.52 +1.52 +134.52 +135 +.52 +1.52 +135.52 +136 +.53 +1.53 +136.53 +137 +.53 +1.53 +137.53 +138 +.53 +1.53 +138.53 +139 +.54 +1.54 +139.54 +140 +.54 +1.54 +140.54 +141 +.55 +1.55 +141.55 +142 +.55 +1.55 +142.55 +143 +.55 +1.55 +143.55 +144 +.56 +1.56 +144.56 +145 +.56 +1.56 +145.56 +146 +.57 +1.57 +146.57 +147 +.57 +1.57 +147.57 +148 +.57 +1.57 +148.57 +149 +.58 +1.58 +149.58 +150 +.58 +1.58 +150.58 +151 +.58 +1.58 +151.58 +152 +.59 +1.59 +152.59 +153 +.59 +1.59 +153.59 +154 +.60 +1.60 +154.60 +155 +.60 +1.60 +155.60 +156 +.60 +1.60 +156.60 +157 +.61 +1.61 +157.61 +158 +.61 +1.61 +158.61 +159 +.62 +1.62 +159.62 +160 +.62 +1.62 +160.62 +161 +.62 +1.62 +161.62 +162 +.63 +1.63 +162.63 +163 +.63 +1.63 +163.63 +164 +.64 +1.64 +164.64 +165 +.64 +1.64 +165.64 +166 +.64 +1.64 +166.64 +167 +.65 +1.65 +167.65 +168 +.65 +1.65 +168.65 +169 +.66 +1.66 +169.66 +170 +.66 +1.66 +170.66 +171 +.66 +1.66 +171.66 +172 +.67 +1.67 +172.67 +173 +.67 +1.67 +173.67 +174 +.67 +1.67 +174.67 +175 +.68 +1.68 +175.68 +176 +.68 +1.68 +176.68 +177 +.69 +1.69 +177.69 +178 +.69 +1.69 +178.69 +179 +.69 +1.69 +179.69 +180 +.70 +1.70 +180.70 +181 +.70 +1.70 +181.70 +182 +.71 +1.71 +182.71 +183 +.71 +1.71 +183.71 +184 +.71 +1.71 +184.71 +185 +.72 +1.72 +185.72 +186 +.72 +1.72 +186.72 +187 +.73 +1.73 +187.73 +188 +.73 +1.73 +188.73 +189 +.73 +1.73 +189.73 +190 +.74 +1.74 +190.74 +191 +.74 +1.74 +191.74 +192 +.75 +1.75 +192.75 +193 +.75 +1.75 +193.75 +194 +.75 +1.75 +194.75 +195 +.76 +1.76 +195.76 +196 +.76 +1.76 +196.76 +197 +.76 +1.76 +197.76 +198 +.77 +1.77 +198.77 +199 +.77 +1.77 +199.77 +200 +.78 +1.78 +200.78 +201 +.78 +1.78 +201.78 +202 +.78 +1.78 +202.78 +203 +.79 +1.79 +203.79 +204 +.79 +1.79 +204.79 +205 +.80 +1.80 +205.80 +206 +.80 +1.80 +206.80 +207 +.80 +1.80 +207.80 +208 +.81 +1.81 +208.81 +209 +.81 +1.81 +209.81 +210 +.82 +1.82 +210.82 +211 +.82 +1.82 +211.82 +212 +.82 +1.82 +212.82 +213 +.83 +1.83 +213.83 +214 +.83 +1.83 +214.83 +215 +.83 +1.83 +215.83 +216 +.84 +1.84 +216.84 +217 +.84 +1.84 +217.84 +218 +.85 +1.85 +218.85 +219 +.85 +1.85 +219.85 +220 +.85 +1.85 +220.85 +221 +.86 +1.86 +221.86 +222 +.86 +1.86 +222.86 +223 +.87 +1.87 +223.87 +224 +.87 +1.87 +224.87 +225 +.87 +1.87 +225.87 +226 +.88 +1.88 +226.88 +227 +.88 +1.88 +227.88 +228 +.89 +1.89 +228.89 +229 +.89 +1.89 +229.89 +230 +.89 +1.89 +230.89 +231 +.90 +1.90 +231.90 +232 +.90 +1.90 +232.90 +233 +.91 +1.91 +233.91 +234 +.91 +1.91 +234.91 +235 +.91 +1.91 +235.91 +236 +.92 +1.92 +236.92 +237 +.92 +1.92 +237.92 +238 +.92 +1.92 +238.92 +239 +.93 +1.93 +239.93 +240 +.93 +1.93 +240.93 +241 +.94 +1.94 +241.94 +242 +.94 +1.94 +242.94 +243 +.94 +1.94 +243.94 +244 +.95 +1.95 +244.95 +245 +.95 +1.95 +245.95 +246 +.96 +1.96 +246.96 +247 +.96 +1.96 +247.96 +248 +.96 +1.96 +248.96 +249 +.97 +1.97 +249.97 +250 +.97 +1.97 +250.97 +251 +.98 +1.98 +251.98 +252 +.98 +1.98 +252.98 +253 +.98 +1.98 +253.98 +254 +.99 +1.99 +254.99 +255 +.99 +1.99 +255.99 +256 +.062 +1.062 +256.062 diff --git a/aosp/external/toybox/tests/files/bc/pi.txt b/aosp/external/toybox/tests/files/bc/pi.txt new file mode 100644 index 0000000000000000000000000000000000000000..b98419f1236b64e3b103e05c8fb80f000c2972c1 --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/pi.txt @@ -0,0 +1,4 @@ +for (i = 0; i <= 100; ++i) { + scale = i + 4 * a(1) +} diff --git a/aosp/external/toybox/tests/files/bc/pi_results.txt b/aosp/external/toybox/tests/files/bc/pi_results.txt new file mode 100644 index 0000000000000000000000000000000000000000..128d6c0ca7586c93899f5eae6cb5ec2a7b9eecb6 --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/pi_results.txt @@ -0,0 +1,135 @@ +0 +2.8 +3.12 +3.140 +3.1412 +3.14156 +3.141592 +3.1415924 +3.14159264 +3.141592652 +3.1415926532 +3.14159265356 +3.141592653588 +3.1415926535896 +3.14159265358976 +3.141592653589792 +3.1415926535897932 +3.14159265358979320 +3.141592653589793236 +3.1415926535897932384 +3.14159265358979323844 +3.141592653589793238460 +3.1415926535897932384624 +3.14159265358979323846264 +3.141592653589793238462640 +3.1415926535897932384626432 +3.14159265358979323846264336 +3.141592653589793238462643380 +3.1415926535897932384626433832 +3.14159265358979323846264338324 +3.141592653589793238462643383276 +3.1415926535897932384626433832792 +3.14159265358979323846264338327948 +3.141592653589793238462643383279500 +3.1415926535897932384626433832795028 +3.14159265358979323846264338327950288 +3.141592653589793238462643383279502884 +3.1415926535897932384626433832795028840 +3.14159265358979323846264338327950288416 +3.141592653589793238462643383279502884196 +3.1415926535897932384626433832795028841968 +3.14159265358979323846264338327950288419716 +3.141592653589793238462643383279502884197168 +3.1415926535897932384626433832795028841971692 +3.14159265358979323846264338327950288419716936 +3.141592653589793238462643383279502884197169396 +3.1415926535897932384626433832795028841971693992 +3.14159265358979323846264338327950288419716939936 +3.141592653589793238462643383279502884197169399372 +3.1415926535897932384626433832795028841971693993748 +3.14159265358979323846264338327950288419716939937508 +3.141592653589793238462643383279502884197169399375104 +3.1415926535897932384626433832795028841971693993751056 +3.14159265358979323846264338327950288419716939937510580 +3.141592653589793238462643383279502884197169399375105820 +3.1415926535897932384626433832795028841971693993751058208 +3.14159265358979323846264338327950288419716939937510582096 +3.141592653589793238462643383279502884197169399375105820972 +3.1415926535897932384626433832795028841971693993751058209748 +3.14159265358979323846264338327950288419716939937510582097492 +3.141592653589793238462643383279502884197169399375105820974944 +3.1415926535897932384626433832795028841971693993751058209749444 +3.14159265358979323846264338327950288419716939937510582097494456 +3.141592653589793238462643383279502884197169399375105820974944592 +3.1415926535897932384626433832795028841971693993751058209749445920 +3.14159265358979323846264338327950288419716939937510582097494459228 +3.141592653589793238462643383279502884197169399375105820974944592304 +3.141592653589793238462643383279502884197169399375105820974944592307\ +6 +3.141592653589793238462643383279502884197169399375105820974944592307\ +80 +3.141592653589793238462643383279502884197169399375105820974944592307\ +816 +3.141592653589793238462643383279502884197169399375105820974944592307\ +8164 +3.141592653589793238462643383279502884197169399375105820974944592307\ +81640 +3.141592653589793238462643383279502884197169399375105820974944592307\ +816404 +3.141592653589793238462643383279502884197169399375105820974944592307\ +8164060 +3.141592653589793238462643383279502884197169399375105820974944592307\ +81640628 +3.141592653589793238462643383279502884197169399375105820974944592307\ +816406284 +3.141592653589793238462643383279502884197169399375105820974944592307\ +8164062860 +3.141592653589793238462643383279502884197169399375105820974944592307\ +81640628620 +3.141592653589793238462643383279502884197169399375105820974944592307\ +816406286208 +3.141592653589793238462643383279502884197169399375105820974944592307\ +8164062862088 +3.141592653589793238462643383279502884197169399375105820974944592307\ +81640628620896 +3.141592653589793238462643383279502884197169399375105820974944592307\ +816406286208996 +3.141592653589793238462643383279502884197169399375105820974944592307\ +8164062862089984 +3.141592653589793238462643383279502884197169399375105820974944592307\ +81640628620899860 +3.141592653589793238462643383279502884197169399375105820974944592307\ +816406286208998628 +3.141592653589793238462643383279502884197169399375105820974944592307\ +8164062862089986280 +3.141592653589793238462643383279502884197169399375105820974944592307\ +81640628620899862800 +3.141592653589793238462643383279502884197169399375105820974944592307\ +816406286208998628032 +3.141592653589793238462643383279502884197169399375105820974944592307\ +8164062862089986280348 +3.141592653589793238462643383279502884197169399375105820974944592307\ +81640628620899862803480 +3.141592653589793238462643383279502884197169399375105820974944592307\ +816406286208998628034824 +3.141592653589793238462643383279502884197169399375105820974944592307\ +8164062862089986280348252 +3.141592653589793238462643383279502884197169399375105820974944592307\ +81640628620899862803482532 +3.141592653589793238462643383279502884197169399375105820974944592307\ +816406286208998628034825340 +3.141592653589793238462643383279502884197169399375105820974944592307\ +8164062862089986280348253420 +3.141592653589793238462643383279502884197169399375105820974944592307\ +81640628620899862803482534208 +3.141592653589793238462643383279502884197169399375105820974944592307\ +816406286208998628034825342116 +3.141592653589793238462643383279502884197169399375105820974944592307\ +8164062862089986280348253421168 +3.141592653589793238462643383279502884197169399375105820974944592307\ +81640628620899862803482534211704 +3.141592653589793238462643383279502884197169399375105820974944592307\ +816406286208998628034825342117064 +3.141592653589793238462643383279502884197169399375105820974944592307\ +8164062862089986280348253421170676 diff --git a/aosp/external/toybox/tests/files/bc/power.txt b/aosp/external/toybox/tests/files/bc/power.txt new file mode 100644 index 0000000000000000000000000000000000000000..5107be439dc3b535815180462aced62d85a152e4 --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/power.txt @@ -0,0 +1,44 @@ +0 ^ 0 +0 ^ 1 +0 ^ 1894 +1 ^ 0 +39746823 ^ 0 +0.238672983047682 ^ 0 +18394762374689237468.97354862973846 ^ 0 +1 ^ 1 +2 ^ 1 +18927361346 ^ 1 +0.23523785962738592635777 ^ 1 +328956734869213746.89782398457234 ^ 1 +8937 ^ 98 +0.124876812394 ^ 96 +93762.2836 ^ 13 +1 ^ -1 +2 ^ -1 +10 ^ -1 +683734768 ^ -1 +38579623756.897937568235 ^ -1 +1 ^ -32467 +2 ^ -53 +23897 ^ -3 +-1 ^ 1 +-1 ^ 2 +-2 ^ 1 +-2 ^ 2 +-237 ^ 29 +-3746 ^ 8 +-0.3548 ^ 35 +-4267.234 ^ 7 +-326.3246 ^ 8 +-1 ^ -1 +-1 ^ -2 +-2 ^ -1 +-2 ^ -2 +-237 ^ -93 +-784 ^ -23 +-86 ^ -7 +-0.23424398 ^ -81 +-178.234786 ^ -79 +-1274.346 ^ -8 +-0.2959371298 ^ 27 + diff --git a/aosp/external/toybox/tests/files/bc/power_results.txt b/aosp/external/toybox/tests/files/bc/power_results.txt new file mode 100644 index 0000000000000000000000000000000000000000..1bca1b97b2ad6406d60296fac25ec2f6dabd8d57 --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/power_results.txt @@ -0,0 +1,51 @@ +1 +0 +0 +1 +1 +1 +1 +1 +2 +18927361346 +.23523785962738592635777 +328956734869213746.89782398457234 +16473742664221279051571200630760751138799221376964991600670000200609\ +08006052596520320731708604393844468006290371918262741885989163144389\ +39367835091560809036359941703341471396407660150658436796925310445979\ +21333166245765946557344383284626113908419359990042883048537750217279\ +17481980123593363177308481941550382845381799410533956718500484099889\ +610805653325917409549921909941664118421333562129 +0 +43287877285033571298394739716218787350087163435619825150259705419.98\ +016445740928054425 +1.00000000000000000000 +.50000000000000000000 +.10000000000000000000 +.00000000146255543348 +.00000000002592041867 +1.00000000000000000000 +.00000000000000011102 +.00000000000007327736 +-1 +1 +-2 +4 +-7373981340203217564025207502362461927230480148287479751287576522804\ +77 +38774140915674516674808545536 +-.00000000000000017759 +-25764707167314625311472240.23895709280819039654 +128587429491381039942.88651883210401536158 +-1.00000000000000000000 +1.00000000000000000000 +-.50000000000000000000 +.25000000000000000000 +0 +0 +-.00000000000002874159 +-1139873046177080922024790150196533457011720664136966.15649615964858\ +379359 +0 +0 +-.00000000000000527697 diff --git a/aosp/external/toybox/tests/files/bc/print.txt b/aosp/external/toybox/tests/files/bc/print.txt new file mode 100644 index 0000000000000000000000000000000000000000..5662b638324fbb28de10852d8e5347fe7302a3a2 --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/print.txt @@ -0,0 +1,6841 @@ +obase = 2 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +2189432174861923048671023498128347619023487610234689172304.192748960\ +128745108927461089237469018723460 +obase = 3 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +2189432174861923048671023498128347619023487610234689172304.192748960\ +128745108927461089237469018723460 +obase = 4 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +2189432174861923048671023498128347619023487610234689172304.192748960\ +128745108927461089237469018723460 +obase = 5 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +19 +0.19 +1.19 +19.19 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +2189432174861923048671023498128347619023487610234689172304.192748960\ +128745108927461089237469018723460 +obase = 6 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +19 +0.19 +1.19 +19.19 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +28 +0.28 +1.28 +28.28 +29 +0.29 +1.29 +29.29 +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +2189432174861923048671023498128347619023487610234689172304.192748960\ +128745108927461089237469018723460 +obase = 7 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +19 +0.19 +1.19 +19.19 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +28 +0.28 +1.28 +28.28 +29 +0.29 +1.29 +29.29 +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +37 +0.37 +1.37 +37.37 +38 +0.38 +1.38 +38.38 +39 +0.39 +1.39 +39.39 +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +47 +0.47 +1.47 +47.47 +48 +0.48 +1.48 +48.48 +49 +0.49 +1.49 +49.49 +2189432174861923048671023498128347619023487610234689172304.192748960\ +128745108927461089237469018723460 +obase = 8 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +19 +0.19 +1.19 +19.19 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +28 +0.28 +1.28 +28.28 +29 +0.29 +1.29 +29.29 +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +37 +0.37 +1.37 +37.37 +38 +0.38 +1.38 +38.38 +39 +0.39 +1.39 +39.39 +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +47 +0.47 +1.47 +47.47 +48 +0.48 +1.48 +48.48 +49 +0.49 +1.49 +49.49 +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +56 +0.56 +1.56 +56.56 +57 +0.57 +1.57 +57.57 +58 +0.58 +1.58 +58.58 +59 +0.59 +1.59 +59.59 +60 +0.60 +1.60 +60.60 +61 +0.61 +1.61 +61.61 +62 +0.62 +1.62 +62.62 +63 +0.63 +1.63 +63.63 +64 +0.64 +1.64 +64.64 +2189432174861923048671023498128347619023487610234689172304.192748960\ +128745108927461089237469018723460 +obase = 9 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +19 +0.19 +1.19 +19.19 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +28 +0.28 +1.28 +28.28 +29 +0.29 +1.29 +29.29 +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +37 +0.37 +1.37 +37.37 +38 +0.38 +1.38 +38.38 +39 +0.39 +1.39 +39.39 +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +47 +0.47 +1.47 +47.47 +48 +0.48 +1.48 +48.48 +49 +0.49 +1.49 +49.49 +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +56 +0.56 +1.56 +56.56 +57 +0.57 +1.57 +57.57 +58 +0.58 +1.58 +58.58 +59 +0.59 +1.59 +59.59 +60 +0.60 +1.60 +60.60 +61 +0.61 +1.61 +61.61 +62 +0.62 +1.62 +62.62 +63 +0.63 +1.63 +63.63 +64 +0.64 +1.64 +64.64 +65 +0.65 +1.65 +65.65 +66 +0.66 +1.66 +66.66 +67 +0.67 +1.67 +67.67 +68 +0.68 +1.68 +68.68 +69 +0.69 +1.69 +69.69 +70 +0.70 +1.70 +70.70 +71 +0.71 +1.71 +71.71 +72 +0.72 +1.72 +72.72 +73 +0.73 +1.73 +73.73 +74 +0.74 +1.74 +74.74 +75 +0.75 +1.75 +75.75 +76 +0.76 +1.76 +76.76 +77 +0.77 +1.77 +77.77 +78 +0.78 +1.78 +78.78 +79 +0.79 +1.79 +79.79 +80 +0.80 +1.80 +80.80 +81 +0.81 +1.81 +81.81 +2189432174861923048671023498128347619023487610234689172304.192748960\ +128745108927461089237469018723460 +obase = 11 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +19 +0.19 +1.19 +19.19 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +28 +0.28 +1.28 +28.28 +29 +0.29 +1.29 +29.29 +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +37 +0.37 +1.37 +37.37 +38 +0.38 +1.38 +38.38 +39 +0.39 +1.39 +39.39 +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +47 +0.47 +1.47 +47.47 +48 +0.48 +1.48 +48.48 +49 +0.49 +1.49 +49.49 +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +56 +0.56 +1.56 +56.56 +57 +0.57 +1.57 +57.57 +58 +0.58 +1.58 +58.58 +59 +0.59 +1.59 +59.59 +60 +0.60 +1.60 +60.60 +61 +0.61 +1.61 +61.61 +62 +0.62 +1.62 +62.62 +63 +0.63 +1.63 +63.63 +64 +0.64 +1.64 +64.64 +65 +0.65 +1.65 +65.65 +66 +0.66 +1.66 +66.66 +67 +0.67 +1.67 +67.67 +68 +0.68 +1.68 +68.68 +69 +0.69 +1.69 +69.69 +70 +0.70 +1.70 +70.70 +71 +0.71 +1.71 +71.71 +72 +0.72 +1.72 +72.72 +73 +0.73 +1.73 +73.73 +74 +0.74 +1.74 +74.74 +75 +0.75 +1.75 +75.75 +76 +0.76 +1.76 +76.76 +77 +0.77 +1.77 +77.77 +78 +0.78 +1.78 +78.78 +79 +0.79 +1.79 +79.79 +80 +0.80 +1.80 +80.80 +81 +0.81 +1.81 +81.81 +82 +0.82 +1.82 +82.82 +83 +0.83 +1.83 +83.83 +84 +0.84 +1.84 +84.84 +85 +0.85 +1.85 +85.85 +86 +0.86 +1.86 +86.86 +87 +0.87 +1.87 +87.87 +88 +0.88 +1.88 +88.88 +89 +0.89 +1.89 +89.89 +90 +0.90 +1.90 +90.90 +91 +0.91 +1.91 +91.91 +92 +0.92 +1.92 +92.92 +93 +0.93 +1.93 +93.93 +94 +0.94 +1.94 +94.94 +95 +0.95 +1.95 +95.95 +96 +0.96 +1.96 +96.96 +97 +0.97 +1.97 +97.97 +98 +0.98 +1.98 +98.98 +99 +0.99 +1.99 +99.99 +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +103 +0.103 +1.103 +103.103 +104 +0.104 +1.104 +104.104 +105 +0.105 +1.105 +105.105 +106 +0.106 +1.106 +106.106 +107 +0.107 +1.107 +107.107 +108 +0.108 +1.108 +108.108 +109 +0.109 +1.109 +109.109 +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +113 +0.113 +1.113 +113.113 +114 +0.114 +1.114 +114.114 +115 +0.115 +1.115 +115.115 +116 +0.116 +1.116 +116.116 +117 +0.117 +1.117 +117.117 +118 +0.118 +1.118 +118.118 +119 +0.119 +1.119 +119.119 +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +2189432174861923048671023498128347619023487610234689172304.192748960\ +128745108927461089237469018723460 +obase = 12 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +19 +0.19 +1.19 +19.19 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +28 +0.28 +1.28 +28.28 +29 +0.29 +1.29 +29.29 +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +37 +0.37 +1.37 +37.37 +38 +0.38 +1.38 +38.38 +39 +0.39 +1.39 +39.39 +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +47 +0.47 +1.47 +47.47 +48 +0.48 +1.48 +48.48 +49 +0.49 +1.49 +49.49 +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +56 +0.56 +1.56 +56.56 +57 +0.57 +1.57 +57.57 +58 +0.58 +1.58 +58.58 +59 +0.59 +1.59 +59.59 +60 +0.60 +1.60 +60.60 +61 +0.61 +1.61 +61.61 +62 +0.62 +1.62 +62.62 +63 +0.63 +1.63 +63.63 +64 +0.64 +1.64 +64.64 +65 +0.65 +1.65 +65.65 +66 +0.66 +1.66 +66.66 +67 +0.67 +1.67 +67.67 +68 +0.68 +1.68 +68.68 +69 +0.69 +1.69 +69.69 +70 +0.70 +1.70 +70.70 +71 +0.71 +1.71 +71.71 +72 +0.72 +1.72 +72.72 +73 +0.73 +1.73 +73.73 +74 +0.74 +1.74 +74.74 +75 +0.75 +1.75 +75.75 +76 +0.76 +1.76 +76.76 +77 +0.77 +1.77 +77.77 +78 +0.78 +1.78 +78.78 +79 +0.79 +1.79 +79.79 +80 +0.80 +1.80 +80.80 +81 +0.81 +1.81 +81.81 +82 +0.82 +1.82 +82.82 +83 +0.83 +1.83 +83.83 +84 +0.84 +1.84 +84.84 +85 +0.85 +1.85 +85.85 +86 +0.86 +1.86 +86.86 +87 +0.87 +1.87 +87.87 +88 +0.88 +1.88 +88.88 +89 +0.89 +1.89 +89.89 +90 +0.90 +1.90 +90.90 +91 +0.91 +1.91 +91.91 +92 +0.92 +1.92 +92.92 +93 +0.93 +1.93 +93.93 +94 +0.94 +1.94 +94.94 +95 +0.95 +1.95 +95.95 +96 +0.96 +1.96 +96.96 +97 +0.97 +1.97 +97.97 +98 +0.98 +1.98 +98.98 +99 +0.99 +1.99 +99.99 +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +103 +0.103 +1.103 +103.103 +104 +0.104 +1.104 +104.104 +105 +0.105 +1.105 +105.105 +106 +0.106 +1.106 +106.106 +107 +0.107 +1.107 +107.107 +108 +0.108 +1.108 +108.108 +109 +0.109 +1.109 +109.109 +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +113 +0.113 +1.113 +113.113 +114 +0.114 +1.114 +114.114 +115 +0.115 +1.115 +115.115 +116 +0.116 +1.116 +116.116 +117 +0.117 +1.117 +117.117 +118 +0.118 +1.118 +118.118 +119 +0.119 +1.119 +119.119 +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +122 +0.122 +1.122 +122.122 +123 +0.123 +1.123 +123.123 +124 +0.124 +1.124 +124.124 +125 +0.125 +1.125 +125.125 +126 +0.126 +1.126 +126.126 +127 +0.127 +1.127 +127.127 +128 +0.128 +1.128 +128.128 +129 +0.129 +1.129 +129.129 +130 +0.130 +1.130 +130.130 +131 +0.131 +1.131 +131.131 +132 +0.132 +1.132 +132.132 +133 +0.133 +1.133 +133.133 +134 +0.134 +1.134 +134.134 +135 +0.135 +1.135 +135.135 +136 +0.136 +1.136 +136.136 +137 +0.137 +1.137 +137.137 +138 +0.138 +1.138 +138.138 +139 +0.139 +1.139 +139.139 +140 +0.140 +1.140 +140.140 +141 +0.141 +1.141 +141.141 +142 +0.142 +1.142 +142.142 +143 +0.143 +1.143 +143.143 +144 +0.144 +1.144 +144.144 +2189432174861923048671023498128347619023487610234689172304.192748960\ +128745108927461089237469018723460 +obase = 13 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +19 +0.19 +1.19 +19.19 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +28 +0.28 +1.28 +28.28 +29 +0.29 +1.29 +29.29 +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +37 +0.37 +1.37 +37.37 +38 +0.38 +1.38 +38.38 +39 +0.39 +1.39 +39.39 +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +47 +0.47 +1.47 +47.47 +48 +0.48 +1.48 +48.48 +49 +0.49 +1.49 +49.49 +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +56 +0.56 +1.56 +56.56 +57 +0.57 +1.57 +57.57 +58 +0.58 +1.58 +58.58 +59 +0.59 +1.59 +59.59 +60 +0.60 +1.60 +60.60 +61 +0.61 +1.61 +61.61 +62 +0.62 +1.62 +62.62 +63 +0.63 +1.63 +63.63 +64 +0.64 +1.64 +64.64 +65 +0.65 +1.65 +65.65 +66 +0.66 +1.66 +66.66 +67 +0.67 +1.67 +67.67 +68 +0.68 +1.68 +68.68 +69 +0.69 +1.69 +69.69 +70 +0.70 +1.70 +70.70 +71 +0.71 +1.71 +71.71 +72 +0.72 +1.72 +72.72 +73 +0.73 +1.73 +73.73 +74 +0.74 +1.74 +74.74 +75 +0.75 +1.75 +75.75 +76 +0.76 +1.76 +76.76 +77 +0.77 +1.77 +77.77 +78 +0.78 +1.78 +78.78 +79 +0.79 +1.79 +79.79 +80 +0.80 +1.80 +80.80 +81 +0.81 +1.81 +81.81 +82 +0.82 +1.82 +82.82 +83 +0.83 +1.83 +83.83 +84 +0.84 +1.84 +84.84 +85 +0.85 +1.85 +85.85 +86 +0.86 +1.86 +86.86 +87 +0.87 +1.87 +87.87 +88 +0.88 +1.88 +88.88 +89 +0.89 +1.89 +89.89 +90 +0.90 +1.90 +90.90 +91 +0.91 +1.91 +91.91 +92 +0.92 +1.92 +92.92 +93 +0.93 +1.93 +93.93 +94 +0.94 +1.94 +94.94 +95 +0.95 +1.95 +95.95 +96 +0.96 +1.96 +96.96 +97 +0.97 +1.97 +97.97 +98 +0.98 +1.98 +98.98 +99 +0.99 +1.99 +99.99 +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +103 +0.103 +1.103 +103.103 +104 +0.104 +1.104 +104.104 +105 +0.105 +1.105 +105.105 +106 +0.106 +1.106 +106.106 +107 +0.107 +1.107 +107.107 +108 +0.108 +1.108 +108.108 +109 +0.109 +1.109 +109.109 +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +113 +0.113 +1.113 +113.113 +114 +0.114 +1.114 +114.114 +115 +0.115 +1.115 +115.115 +116 +0.116 +1.116 +116.116 +117 +0.117 +1.117 +117.117 +118 +0.118 +1.118 +118.118 +119 +0.119 +1.119 +119.119 +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +122 +0.122 +1.122 +122.122 +123 +0.123 +1.123 +123.123 +124 +0.124 +1.124 +124.124 +125 +0.125 +1.125 +125.125 +126 +0.126 +1.126 +126.126 +127 +0.127 +1.127 +127.127 +128 +0.128 +1.128 +128.128 +129 +0.129 +1.129 +129.129 +130 +0.130 +1.130 +130.130 +131 +0.131 +1.131 +131.131 +132 +0.132 +1.132 +132.132 +133 +0.133 +1.133 +133.133 +134 +0.134 +1.134 +134.134 +135 +0.135 +1.135 +135.135 +136 +0.136 +1.136 +136.136 +137 +0.137 +1.137 +137.137 +138 +0.138 +1.138 +138.138 +139 +0.139 +1.139 +139.139 +140 +0.140 +1.140 +140.140 +141 +0.141 +1.141 +141.141 +142 +0.142 +1.142 +142.142 +143 +0.143 +1.143 +143.143 +144 +0.144 +1.144 +144.144 +145 +0.145 +1.145 +145.145 +146 +0.146 +1.146 +146.146 +147 +0.147 +1.147 +147.147 +148 +0.148 +1.148 +148.148 +149 +0.149 +1.149 +149.149 +150 +0.150 +1.150 +150.150 +151 +0.151 +1.151 +151.151 +152 +0.152 +1.152 +152.152 +153 +0.153 +1.153 +153.153 +154 +0.154 +1.154 +154.154 +155 +0.155 +1.155 +155.155 +156 +0.156 +1.156 +156.156 +157 +0.157 +1.157 +157.157 +158 +0.158 +1.158 +158.158 +159 +0.159 +1.159 +159.159 +160 +0.160 +1.160 +160.160 +161 +0.161 +1.161 +161.161 +162 +0.162 +1.162 +162.162 +163 +0.163 +1.163 +163.163 +164 +0.164 +1.164 +164.164 +165 +0.165 +1.165 +165.165 +166 +0.166 +1.166 +166.166 +167 +0.167 +1.167 +167.167 +168 +0.168 +1.168 +168.168 +169 +0.169 +1.169 +169.169 +2189432174861923048671023498128347619023487610234689172304.192748960\ +128745108927461089237469018723460 +obase = 14 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +19 +0.19 +1.19 +19.19 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +28 +0.28 +1.28 +28.28 +29 +0.29 +1.29 +29.29 +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +37 +0.37 +1.37 +37.37 +38 +0.38 +1.38 +38.38 +39 +0.39 +1.39 +39.39 +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +47 +0.47 +1.47 +47.47 +48 +0.48 +1.48 +48.48 +49 +0.49 +1.49 +49.49 +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +56 +0.56 +1.56 +56.56 +57 +0.57 +1.57 +57.57 +58 +0.58 +1.58 +58.58 +59 +0.59 +1.59 +59.59 +60 +0.60 +1.60 +60.60 +61 +0.61 +1.61 +61.61 +62 +0.62 +1.62 +62.62 +63 +0.63 +1.63 +63.63 +64 +0.64 +1.64 +64.64 +65 +0.65 +1.65 +65.65 +66 +0.66 +1.66 +66.66 +67 +0.67 +1.67 +67.67 +68 +0.68 +1.68 +68.68 +69 +0.69 +1.69 +69.69 +70 +0.70 +1.70 +70.70 +71 +0.71 +1.71 +71.71 +72 +0.72 +1.72 +72.72 +73 +0.73 +1.73 +73.73 +74 +0.74 +1.74 +74.74 +75 +0.75 +1.75 +75.75 +76 +0.76 +1.76 +76.76 +77 +0.77 +1.77 +77.77 +78 +0.78 +1.78 +78.78 +79 +0.79 +1.79 +79.79 +80 +0.80 +1.80 +80.80 +81 +0.81 +1.81 +81.81 +82 +0.82 +1.82 +82.82 +83 +0.83 +1.83 +83.83 +84 +0.84 +1.84 +84.84 +85 +0.85 +1.85 +85.85 +86 +0.86 +1.86 +86.86 +87 +0.87 +1.87 +87.87 +88 +0.88 +1.88 +88.88 +89 +0.89 +1.89 +89.89 +90 +0.90 +1.90 +90.90 +91 +0.91 +1.91 +91.91 +92 +0.92 +1.92 +92.92 +93 +0.93 +1.93 +93.93 +94 +0.94 +1.94 +94.94 +95 +0.95 +1.95 +95.95 +96 +0.96 +1.96 +96.96 +97 +0.97 +1.97 +97.97 +98 +0.98 +1.98 +98.98 +99 +0.99 +1.99 +99.99 +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +103 +0.103 +1.103 +103.103 +104 +0.104 +1.104 +104.104 +105 +0.105 +1.105 +105.105 +106 +0.106 +1.106 +106.106 +107 +0.107 +1.107 +107.107 +108 +0.108 +1.108 +108.108 +109 +0.109 +1.109 +109.109 +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +113 +0.113 +1.113 +113.113 +114 +0.114 +1.114 +114.114 +115 +0.115 +1.115 +115.115 +116 +0.116 +1.116 +116.116 +117 +0.117 +1.117 +117.117 +118 +0.118 +1.118 +118.118 +119 +0.119 +1.119 +119.119 +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +122 +0.122 +1.122 +122.122 +123 +0.123 +1.123 +123.123 +124 +0.124 +1.124 +124.124 +125 +0.125 +1.125 +125.125 +126 +0.126 +1.126 +126.126 +127 +0.127 +1.127 +127.127 +128 +0.128 +1.128 +128.128 +129 +0.129 +1.129 +129.129 +130 +0.130 +1.130 +130.130 +131 +0.131 +1.131 +131.131 +132 +0.132 +1.132 +132.132 +133 +0.133 +1.133 +133.133 +134 +0.134 +1.134 +134.134 +135 +0.135 +1.135 +135.135 +136 +0.136 +1.136 +136.136 +137 +0.137 +1.137 +137.137 +138 +0.138 +1.138 +138.138 +139 +0.139 +1.139 +139.139 +140 +0.140 +1.140 +140.140 +141 +0.141 +1.141 +141.141 +142 +0.142 +1.142 +142.142 +143 +0.143 +1.143 +143.143 +144 +0.144 +1.144 +144.144 +145 +0.145 +1.145 +145.145 +146 +0.146 +1.146 +146.146 +147 +0.147 +1.147 +147.147 +148 +0.148 +1.148 +148.148 +149 +0.149 +1.149 +149.149 +150 +0.150 +1.150 +150.150 +151 +0.151 +1.151 +151.151 +152 +0.152 +1.152 +152.152 +153 +0.153 +1.153 +153.153 +154 +0.154 +1.154 +154.154 +155 +0.155 +1.155 +155.155 +156 +0.156 +1.156 +156.156 +157 +0.157 +1.157 +157.157 +158 +0.158 +1.158 +158.158 +159 +0.159 +1.159 +159.159 +160 +0.160 +1.160 +160.160 +161 +0.161 +1.161 +161.161 +162 +0.162 +1.162 +162.162 +163 +0.163 +1.163 +163.163 +164 +0.164 +1.164 +164.164 +165 +0.165 +1.165 +165.165 +166 +0.166 +1.166 +166.166 +167 +0.167 +1.167 +167.167 +168 +0.168 +1.168 +168.168 +169 +0.169 +1.169 +169.169 +170 +0.170 +1.170 +170.170 +171 +0.171 +1.171 +171.171 +172 +0.172 +1.172 +172.172 +173 +0.173 +1.173 +173.173 +174 +0.174 +1.174 +174.174 +175 +0.175 +1.175 +175.175 +176 +0.176 +1.176 +176.176 +177 +0.177 +1.177 +177.177 +178 +0.178 +1.178 +178.178 +179 +0.179 +1.179 +179.179 +180 +0.180 +1.180 +180.180 +181 +0.181 +1.181 +181.181 +182 +0.182 +1.182 +182.182 +183 +0.183 +1.183 +183.183 +184 +0.184 +1.184 +184.184 +185 +0.185 +1.185 +185.185 +186 +0.186 +1.186 +186.186 +187 +0.187 +1.187 +187.187 +188 +0.188 +1.188 +188.188 +189 +0.189 +1.189 +189.189 +190 +0.190 +1.190 +190.190 +191 +0.191 +1.191 +191.191 +192 +0.192 +1.192 +192.192 +193 +0.193 +1.193 +193.193 +194 +0.194 +1.194 +194.194 +195 +0.195 +1.195 +195.195 +196 +0.196 +1.196 +196.196 +2189432174861923048671023498128347619023487610234689172304.192748960\ +128745108927461089237469018723460 +obase = 15 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +19 +0.19 +1.19 +19.19 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +28 +0.28 +1.28 +28.28 +29 +0.29 +1.29 +29.29 +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +37 +0.37 +1.37 +37.37 +38 +0.38 +1.38 +38.38 +39 +0.39 +1.39 +39.39 +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +47 +0.47 +1.47 +47.47 +48 +0.48 +1.48 +48.48 +49 +0.49 +1.49 +49.49 +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +56 +0.56 +1.56 +56.56 +57 +0.57 +1.57 +57.57 +58 +0.58 +1.58 +58.58 +59 +0.59 +1.59 +59.59 +60 +0.60 +1.60 +60.60 +61 +0.61 +1.61 +61.61 +62 +0.62 +1.62 +62.62 +63 +0.63 +1.63 +63.63 +64 +0.64 +1.64 +64.64 +65 +0.65 +1.65 +65.65 +66 +0.66 +1.66 +66.66 +67 +0.67 +1.67 +67.67 +68 +0.68 +1.68 +68.68 +69 +0.69 +1.69 +69.69 +70 +0.70 +1.70 +70.70 +71 +0.71 +1.71 +71.71 +72 +0.72 +1.72 +72.72 +73 +0.73 +1.73 +73.73 +74 +0.74 +1.74 +74.74 +75 +0.75 +1.75 +75.75 +76 +0.76 +1.76 +76.76 +77 +0.77 +1.77 +77.77 +78 +0.78 +1.78 +78.78 +79 +0.79 +1.79 +79.79 +80 +0.80 +1.80 +80.80 +81 +0.81 +1.81 +81.81 +82 +0.82 +1.82 +82.82 +83 +0.83 +1.83 +83.83 +84 +0.84 +1.84 +84.84 +85 +0.85 +1.85 +85.85 +86 +0.86 +1.86 +86.86 +87 +0.87 +1.87 +87.87 +88 +0.88 +1.88 +88.88 +89 +0.89 +1.89 +89.89 +90 +0.90 +1.90 +90.90 +91 +0.91 +1.91 +91.91 +92 +0.92 +1.92 +92.92 +93 +0.93 +1.93 +93.93 +94 +0.94 +1.94 +94.94 +95 +0.95 +1.95 +95.95 +96 +0.96 +1.96 +96.96 +97 +0.97 +1.97 +97.97 +98 +0.98 +1.98 +98.98 +99 +0.99 +1.99 +99.99 +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +103 +0.103 +1.103 +103.103 +104 +0.104 +1.104 +104.104 +105 +0.105 +1.105 +105.105 +106 +0.106 +1.106 +106.106 +107 +0.107 +1.107 +107.107 +108 +0.108 +1.108 +108.108 +109 +0.109 +1.109 +109.109 +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +113 +0.113 +1.113 +113.113 +114 +0.114 +1.114 +114.114 +115 +0.115 +1.115 +115.115 +116 +0.116 +1.116 +116.116 +117 +0.117 +1.117 +117.117 +118 +0.118 +1.118 +118.118 +119 +0.119 +1.119 +119.119 +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +122 +0.122 +1.122 +122.122 +123 +0.123 +1.123 +123.123 +124 +0.124 +1.124 +124.124 +125 +0.125 +1.125 +125.125 +126 +0.126 +1.126 +126.126 +127 +0.127 +1.127 +127.127 +128 +0.128 +1.128 +128.128 +129 +0.129 +1.129 +129.129 +130 +0.130 +1.130 +130.130 +131 +0.131 +1.131 +131.131 +132 +0.132 +1.132 +132.132 +133 +0.133 +1.133 +133.133 +134 +0.134 +1.134 +134.134 +135 +0.135 +1.135 +135.135 +136 +0.136 +1.136 +136.136 +137 +0.137 +1.137 +137.137 +138 +0.138 +1.138 +138.138 +139 +0.139 +1.139 +139.139 +140 +0.140 +1.140 +140.140 +141 +0.141 +1.141 +141.141 +142 +0.142 +1.142 +142.142 +143 +0.143 +1.143 +143.143 +144 +0.144 +1.144 +144.144 +145 +0.145 +1.145 +145.145 +146 +0.146 +1.146 +146.146 +147 +0.147 +1.147 +147.147 +148 +0.148 +1.148 +148.148 +149 +0.149 +1.149 +149.149 +150 +0.150 +1.150 +150.150 +151 +0.151 +1.151 +151.151 +152 +0.152 +1.152 +152.152 +153 +0.153 +1.153 +153.153 +154 +0.154 +1.154 +154.154 +155 +0.155 +1.155 +155.155 +156 +0.156 +1.156 +156.156 +157 +0.157 +1.157 +157.157 +158 +0.158 +1.158 +158.158 +159 +0.159 +1.159 +159.159 +160 +0.160 +1.160 +160.160 +161 +0.161 +1.161 +161.161 +162 +0.162 +1.162 +162.162 +163 +0.163 +1.163 +163.163 +164 +0.164 +1.164 +164.164 +165 +0.165 +1.165 +165.165 +166 +0.166 +1.166 +166.166 +167 +0.167 +1.167 +167.167 +168 +0.168 +1.168 +168.168 +169 +0.169 +1.169 +169.169 +170 +0.170 +1.170 +170.170 +171 +0.171 +1.171 +171.171 +172 +0.172 +1.172 +172.172 +173 +0.173 +1.173 +173.173 +174 +0.174 +1.174 +174.174 +175 +0.175 +1.175 +175.175 +176 +0.176 +1.176 +176.176 +177 +0.177 +1.177 +177.177 +178 +0.178 +1.178 +178.178 +179 +0.179 +1.179 +179.179 +180 +0.180 +1.180 +180.180 +181 +0.181 +1.181 +181.181 +182 +0.182 +1.182 +182.182 +183 +0.183 +1.183 +183.183 +184 +0.184 +1.184 +184.184 +185 +0.185 +1.185 +185.185 +186 +0.186 +1.186 +186.186 +187 +0.187 +1.187 +187.187 +188 +0.188 +1.188 +188.188 +189 +0.189 +1.189 +189.189 +190 +0.190 +1.190 +190.190 +191 +0.191 +1.191 +191.191 +192 +0.192 +1.192 +192.192 +193 +0.193 +1.193 +193.193 +194 +0.194 +1.194 +194.194 +195 +0.195 +1.195 +195.195 +196 +0.196 +1.196 +196.196 +197 +0.197 +1.197 +197.197 +198 +0.198 +1.198 +198.198 +199 +0.199 +1.199 +199.199 +200 +0.200 +1.200 +200.200 +201 +0.201 +1.201 +201.201 +202 +0.202 +1.202 +202.202 +203 +0.203 +1.203 +203.203 +204 +0.204 +1.204 +204.204 +205 +0.205 +1.205 +205.205 +206 +0.206 +1.206 +206.206 +207 +0.207 +1.207 +207.207 +208 +0.208 +1.208 +208.208 +209 +0.209 +1.209 +209.209 +210 +0.210 +1.210 +210.210 +211 +0.211 +1.211 +211.211 +212 +0.212 +1.212 +212.212 +213 +0.213 +1.213 +213.213 +214 +0.214 +1.214 +214.214 +215 +0.215 +1.215 +215.215 +216 +0.216 +1.216 +216.216 +217 +0.217 +1.217 +217.217 +218 +0.218 +1.218 +218.218 +219 +0.219 +1.219 +219.219 +220 +0.220 +1.220 +220.220 +221 +0.221 +1.221 +221.221 +222 +0.222 +1.222 +222.222 +223 +0.223 +1.223 +223.223 +224 +0.224 +1.224 +224.224 +225 +0.225 +1.225 +225.225 +2189432174861923048671023498128347619023487610234689172304.192748960\ +128745108927461089237469018723460 +obase = 16 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +19 +0.19 +1.19 +19.19 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +28 +0.28 +1.28 +28.28 +29 +0.29 +1.29 +29.29 +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +37 +0.37 +1.37 +37.37 +38 +0.38 +1.38 +38.38 +39 +0.39 +1.39 +39.39 +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +47 +0.47 +1.47 +47.47 +48 +0.48 +1.48 +48.48 +49 +0.49 +1.49 +49.49 +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +56 +0.56 +1.56 +56.56 +57 +0.57 +1.57 +57.57 +58 +0.58 +1.58 +58.58 +59 +0.59 +1.59 +59.59 +60 +0.60 +1.60 +60.60 +61 +0.61 +1.61 +61.61 +62 +0.62 +1.62 +62.62 +63 +0.63 +1.63 +63.63 +64 +0.64 +1.64 +64.64 +65 +0.65 +1.65 +65.65 +66 +0.66 +1.66 +66.66 +67 +0.67 +1.67 +67.67 +68 +0.68 +1.68 +68.68 +69 +0.69 +1.69 +69.69 +70 +0.70 +1.70 +70.70 +71 +0.71 +1.71 +71.71 +72 +0.72 +1.72 +72.72 +73 +0.73 +1.73 +73.73 +74 +0.74 +1.74 +74.74 +75 +0.75 +1.75 +75.75 +76 +0.76 +1.76 +76.76 +77 +0.77 +1.77 +77.77 +78 +0.78 +1.78 +78.78 +79 +0.79 +1.79 +79.79 +80 +0.80 +1.80 +80.80 +81 +0.81 +1.81 +81.81 +82 +0.82 +1.82 +82.82 +83 +0.83 +1.83 +83.83 +84 +0.84 +1.84 +84.84 +85 +0.85 +1.85 +85.85 +86 +0.86 +1.86 +86.86 +87 +0.87 +1.87 +87.87 +88 +0.88 +1.88 +88.88 +89 +0.89 +1.89 +89.89 +90 +0.90 +1.90 +90.90 +91 +0.91 +1.91 +91.91 +92 +0.92 +1.92 +92.92 +93 +0.93 +1.93 +93.93 +94 +0.94 +1.94 +94.94 +95 +0.95 +1.95 +95.95 +96 +0.96 +1.96 +96.96 +97 +0.97 +1.97 +97.97 +98 +0.98 +1.98 +98.98 +99 +0.99 +1.99 +99.99 +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +103 +0.103 +1.103 +103.103 +104 +0.104 +1.104 +104.104 +105 +0.105 +1.105 +105.105 +106 +0.106 +1.106 +106.106 +107 +0.107 +1.107 +107.107 +108 +0.108 +1.108 +108.108 +109 +0.109 +1.109 +109.109 +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +113 +0.113 +1.113 +113.113 +114 +0.114 +1.114 +114.114 +115 +0.115 +1.115 +115.115 +116 +0.116 +1.116 +116.116 +117 +0.117 +1.117 +117.117 +118 +0.118 +1.118 +118.118 +119 +0.119 +1.119 +119.119 +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +122 +0.122 +1.122 +122.122 +123 +0.123 +1.123 +123.123 +124 +0.124 +1.124 +124.124 +125 +0.125 +1.125 +125.125 +126 +0.126 +1.126 +126.126 +127 +0.127 +1.127 +127.127 +128 +0.128 +1.128 +128.128 +129 +0.129 +1.129 +129.129 +130 +0.130 +1.130 +130.130 +131 +0.131 +1.131 +131.131 +132 +0.132 +1.132 +132.132 +133 +0.133 +1.133 +133.133 +134 +0.134 +1.134 +134.134 +135 +0.135 +1.135 +135.135 +136 +0.136 +1.136 +136.136 +137 +0.137 +1.137 +137.137 +138 +0.138 +1.138 +138.138 +139 +0.139 +1.139 +139.139 +140 +0.140 +1.140 +140.140 +141 +0.141 +1.141 +141.141 +142 +0.142 +1.142 +142.142 +143 +0.143 +1.143 +143.143 +144 +0.144 +1.144 +144.144 +145 +0.145 +1.145 +145.145 +146 +0.146 +1.146 +146.146 +147 +0.147 +1.147 +147.147 +148 +0.148 +1.148 +148.148 +149 +0.149 +1.149 +149.149 +150 +0.150 +1.150 +150.150 +151 +0.151 +1.151 +151.151 +152 +0.152 +1.152 +152.152 +153 +0.153 +1.153 +153.153 +154 +0.154 +1.154 +154.154 +155 +0.155 +1.155 +155.155 +156 +0.156 +1.156 +156.156 +157 +0.157 +1.157 +157.157 +158 +0.158 +1.158 +158.158 +159 +0.159 +1.159 +159.159 +160 +0.160 +1.160 +160.160 +161 +0.161 +1.161 +161.161 +162 +0.162 +1.162 +162.162 +163 +0.163 +1.163 +163.163 +164 +0.164 +1.164 +164.164 +165 +0.165 +1.165 +165.165 +166 +0.166 +1.166 +166.166 +167 +0.167 +1.167 +167.167 +168 +0.168 +1.168 +168.168 +169 +0.169 +1.169 +169.169 +170 +0.170 +1.170 +170.170 +171 +0.171 +1.171 +171.171 +172 +0.172 +1.172 +172.172 +173 +0.173 +1.173 +173.173 +174 +0.174 +1.174 +174.174 +175 +0.175 +1.175 +175.175 +176 +0.176 +1.176 +176.176 +177 +0.177 +1.177 +177.177 +178 +0.178 +1.178 +178.178 +179 +0.179 +1.179 +179.179 +180 +0.180 +1.180 +180.180 +181 +0.181 +1.181 +181.181 +182 +0.182 +1.182 +182.182 +183 +0.183 +1.183 +183.183 +184 +0.184 +1.184 +184.184 +185 +0.185 +1.185 +185.185 +186 +0.186 +1.186 +186.186 +187 +0.187 +1.187 +187.187 +188 +0.188 +1.188 +188.188 +189 +0.189 +1.189 +189.189 +190 +0.190 +1.190 +190.190 +191 +0.191 +1.191 +191.191 +192 +0.192 +1.192 +192.192 +193 +0.193 +1.193 +193.193 +194 +0.194 +1.194 +194.194 +195 +0.195 +1.195 +195.195 +196 +0.196 +1.196 +196.196 +197 +0.197 +1.197 +197.197 +198 +0.198 +1.198 +198.198 +199 +0.199 +1.199 +199.199 +200 +0.200 +1.200 +200.200 +201 +0.201 +1.201 +201.201 +202 +0.202 +1.202 +202.202 +203 +0.203 +1.203 +203.203 +204 +0.204 +1.204 +204.204 +205 +0.205 +1.205 +205.205 +206 +0.206 +1.206 +206.206 +207 +0.207 +1.207 +207.207 +208 +0.208 +1.208 +208.208 +209 +0.209 +1.209 +209.209 +210 +0.210 +1.210 +210.210 +211 +0.211 +1.211 +211.211 +212 +0.212 +1.212 +212.212 +213 +0.213 +1.213 +213.213 +214 +0.214 +1.214 +214.214 +215 +0.215 +1.215 +215.215 +216 +0.216 +1.216 +216.216 +217 +0.217 +1.217 +217.217 +218 +0.218 +1.218 +218.218 +219 +0.219 +1.219 +219.219 +220 +0.220 +1.220 +220.220 +221 +0.221 +1.221 +221.221 +222 +0.222 +1.222 +222.222 +223 +0.223 +1.223 +223.223 +224 +0.224 +1.224 +224.224 +225 +0.225 +1.225 +225.225 +226 +0.226 +1.226 +226.226 +227 +0.227 +1.227 +227.227 +228 +0.228 +1.228 +228.228 +229 +0.229 +1.229 +229.229 +230 +0.230 +1.230 +230.230 +231 +0.231 +1.231 +231.231 +232 +0.232 +1.232 +232.232 +233 +0.233 +1.233 +233.233 +234 +0.234 +1.234 +234.234 +235 +0.235 +1.235 +235.235 +236 +0.236 +1.236 +236.236 +237 +0.237 +1.237 +237.237 +238 +0.238 +1.238 +238.238 +239 +0.239 +1.239 +239.239 +240 +0.240 +1.240 +240.240 +241 +0.241 +1.241 +241.241 +242 +0.242 +1.242 +242.242 +243 +0.243 +1.243 +243.243 +244 +0.244 +1.244 +244.244 +245 +0.245 +1.245 +245.245 +246 +0.246 +1.246 +246.246 +247 +0.247 +1.247 +247.247 +248 +0.248 +1.248 +248.248 +249 +0.249 +1.249 +249.249 +250 +0.250 +1.250 +250.250 +251 +0.251 +1.251 +251.251 +252 +0.252 +1.252 +252.252 +253 +0.253 +1.253 +253.253 +254 +0.254 +1.254 +254.254 +255 +0.255 +1.255 +255.255 +256 +0.256 +1.256 +256.256 +2189432174861923048671023498128347619023487610234689172304.192748960\ +128745108927461089237469018723460 +obase = 17 +0 +0.0 +1.0 +0.0 +1 +0.1 +1.1 +1.1 +2 +0.2 +1.2 +2.2 +3 +0.3 +1.3 +3.3 +4 +0.4 +1.4 +4.4 +5 +0.5 +1.5 +5.5 +6 +0.6 +1.6 +6.6 +7 +0.7 +1.7 +7.7 +8 +0.8 +1.8 +8.8 +9 +0.9 +1.9 +9.9 +10 +0.10 +1.10 +10.10 +11 +0.11 +1.11 +11.11 +12 +0.12 +1.12 +12.12 +13 +0.13 +1.13 +13.13 +14 +0.14 +1.14 +14.14 +15 +0.15 +1.15 +15.15 +16 +0.16 +1.16 +16.16 +17 +0.17 +1.17 +17.17 +18 +0.18 +1.18 +18.18 +19 +0.19 +1.19 +19.19 +20 +0.20 +1.20 +20.20 +21 +0.21 +1.21 +21.21 +22 +0.22 +1.22 +22.22 +23 +0.23 +1.23 +23.23 +24 +0.24 +1.24 +24.24 +25 +0.25 +1.25 +25.25 +26 +0.26 +1.26 +26.26 +27 +0.27 +1.27 +27.27 +28 +0.28 +1.28 +28.28 +29 +0.29 +1.29 +29.29 +30 +0.30 +1.30 +30.30 +31 +0.31 +1.31 +31.31 +32 +0.32 +1.32 +32.32 +33 +0.33 +1.33 +33.33 +34 +0.34 +1.34 +34.34 +35 +0.35 +1.35 +35.35 +36 +0.36 +1.36 +36.36 +37 +0.37 +1.37 +37.37 +38 +0.38 +1.38 +38.38 +39 +0.39 +1.39 +39.39 +40 +0.40 +1.40 +40.40 +41 +0.41 +1.41 +41.41 +42 +0.42 +1.42 +42.42 +43 +0.43 +1.43 +43.43 +44 +0.44 +1.44 +44.44 +45 +0.45 +1.45 +45.45 +46 +0.46 +1.46 +46.46 +47 +0.47 +1.47 +47.47 +48 +0.48 +1.48 +48.48 +49 +0.49 +1.49 +49.49 +50 +0.50 +1.50 +50.50 +51 +0.51 +1.51 +51.51 +52 +0.52 +1.52 +52.52 +53 +0.53 +1.53 +53.53 +54 +0.54 +1.54 +54.54 +55 +0.55 +1.55 +55.55 +56 +0.56 +1.56 +56.56 +57 +0.57 +1.57 +57.57 +58 +0.58 +1.58 +58.58 +59 +0.59 +1.59 +59.59 +60 +0.60 +1.60 +60.60 +61 +0.61 +1.61 +61.61 +62 +0.62 +1.62 +62.62 +63 +0.63 +1.63 +63.63 +64 +0.64 +1.64 +64.64 +65 +0.65 +1.65 +65.65 +66 +0.66 +1.66 +66.66 +67 +0.67 +1.67 +67.67 +68 +0.68 +1.68 +68.68 +69 +0.69 +1.69 +69.69 +70 +0.70 +1.70 +70.70 +71 +0.71 +1.71 +71.71 +72 +0.72 +1.72 +72.72 +73 +0.73 +1.73 +73.73 +74 +0.74 +1.74 +74.74 +75 +0.75 +1.75 +75.75 +76 +0.76 +1.76 +76.76 +77 +0.77 +1.77 +77.77 +78 +0.78 +1.78 +78.78 +79 +0.79 +1.79 +79.79 +80 +0.80 +1.80 +80.80 +81 +0.81 +1.81 +81.81 +82 +0.82 +1.82 +82.82 +83 +0.83 +1.83 +83.83 +84 +0.84 +1.84 +84.84 +85 +0.85 +1.85 +85.85 +86 +0.86 +1.86 +86.86 +87 +0.87 +1.87 +87.87 +88 +0.88 +1.88 +88.88 +89 +0.89 +1.89 +89.89 +90 +0.90 +1.90 +90.90 +91 +0.91 +1.91 +91.91 +92 +0.92 +1.92 +92.92 +93 +0.93 +1.93 +93.93 +94 +0.94 +1.94 +94.94 +95 +0.95 +1.95 +95.95 +96 +0.96 +1.96 +96.96 +97 +0.97 +1.97 +97.97 +98 +0.98 +1.98 +98.98 +99 +0.99 +1.99 +99.99 +100 +0.100 +1.100 +100.100 +101 +0.101 +1.101 +101.101 +102 +0.102 +1.102 +102.102 +103 +0.103 +1.103 +103.103 +104 +0.104 +1.104 +104.104 +105 +0.105 +1.105 +105.105 +106 +0.106 +1.106 +106.106 +107 +0.107 +1.107 +107.107 +108 +0.108 +1.108 +108.108 +109 +0.109 +1.109 +109.109 +110 +0.110 +1.110 +110.110 +111 +0.111 +1.111 +111.111 +112 +0.112 +1.112 +112.112 +113 +0.113 +1.113 +113.113 +114 +0.114 +1.114 +114.114 +115 +0.115 +1.115 +115.115 +116 +0.116 +1.116 +116.116 +117 +0.117 +1.117 +117.117 +118 +0.118 +1.118 +118.118 +119 +0.119 +1.119 +119.119 +120 +0.120 +1.120 +120.120 +121 +0.121 +1.121 +121.121 +122 +0.122 +1.122 +122.122 +123 +0.123 +1.123 +123.123 +124 +0.124 +1.124 +124.124 +125 +0.125 +1.125 +125.125 +126 +0.126 +1.126 +126.126 +127 +0.127 +1.127 +127.127 +128 +0.128 +1.128 +128.128 +129 +0.129 +1.129 +129.129 +130 +0.130 +1.130 +130.130 +131 +0.131 +1.131 +131.131 +132 +0.132 +1.132 +132.132 +133 +0.133 +1.133 +133.133 +134 +0.134 +1.134 +134.134 +135 +0.135 +1.135 +135.135 +136 +0.136 +1.136 +136.136 +137 +0.137 +1.137 +137.137 +138 +0.138 +1.138 +138.138 +139 +0.139 +1.139 +139.139 +140 +0.140 +1.140 +140.140 +141 +0.141 +1.141 +141.141 +142 +0.142 +1.142 +142.142 +143 +0.143 +1.143 +143.143 +144 +0.144 +1.144 +144.144 +145 +0.145 +1.145 +145.145 +146 +0.146 +1.146 +146.146 +147 +0.147 +1.147 +147.147 +148 +0.148 +1.148 +148.148 +149 +0.149 +1.149 +149.149 +150 +0.150 +1.150 +150.150 +151 +0.151 +1.151 +151.151 +152 +0.152 +1.152 +152.152 +153 +0.153 +1.153 +153.153 +154 +0.154 +1.154 +154.154 +155 +0.155 +1.155 +155.155 +156 +0.156 +1.156 +156.156 +157 +0.157 +1.157 +157.157 +158 +0.158 +1.158 +158.158 +159 +0.159 +1.159 +159.159 +160 +0.160 +1.160 +160.160 +161 +0.161 +1.161 +161.161 +162 +0.162 +1.162 +162.162 +163 +0.163 +1.163 +163.163 +164 +0.164 +1.164 +164.164 +165 +0.165 +1.165 +165.165 +166 +0.166 +1.166 +166.166 +167 +0.167 +1.167 +167.167 +168 +0.168 +1.168 +168.168 +169 +0.169 +1.169 +169.169 +170 +0.170 +1.170 +170.170 +171 +0.171 +1.171 +171.171 +172 +0.172 +1.172 +172.172 +173 +0.173 +1.173 +173.173 +174 +0.174 +1.174 +174.174 +175 +0.175 +1.175 +175.175 +176 +0.176 +1.176 +176.176 +177 +0.177 +1.177 +177.177 +178 +0.178 +1.178 +178.178 +179 +0.179 +1.179 +179.179 +180 +0.180 +1.180 +180.180 +181 +0.181 +1.181 +181.181 +182 +0.182 +1.182 +182.182 +183 +0.183 +1.183 +183.183 +184 +0.184 +1.184 +184.184 +185 +0.185 +1.185 +185.185 +186 +0.186 +1.186 +186.186 +187 +0.187 +1.187 +187.187 +188 +0.188 +1.188 +188.188 +189 +0.189 +1.189 +189.189 +190 +0.190 +1.190 +190.190 +191 +0.191 +1.191 +191.191 +192 +0.192 +1.192 +192.192 +193 +0.193 +1.193 +193.193 +194 +0.194 +1.194 +194.194 +195 +0.195 +1.195 +195.195 +196 +0.196 +1.196 +196.196 +197 +0.197 +1.197 +197.197 +198 +0.198 +1.198 +198.198 +199 +0.199 +1.199 +199.199 +200 +0.200 +1.200 +200.200 +201 +0.201 +1.201 +201.201 +202 +0.202 +1.202 +202.202 +203 +0.203 +1.203 +203.203 +204 +0.204 +1.204 +204.204 +205 +0.205 +1.205 +205.205 +206 +0.206 +1.206 +206.206 +207 +0.207 +1.207 +207.207 +208 +0.208 +1.208 +208.208 +209 +0.209 +1.209 +209.209 +210 +0.210 +1.210 +210.210 +211 +0.211 +1.211 +211.211 +212 +0.212 +1.212 +212.212 +213 +0.213 +1.213 +213.213 +214 +0.214 +1.214 +214.214 +215 +0.215 +1.215 +215.215 +216 +0.216 +1.216 +216.216 +217 +0.217 +1.217 +217.217 +218 +0.218 +1.218 +218.218 +219 +0.219 +1.219 +219.219 +220 +0.220 +1.220 +220.220 +221 +0.221 +1.221 +221.221 +222 +0.222 +1.222 +222.222 +223 +0.223 +1.223 +223.223 +224 +0.224 +1.224 +224.224 +225 +0.225 +1.225 +225.225 +226 +0.226 +1.226 +226.226 +227 +0.227 +1.227 +227.227 +228 +0.228 +1.228 +228.228 +229 +0.229 +1.229 +229.229 +230 +0.230 +1.230 +230.230 +231 +0.231 +1.231 +231.231 +232 +0.232 +1.232 +232.232 +233 +0.233 +1.233 +233.233 +234 +0.234 +1.234 +234.234 +235 +0.235 +1.235 +235.235 +236 +0.236 +1.236 +236.236 +237 +0.237 +1.237 +237.237 +238 +0.238 +1.238 +238.238 +239 +0.239 +1.239 +239.239 +240 +0.240 +1.240 +240.240 +241 +0.241 +1.241 +241.241 +242 +0.242 +1.242 +242.242 +243 +0.243 +1.243 +243.243 +244 +0.244 +1.244 +244.244 +245 +0.245 +1.245 +245.245 +246 +0.246 +1.246 +246.246 +247 +0.247 +1.247 +247.247 +248 +0.248 +1.248 +248.248 +249 +0.249 +1.249 +249.249 +250 +0.250 +1.250 +250.250 +251 +0.251 +1.251 +251.251 +252 +0.252 +1.252 +252.252 +253 +0.253 +1.253 +253.253 +254 +0.254 +1.254 +254.254 +255 +0.255 +1.255 +255.255 +256 +0.256 +1.256 +256.256 +257 +0.257 +1.257 +257.257 +258 +0.258 +1.258 +258.258 +259 +0.259 +1.259 +259.259 +260 +0.260 +1.260 +260.260 +261 +0.261 +1.261 +261.261 +262 +0.262 +1.262 +262.262 +263 +0.263 +1.263 +263.263 +264 +0.264 +1.264 +264.264 +265 +0.265 +1.265 +265.265 +266 +0.266 +1.266 +266.266 +267 +0.267 +1.267 +267.267 +268 +0.268 +1.268 +268.268 +269 +0.269 +1.269 +269.269 +270 +0.270 +1.270 +270.270 +271 +0.271 +1.271 +271.271 +272 +0.272 +1.272 +272.272 +273 +0.273 +1.273 +273.273 +274 +0.274 +1.274 +274.274 +275 +0.275 +1.275 +275.275 +276 +0.276 +1.276 +276.276 +277 +0.277 +1.277 +277.277 +278 +0.278 +1.278 +278.278 +279 +0.279 +1.279 +279.279 +280 +0.280 +1.280 +280.280 +281 +0.281 +1.281 +281.281 +282 +0.282 +1.282 +282.282 +283 +0.283 +1.283 +283.283 +284 +0.284 +1.284 +284.284 +285 +0.285 +1.285 +285.285 +286 +0.286 +1.286 +286.286 +287 +0.287 +1.287 +287.287 +288 +0.288 +1.288 +288.288 +289 +0.289 +1.289 +289.289 +2189432174861923048671023498128347619023487610234689172304.192748960\ +128745108927461089237469018723460 diff --git a/aosp/external/toybox/tests/files/bc/print_results.txt b/aosp/external/toybox/tests/files/bc/print_results.txt new file mode 100644 index 0000000000000000000000000000000000000000..972fe89a80af96f7a59baef5d9fc4ee53087f5ce --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/print_results.txt @@ -0,0 +1,6835 @@ +0 +0 +1.0000 +0 +1 +.0001 +1.0001 +1.0001 +10 +.0011 +1.0011 +10.0011 +11 +.0100 +1.0100 +11.0100 +100 +.0110 +1.0110 +100.0110 +10110010100101010111101000011010101011100101011011011011001001111110\ +10000001111100010100010111010000101010100101110101111101000001001100\ +0110011001000011001010111011101010110100011001101010000.001100010101\ +01111111111011110000000101110100100110110001000000110010110101010011\ +010101101010100101011001000001011001000000100000110011011110 +0 +0 +1.000 +0 +1 +.002 +1.002 +1.002 +2 +.012 +1.012 +2.012 +10 +.022 +1.022 +10.022 +11 +.101 +1.101 +11.101 +12 +.111 +1.111 +12.111 +20 +.121 +1.121 +20.121 +21 +.200 +1.200 +21.200 +22 +.210 +1.210 +22.210 +100 +.220 +1.220 +100.220 +10122200120211001201121200010211020111100111210111011012010212020120\ +10120202221112122121211010001111120220120221102111100.01201211121220\ +02201011101001212002002121000110011221200220110011001100210112102200\ +2210200 +0 +0 +1.00 +0 +1 +.01 +1.01 +1.01 +2 +.03 +1.03 +2.03 +3 +.10 +1.10 +3.10 +10 +.12 +1.12 +10.12 +11 +.20 +1.20 +11.20 +12 +.21 +1.21 +12.21 +13 +.23 +1.23 +13.23 +20 +.30 +1.30 +20.30 +21 +.32 +1.32 +21.32 +22 +.0121 +1.0121 +22.0121 +23 +.0130 +1.0130 +23.0130 +30 +.0132 +1.0132 +30.0132 +31 +.0201 +1.0201 +31.0201 +32 +.0203 +1.0203 +32.0203 +33 +.0212 +1.0212 +33.0212 +100 +.0220 +1.0220 +100.0220 +11211022233100311113022312312103331000332022023220111102322332200212\ +0303020121113131112203031100.030111133332330001131021230100030231110\ +3111222211121001121000200303132 +0 +0 +1.00 +0 +1 +.02 +1.02 +1.02 +2 +.10 +1.10 +2.10 +3 +.12 +1.12 +3.12 +4 +.20 +1.20 +4.20 +10 +.22 +1.22 +10.22 +11 +.30 +1.30 +11.30 +12 +.32 +1.32 +12.32 +13 +.40 +1.40 +13.40 +14 +.42 +1.42 +14.42 +20 +.022 +1.022 +20.022 +21 +.023 +1.023 +21.023 +22 +.030 +1.030 +22.030 +23 +.031 +1.031 +23.031 +24 +.032 +1.032 +24.032 +30 +.033 +1.033 +30.033 +31 +.040 +1.040 +31.040 +32 +.041 +1.041 +32.041 +33 +.042 +1.042 +33.042 +34 +.043 +1.043 +34.043 +40 +.100 +1.100 +40.100 +41 +.101 +1.101 +41.101 +42 +.102 +1.102 +42.102 +43 +.103 +1.103 +43.103 +44 +.110 +1.110 +44.110 +100 +.111 +1.111 +100.111 +10121324201024420321244301001102242434304400230130213234232340021022\ +041120412003204.0440213224012441100431130104042314413233411030143044\ +120031143 +0 +0 +1.00 +0 +1 +.03 +1.03 +1.03 +2 +.11 +1.11 +2.11 +3 +.14 +1.14 +3.14 +4 +.22 +1.22 +4.22 +5 +.30 +1.30 +5.30 +10 +.33 +1.33 +10.33 +11 +.41 +1.41 +11.41 +12 +.44 +1.44 +12.44 +13 +.52 +1.52 +13.52 +14 +.033 +1.033 +14.033 +15 +.035 +1.035 +15.035 +20 +.041 +1.041 +20.041 +21 +.044 +1.044 +21.044 +22 +.050 +1.050 +22.050 +23 +.052 +1.052 +23.052 +24 +.054 +1.054 +24.054 +25 +.100 +1.100 +25.100 +30 +.102 +1.102 +30.102 +31 +.105 +1.105 +31.105 +32 +.111 +1.111 +32.111 +33 +.113 +1.113 +33.113 +34 +.115 +1.115 +34.115 +35 +.121 +1.121 +35.121 +40 +.123 +1.123 +40.123 +41 +.130 +1.130 +41.130 +42 +.132 +1.132 +42.132 +43 +.134 +1.134 +43.134 +44 +.140 +1.140 +44.140 +45 +.142 +1.142 +45.142 +50 +.144 +1.144 +50.144 +51 +.150 +1.150 +51.150 +52 +.153 +1.153 +52.153 +53 +.155 +1.155 +53.155 +54 +.201 +1.201 +54.201 +55 +.203 +1.203 +55.203 +100 +.205 +1.205 +100.205 +32325123504124055134134454104553332155551120101335023320334452322024\ +344400.105344521231405101332503433044113532015215451252503255 +0 +0 +1.00 +0 +1 +.04 +1.04 +1.04 +2 +.12 +1.12 +2.12 +3 +.20 +1.20 +3.20 +4 +.25 +1.25 +4.25 +5 +.33 +1.33 +5.33 +6 +.41 +1.41 +6.41 +10 +.46 +1.46 +10.46 +11 +.54 +1.54 +11.54 +12 +.62 +1.62 +12.62 +13 +.046 +1.046 +13.046 +14 +.052 +1.052 +14.052 +15 +.056 +1.056 +15.056 +16 +.062 +1.062 +16.062 +20 +.066 +1.066 +20.066 +21 +.102 +1.102 +21.102 +22 +.105 +1.105 +22.105 +23 +.112 +1.112 +23.112 +24 +.115 +1.115 +24.115 +25 +.122 +1.122 +25.122 +26 +.125 +1.125 +26.125 +30 +.132 +1.132 +30.132 +31 +.135 +1.135 +31.135 +32 +.141 +1.141 +32.141 +33 +.145 +1.145 +33.145 +34 +.151 +1.151 +34.151 +35 +.155 +1.155 +35.155 +36 +.161 +1.161 +36.161 +40 +.165 +1.165 +40.165 +41 +.201 +1.201 +41.201 +42 +.204 +1.204 +42.204 +43 +.211 +1.211 +43.211 +44 +.214 +1.214 +44.214 +45 +.221 +1.221 +45.221 +46 +.224 +1.224 +46.224 +50 +.231 +1.231 +50.231 +51 +.234 +1.234 +51.234 +52 +.240 +1.240 +52.240 +53 +.244 +1.244 +53.244 +54 +.250 +1.250 +54.250 +55 +.254 +1.254 +55.254 +56 +.260 +1.260 +56.260 +60 +.264 +1.264 +60.264 +61 +.300 +1.300 +61.300 +62 +.303 +1.303 +62.303 +63 +.310 +1.310 +63.310 +64 +.313 +1.313 +64.313 +65 +.320 +1.320 +65.320 +66 +.323 +1.323 +66.323 +100 +.330 +1.330 +100.330 +51426532252561200415336212163303443406022321462331460564153512532101\ +.12305350253355652433456316140406112642615245056225 +0 +0 +1.00 +0 +1 +.06 +1.06 +1.06 +2 +.14 +1.14 +2.14 +3 +.23 +1.23 +3.23 +4 +.31 +1.31 +4.31 +5 +.40 +1.40 +5.40 +6 +.46 +1.46 +6.46 +7 +.54 +1.54 +7.54 +10 +.63 +1.63 +10.63 +11 +.71 +1.71 +11.71 +12 +.063 +1.063 +12.063 +13 +.070 +1.070 +13.070 +14 +.075 +1.075 +14.075 +15 +.102 +1.102 +15.102 +16 +.107 +1.107 +16.107 +17 +.114 +1.114 +17.114 +20 +.121 +1.121 +20.121 +21 +.127 +1.127 +21.127 +22 +.134 +1.134 +22.134 +23 +.141 +1.141 +23.141 +24 +.146 +1.146 +24.146 +25 +.153 +1.153 +25.153 +26 +.160 +1.160 +26.160 +27 +.165 +1.165 +27.165 +30 +.172 +1.172 +30.172 +31 +.200 +1.200 +31.200 +32 +.205 +1.205 +32.205 +33 +.212 +1.212 +33.212 +34 +.217 +1.217 +34.217 +35 +.224 +1.224 +35.224 +36 +.231 +1.231 +36.231 +37 +.236 +1.236 +37.236 +40 +.243 +1.243 +40.243 +41 +.250 +1.250 +41.250 +42 +.256 +1.256 +42.256 +43 +.263 +1.263 +43.263 +44 +.270 +1.270 +44.270 +45 +.275 +1.275 +45.275 +46 +.302 +1.302 +46.302 +47 +.307 +1.307 +47.307 +50 +.314 +1.314 +50.314 +51 +.321 +1.321 +51.321 +52 +.327 +1.327 +52.327 +53 +.334 +1.334 +53.334 +54 +.341 +1.341 +54.341 +55 +.346 +1.346 +55.346 +56 +.353 +1.353 +56.353 +57 +.360 +1.360 +57.360 +60 +.365 +1.365 +60.365 +61 +.372 +1.372 +61.372 +62 +.400 +1.400 +62.400 +63 +.405 +1.405 +63.405 +64 +.412 +1.412 +64.412 +65 +.417 +1.417 +65.417 +66 +.424 +1.424 +66.424 +67 +.431 +1.431 +67.431 +70 +.436 +1.436 +70.436 +71 +.443 +1.443 +71.443 +72 +.450 +1.450 +72.450 +73 +.456 +1.456 +73.456 +74 +.463 +1.463 +74.463 +75 +.470 +1.470 +75.470 +76 +.475 +1.475 +76.475 +77 +.502 +1.502 +77.502 +100 +.507 +1.507 +100.507 +2624527503253453333117640370505641251353720230631031273526431520.142\ +53776740135115420145524653251262026201014675 +0 +0 +1.00 +0 +1 +.08 +1.08 +1.08 +2 +.17 +1.17 +2.17 +3 +.26 +1.26 +3.26 +4 +.35 +1.35 +4.35 +5 +.44 +1.44 +5.44 +6 +.53 +1.53 +6.53 +7 +.62 +1.62 +7.62 +8 +.71 +1.71 +8.71 +10 +.80 +1.80 +10.80 +11 +.080 +1.080 +11.080 +12 +.088 +1.088 +12.088 +13 +.106 +1.106 +13.106 +14 +.114 +1.114 +14.114 +15 +.123 +1.123 +15.123 +16 +.131 +1.131 +16.131 +17 +.138 +1.138 +17.138 +18 +.146 +1.146 +18.146 +20 +.155 +1.155 +20.155 +21 +.163 +1.163 +21.163 +22 +.171 +1.171 +22.171 +23 +.180 +1.180 +23.180 +24 +.187 +1.187 +24.187 +25 +.205 +1.205 +25.205 +26 +.213 +1.213 +26.213 +27 +.222 +1.222 +27.222 +28 +.230 +1.230 +28.230 +30 +.237 +1.237 +30.237 +31 +.246 +1.246 +31.246 +32 +.254 +1.254 +32.254 +33 +.262 +1.262 +33.262 +34 +.270 +1.270 +34.270 +35 +.278 +1.278 +35.278 +36 +.286 +1.286 +36.286 +37 +.304 +1.304 +37.304 +38 +.313 +1.313 +38.313 +40 +.321 +1.321 +40.321 +41 +.328 +1.328 +41.328 +42 +.337 +1.337 +42.337 +43 +.345 +1.345 +43.345 +44 +.353 +1.353 +44.353 +45 +.361 +1.361 +45.361 +46 +.370 +1.370 +46.370 +47 +.377 +1.377 +47.377 +48 +.385 +1.385 +48.385 +50 +.404 +1.404 +50.404 +51 +.412 +1.412 +51.412 +52 +.420 +1.420 +52.420 +53 +.427 +1.427 +53.427 +54 +.436 +1.436 +54.436 +55 +.444 +1.444 +55.444 +56 +.452 +1.452 +56.452 +57 +.461 +1.461 +57.461 +58 +.468 +1.468 +58.468 +60 +.476 +1.476 +60.476 +61 +.484 +1.484 +61.484 +62 +.503 +1.503 +62.503 +63 +.511 +1.511 +63.511 +64 +.518 +1.518 +64.518 +65 +.527 +1.527 +65.527 +66 +.535 +1.535 +66.535 +67 +.543 +1.543 +67.543 +68 +.551 +1.551 +68.551 +70 +.560 +1.560 +70.560 +71 +.567 +1.567 +71.567 +72 +.575 +1.575 +72.575 +73 +.584 +1.584 +73.584 +74 +.602 +1.602 +74.602 +75 +.610 +1.610 +75.610 +76 +.618 +1.618 +76.618 +77 +.626 +1.626 +77.626 +78 +.634 +1.634 +78.634 +80 +.642 +1.642 +80.642 +81 +.651 +1.651 +81.651 +82 +.658 +1.658 +82.658 +83 +.666 +1.666 +83.666 +84 +.675 +1.675 +84.675 +85 +.683 +1.683 +85.683 +86 +.701 +1.701 +86.701 +87 +.708 +1.708 +87.708 +88 +.717 +1.717 +88.717 +100 +.725 +1.725 +100.725 +1186167316476037364404534341637665116687478554101446816842440.165455\ +626343317620770131576264040407153808360 +0 +0 +1.0 +0 +1 +.1 +1.1 +1.1 +2 +.2 +1.2 +2.2 +3 +.3 +1.3 +3.3 +4 +.4 +1.4 +4.4 +5 +.5 +1.5 +5.5 +6 +.6 +1.6 +6.6 +7 +.7 +1.7 +7.7 +8 +.8 +1.8 +8.8 +9 +.9 +1.9 +9.9 +A +.11 +1.11 +A.11 +10 +.12 +1.12 +10.12 +11 +.13 +1.13 +11.13 +12 +.14 +1.14 +12.14 +13 +.15 +1.15 +13.15 +14 +.17 +1.17 +14.17 +15 +.18 +1.18 +15.18 +16 +.19 +1.19 +16.19 +17 +.1A +1.1A +17.1A +18 +.20 +1.20 +18.20 +19 +.22 +1.22 +19.22 +1A +.23 +1.23 +1A.23 +20 +.24 +1.24 +20.24 +21 +.25 +1.25 +21.25 +22 +.27 +1.27 +22.27 +23 +.28 +1.28 +23.28 +24 +.29 +1.29 +24.29 +25 +.2A +1.2A +25.2A +26 +.30 +1.30 +26.30 +27 +.32 +1.32 +27.32 +28 +.33 +1.33 +28.33 +29 +.34 +1.34 +29.34 +2A +.35 +1.35 +2A.35 +30 +.36 +1.36 +30.36 +31 +.38 +1.38 +31.38 +32 +.39 +1.39 +32.39 +33 +.3A +1.3A +33.3A +34 +.40 +1.40 +34.40 +35 +.41 +1.41 +35.41 +36 +.43 +1.43 +36.43 +37 +.44 +1.44 +37.44 +38 +.45 +1.45 +38.45 +39 +.46 +1.46 +39.46 +3A +.48 +1.48 +3A.48 +40 +.49 +1.49 +40.49 +41 +.4A +1.4A +41.4A +42 +.50 +1.50 +42.50 +43 +.51 +1.51 +43.51 +44 +.53 +1.53 +44.53 +45 +.54 +1.54 +45.54 +46 +.55 +1.55 +46.55 +47 +.56 +1.56 +47.56 +48 +.57 +1.57 +48.57 +49 +.59 +1.59 +49.59 +4A +.5A +1.5A +4A.5A +50 +.60 +1.60 +50.60 +51 +.61 +1.61 +51.61 +52 +.62 +1.62 +52.62 +53 +.64 +1.64 +53.64 +54 +.65 +1.65 +54.65 +55 +.66 +1.66 +55.66 +56 +.67 +1.67 +56.67 +57 +.69 +1.69 +57.69 +58 +.6A +1.6A +58.6A +59 +.70 +1.70 +59.70 +5A +.71 +1.71 +5A.71 +60 +.72 +1.72 +60.72 +61 +.74 +1.74 +61.74 +62 +.75 +1.75 +62.75 +63 +.76 +1.76 +63.76 +64 +.77 +1.77 +64.77 +65 +.78 +1.78 +65.78 +66 +.7A +1.7A +66.7A +67 +.80 +1.80 +67.80 +68 +.81 +1.81 +68.81 +69 +.82 +1.82 +69.82 +6A +.83 +1.83 +6A.83 +70 +.85 +1.85 +70.85 +71 +.86 +1.86 +71.86 +72 +.87 +1.87 +72.87 +73 +.88 +1.88 +73.88 +74 +.8A +1.8A +74.8A +75 +.90 +1.90 +75.90 +76 +.91 +1.91 +76.91 +77 +.92 +1.92 +77.92 +78 +.93 +1.93 +78.93 +79 +.95 +1.95 +79.95 +7A +.96 +1.96 +7A.96 +80 +.97 +1.97 +80.97 +81 +.98 +1.98 +81.98 +82 +.99 +1.99 +82.99 +83 +.A0 +1.A0 +83.A0 +84 +.A1 +1.A1 +84.A1 +85 +.A2 +1.A2 +85.A2 +86 +.A3 +1.A3 +86.A3 +87 +.A4 +1.A4 +87.A4 +88 +.A6 +1.A6 +88.A6 +89 +.A7 +1.A7 +89.A7 +8A +.A8 +1.A8 +8A.A8 +90 +.A9 +1.A9 +90.A9 +91 +.111 +1.111 +91.111 +92 +.112 +1.112 +92.112 +93 +.113 +1.113 +93.113 +94 +.115 +1.115 +94.115 +95 +.116 +1.116 +95.116 +96 +.117 +1.117 +96.117 +97 +.119 +1.119 +97.119 +98 +.11A +1.11A +98.11A +99 +.120 +1.120 +99.120 +9A +.122 +1.122 +9A.122 +A0 +.123 +1.123 +A0.123 +A1 +.124 +1.124 +A1.124 +A2 +.126 +1.126 +A2.126 +A3 +.127 +1.127 +A3.127 +A4 +.128 +1.128 +A4.128 +A5 +.12A +1.12A +A5.12A +A6 +.130 +1.130 +A6.130 +A7 +.131 +1.131 +A7.131 +A8 +.133 +1.133 +A8.133 +A9 +.134 +1.134 +A9.134 +AA +.135 +1.135 +AA.135 +100 +.137 +1.137 +100.137 +1181429A23194525611865619430228661458A403A8A675AA8A03443.2136045A452\ +95778992169625874892620A707245 +0 +0 +1.0 +0 +1 +.1 +1.1 +1.1 +2 +.2 +1.2 +2.2 +3 +.3 +1.3 +3.3 +4 +.4 +1.4 +4.4 +5 +.6 +1.6 +5.6 +6 +.7 +1.7 +6.7 +7 +.8 +1.8 +7.8 +8 +.9 +1.9 +8.9 +9 +.A +1.A +9.A +A +.12 +1.12 +A.12 +B +.13 +1.13 +B.13 +10 +.15 +1.15 +10.15 +11 +.16 +1.16 +11.16 +12 +.18 +1.18 +12.18 +13 +.19 +1.19 +13.19 +14 +.1B +1.1B +14.1B +15 +.20 +1.20 +15.20 +16 +.21 +1.21 +16.21 +17 +.23 +1.23 +17.23 +18 +.24 +1.24 +18.24 +19 +.26 +1.26 +19.26 +1A +.27 +1.27 +1A.27 +1B +.29 +1.29 +1B.29 +20 +.2A +1.2A +20.2A +21 +.30 +1.30 +21.30 +22 +.31 +1.31 +22.31 +23 +.32 +1.32 +23.32 +24 +.34 +1.34 +24.34 +25 +.35 +1.35 +25.35 +26 +.37 +1.37 +26.37 +27 +.38 +1.38 +27.38 +28 +.3A +1.3A +28.3A +29 +.3B +1.3B +29.3B +2A +.40 +1.40 +2A.40 +2B +.42 +1.42 +2B.42 +30 +.43 +1.43 +30.43 +31 +.45 +1.45 +31.45 +32 +.46 +1.46 +32.46 +33 +.48 +1.48 +33.48 +34 +.49 +1.49 +34.49 +35 +.4B +1.4B +35.4B +36 +.50 +1.50 +36.50 +37 +.51 +1.51 +37.51 +38 +.53 +1.53 +38.53 +39 +.54 +1.54 +39.54 +3A +.56 +1.56 +3A.56 +3B +.57 +1.57 +3B.57 +40 +.59 +1.59 +40.59 +41 +.5A +1.5A +41.5A +42 +.60 +1.60 +42.60 +43 +.61 +1.61 +43.61 +44 +.62 +1.62 +44.62 +45 +.64 +1.64 +45.64 +46 +.65 +1.65 +46.65 +47 +.67 +1.67 +47.67 +48 +.68 +1.68 +48.68 +49 +.6A +1.6A +49.6A +4A +.6B +1.6B +4A.6B +4B +.70 +1.70 +4B.70 +50 +.72 +1.72 +50.72 +51 +.73 +1.73 +51.73 +52 +.75 +1.75 +52.75 +53 +.76 +1.76 +53.76 +54 +.78 +1.78 +54.78 +55 +.79 +1.79 +55.79 +56 +.7B +1.7B +56.7B +57 +.80 +1.80 +57.80 +58 +.81 +1.81 +58.81 +59 +.83 +1.83 +59.83 +5A +.84 +1.84 +5A.84 +5B +.86 +1.86 +5B.86 +60 +.87 +1.87 +60.87 +61 +.89 +1.89 +61.89 +62 +.8A +1.8A +62.8A +63 +.90 +1.90 +63.90 +64 +.91 +1.91 +64.91 +65 +.92 +1.92 +65.92 +66 +.94 +1.94 +66.94 +67 +.95 +1.95 +67.95 +68 +.97 +1.97 +68.97 +69 +.98 +1.98 +69.98 +6A +.9A +1.9A +6A.9A +6B +.9B +1.9B +6B.9B +70 +.A0 +1.A0 +70.A0 +71 +.A2 +1.A2 +71.A2 +72 +.A3 +1.A3 +72.A3 +73 +.A5 +1.A5 +73.A5 +74 +.A6 +1.A6 +74.A6 +75 +.A8 +1.A8 +75.A8 +76 +.A9 +1.A9 +76.A9 +77 +.AB +1.AB +77.AB +78 +.B0 +1.B0 +78.B0 +79 +.B1 +1.B1 +79.B1 +7A +.B3 +1.B3 +7A.B3 +7B +.B4 +1.B4 +7B.B4 +80 +.B6 +1.B6 +80.B6 +81 +.B7 +1.B7 +81.B7 +82 +.B9 +1.B9 +82.B9 +83 +.BA +1.BA +83.BA +84 +.124 +1.124 +84.124 +85 +.126 +1.126 +85.126 +86 +.128 +1.128 +86.128 +87 +.129 +1.129 +87.129 +88 +.12B +1.12B +88.12B +89 +.131 +1.131 +89.131 +8A +.133 +1.133 +8A.133 +8B +.134 +1.134 +8B.134 +90 +.136 +1.136 +90.136 +91 +.138 +1.138 +91.138 +92 +.13A +1.13A +92.13A +93 +.13B +1.13B +93.13B +94 +.141 +1.141 +94.141 +95 +.143 +1.143 +95.143 +96 +.144 +1.144 +96.144 +97 +.146 +1.146 +97.146 +98 +.148 +1.148 +98.148 +99 +.14A +1.14A +99.14A +9A +.14B +1.14B +9A.14B +9B +.151 +1.151 +9B.151 +A0 +.153 +1.153 +A0.153 +A1 +.155 +1.155 +A1.155 +A2 +.156 +1.156 +A2.156 +A3 +.158 +1.158 +A3.158 +A4 +.15A +1.15A +A4.15A +A5 +.160 +1.160 +A5.160 +A6 +.161 +1.161 +A6.161 +A7 +.163 +1.163 +A7.163 +A8 +.165 +1.165 +A8.165 +A9 +.166 +1.166 +A9.166 +AA +.168 +1.168 +AA.168 +AB +.16A +1.16A +AB.16A +B0 +.170 +1.170 +B0.170 +B1 +.171 +1.171 +B1.171 +B2 +.173 +1.173 +B2.173 +B3 +.175 +1.175 +B3.175 +B4 +.177 +1.177 +B4.177 +B5 +.178 +1.178 +B5.178 +B6 +.17A +1.17A +B6.17A +B7 +.180 +1.180 +B7.180 +B8 +.181 +1.181 +B8.181 +B9 +.183 +1.183 +B9.183 +BA +.185 +1.185 +BA.185 +BB +.187 +1.187 +BB.187 +100 +.188 +1.188 +100.188 +1485A2ABB33331A9A52265654653B96A10277355024948A4015100.2390A13894109\ +47649128335B8868551928406A +0 +0 +1.0 +0 +1 +.1 +1.1 +1.1 +2 +.2 +1.2 +2.2 +3 +.3 +1.3 +3.3 +4 +.5 +1.5 +4.5 +5 +.6 +1.6 +5.6 +6 +.7 +1.7 +6.7 +7 +.9 +1.9 +7.9 +8 +.A +1.A +8.A +9 +.B +1.B +9.B +A +.13 +1.13 +A.13 +B +.15 +1.15 +B.15 +C +.17 +1.17 +C.17 +10 +.18 +1.18 +10.18 +11 +.1A +1.1A +11.1A +12 +.1C +1.1C +12.1C +13 +.21 +1.21 +13.21 +14 +.22 +1.22 +14.22 +15 +.24 +1.24 +15.24 +16 +.26 +1.26 +16.26 +17 +.27 +1.27 +17.27 +18 +.29 +1.29 +18.29 +19 +.2B +1.2B +19.2B +1A +.2C +1.2C +1A.2C +1B +.31 +1.31 +1B.31 +1C +.33 +1.33 +1C.33 +20 +.34 +1.34 +20.34 +21 +.36 +1.36 +21.36 +22 +.38 +1.38 +22.38 +23 +.3A +1.3A +23.3A +24 +.3B +1.3B +24.3B +25 +.40 +1.40 +25.40 +26 +.42 +1.42 +26.42 +27 +.43 +1.43 +27.43 +28 +.45 +1.45 +28.45 +29 +.47 +1.47 +29.47 +2A +.48 +1.48 +2A.48 +2B +.4A +1.4A +2B.4A +2C +.4C +1.4C +2C.4C +30 +.50 +1.50 +30.50 +31 +.52 +1.52 +31.52 +32 +.54 +1.54 +32.54 +33 +.55 +1.55 +33.55 +34 +.57 +1.57 +34.57 +35 +.59 +1.59 +35.59 +36 +.5B +1.5B +36.5B +37 +.5C +1.5C +37.5C +38 +.61 +1.61 +38.61 +39 +.63 +1.63 +39.63 +3A +.64 +1.64 +3A.64 +3B +.66 +1.66 +3B.66 +3C +.68 +1.68 +3C.68 +40 +.69 +1.69 +40.69 +41 +.6B +1.6B +41.6B +42 +.70 +1.70 +42.70 +43 +.71 +1.71 +43.71 +44 +.73 +1.73 +44.73 +45 +.75 +1.75 +45.75 +46 +.77 +1.77 +46.77 +47 +.78 +1.78 +47.78 +48 +.7A +1.7A +48.7A +49 +.7C +1.7C +49.7C +4A +.80 +1.80 +4A.80 +4B +.82 +1.82 +4B.82 +4C +.84 +1.84 +4C.84 +50 +.85 +1.85 +50.85 +51 +.87 +1.87 +51.87 +52 +.89 +1.89 +52.89 +53 +.8A +1.8A +53.8A +54 +.8C +1.8C +54.8C +55 +.91 +1.91 +55.91 +56 +.92 +1.92 +56.92 +57 +.94 +1.94 +57.94 +58 +.96 +1.96 +58.96 +59 +.98 +1.98 +59.98 +5A +.99 +1.99 +5A.99 +5B +.9B +1.9B +5B.9B +5C +.A0 +1.A0 +5C.A0 +60 +.A1 +1.A1 +60.A1 +61 +.A3 +1.A3 +61.A3 +62 +.A5 +1.A5 +62.A5 +63 +.A6 +1.A6 +63.A6 +64 +.A8 +1.A8 +64.A8 +65 +.AA +1.AA +65.AA +66 +.AB +1.AB +66.AB +67 +.B0 +1.B0 +67.B0 +68 +.B2 +1.B2 +68.B2 +69 +.B4 +1.B4 +69.B4 +6A +.B5 +1.B5 +6A.B5 +6B +.B7 +1.B7 +6B.B7 +6C +.B9 +1.B9 +6C.B9 +70 +.BA +1.BA +70.BA +71 +.BC +1.BC +71.BC +72 +.C1 +1.C1 +72.C1 +73 +.C2 +1.C2 +73.C2 +74 +.C4 +1.C4 +74.C4 +75 +.C6 +1.C6 +75.C6 +76 +.C7 +1.C7 +76.C7 +77 +.C9 +1.C9 +77.C9 +78 +.CB +1.CB +78.CB +79 +.13B +1.13B +79.13B +7A +.140 +1.140 +7A.140 +7B +.143 +1.143 +7B.143 +7C +.145 +1.145 +7C.145 +80 +.147 +1.147 +80.147 +81 +.149 +1.149 +81.149 +82 +.14B +1.14B +82.14B +83 +.151 +1.151 +83.151 +84 +.153 +1.153 +84.153 +85 +.155 +1.155 +85.155 +86 +.157 +1.157 +86.157 +87 +.159 +1.159 +87.159 +88 +.15C +1.15C +88.15C +89 +.161 +1.161 +89.161 +8A +.163 +1.163 +8A.163 +8B +.165 +1.165 +8B.165 +8C +.167 +1.167 +8C.167 +90 +.16A +1.16A +90.16A +91 +.16C +1.16C +91.16C +92 +.171 +1.171 +92.171 +93 +.173 +1.173 +93.173 +94 +.175 +1.175 +94.175 +95 +.178 +1.178 +95.178 +96 +.17A +1.17A +96.17A +97 +.17C +1.17C +97.17C +98 +.181 +1.181 +98.181 +99 +.183 +1.183 +99.183 +9A +.186 +1.186 +9A.186 +9B +.188 +1.188 +9B.188 +9C +.18A +1.18A +9C.18A +A0 +.18C +1.18C +A0.18C +A1 +.191 +1.191 +A1.191 +A2 +.194 +1.194 +A2.194 +A3 +.196 +1.196 +A3.196 +A4 +.198 +1.198 +A4.198 +A5 +.19A +1.19A +A5.19A +A6 +.19C +1.19C +A6.19C +A7 +.1A1 +1.1A1 +A7.1A1 +A8 +.1A4 +1.1A4 +A8.1A4 +A9 +.1A6 +1.1A6 +A9.1A6 +AA +.1A8 +1.1A8 +AA.1A8 +AB +.1AA +1.1AA +AB.1AA +AC +.1AC +1.1AC +AC.1AC +B0 +.1B2 +1.1B2 +B0.1B2 +B1 +.1B4 +1.1B4 +B1.1B4 +B2 +.1B6 +1.1B6 +B2.1B6 +B3 +.1B8 +1.1B8 +B3.1B8 +B4 +.1BA +1.1BA +B4.1BA +B5 +.1C0 +1.1C0 +B5.1C0 +B6 +.1C2 +1.1C2 +B6.1C2 +B7 +.1C4 +1.1C4 +B7.1C4 +B8 +.1C6 +1.1C6 +B8.1C6 +B9 +.1C8 +1.1C8 +B9.1C8 +BA +.1CB +1.1CB +BA.1CB +BB +.200 +1.200 +BB.200 +BC +.202 +1.202 +BC.202 +C0 +.204 +1.204 +C0.204 +C1 +.206 +1.206 +C1.206 +C2 +.209 +1.209 +C2.209 +C3 +.20B +1.20B +C3.20B +C4 +.210 +1.210 +C4.210 +C5 +.212 +1.212 +C5.212 +C6 +.214 +1.214 +C6.214 +C7 +.217 +1.217 +C7.217 +C8 +.219 +1.219 +C8.219 +C9 +.21B +1.21B +C9.21B +CA +.220 +1.220 +CA.220 +CB +.222 +1.222 +CB.222 +CC +.225 +1.225 +CC.225 +100 +.227 +1.227 +100.227 +34C8097C522019AB8CCA960C6B9BCB7784942BAC91C1C8532045.267614552AA727A\ +18A58C5972834B671374270 +0 +0 +1.0 +0 +1 +.1 +1.1 +1.1 +2 +.2 +1.2 +2.2 +3 +.4 +1.4 +3.4 +4 +.5 +1.5 +4.5 +5 +.7 +1.7 +5.7 +6 +.8 +1.8 +6.8 +7 +.9 +1.9 +7.9 +8 +.B +1.B +8.B +9 +.C +1.C +9.C +A +.15 +1.15 +A.15 +B +.17 +1.17 +B.17 +C +.19 +1.19 +C.19 +D +.1B +1.1B +D.1B +10 +.1D +1.1D +10.1D +11 +.21 +1.21 +11.21 +12 +.23 +1.23 +12.23 +13 +.25 +1.25 +13.25 +14 +.27 +1.27 +14.27 +15 +.29 +1.29 +15.29 +16 +.2B +1.2B +16.2B +17 +.2D +1.2D +17.2D +18 +.31 +1.31 +18.31 +19 +.33 +1.33 +19.33 +1A +.35 +1.35 +1A.35 +1B +.37 +1.37 +1B.37 +1C +.38 +1.38 +1C.38 +1D +.3A +1.3A +1D.3A +20 +.3C +1.3C +20.3C +21 +.40 +1.40 +21.40 +22 +.42 +1.42 +22.42 +23 +.44 +1.44 +23.44 +24 +.46 +1.46 +24.46 +25 +.48 +1.48 +25.48 +26 +.4A +1.4A +26.4A +27 +.4C +1.4C +27.4C +28 +.50 +1.50 +28.50 +29 +.52 +1.52 +29.52 +2A +.54 +1.54 +2A.54 +2B +.56 +1.56 +2B.56 +2C +.58 +1.58 +2C.58 +2D +.5A +1.5A +2D.5A +30 +.5C +1.5C +30.5C +31 +.60 +1.60 +31.60 +32 +.62 +1.62 +32.62 +33 +.64 +1.64 +33.64 +34 +.66 +1.66 +34.66 +35 +.68 +1.68 +35.68 +36 +.6A +1.6A +36.6A +37 +.6C +1.6C +37.6C +38 +.70 +1.70 +38.70 +39 +.71 +1.71 +39.71 +3A +.73 +1.73 +3A.73 +3B +.75 +1.75 +3B.75 +3C +.77 +1.77 +3C.77 +3D +.79 +1.79 +3D.79 +40 +.7B +1.7B +40.7B +41 +.7D +1.7D +41.7D +42 +.81 +1.81 +42.81 +43 +.83 +1.83 +43.83 +44 +.85 +1.85 +44.85 +45 +.87 +1.87 +45.87 +46 +.89 +1.89 +46.89 +47 +.8B +1.8B +47.8B +48 +.8D +1.8D +48.8D +49 +.91 +1.91 +49.91 +4A +.93 +1.93 +4A.93 +4B +.95 +1.95 +4B.95 +4C +.97 +1.97 +4C.97 +4D +.99 +1.99 +4D.99 +50 +.9B +1.9B +50.9B +51 +.9D +1.9D +51.9D +52 +.A1 +1.A1 +52.A1 +53 +.A3 +1.A3 +53.A3 +54 +.A5 +1.A5 +54.A5 +55 +.A7 +1.A7 +55.A7 +56 +.A8 +1.A8 +56.A8 +57 +.AA +1.AA +57.AA +58 +.AC +1.AC +58.AC +59 +.B0 +1.B0 +59.B0 +5A +.B2 +1.B2 +5A.B2 +5B +.B4 +1.B4 +5B.B4 +5C +.B6 +1.B6 +5C.B6 +5D +.B8 +1.B8 +5D.B8 +60 +.BA +1.BA +60.BA +61 +.BC +1.BC +61.BC +62 +.C0 +1.C0 +62.C0 +63 +.C2 +1.C2 +63.C2 +64 +.C4 +1.C4 +64.C4 +65 +.C6 +1.C6 +65.C6 +66 +.C8 +1.C8 +66.C8 +67 +.CA +1.CA +67.CA +68 +.CC +1.CC +68.CC +69 +.D0 +1.D0 +69.D0 +6A +.D2 +1.D2 +6A.D2 +6B +.D4 +1.D4 +6B.D4 +6C +.D6 +1.D6 +6C.D6 +6D +.D8 +1.D8 +6D.D8 +70 +.DA +1.DA +70.DA +71 +.DC +1.DC +71.DC +72 +.158 +1.158 +72.158 +73 +.15B +1.15B +73.15B +74 +.15D +1.15D +74.15D +75 +.162 +1.162 +75.162 +76 +.165 +1.165 +76.165 +77 +.168 +1.168 +77.168 +78 +.16A +1.16A +78.16A +79 +.16D +1.16D +79.16D +7A +.172 +1.172 +7A.172 +7B +.175 +1.175 +7B.175 +7C +.177 +1.177 +7C.177 +7D +.17A +1.17A +7D.17A +80 +.17D +1.17D +80.17D +81 +.182 +1.182 +81.182 +82 +.184 +1.184 +82.184 +83 +.187 +1.187 +83.187 +84 +.18A +1.18A +84.18A +85 +.18D +1.18D +85.18D +86 +.191 +1.191 +86.191 +87 +.194 +1.194 +87.194 +88 +.197 +1.197 +88.197 +89 +.19A +1.19A +89.19A +8A +.19C +1.19C +8A.19C +8B +.1A1 +1.1A1 +8B.1A1 +8C +.1A4 +1.1A4 +8C.1A4 +8D +.1A7 +1.1A7 +8D.1A7 +90 +.1A9 +1.1A9 +90.1A9 +91 +.1AC +1.1AC +91.1AC +92 +.1B1 +1.1B1 +92.1B1 +93 +.1B3 +1.1B3 +93.1B3 +94 +.1B6 +1.1B6 +94.1B6 +95 +.1B9 +1.1B9 +95.1B9 +96 +.1BC +1.1BC +96.1BC +97 +.1C0 +1.1C0 +97.1C0 +98 +.1C3 +1.1C3 +98.1C3 +99 +.1C6 +1.1C6 +99.1C6 +9A +.1C9 +1.1C9 +9A.1C9 +9B +.1CB +1.1CB +9B.1CB +9C +.1D0 +1.1D0 +9C.1D0 +9D +.1D3 +1.1D3 +9D.1D3 +A0 +.1D6 +1.1D6 +A0.1D6 +A1 +.1D8 +1.1D8 +A1.1D8 +A2 +.1DB +1.1DB +A2.1DB +A3 +.200 +1.200 +A3.200 +A4 +.203 +1.203 +A4.203 +A5 +.205 +1.205 +A5.205 +A6 +.208 +1.208 +A6.208 +A7 +.20B +1.20B +A7.20B +A8 +.210 +1.210 +A8.210 +A9 +.212 +1.212 +A9.212 +AA +.215 +1.215 +AA.215 +AB +.218 +1.218 +AB.218 +AC +.21B +1.21B +AC.21B +AD +.21D +1.21D +AD.21D +B0 +.222 +1.222 +B0.222 +B1 +.225 +1.225 +B1.225 +B2 +.228 +1.228 +B2.228 +B3 +.22A +1.22A +B3.22A +B4 +.22D +1.22D +B4.22D +B5 +.232 +1.232 +B5.232 +B6 +.235 +1.235 +B6.235 +B7 +.237 +1.237 +B7.237 +B8 +.23A +1.23A +B8.23A +B9 +.23D +1.23D +B9.23D +BA +.242 +1.242 +BA.242 +BB +.244 +1.244 +BB.244 +BC +.247 +1.247 +BC.247 +BD +.24A +1.24A +BD.24A +C0 +.24C +1.24C +C0.24C +C1 +.251 +1.251 +C1.251 +C2 +.254 +1.254 +C2.254 +C3 +.257 +1.257 +C3.257 +C4 +.259 +1.259 +C4.259 +C5 +.25C +1.25C +C5.25C +C6 +.261 +1.261 +C6.261 +C7 +.264 +1.264 +C7.264 +C8 +.266 +1.266 +C8.266 +C9 +.269 +1.269 +C9.269 +CA +.26C +1.26C +CA.26C +CB +.271 +1.271 +CB.271 +CC +.273 +1.273 +CC.273 +CD +.276 +1.276 +CD.276 +D0 +.279 +1.279 +D0.279 +D1 +.27C +1.27C +D1.27C +D2 +.280 +1.280 +D2.280 +D3 +.283 +1.283 +D3.283 +D4 +.286 +1.286 +D4.286 +D5 +.289 +1.289 +D5.289 +D6 +.28B +1.28B +D6.28B +D7 +.290 +1.290 +D7.290 +D8 +.293 +1.293 +D8.293 +D9 +.296 +1.296 +D9.296 +DA +.298 +1.298 +DA.298 +DB +.29B +1.29B +DB.29B +DC +.2A0 +1.2A0 +DC.2A0 +DD +.2A3 +1.2A3 +DD.2A3 +100 +.2A5 +1.2A5 +100.2A5 +111CD901B2B5D62A85539D688B5643D4B60923A32D3299503A8.29AC9033CB046D76\ +60CA48980933788D6D130 +0 +0 +1.0 +0 +1 +.1 +1.1 +1.1 +2 +.3 +1.3 +2.3 +3 +.4 +1.4 +3.4 +4 +.6 +1.6 +4.6 +5 +.7 +1.7 +5.7 +6 +.9 +1.9 +6.9 +7 +.A +1.A +7.A +8 +.C +1.C +8.C +9 +.D +1.D +9.D +A +.17 +1.17 +A.17 +B +.19 +1.19 +B.19 +C +.1C +1.1C +C.1C +D +.1E +1.1E +D.1E +E +.21 +1.21 +E.21 +10 +.23 +1.23 +10.23 +11 +.26 +1.26 +11.26 +12 +.28 +1.28 +12.28 +13 +.2A +1.2A +13.2A +14 +.2C +1.2C +14.2C +15 +.30 +1.30 +15.30 +16 +.32 +1.32 +16.32 +17 +.34 +1.34 +17.34 +18 +.36 +1.36 +18.36 +19 +.39 +1.39 +19.39 +1A +.3B +1.3B +1A.3B +1B +.3D +1.3D +1B.3D +1C +.40 +1.40 +1C.40 +1D +.43 +1.43 +1D.43 +1E +.45 +1.45 +1E.45 +20 +.47 +1.47 +20.47 +21 +.49 +1.49 +21.49 +22 +.4C +1.4C +22.4C +23 +.4E +1.4E +23.4E +24 +.51 +1.51 +24.51 +25 +.53 +1.53 +25.53 +26 +.56 +1.56 +26.56 +27 +.58 +1.58 +27.58 +28 +.5A +1.5A +28.5A +29 +.5C +1.5C +29.5C +2A +.60 +1.60 +2A.60 +2B +.62 +1.62 +2B.62 +2C +.64 +1.64 +2C.64 +2D +.66 +1.66 +2D.66 +2E +.69 +1.69 +2E.69 +30 +.6B +1.6B +30.6B +31 +.6D +1.6D +31.6D +32 +.70 +1.70 +32.70 +33 +.73 +1.73 +33.73 +34 +.75 +1.75 +34.75 +35 +.77 +1.77 +35.77 +36 +.79 +1.79 +36.79 +37 +.7C +1.7C +37.7C +38 +.7E +1.7E +38.7E +39 +.81 +1.81 +39.81 +3A +.83 +1.83 +3A.83 +3B +.86 +1.86 +3B.86 +3C +.88 +1.88 +3C.88 +3D +.8A +1.8A +3D.8A +3E +.8C +1.8C +3E.8C +40 +.90 +1.90 +40.90 +41 +.92 +1.92 +41.92 +42 +.94 +1.94 +42.94 +43 +.96 +1.96 +43.96 +44 +.99 +1.99 +44.99 +45 +.9B +1.9B +45.9B +46 +.9D +1.9D +46.9D +47 +.A0 +1.A0 +47.A0 +48 +.A3 +1.A3 +48.A3 +49 +.A5 +1.A5 +49.A5 +4A +.A7 +1.A7 +4A.A7 +4B +.A9 +1.A9 +4B.A9 +4C +.AC +1.AC +4C.AC +4D +.AE +1.AE +4D.AE +4E +.B1 +1.B1 +4E.B1 +50 +.B3 +1.B3 +50.B3 +51 +.B6 +1.B6 +51.B6 +52 +.B8 +1.B8 +52.B8 +53 +.BA +1.BA +53.BA +54 +.BC +1.BC +54.BC +55 +.C0 +1.C0 +55.C0 +56 +.C2 +1.C2 +56.C2 +57 +.C4 +1.C4 +57.C4 +58 +.C6 +1.C6 +58.C6 +59 +.C9 +1.C9 +59.C9 +5A +.CB +1.CB +5A.CB +5B +.CD +1.CD +5B.CD +5C +.D0 +1.D0 +5C.D0 +5D +.D3 +1.D3 +5D.D3 +5E +.D5 +1.D5 +5E.D5 +60 +.D7 +1.D7 +60.D7 +61 +.D9 +1.D9 +61.D9 +62 +.DC +1.DC +62.DC +63 +.DE +1.DE +63.DE +64 +.E1 +1.E1 +64.E1 +65 +.E3 +1.E3 +65.E3 +66 +.E6 +1.E6 +66.E6 +67 +.E8 +1.E8 +67.E8 +68 +.EA +1.EA +68.EA +69 +.EC +1.EC +69.EC +6A +.177 +1.177 +6A.177 +6B +.17A +1.17A +6B.17A +6C +.17E +1.17E +6C.17E +6D +.182 +1.182 +6D.182 +6E +.186 +1.186 +6E.186 +70 +.189 +1.189 +70.189 +71 +.18C +1.18C +71.18C +72 +.191 +1.191 +72.191 +73 +.194 +1.194 +73.194 +74 +.197 +1.197 +74.197 +75 +.19B +1.19B +75.19B +76 +.19E +1.19E +76.19E +77 +.1A3 +1.1A3 +77.1A3 +78 +.1A6 +1.1A6 +78.1A6 +79 +.1A9 +1.1A9 +79.1A9 +7A +.1AD +1.1AD +7A.1AD +7B +.1B1 +1.1B1 +7B.1B1 +7C +.1B4 +1.1B4 +7C.1B4 +7D +.1B8 +1.1B8 +7D.1B8 +7E +.1BB +1.1BB +7E.1BB +80 +.1C0 +1.1C0 +80.1C0 +81 +.1C3 +1.1C3 +81.1C3 +82 +.1C6 +1.1C6 +82.1C6 +83 +.1CA +1.1CA +83.1CA +84 +.1CD +1.1CD +84.1CD +85 +.1D1 +1.1D1 +85.1D1 +86 +.1D5 +1.1D5 +86.1D5 +87 +.1D8 +1.1D8 +87.1D8 +88 +.1DC +1.1DC +88.1DC +89 +.1E0 +1.1E0 +89.1E0 +8A +.1E3 +1.1E3 +8A.1E3 +8B +.1E7 +1.1E7 +8B.1E7 +8C +.1EA +1.1EA +8C.1EA +8D +.1ED +1.1ED +8D.1ED +8E +.202 +1.202 +8E.202 +90 +.205 +1.205 +90.205 +91 +.209 +1.209 +91.209 +92 +.20C +1.20C +92.20C +93 +.210 +1.210 +93.210 +94 +.214 +1.214 +94.214 +95 +.217 +1.217 +95.217 +96 +.21A +1.21A +96.21A +97 +.21E +1.21E +97.21E +98 +.222 +1.222 +98.222 +99 +.226 +1.226 +99.226 +9A +.229 +1.229 +9A.229 +9B +.22C +1.22C +9B.22C +9C +.231 +1.231 +9C.231 +9D +.234 +1.234 +9D.234 +9E +.237 +1.237 +9E.237 +A0 +.23B +1.23B +A0.23B +A1 +.23E +1.23E +A1.23E +A2 +.243 +1.243 +A2.243 +A3 +.246 +1.246 +A3.246 +A4 +.249 +1.249 +A4.249 +A5 +.24D +1.24D +A5.24D +A6 +.251 +1.251 +A6.251 +A7 +.254 +1.254 +A7.254 +A8 +.258 +1.258 +A8.258 +A9 +.25B +1.25B +A9.25B +AA +.260 +1.260 +AA.260 +AB +.263 +1.263 +AB.263 +AC +.266 +1.266 +AC.266 +AD +.26A +1.26A +AD.26A +AE +.26D +1.26D +AE.26D +B0 +.271 +1.271 +B0.271 +B1 +.275 +1.275 +B1.275 +B2 +.278 +1.278 +B2.278 +B3 +.27C +1.27C +B3.27C +B4 +.280 +1.280 +B4.280 +B5 +.283 +1.283 +B5.283 +B6 +.287 +1.287 +B6.287 +B7 +.28A +1.28A +B7.28A +B8 +.28D +1.28D +B8.28D +B9 +.292 +1.292 +B9.292 +BA +.295 +1.295 +BA.295 +BB +.299 +1.299 +BB.299 +BC +.29C +1.29C +BC.29C +BD +.2A0 +1.2A0 +BD.2A0 +BE +.2A4 +1.2A4 +BE.2A4 +C0 +.2A7 +1.2A7 +C0.2A7 +C1 +.2AA +1.2AA +C1.2AA +C2 +.2AE +1.2AE +C2.2AE +C3 +.2B2 +1.2B2 +C3.2B2 +C4 +.2B6 +1.2B6 +C4.2B6 +C5 +.2B9 +1.2B9 +C5.2B9 +C6 +.2BC +1.2BC +C6.2BC +C7 +.2C1 +1.2C1 +C7.2C1 +C8 +.2C4 +1.2C4 +C8.2C4 +C9 +.2C7 +1.2C7 +C9.2C7 +CA +.2CB +1.2CB +CA.2CB +CB +.2CE +1.2CE +CB.2CE +CC +.2D3 +1.2D3 +CC.2D3 +CD +.2D6 +1.2D6 +CD.2D6 +CE +.2D9 +1.2D9 +CE.2D9 +D0 +.2DD +1.2DD +D0.2DD +D1 +.2E1 +1.2E1 +D1.2E1 +D2 +.2E4 +1.2E4 +D2.2E4 +D3 +.2E8 +1.2E8 +D3.2E8 +D4 +.2EB +1.2EB +D4.2EB +D5 +.300 +1.300 +D5.300 +D6 +.303 +1.303 +D6.303 +D7 +.306 +1.306 +D7.306 +D8 +.30A +1.30A +D8.30A +D9 +.30D +1.30D +D9.30D +DA +.311 +1.311 +DA.311 +DB +.315 +1.315 +DB.315 +DC +.318 +1.318 +DC.318 +DD +.31C +1.31C +DD.31C +DE +.320 +1.320 +DE.320 +E0 +.323 +1.323 +E0.323 +E1 +.327 +1.327 +E1.327 +E2 +.32A +1.32A +E2.32A +E3 +.32D +1.32D +E3.32D +E4 +.332 +1.332 +E4.332 +E5 +.335 +1.335 +E5.335 +E6 +.339 +1.339 +E6.339 +E7 +.33C +1.33C +E7.33C +E8 +.340 +1.340 +E8.340 +E9 +.344 +1.344 +E9.344 +EA +.347 +1.347 +EA.347 +EB +.34A +1.34A +EB.34A +EC +.34E +1.34E +EC.34E +ED +.352 +1.352 +ED.352 +EE +.356 +1.356 +EE.356 +100 +.359 +1.359 +100.359 +7AD50709B1437EAE70D36ADC3A3A5B2927ECB8194CC0C0A39.2D57DB1CD5C0B800BE\ +AE5074141A82CE6995 +0 +0 +1.0 +0 +1 +.1 +1.1 +1.1 +2 +.3 +1.3 +2.3 +3 +.4 +1.4 +3.4 +4 +.6 +1.6 +4.6 +5 +.8 +1.8 +5.8 +6 +.9 +1.9 +6.9 +7 +.B +1.B +7.B +8 +.C +1.C +8.C +9 +.E +1.E +9.E +A +.19 +1.19 +A.19 +B +.1C +1.1C +B.1C +C +.1E +1.1E +C.1E +D +.21 +1.21 +D.21 +E +.23 +1.23 +E.23 +F +.26 +1.26 +F.26 +10 +.28 +1.28 +10.28 +11 +.2B +1.2B +11.2B +12 +.2E +1.2E +12.2E +13 +.30 +1.30 +13.30 +14 +.33 +1.33 +14.33 +15 +.35 +1.35 +15.35 +16 +.38 +1.38 +16.38 +17 +.3A +1.3A +17.3A +18 +.3D +1.3D +18.3D +19 +.40 +1.40 +19.40 +1A +.42 +1.42 +1A.42 +1B +.45 +1.45 +1B.45 +1C +.47 +1.47 +1C.47 +1D +.4A +1.4A +1D.4A +1E +.4C +1.4C +1E.4C +1F +.4F +1.4F +1F.4F +20 +.51 +1.51 +20.51 +21 +.54 +1.54 +21.54 +22 +.57 +1.57 +22.57 +23 +.59 +1.59 +23.59 +24 +.5C +1.5C +24.5C +25 +.5E +1.5E +25.5E +26 +.61 +1.61 +26.61 +27 +.63 +1.63 +27.63 +28 +.66 +1.66 +28.66 +29 +.68 +1.68 +29.68 +2A +.6B +1.6B +2A.6B +2B +.6E +1.6E +2B.6E +2C +.70 +1.70 +2C.70 +2D +.73 +1.73 +2D.73 +2E +.75 +1.75 +2E.75 +2F +.78 +1.78 +2F.78 +30 +.7A +1.7A +30.7A +31 +.7D +1.7D +31.7D +32 +.80 +1.80 +32.80 +33 +.82 +1.82 +33.82 +34 +.85 +1.85 +34.85 +35 +.87 +1.87 +35.87 +36 +.8A +1.8A +36.8A +37 +.8C +1.8C +37.8C +38 +.8F +1.8F +38.8F +39 +.91 +1.91 +39.91 +3A +.94 +1.94 +3A.94 +3B +.97 +1.97 +3B.97 +3C +.99 +1.99 +3C.99 +3D +.9C +1.9C +3D.9C +3E +.9E +1.9E +3E.9E +3F +.A1 +1.A1 +3F.A1 +40 +.A3 +1.A3 +40.A3 +41 +.A6 +1.A6 +41.A6 +42 +.A8 +1.A8 +42.A8 +43 +.AB +1.AB +43.AB +44 +.AE +1.AE +44.AE +45 +.B0 +1.B0 +45.B0 +46 +.B3 +1.B3 +46.B3 +47 +.B5 +1.B5 +47.B5 +48 +.B8 +1.B8 +48.B8 +49 +.BA +1.BA +49.BA +4A +.BD +1.BD +4A.BD +4B +.C0 +1.C0 +4B.C0 +4C +.C2 +1.C2 +4C.C2 +4D +.C5 +1.C5 +4D.C5 +4E +.C7 +1.C7 +4E.C7 +4F +.CA +1.CA +4F.CA +50 +.CC +1.CC +50.CC +51 +.CF +1.CF +51.CF +52 +.D1 +1.D1 +52.D1 +53 +.D4 +1.D4 +53.D4 +54 +.D7 +1.D7 +54.D7 +55 +.D9 +1.D9 +55.D9 +56 +.DC +1.DC +56.DC +57 +.DE +1.DE +57.DE +58 +.E1 +1.E1 +58.E1 +59 +.E3 +1.E3 +59.E3 +5A +.E6 +1.E6 +5A.E6 +5B +.E8 +1.E8 +5B.E8 +5C +.EB +1.EB +5C.EB +5D +.EE +1.EE +5D.EE +5E +.F0 +1.F0 +5E.F0 +5F +.F3 +1.F3 +5F.F3 +60 +.F5 +1.F5 +60.F5 +61 +.F8 +1.F8 +61.F8 +62 +.FA +1.FA +62.FA +63 +.FD +1.FD +63.FD +64 +.199 +1.199 +64.199 +65 +.19D +1.19D +65.19D +66 +.1A1 +1.1A1 +66.1A1 +67 +.1A5 +1.1A5 +67.1A5 +68 +.1A9 +1.1A9 +68.1A9 +69 +.1AE +1.1AE +69.1AE +6A +.1B2 +1.1B2 +6A.1B2 +6B +.1B6 +1.1B6 +6B.1B6 +6C +.1BA +1.1BA +6C.1BA +6D +.1BE +1.1BE +6D.1BE +6E +.1C2 +1.1C2 +6E.1C2 +6F +.1C6 +1.1C6 +6F.1C6 +70 +.1CA +1.1CA +70.1CA +71 +.1CE +1.1CE +71.1CE +72 +.1D2 +1.1D2 +72.1D2 +73 +.1D7 +1.1D7 +73.1D7 +74 +.1DB +1.1DB +74.1DB +75 +.1DF +1.1DF +75.1DF +76 +.1E3 +1.1E3 +76.1E3 +77 +.1E7 +1.1E7 +77.1E7 +78 +.1EB +1.1EB +78.1EB +79 +.1EF +1.1EF +79.1EF +7A +.1F3 +1.1F3 +7A.1F3 +7B +.1F7 +1.1F7 +7B.1F7 +7C +.1FB +1.1FB +7C.1FB +7D +.200 +1.200 +7D.200 +7E +.204 +1.204 +7E.204 +7F +.208 +1.208 +7F.208 +80 +.20C +1.20C +80.20C +81 +.210 +1.210 +81.210 +82 +.214 +1.214 +82.214 +83 +.218 +1.218 +83.218 +84 +.21C +1.21C +84.21C +85 +.220 +1.220 +85.220 +86 +.224 +1.224 +86.224 +87 +.228 +1.228 +87.228 +88 +.22D +1.22D +88.22D +89 +.231 +1.231 +89.231 +8A +.235 +1.235 +8A.235 +8B +.239 +1.239 +8B.239 +8C +.23D +1.23D +8C.23D +8D +.241 +1.241 +8D.241 +8E +.245 +1.245 +8E.245 +8F +.249 +1.249 +8F.249 +90 +.24D +1.24D +90.24D +91 +.251 +1.251 +91.251 +92 +.256 +1.256 +92.256 +93 +.25A +1.25A +93.25A +94 +.25E +1.25E +94.25E +95 +.262 +1.262 +95.262 +96 +.266 +1.266 +96.266 +97 +.26A +1.26A +97.26A +98 +.26E +1.26E +98.26E +99 +.272 +1.272 +99.272 +9A +.276 +1.276 +9A.276 +9B +.27A +1.27A +9B.27A +9C +.27E +1.27E +9C.27E +9D +.283 +1.283 +9D.283 +9E +.287 +1.287 +9E.287 +9F +.28B +1.28B +9F.28B +A0 +.28F +1.28F +A0.28F +A1 +.293 +1.293 +A1.293 +A2 +.297 +1.297 +A2.297 +A3 +.29B +1.29B +A3.29B +A4 +.29F +1.29F +A4.29F +A5 +.2A3 +1.2A3 +A5.2A3 +A6 +.2A7 +1.2A7 +A6.2A7 +A7 +.2AC +1.2AC +A7.2AC +A8 +.2B0 +1.2B0 +A8.2B0 +A9 +.2B4 +1.2B4 +A9.2B4 +AA +.2B8 +1.2B8 +AA.2B8 +AB +.2BC +1.2BC +AB.2BC +AC +.2C0 +1.2C0 +AC.2C0 +AD +.2C4 +1.2C4 +AD.2C4 +AE +.2C8 +1.2C8 +AE.2C8 +AF +.2CC +1.2CC +AF.2CC +B0 +.2D0 +1.2D0 +B0.2D0 +B1 +.2D4 +1.2D4 +B1.2D4 +B2 +.2D9 +1.2D9 +B2.2D9 +B3 +.2DD +1.2DD +B3.2DD +B4 +.2E1 +1.2E1 +B4.2E1 +B5 +.2E5 +1.2E5 +B5.2E5 +B6 +.2E9 +1.2E9 +B6.2E9 +B7 +.2ED +1.2ED +B7.2ED +B8 +.2F1 +1.2F1 +B8.2F1 +B9 +.2F5 +1.2F5 +B9.2F5 +BA +.2F9 +1.2F9 +BA.2F9 +BB +.2FD +1.2FD +BB.2FD +BC +.302 +1.302 +BC.302 +BD +.306 +1.306 +BD.306 +BE +.30A +1.30A +BE.30A +BF +.30E +1.30E +BF.30E +C0 +.312 +1.312 +C0.312 +C1 +.316 +1.316 +C1.316 +C2 +.31A +1.31A +C2.31A +C3 +.31E +1.31E +C3.31E +C4 +.322 +1.322 +C4.322 +C5 +.326 +1.326 +C5.326 +C6 +.32B +1.32B +C6.32B +C7 +.32F +1.32F +C7.32F +C8 +.333 +1.333 +C8.333 +C9 +.337 +1.337 +C9.337 +CA +.33B +1.33B +CA.33B +CB +.33F +1.33F +CB.33F +CC +.343 +1.343 +CC.343 +CD +.347 +1.347 +CD.347 +CE +.34B +1.34B +CE.34B +CF +.34F +1.34F +CF.34F +D0 +.353 +1.353 +D0.353 +D1 +.358 +1.358 +D1.358 +D2 +.35C +1.35C +D2.35C +D3 +.360 +1.360 +D3.360 +D4 +.364 +1.364 +D4.364 +D5 +.368 +1.368 +D5.368 +D6 +.36C +1.36C +D6.36C +D7 +.370 +1.370 +D7.370 +D8 +.374 +1.374 +D8.374 +D9 +.378 +1.378 +D9.378 +DA +.37C +1.37C +DA.37C +DB +.381 +1.381 +DB.381 +DC +.385 +1.385 +DC.385 +DD +.389 +1.389 +DD.389 +DE +.38D +1.38D +DE.38D +DF +.391 +1.391 +DF.391 +E0 +.395 +1.395 +E0.395 +E1 +.399 +1.399 +E1.399 +E2 +.39D +1.39D +E2.39D +E3 +.3A1 +1.3A1 +E3.3A1 +E4 +.3A5 +1.3A5 +E4.3A5 +E5 +.3A9 +1.3A9 +E5.3A9 +E6 +.3AE +1.3AE +E6.3AE +E7 +.3B2 +1.3B2 +E7.3B2 +E8 +.3B6 +1.3B6 +E8.3B6 +E9 +.3BA +1.3BA +E9.3BA +EA +.3BE +1.3BE +EA.3BE +EB +.3C2 +1.3C2 +EB.3C2 +EC +.3C6 +1.3C6 +EC.3C6 +ED +.3CA +1.3CA +ED.3CA +EE +.3CE +1.3CE +EE.3CE +EF +.3D2 +1.3D2 +EF.3D2 +F0 +.3D7 +1.3D7 +F0.3D7 +F1 +.3DB +1.3DB +F1.3DB +F2 +.3DF +1.3DF +F2.3DF +F3 +.3E3 +1.3E3 +F3.3E3 +F4 +.3E7 +1.3E7 +F4.3E7 +F5 +.3EB +1.3EB +F5.3EB +F6 +.3EF +1.3EF +F6.3EF +F7 +.3F3 +1.3F3 +F7.3F3 +F8 +.3F7 +1.3F7 +F8.3F7 +F9 +.3FB +1.3FB +F9.3FB +FA +.400 +1.400 +FA.400 +FB +.404 +1.404 +FB.404 +FC +.408 +1.408 +FC.408 +FD +.40C +1.40C +FD.40C +FE +.410 +1.410 +FE.410 +FF +.414 +1.414 +FF.414 +100 +.418 +1.418 +100.418 +594ABD0D572B6D93F40F8A2E8552EBE826332195DD5A3350.3157FEF01749B1032D5\ +356A959059020CDE +0 +0 + 01.00 +0 + 01 +.01 + 01.01 + 01.01 + 02 +.03 + 01.03 + 02.03 + 03 +.05 + 01.05 + 03.05 + 04 +.06 + 01.06 + 04.06 + 05 +.08 + 01.08 + 05.08 + 06 +.10 + 01.10 + 06.10 + 07 +.11 + 01.11 + 07.11 + 08 +.13 + 01.13 + 08.13 + 09 +.15 + 01.15 + 09.15 + 10 +.01 11 + 01.01 11 + 10.01 11 + 11 +.01 14 + 01.01 14 + 11.01 14 + 12 +.02 00 + 01.02 00 + 12.02 00 + 13 +.02 03 + 01.02 03 + 13.02 03 + 14 +.02 06 + 01.02 06 + 14.02 06 + 15 +.02 09 + 01.02 09 + 15.02 09 + 16 +.02 12 + 01.02 12 + 16.02 12 + 01 00 +.02 15 + 01.02 15 + 01 00.02 15 + 01 01 +.03 01 + 01.03 01 + 01 01.03 01 + 01 02 +.03 03 + 01.03 03 + 01 02.03 03 + 01 03 +.03 06 + 01.03 06 + 01 03.03 06 + 01 04 +.03 09 + 01.03 09 + 01 04.03 09 + 01 05 +.03 12 + 01.03 12 + 01 05.03 12 + 01 06 +.03 15 + 01.03 15 + 01 06.03 15 + 01 07 +.04 01 + 01.04 01 + 01 07.04 01 + 01 08 +.04 04 + 01.04 04 + 01 08.04 04 + 01 09 +.04 07 + 01.04 07 + 01 09.04 07 + 01 10 +.04 10 + 01.04 10 + 01 10.04 10 + 01 11 +.04 12 + 01.04 12 + 01 11.04 12 + 01 12 +.04 15 + 01.04 15 + 01 12.04 15 + 01 13 +.05 01 + 01.05 01 + 01 13.05 01 + 01 14 +.05 04 + 01.05 04 + 01 14.05 04 + 01 15 +.05 07 + 01.05 07 + 01 15.05 07 + 01 16 +.05 10 + 01.05 10 + 01 16.05 10 + 02 00 +.05 13 + 01.05 13 + 02 00.05 13 + 02 01 +.05 16 + 01.05 16 + 02 01.05 16 + 02 02 +.06 02 + 01.06 02 + 02 02.06 02 + 02 03 +.06 04 + 01.06 04 + 02 03.06 04 + 02 04 +.06 07 + 01.06 07 + 02 04.06 07 + 02 05 +.06 10 + 01.06 10 + 02 05.06 10 + 02 06 +.06 13 + 01.06 13 + 02 06.06 13 + 02 07 +.06 16 + 01.06 16 + 02 07.06 16 + 02 08 +.07 02 + 01.07 02 + 02 08.07 02 + 02 09 +.07 05 + 01.07 05 + 02 09.07 05 + 02 10 +.07 08 + 01.07 08 + 02 10.07 08 + 02 11 +.07 11 + 01.07 11 + 02 11.07 11 + 02 12 +.07 13 + 01.07 13 + 02 12.07 13 + 02 13 +.07 16 + 01.07 16 + 02 13.07 16 + 02 14 +.08 02 + 01.08 02 + 02 14.08 02 + 02 15 +.08 05 + 01.08 05 + 02 15.08 05 + 02 16 +.08 08 + 01.08 08 + 02 16.08 08 + 03 00 +.08 11 + 01.08 11 + 03 00.08 11 + 03 01 +.08 14 + 01.08 14 + 03 01.08 14 + 03 02 +.09 00 + 01.09 00 + 03 02.09 00 + 03 03 +.09 03 + 01.09 03 + 03 03.09 03 + 03 04 +.09 05 + 01.09 05 + 03 04.09 05 + 03 05 +.09 08 + 01.09 08 + 03 05.09 08 + 03 06 +.09 11 + 01.09 11 + 03 06.09 11 + 03 07 +.09 14 + 01.09 14 + 03 07.09 14 + 03 08 +.10 00 + 01.10 00 + 03 08.10 00 + 03 09 +.10 03 + 01.10 03 + 03 09.10 03 + 03 10 +.10 06 + 01.10 06 + 03 10.10 06 + 03 11 +.10 09 + 01.10 09 + 03 11.10 09 + 03 12 +.10 12 + 01.10 12 + 03 12.10 12 + 03 13 +.10 14 + 01.10 14 + 03 13.10 14 + 03 14 +.11 00 + 01.11 00 + 03 14.11 00 + 03 15 +.11 03 + 01.11 03 + 03 15.11 03 + 03 16 +.11 06 + 01.11 06 + 03 16.11 06 + 04 00 +.11 09 + 01.11 09 + 04 00.11 09 + 04 01 +.11 12 + 01.11 12 + 04 01.11 12 + 04 02 +.11 15 + 01.11 15 + 04 02.11 15 + 04 03 +.12 01 + 01.12 01 + 04 03.12 01 + 04 04 +.12 04 + 01.12 04 + 04 04.12 04 + 04 05 +.12 06 + 01.12 06 + 04 05.12 06 + 04 06 +.12 09 + 01.12 09 + 04 06.12 09 + 04 07 +.12 12 + 01.12 12 + 04 07.12 12 + 04 08 +.12 15 + 01.12 15 + 04 08.12 15 + 04 09 +.13 01 + 01.13 01 + 04 09.13 01 + 04 10 +.13 04 + 01.13 04 + 04 10.13 04 + 04 11 +.13 07 + 01.13 07 + 04 11.13 07 + 04 12 +.13 10 + 01.13 10 + 04 12.13 10 + 04 13 +.13 13 + 01.13 13 + 04 13.13 13 + 04 14 +.13 15 + 01.13 15 + 04 14.13 15 + 04 15 +.14 01 + 01.14 01 + 04 15.14 01 + 04 16 +.14 04 + 01.14 04 + 04 16.14 04 + 05 00 +.14 07 + 01.14 07 + 05 00.14 07 + 05 01 +.14 10 + 01.14 10 + 05 01.14 10 + 05 02 +.14 13 + 01.14 13 + 05 02.14 13 + 05 03 +.14 16 + 01.14 16 + 05 03.14 16 + 05 04 +.15 02 + 01.15 02 + 05 04.15 02 + 05 05 +.15 05 + 01.15 05 + 05 05.15 05 + 05 06 +.15 07 + 01.15 07 + 05 06.15 07 + 05 07 +.15 10 + 01.15 10 + 05 07.15 10 + 05 08 +.15 13 + 01.15 13 + 05 08.15 13 + 05 09 +.15 16 + 01.15 16 + 05 09.15 16 + 05 10 +.16 02 + 01.16 02 + 05 10.16 02 + 05 11 +.16 05 + 01.16 05 + 05 11.16 05 + 05 12 +.16 08 + 01.16 08 + 05 12.16 08 + 05 13 +.16 11 + 01.16 11 + 05 13.16 11 + 05 14 +.16 14 + 01.16 14 + 05 14.16 14 + 05 15 +.01 11 15 + 01.01 11 15 + 05 15.01 11 15 + 05 16 +.01 12 03 + 01.01 12 03 + 05 16.01 12 03 + 06 00 +.01 12 08 + 01.01 12 08 + 06 00.01 12 08 + 06 01 +.01 12 13 + 01.01 12 13 + 06 01.01 12 13 + 06 02 +.01 13 00 + 01.01 13 00 + 06 02.01 13 00 + 06 03 +.01 13 05 + 01.01 13 05 + 06 03.01 13 05 + 06 04 +.01 13 10 + 01.01 13 10 + 06 04.01 13 10 + 06 05 +.01 13 15 + 01.01 13 15 + 06 05.01 13 15 + 06 06 +.01 14 03 + 01.01 14 03 + 06 06.01 14 03 + 06 07 +.01 14 08 + 01.01 14 08 + 06 07.01 14 08 + 06 08 +.01 14 13 + 01.01 14 13 + 06 08.01 14 13 + 06 09 +.01 15 01 + 01.01 15 01 + 06 09.01 15 01 + 06 10 +.01 15 06 + 01.01 15 06 + 06 10.01 15 06 + 06 11 +.01 15 11 + 01.01 15 11 + 06 11.01 15 11 + 06 12 +.01 15 16 + 01.01 15 16 + 06 12.01 15 16 + 06 13 +.01 16 03 + 01.01 16 03 + 06 13.01 16 03 + 06 14 +.01 16 08 + 01.01 16 08 + 06 14.01 16 08 + 06 15 +.01 16 13 + 01.01 16 13 + 06 15.01 16 13 + 06 16 +.02 00 01 + 01.02 00 01 + 06 16.02 00 01 + 07 00 +.02 00 06 + 01.02 00 06 + 07 00.02 00 06 + 07 01 +.02 00 11 + 01.02 00 11 + 07 01.02 00 11 + 07 02 +.02 00 16 + 01.02 00 16 + 07 02.02 00 16 + 07 03 +.02 01 04 + 01.02 01 04 + 07 03.02 01 04 + 07 04 +.02 01 09 + 01.02 01 09 + 07 04.02 01 09 + 07 05 +.02 01 14 + 01.02 01 14 + 07 05.02 01 14 + 07 06 +.02 02 02 + 01.02 02 02 + 07 06.02 02 02 + 07 07 +.02 02 07 + 01.02 02 07 + 07 07.02 02 07 + 07 08 +.02 02 11 + 01.02 02 11 + 07 08.02 02 11 + 07 09 +.02 02 16 + 01.02 02 16 + 07 09.02 02 16 + 07 10 +.02 03 04 + 01.02 03 04 + 07 10.02 03 04 + 07 11 +.02 03 09 + 01.02 03 09 + 07 11.02 03 09 + 07 12 +.02 03 14 + 01.02 03 14 + 07 12.02 03 14 + 07 13 +.02 04 02 + 01.02 04 02 + 07 13.02 04 02 + 07 14 +.02 04 07 + 01.02 04 07 + 07 14.02 04 07 + 07 15 +.02 04 12 + 01.02 04 12 + 07 15.02 04 12 + 07 16 +.02 05 00 + 01.02 05 00 + 07 16.02 05 00 + 08 00 +.02 05 05 + 01.02 05 05 + 08 00.02 05 05 + 08 01 +.02 05 10 + 01.02 05 10 + 08 01.02 05 10 + 08 02 +.02 05 14 + 01.02 05 14 + 08 02.02 05 14 + 08 03 +.02 06 02 + 01.02 06 02 + 08 03.02 06 02 + 08 04 +.02 06 07 + 01.02 06 07 + 08 04.02 06 07 + 08 05 +.02 06 12 + 01.02 06 12 + 08 05.02 06 12 + 08 06 +.02 07 00 + 01.02 07 00 + 08 06.02 07 00 + 08 07 +.02 07 05 + 01.02 07 05 + 08 07.02 07 05 + 08 08 +.02 07 10 + 01.02 07 10 + 08 08.02 07 10 + 08 09 +.02 07 15 + 01.02 07 15 + 08 09.02 07 15 + 08 10 +.02 08 03 + 01.02 08 03 + 08 10.02 08 03 + 08 11 +.02 08 08 + 01.02 08 08 + 08 11.02 08 08 + 08 12 +.02 08 13 + 01.02 08 13 + 08 12.02 08 13 + 08 13 +.02 09 01 + 01.02 09 01 + 08 13.02 09 01 + 08 14 +.02 09 05 + 01.02 09 05 + 08 14.02 09 05 + 08 15 +.02 09 10 + 01.02 09 10 + 08 15.02 09 10 + 08 16 +.02 09 15 + 01.02 09 15 + 08 16.02 09 15 + 09 00 +.02 10 03 + 01.02 10 03 + 09 00.02 10 03 + 09 01 +.02 10 08 + 01.02 10 08 + 09 01.02 10 08 + 09 02 +.02 10 13 + 01.02 10 13 + 09 02.02 10 13 + 09 03 +.02 11 01 + 01.02 11 01 + 09 03.02 11 01 + 09 04 +.02 11 06 + 01.02 11 06 + 09 04.02 11 06 + 09 05 +.02 11 11 + 01.02 11 11 + 09 05.02 11 11 + 09 06 +.02 11 16 + 01.02 11 16 + 09 06.02 11 16 + 09 07 +.02 12 04 + 01.02 12 04 + 09 07.02 12 04 + 09 08 +.02 12 08 + 01.02 12 08 + 09 08.02 12 08 + 09 09 +.02 12 13 + 01.02 12 13 + 09 09.02 12 13 + 09 10 +.02 13 01 + 01.02 13 01 + 09 10.02 13 01 + 09 11 +.02 13 06 + 01.02 13 06 + 09 11.02 13 06 + 09 12 +.02 13 11 + 01.02 13 11 + 09 12.02 13 11 + 09 13 +.02 13 16 + 01.02 13 16 + 09 13.02 13 16 + 09 14 +.02 14 04 + 01.02 14 04 + 09 14.02 14 04 + 09 15 +.02 14 09 + 01.02 14 09 + 09 15.02 14 09 + 09 16 +.02 14 14 + 01.02 14 14 + 09 16.02 14 14 + 10 00 +.02 15 02 + 01.02 15 02 + 10 00.02 15 02 + 10 01 +.02 15 07 + 01.02 15 07 + 10 01.02 15 07 + 10 02 +.02 15 12 + 01.02 15 12 + 10 02.02 15 12 + 10 03 +.02 15 16 + 01.02 15 16 + 10 03.02 15 16 + 10 04 +.02 16 04 + 01.02 16 04 + 10 04.02 16 04 + 10 05 +.02 16 09 + 01.02 16 09 + 10 05.02 16 09 + 10 06 +.02 16 14 + 01.02 16 14 + 10 06.02 16 14 + 10 07 +.03 00 02 + 01.03 00 02 + 10 07.03 00 02 + 10 08 +.03 00 07 + 01.03 00 07 + 10 08.03 00 07 + 10 09 +.03 00 12 + 01.03 00 12 + 10 09.03 00 12 + 10 10 +.03 01 00 + 01.03 01 00 + 10 10.03 01 00 + 10 11 +.03 01 05 + 01.03 01 05 + 10 11.03 01 05 + 10 12 +.03 01 10 + 01.03 01 10 + 10 12.03 01 10 + 10 13 +.03 01 15 + 01.03 01 15 + 10 13.03 01 15 + 10 14 +.03 02 02 + 01.03 02 02 + 10 14.03 02 02 + 10 15 +.03 02 07 + 01.03 02 07 + 10 15.03 02 07 + 10 16 +.03 02 12 + 01.03 02 12 + 10 16.03 02 12 + 11 00 +.03 03 00 + 01.03 03 00 + 11 00.03 03 00 + 11 01 +.03 03 05 + 01.03 03 05 + 11 01.03 03 05 + 11 02 +.03 03 10 + 01.03 03 10 + 11 02.03 03 10 + 11 03 +.03 03 15 + 01.03 03 15 + 11 03.03 03 15 + 11 04 +.03 04 03 + 01.03 04 03 + 11 04.03 04 03 + 11 05 +.03 04 08 + 01.03 04 08 + 11 05.03 04 08 + 11 06 +.03 04 13 + 01.03 04 13 + 11 06.03 04 13 + 11 07 +.03 05 01 + 01.03 05 01 + 11 07.03 05 01 + 11 08 +.03 05 06 + 01.03 05 06 + 11 08.03 05 06 + 11 09 +.03 05 10 + 01.03 05 10 + 11 09.03 05 10 + 11 10 +.03 05 15 + 01.03 05 15 + 11 10.03 05 15 + 11 11 +.03 06 03 + 01.03 06 03 + 11 11.03 06 03 + 11 12 +.03 06 08 + 01.03 06 08 + 11 12.03 06 08 + 11 13 +.03 06 13 + 01.03 06 13 + 11 13.03 06 13 + 11 14 +.03 07 01 + 01.03 07 01 + 11 14.03 07 01 + 11 15 +.03 07 06 + 01.03 07 06 + 11 15.03 07 06 + 11 16 +.03 07 11 + 01.03 07 11 + 11 16.03 07 11 + 12 00 +.03 07 16 + 01.03 07 16 + 12 00.03 07 16 + 12 01 +.03 08 04 + 01.03 08 04 + 12 01.03 08 04 + 12 02 +.03 08 09 + 01.03 08 09 + 12 02.03 08 09 + 12 03 +.03 08 13 + 01.03 08 13 + 12 03.03 08 13 + 12 04 +.03 09 01 + 01.03 09 01 + 12 04.03 09 01 + 12 05 +.03 09 06 + 01.03 09 06 + 12 05.03 09 06 + 12 06 +.03 09 11 + 01.03 09 11 + 12 06.03 09 11 + 12 07 +.03 09 16 + 01.03 09 16 + 12 07.03 09 16 + 12 08 +.03 10 04 + 01.03 10 04 + 12 08.03 10 04 + 12 09 +.03 10 09 + 01.03 10 09 + 12 09.03 10 09 + 12 10 +.03 10 14 + 01.03 10 14 + 12 10.03 10 14 + 12 11 +.03 11 02 + 01.03 11 02 + 12 11.03 11 02 + 12 12 +.03 11 07 + 01.03 11 07 + 12 12.03 11 07 + 12 13 +.03 11 12 + 01.03 11 12 + 12 13.03 11 12 + 12 14 +.03 12 00 + 01.03 12 00 + 12 14.03 12 00 + 12 15 +.03 12 04 + 01.03 12 04 + 12 15.03 12 04 + 12 16 +.03 12 09 + 01.03 12 09 + 12 16.03 12 09 + 13 00 +.03 12 14 + 01.03 12 14 + 13 00.03 12 14 + 13 01 +.03 13 02 + 01.03 13 02 + 13 01.03 13 02 + 13 02 +.03 13 07 + 01.03 13 07 + 13 02.03 13 07 + 13 03 +.03 13 12 + 01.03 13 12 + 13 03.03 13 12 + 13 04 +.03 14 00 + 01.03 14 00 + 13 04.03 14 00 + 13 05 +.03 14 05 + 01.03 14 05 + 13 05.03 14 05 + 13 06 +.03 14 10 + 01.03 14 10 + 13 06.03 14 10 + 13 07 +.03 14 15 + 01.03 14 15 + 13 07.03 14 15 + 13 08 +.03 15 03 + 01.03 15 03 + 13 08.03 15 03 + 13 09 +.03 15 07 + 01.03 15 07 + 13 09.03 15 07 + 13 10 +.03 15 12 + 01.03 15 12 + 13 10.03 15 12 + 13 11 +.03 16 00 + 01.03 16 00 + 13 11.03 16 00 + 13 12 +.03 16 05 + 01.03 16 05 + 13 12.03 16 05 + 13 13 +.03 16 10 + 01.03 16 10 + 13 13.03 16 10 + 13 14 +.03 16 15 + 01.03 16 15 + 13 14.03 16 15 + 13 15 +.04 00 03 + 01.04 00 03 + 13 15.04 00 03 + 13 16 +.04 00 08 + 01.04 00 08 + 13 16.04 00 08 + 14 00 +.04 00 13 + 01.04 00 13 + 14 00.04 00 13 + 14 01 +.04 01 01 + 01.04 01 01 + 14 01.04 01 01 + 14 02 +.04 01 06 + 01.04 01 06 + 14 02.04 01 06 + 14 03 +.04 01 11 + 01.04 01 11 + 14 03.04 01 11 + 14 04 +.04 01 15 + 01.04 01 15 + 14 04.04 01 15 + 14 05 +.04 02 03 + 01.04 02 03 + 14 05.04 02 03 + 14 06 +.04 02 08 + 01.04 02 08 + 14 06.04 02 08 + 14 07 +.04 02 13 + 01.04 02 13 + 14 07.04 02 13 + 14 08 +.04 03 01 + 01.04 03 01 + 14 08.04 03 01 + 14 09 +.04 03 06 + 01.04 03 06 + 14 09.04 03 06 + 14 10 +.04 03 11 + 01.04 03 11 + 14 10.04 03 11 + 14 11 +.04 03 16 + 01.04 03 16 + 14 11.04 03 16 + 14 12 +.04 04 04 + 01.04 04 04 + 14 12.04 04 04 + 14 13 +.04 04 09 + 01.04 04 09 + 14 13.04 04 09 + 14 14 +.04 04 14 + 01.04 04 14 + 14 14.04 04 14 + 14 15 +.04 05 01 + 01.04 05 01 + 14 15.04 05 01 + 14 16 +.04 05 06 + 01.04 05 06 + 14 16.04 05 06 + 15 00 +.04 05 11 + 01.04 05 11 + 15 00.04 05 11 + 15 01 +.04 05 16 + 01.04 05 16 + 15 01.04 05 16 + 15 02 +.04 06 04 + 01.04 06 04 + 15 02.04 06 04 + 15 03 +.04 06 09 + 01.04 06 09 + 15 03.04 06 09 + 15 04 +.04 06 14 + 01.04 06 14 + 15 04.04 06 14 + 15 05 +.04 07 02 + 01.04 07 02 + 15 05.04 07 02 + 15 06 +.04 07 07 + 01.04 07 07 + 15 06.04 07 07 + 15 07 +.04 07 12 + 01.04 07 12 + 15 07.04 07 12 + 15 08 +.04 08 00 + 01.04 08 00 + 15 08.04 08 00 + 15 09 +.04 08 05 + 01.04 08 05 + 15 09.04 08 05 + 15 10 +.04 08 09 + 01.04 08 09 + 15 10.04 08 09 + 15 11 +.04 08 14 + 01.04 08 14 + 15 11.04 08 14 + 15 12 +.04 09 02 + 01.04 09 02 + 15 12.04 09 02 + 15 13 +.04 09 07 + 01.04 09 07 + 15 13.04 09 07 + 15 14 +.04 09 12 + 01.04 09 12 + 15 14.04 09 12 + 15 15 +.04 10 00 + 01.04 10 00 + 15 15.04 10 00 + 15 16 +.04 10 05 + 01.04 10 05 + 15 16.04 10 05 + 16 00 +.04 10 10 + 01.04 10 10 + 16 00.04 10 10 + 16 01 +.04 10 15 + 01.04 10 15 + 16 01.04 10 15 + 16 02 +.04 11 03 + 01.04 11 03 + 16 02.04 11 03 + 16 03 +.04 11 08 + 01.04 11 08 + 16 03.04 11 08 + 16 04 +.04 11 12 + 01.04 11 12 + 16 04.04 11 12 + 16 05 +.04 12 00 + 01.04 12 00 + 16 05.04 12 00 + 16 06 +.04 12 05 + 01.04 12 05 + 16 06.04 12 05 + 16 07 +.04 12 10 + 01.04 12 10 + 16 07.04 12 10 + 16 08 +.04 12 15 + 01.04 12 15 + 16 08.04 12 15 + 16 09 +.04 13 03 + 01.04 13 03 + 16 09.04 13 03 + 16 10 +.04 13 08 + 01.04 13 08 + 16 10.04 13 08 + 16 11 +.04 13 13 + 01.04 13 13 + 16 11.04 13 13 + 16 12 +.04 14 01 + 01.04 14 01 + 16 12.04 14 01 + 16 13 +.04 14 06 + 01.04 14 06 + 16 13.04 14 06 + 16 14 +.04 14 11 + 01.04 14 11 + 16 14.04 14 11 + 16 15 +.04 14 16 + 01.04 14 16 + 16 15.04 14 16 + 16 16 +.04 15 03 + 01.04 15 03 + 16 16.04 15 03 + 01 00 00 +.04 15 08 + 01.04 15 08 + 01 00 00.04 15 08 + 05 08 06 00 02 02 07 02 03 11 07 15 16 00 01 11 09 00 14 07 00 02 0\ +3 02 15 04 02 05 05 10 12 03 08 09 16 09 01 14 08 10 09 11 16 02 16 \ +13 05.03 04 11 16 09 16 05 08 14 11 07 07 08 01 15 07 12 10 09 02 07\ + 03 12 12 14 12 05 06 04 12 12 08 11 09 01 diff --git a/aosp/external/toybox/tests/files/bc/script.sh b/aosp/external/toybox/tests/files/bc/script.sh new file mode 100644 index 0000000000000000000000000000000000000000..d279b6a2f090425a831dbd2184ee69bfe4c7779f --- /dev/null +++ b/aosp/external/toybox/tests/files/bc/script.sh @@ -0,0 +1,24 @@ +#! /bin/sh + +if [ "$#" -lt 4 ]; then + echo "usage: script.sh