Some formatting updates (ran the code through indent)
-Erik
This commit is contained in:
241
more.c
241
more.c
@@ -1,3 +1,4 @@
|
||||
/* vi: set sw=4 ts=4: */
|
||||
/*
|
||||
* Mini more implementation for busybox
|
||||
*
|
||||
@@ -45,19 +46,20 @@ static const char more_usage[] = "more [file ...]\n";
|
||||
# define stty(fd,argp) tcsetattr(fd,TCSANOW,argp)
|
||||
#endif
|
||||
|
||||
FILE *cin;
|
||||
struct termios initial_settings, new_settings;
|
||||
FILE *cin;
|
||||
struct termios initial_settings, new_settings;
|
||||
|
||||
void gotsig(int sig) {
|
||||
stty(fileno(cin), &initial_settings);
|
||||
fprintf(stdout, "\n");
|
||||
exit( TRUE);
|
||||
}
|
||||
void gotsig(int sig)
|
||||
{
|
||||
stty(fileno(cin), &initial_settings);
|
||||
fprintf(stdout, "\n");
|
||||
exit(TRUE);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#define TERMINAL_WIDTH 79 /* not 80 in case terminal has linefold bug */
|
||||
#define TERMINAL_WIDTH 79 /* not 80 in case terminal has linefold bug */
|
||||
#define TERMINAL_HEIGHT 24
|
||||
|
||||
|
||||
@@ -72,118 +74,121 @@ static int terminal_width = 0, terminal_height = 0;
|
||||
|
||||
extern int more_main(int argc, char **argv)
|
||||
{
|
||||
int c, lines=0, input=0;
|
||||
int next_page=0;
|
||||
struct stat st;
|
||||
FILE *file;
|
||||
int c, lines = 0, input = 0;
|
||||
int next_page = 0;
|
||||
struct stat st;
|
||||
FILE *file;
|
||||
|
||||
#ifdef BB_FEATURE_AUTOWIDTH
|
||||
struct winsize win = {0,0};
|
||||
struct winsize win = { 0, 0 };
|
||||
#endif
|
||||
|
||||
argc--;
|
||||
argv++;
|
||||
|
||||
if ( argc > 0 && (strcmp(*argv,"--help")==0 || strcmp(*argv,"-h")==0) ) {
|
||||
usage (more_usage);
|
||||
}
|
||||
do {
|
||||
if (argc==0) {
|
||||
file = stdin;
|
||||
}
|
||||
else
|
||||
file = fopen(*argv, "r");
|
||||
|
||||
if (file == NULL) {
|
||||
perror(*argv);
|
||||
exit(FALSE);
|
||||
}
|
||||
fstat(fileno(file), &st);
|
||||
|
||||
#ifdef BB_FEATURE_USE_TERMIOS
|
||||
cin = fopen("/dev/tty", "r");
|
||||
if (!cin)
|
||||
cin = fopen("/dev/console", "r");
|
||||
#ifdef USE_OLD_TERMIO
|
||||
ioctl(fileno(cin),TCGETA,&initial_settings);
|
||||
#else
|
||||
tcgetattr(fileno(cin),&initial_settings);
|
||||
#endif
|
||||
new_settings = initial_settings;
|
||||
new_settings.c_lflag &= ~ICANON;
|
||||
new_settings.c_lflag &= ~ECHO;
|
||||
stty(fileno(cin), &new_settings);
|
||||
|
||||
#ifdef BB_FEATURE_AUTOWIDTH
|
||||
ioctl(fileno(stdout), TIOCGWINSZ, &win);
|
||||
if (win.ws_row > 4)
|
||||
terminal_height = win.ws_row - 2;
|
||||
if (win.ws_col > 0)
|
||||
terminal_width = win.ws_col - 1;
|
||||
#endif
|
||||
|
||||
(void) signal(SIGINT, gotsig);
|
||||
(void) signal(SIGQUIT, gotsig);
|
||||
(void) signal(SIGTERM, gotsig);
|
||||
|
||||
#endif
|
||||
while ((c = getc(file)) != EOF) {
|
||||
if ( next_page ) {
|
||||
int len=0;
|
||||
next_page = 0;
|
||||
lines=0;
|
||||
len = fprintf(stdout, "--More-- ");
|
||||
if (file != stdin) {
|
||||
len += fprintf(stdout, "(%d%% of %ld bytes)",
|
||||
(int) (100*( (double) ftell(file) / (double) st.st_size )),
|
||||
st.st_size);
|
||||
}
|
||||
len += fprintf(stdout, "%s",
|
||||
#ifdef BB_FEATURE_USE_TERMIOS
|
||||
""
|
||||
#else
|
||||
"\n"
|
||||
#endif
|
||||
);
|
||||
|
||||
fflush(stdout);
|
||||
input = getc( cin);
|
||||
|
||||
#ifdef BB_FEATURE_USE_TERMIOS
|
||||
/* Erase the "More" message */
|
||||
while(--len >= 0)
|
||||
putc('\b', stdout);
|
||||
while(++len <= terminal_width)
|
||||
putc(' ', stdout);
|
||||
while(--len >= 0)
|
||||
putc('\b', stdout);
|
||||
fflush(stdout);
|
||||
#endif
|
||||
|
||||
}
|
||||
if (c == '\n' ) {
|
||||
switch(input) {
|
||||
case 'q':
|
||||
goto end;
|
||||
case '\n':
|
||||
/* increment by just one line if we are at
|
||||
* the end of this line*/
|
||||
next_page = 1;
|
||||
break;
|
||||
}
|
||||
if ( ++lines == terminal_height )
|
||||
next_page = 1;
|
||||
}
|
||||
putc(c, stdout);
|
||||
}
|
||||
fclose(file);
|
||||
fflush(stdout);
|
||||
|
||||
argc--;
|
||||
argv++;
|
||||
} while (--argc > 0);
|
||||
end:
|
||||
#ifdef BB_FEATURE_USE_TERMIOS
|
||||
gotsig(0);
|
||||
#endif
|
||||
exit(TRUE);
|
||||
}
|
||||
|
||||
if (argc > 0
|
||||
&& (strcmp(*argv, "--help") == 0 || strcmp(*argv, "-h") == 0)) {
|
||||
usage(more_usage);
|
||||
}
|
||||
do {
|
||||
if (argc == 0) {
|
||||
file = stdin;
|
||||
} else
|
||||
file = fopen(*argv, "r");
|
||||
|
||||
if (file == NULL) {
|
||||
perror(*argv);
|
||||
exit(FALSE);
|
||||
}
|
||||
fstat(fileno(file), &st);
|
||||
|
||||
#ifdef BB_FEATURE_USE_TERMIOS
|
||||
cin = fopen("/dev/tty", "r");
|
||||
if (!cin)
|
||||
cin = fopen("/dev/console", "r");
|
||||
#ifdef USE_OLD_TERMIO
|
||||
ioctl(fileno(cin), TCGETA, &initial_settings);
|
||||
#else
|
||||
tcgetattr(fileno(cin), &initial_settings);
|
||||
#endif
|
||||
new_settings = initial_settings;
|
||||
new_settings.c_lflag &= ~ICANON;
|
||||
new_settings.c_lflag &= ~ECHO;
|
||||
stty(fileno(cin), &new_settings);
|
||||
|
||||
#ifdef BB_FEATURE_AUTOWIDTH
|
||||
ioctl(fileno(stdout), TIOCGWINSZ, &win);
|
||||
if (win.ws_row > 4)
|
||||
terminal_height = win.ws_row - 2;
|
||||
if (win.ws_col > 0)
|
||||
terminal_width = win.ws_col - 1;
|
||||
#endif
|
||||
|
||||
(void) signal(SIGINT, gotsig);
|
||||
(void) signal(SIGQUIT, gotsig);
|
||||
(void) signal(SIGTERM, gotsig);
|
||||
|
||||
#endif
|
||||
while ((c = getc(file)) != EOF) {
|
||||
if (next_page) {
|
||||
int len = 0;
|
||||
|
||||
next_page = 0;
|
||||
lines = 0;
|
||||
len = fprintf(stdout, "--More-- ");
|
||||
if (file != stdin) {
|
||||
len += fprintf(stdout, "(%d%% of %ld bytes)",
|
||||
(int) (100 *
|
||||
((double) ftell(file) /
|
||||
(double) st.st_size)),
|
||||
st.st_size);
|
||||
}
|
||||
len += fprintf(stdout, "%s",
|
||||
#ifdef BB_FEATURE_USE_TERMIOS
|
||||
""
|
||||
#else
|
||||
"\n"
|
||||
#endif
|
||||
);
|
||||
|
||||
fflush(stdout);
|
||||
input = getc(cin);
|
||||
|
||||
#ifdef BB_FEATURE_USE_TERMIOS
|
||||
/* Erase the "More" message */
|
||||
while (--len >= 0)
|
||||
putc('\b', stdout);
|
||||
while (++len <= terminal_width)
|
||||
putc(' ', stdout);
|
||||
while (--len >= 0)
|
||||
putc('\b', stdout);
|
||||
fflush(stdout);
|
||||
#endif
|
||||
|
||||
}
|
||||
if (c == '\n') {
|
||||
switch (input) {
|
||||
case 'q':
|
||||
goto end;
|
||||
case '\n':
|
||||
/* increment by just one line if we are at
|
||||
* the end of this line*/
|
||||
next_page = 1;
|
||||
break;
|
||||
}
|
||||
if (++lines == terminal_height)
|
||||
next_page = 1;
|
||||
}
|
||||
putc(c, stdout);
|
||||
}
|
||||
fclose(file);
|
||||
fflush(stdout);
|
||||
|
||||
argv++;
|
||||
} while (--argc > 0);
|
||||
end:
|
||||
#ifdef BB_FEATURE_USE_TERMIOS
|
||||
gotsig(0);
|
||||
#endif
|
||||
exit(TRUE);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user