svn commit: trunk/busybox: console-tools miscutils util-linux

vda at busybox.net vda at busybox.net
Sat Mar 10 16:32:15 UTC 2007


Author: vda
Date: 2007-03-10 08:32:14 -0800 (Sat, 10 Mar 2007)
New Revision: 18061

Log:
more: do not mess with "/dev/console" (!);
    fill whole 1st screen (was "screen sans one line");
    fall back to cat if redirected or no ctty
less: fall back to cat if no ctty (was exiting)
resize: cosmetics


Modified:
   trunk/busybox/console-tools/resize.c
   trunk/busybox/miscutils/less.c
   trunk/busybox/util-linux/more.c


Changeset:
Modified: trunk/busybox/console-tools/resize.c
===================================================================
--- trunk/busybox/console-tools/resize.c	2007-03-10 10:29:08 UTC (rev 18060)
+++ trunk/busybox/console-tools/resize.c	2007-03-10 16:32:14 UTC (rev 18061)
@@ -9,6 +9,8 @@
 /* no options, no getopt */
 #include "busybox.h"
 
+#define ESC "\033"
+
 int resize_main(int argc, char **argv);
 int resize_main(int argc, char **argv)
 {
@@ -27,10 +29,10 @@
 	 * get_cursor_pos [6n
 	 * restore_cursor_pos 8
 	 */
-	printf("\0337\033[r\033[999;999H\033[6n");
-	scanf("\033[%hu;%huR", &w.ws_row, &w.ws_col);
+	printf(ESC"7" ESC"[r" ESC"[999;999H" ESC"[6n");
+	scanf(ESC"[%hu;%huR", &w.ws_row, &w.ws_col);
 	ret = ioctl(STDOUT_FILENO, TIOCSWINSZ, &w);
-	printf("\0338");
+	printf(ESC"8");
 	tcsetattr(STDOUT_FILENO, TCSANOW, &old);
 	if (ENABLE_FEATURE_RESIZE_PRINT)
 		printf("COLUMNS=%d;LINES=%d;export COLUMNS LINES;\n",

Modified: trunk/busybox/miscutils/less.c
===================================================================
--- trunk/busybox/miscutils/less.c	2007-03-10 10:29:08 UTC (rev 18060)
+++ trunk/busybox/miscutils/less.c	2007-03-10 16:32:14 UTC (rev 18061)
@@ -1251,6 +1251,9 @@
 	 * is not a tty and turns into cat. This makes sense. */
 	if (!isatty(STDOUT_FILENO))
 		return bb_cat(argv);
+	kbd_fd = open(CURRENT_TTY, O_RDONLY);
+	if (kbd_fd < 0)
+		return bb_cat(argv);
 
 	if (!num_files) {
 		if (isatty(STDIN_FILENO)) {
@@ -1261,8 +1264,6 @@
 	} else
 		filename = xstrdup(files[0]);
 
-	kbd_fd = xopen(CURRENT_TTY, O_RDONLY);
-
 	get_terminal_width_height(kbd_fd, &width, &max_displayed_line);
 	/* 20: two tabstops + 4 */
 	if (width < 20 || max_displayed_line < 3)

Modified: trunk/busybox/util-linux/more.c
===================================================================
--- trunk/busybox/util-linux/more.c	2007-03-10 10:29:08 UTC (rev 18060)
+++ trunk/busybox/util-linux/more.c	2007-03-10 16:32:14 UTC (rev 18061)
@@ -50,52 +50,46 @@
 	int terminal_width;
 	int terminal_height;
 
-	argc--;
 	argv++;
+	/* Another popular pager, most, detects when stdout
+	 * is not a tty and turns into cat. This makes sense. */
+	if (!isatty(STDOUT_FILENO))
+		return bb_cat(argv);
+	cin = fopen(CURRENT_TTY, "r");
+	if (!cin)
+		return bb_cat(argv);
 
-	cin = stdin;
-	/* use input from terminal unless we do "more >outfile" */
-	if (isatty(STDOUT_FILENO)) {
-		cin = fopen(CURRENT_TTY, "r");
-		/* Huh? why not just fail if "/dev/tty" isn't available?
-		 * If user has no ctty, it's his own problem */
-		if (!cin)
-			cin = xfopen(DEV_CONSOLE, "r");
-		please_display_more_prompt = 2;
 #if ENABLE_FEATURE_USE_TERMIOS
-		cin_fileno = fileno(cin);
-		getTermSettings(cin_fileno, &initial_settings);
-		new_settings = initial_settings;
-		new_settings.c_lflag &= ~ICANON;
-		new_settings.c_lflag &= ~ECHO;
-		new_settings.c_cc[VMIN] = 1;
-		new_settings.c_cc[VTIME] = 0;
-		setTermSettings(cin_fileno, &new_settings);
-		atexit(set_tty_to_initial_mode);
-		signal(SIGINT, gotsig);
-		signal(SIGQUIT, gotsig);
-		signal(SIGTERM, gotsig);
+	cin_fileno = fileno(cin);
+	getTermSettings(cin_fileno, &initial_settings);
+	new_settings = initial_settings;
+	new_settings.c_lflag &= ~ICANON;
+	new_settings.c_lflag &= ~ECHO;
+	new_settings.c_cc[VMIN] = 1;
+	new_settings.c_cc[VTIME] = 0;
+	setTermSettings(cin_fileno, &new_settings);
+	atexit(set_tty_to_initial_mode);
+	signal(SIGINT, gotsig);
+	signal(SIGQUIT, gotsig);
+	signal(SIGTERM, gotsig);
 #endif
-	}
+	please_display_more_prompt = 2;
 
 	do {
 		file = stdin;
-		if (argc != 0) {
+		if (*argv) {
 			file = fopen_or_warn(*argv, "r");
 			if (!file)
-				goto loop;
+				continue;
 		}
-
 		st.st_size = 0;
 		fstat(fileno(file), &st);
 
 		please_display_more_prompt &= ~1;
-
+		/* never returns w, h <= 1 */
 		get_terminal_width_height(fileno(cin), &terminal_width, &terminal_height);
-		if (terminal_height > 4)
-			terminal_height -= 2;
-		if (terminal_width > 0)
-			terminal_width -= 1;
+		terminal_width -= 1;
+		terminal_height -= 1;
 
 		len = 0;
 		lines = 0;
@@ -104,7 +98,7 @@
 
 			if ((please_display_more_prompt & 3) == 3) {
 				len = printf("--More-- ");
-				if (file != stdin && st.st_size > 0) {
+				if (/*file != stdin &&*/ st.st_size > 0) {
 					len += printf("(%d%% of %"OFF_FMT"d bytes)",
 						(int) (ftello(file)*100 / st.st_size),
 						st.st_size);
@@ -123,7 +117,9 @@
 				printf("\r%*s\r", len, "");
 				len = 0;
 				lines = 0;
-				page_height = terminal_height;
+				/* Bottom line on page will become top line
+				 * after one page forward. Thus -1: */
+				page_height = terminal_height - 1;
 				please_display_more_prompt &= ~1;
 
 				if (input == 'q')
@@ -151,12 +147,9 @@
 					int quot, rem;
 					quot = len / terminal_width;
 					rem  = len - (quot * terminal_width);
-					if (quot) {
-						if (rem)
-							page_height -= quot;
-						else
-							page_height -= (quot - 1);
-					}
+					page_height -= (quot - 1);
+					if (rem)
+						page_height--;
 				}
 				if (++lines >= page_height) {
 					please_display_more_prompt |= 1;
@@ -168,13 +161,13 @@
 			 * key other than a return is hit, scroll by one page
 			 */
 			putc(c, stdout);
+			/* My small mind cannot fathom tabs, backspaces,
+			 * and UTF-8 */
 			len++;
 		}
 		fclose(file);
 		fflush(stdout);
- loop:
-		argv++;
-	} while (--argc > 0);
+	} while (*argv && *++argv);
  end:
 	return 0;
 }




More information about the busybox-cvs mailing list