diff options
-rw-r--r-- | coreutils/stty.c | 91 |
1 files changed, 22 insertions, 69 deletions
diff --git a/coreutils/stty.c b/coreutils/stty.c index 05d91d8c1..2682e969d 100644 --- a/coreutils/stty.c +++ b/coreutils/stty.c @@ -623,7 +623,8 @@ static int recover_mode(const char *arg, struct termios *mode) return 1; } -static void display_recoverable(const struct termios *mode) +static void display_recoverable(const struct termios *mode, + const int ATTRIBUTE_UNUSED dummy) { int i; printf("%lx:%lx:%lx:%lx", @@ -650,7 +651,7 @@ static void display_speed(const struct termios *mode, int fancy) wrapf(fmt_str, tty_baud_to_value(ispeed), tty_baud_to_value(ospeed)); } -static void display_all(const struct termios *mode) +static void do_display(const struct termios *mode, const int all) { int i; tcflag_t *bitsp; @@ -658,7 +659,8 @@ static void display_all(const struct termios *mode) int prev_type = control; display_speed(mode, 1); - display_window_size(1); + if (all) + display_window_size(1); #ifdef HAVE_C_LINE wrapf("line = %d;\n", mode->c_line); #else @@ -690,16 +692,22 @@ static void display_all(const struct termios *mode) if (mode_info[i].flags & OMIT) continue; if (mode_info[i].type != prev_type) { - wrapf("\n"); + /* wrapf("\n"); */ + if (current_col) wrapf("\n"); prev_type = mode_info[i].type; } bitsp = mode_type_flag(mode_info[i].type, mode); mask = mode_info[i].mask ? mode_info[i].mask : mode_info[i].bits; - if ((*bitsp & mask) == mode_info[i].bits) - wrapf("%s", mode_info[i].name); - else if (mode_info[i].flags & REV) - wrapf("-%s", mode_info[i].name); + if ((*bitsp & mask) == mode_info[i].bits) { + if (all || (mode_info[i].flags & SANE_UNSET)) + wrapf("%s", mode_info[i].name); + } else { + if ((all && mode_info[i].flags & REV) || + (!all && + (mode_info[i].flags & (SANE_SET | REV)) == (SANE_SET | REV))) + wrapf("-%s", mode_info[i].name); + } } if (current_col) wrapf("\n"); } @@ -892,63 +900,6 @@ static void set_mode(const struct mode_info *info, int reversed, } } -static void display_changed(const struct termios *mode) -{ - int i; - tcflag_t *bitsp; - unsigned long mask; - int prev_type = control; - - display_speed(mode, 1); -#ifdef HAVE_C_LINE - wrapf("line = %d;\n", mode->c_line); -#else - wrapf("\n"); -#endif - - for (i = 0; control_info[i].name != stty_min; ++i) { - if (mode->c_cc[control_info[i].offset] == control_info[i].saneval) - continue; - /* If swtch is the same as susp, don't print both */ -#if VSWTCH == VSUSP - if (control_info[i].name == stty_swtch) - continue; -#endif - /* If eof uses the same slot as min, only print whichever applies */ -#if VEOF == VMIN - if ((mode->c_lflag & ICANON) == 0 - && (control_info[i].name == stty_eof - || control_info[i].name == stty_eol)) continue; -#endif - wrapf("%s = %s;", control_info[i].name, - visible(mode->c_cc[control_info[i].offset])); - } - if ((mode->c_lflag & ICANON) == 0) - wrapf("min = %d; time = %d;", mode->c_cc[VMIN], mode->c_cc[VTIME]); - - if (current_col) wrapf("\n"); - - for (i = 0; i < NUM_mode_info; ++i) { - if (mode_info[i].flags & OMIT) - continue; - if (mode_info[i].type != prev_type) { - if (current_col) wrapf("\n"); - prev_type = mode_info[i].type; - } - - bitsp = mode_type_flag(mode_info[i].type, mode); - mask = mode_info[i].mask ? mode_info[i].mask : mode_info[i].bits; - if ((*bitsp & mask) == mode_info[i].bits) { - if (mode_info[i].flags & SANE_UNSET) { - wrapf("%s", mode_info[i].name); - } - } else if ((mode_info[i].flags & (SANE_SET | REV)) == (SANE_SET | REV)) { - wrapf("-%s", mode_info[i].name); - } - } - if (current_col) wrapf("\n"); -} - static void set_control_char_or_die(const struct control_info *info, const char *arg, struct termios *mode) { @@ -977,11 +928,12 @@ static void set_control_char_or_die(const struct control_info *info, int stty_main(int argc, char **argv) { struct termios mode; - void (*output_func)(const struct termios *); + void (*output_func)(const struct termios *, const int); const char *file_name = NULL; int k; + int display_all = 0; option_mask32 = STTY_noargs; - output_func = display_changed; + output_func = do_display; /* First pass: only parse/verify command line params */ k = 0; @@ -1007,7 +959,8 @@ int stty_main(int argc, char **argv) switch (arg[i]) { case 'a': option_mask32 |= STTY_verbose_output; - output_func = display_all; + output_func = do_display; + display_all = 1; break; case 'g': option_mask32 |= STTY_recoverable_output; @@ -1125,7 +1078,7 @@ invalid_argument: if (option_mask32 & (STTY_verbose_output | STTY_recoverable_output | STTY_noargs)) { get_terminal_width_height(STDOUT_FILENO, &max_col, NULL); - output_func(&mode); + output_func(&mode, display_all); return EXIT_SUCCESS; } |