ttysize: new applet. +200 bytes

This commit is contained in:
Denis Vlasenko
2007-08-02 22:23:47 +00:00
parent 1caca34aa6
commit c01af95c39
5 changed files with 56 additions and 2 deletions

View File

@@ -366,6 +366,14 @@ config TIME
When the command finishes, time writes a message to standard output
giving timing statistics about this program run.
config TTYSIZE
bool "ttysize"
default n
help
A replacement for "stty size". Unlike stty, can report only width,
only height, or both, in any order. It also does not complain on error,
but returns default 80x24. Usage in shell scripts: width=`ttysize w`.
config WATCHDOG
bool "watchdog"
default n

View File

@@ -27,4 +27,5 @@ lib-$(CONFIG_SETSID) += setsid.o
lib-$(CONFIG_STRINGS) += strings.o
lib-$(CONFIG_TASKSET) += taskset.o
lib-$(CONFIG_TIME) += time.o
lib-$(CONFIG_TTYSIZE) += ttysize.o
lib-$(CONFIG_WATCHDOG) += watchdog.o

39
miscutils/ttysize.c Normal file
View File

@@ -0,0 +1,39 @@
/*
* Replacement for "stty size", which is awkward for shell script use.
* - Allows to request width, height, or both, in any order.
* - Does not complain on error, but returns default 80x24.
* - Size: less than 200 bytes
*/
#include "libbb.h"
int ttysize_main(int argc, char **argv);
int ttysize_main(int argc, char **argv)
{
unsigned w,h;
struct winsize wsz;
w = 80;
h = 24;
if (!ioctl(0, TIOCGWINSZ, &wsz)) {
w = wsz.ws_col;
h = wsz.ws_row;
}
if (argc == 1) {
printf("%u %u", w, h);
} else {
const char *fmt, *arg;
fmt = "%u %u" + 3; /* "%u" */
while ((arg = *++argv) != NULL) {
char c = arg[0];
if (c == 'w')
printf(fmt, w);
if (c == 'h')
printf(fmt, h);
fmt = "%u %u" + 2; /* " %u" */
}
}
putchar('\n');
return 0;
}