stty: report bad args; add 'size';
This commit is contained in:
parent
a33b67c5a1
commit
c4e0562753
49
apps/stty.c
49
apps/stty.c
@ -42,7 +42,7 @@ static void print_(int flags, const char * lbl, int val, int def) {
|
|||||||
#define print_oflag(lbl,val,def) print_(t.c_oflag, lbl, val, def)
|
#define print_oflag(lbl,val,def) print_(t.c_oflag, lbl, val, def)
|
||||||
#define print_lflag(lbl,val,def) print_(t.c_lflag, lbl, val, def)
|
#define print_lflag(lbl,val,def) print_(t.c_lflag, lbl, val, def)
|
||||||
|
|
||||||
static void set_char_(struct termios *t, const char * lbl, int val, const char * cmp, const char * arg, int * i) {
|
static int set_char_(struct termios *t, const char * lbl, int val, const char * cmp, const char * arg, int * i) {
|
||||||
if (!strcmp(cmp, lbl)) {
|
if (!strcmp(cmp, lbl)) {
|
||||||
if (!arg) {
|
if (!arg) {
|
||||||
fprintf(stderr, "%s: expected argument\n", lbl);
|
fprintf(stderr, "%s: expected argument\n", lbl);
|
||||||
@ -65,37 +65,46 @@ static void set_char_(struct termios *t, const char * lbl, int val, const char *
|
|||||||
t->c_cc[val] = v;
|
t->c_cc[val] = v;
|
||||||
}
|
}
|
||||||
(*i)++;
|
(*i)++;
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define set_char(lbl,val) set_char_(&t, lbl, val, argv[i], argv[i+1], &i)
|
#define set_char(lbl,val) if (set_char_(&t, lbl, val, argv[i], argv[i+1], &i)) { i += 2; continue; }
|
||||||
|
|
||||||
static void setunset_flag(tcflag_t * flag, const char * lbl, int val, const char * cmp) {
|
static int setunset_flag(tcflag_t * flag, const char * lbl, int val, const char * cmp) {
|
||||||
if (*cmp == '-') {
|
if (*cmp == '-') {
|
||||||
if (!strcmp(cmp+1, lbl)) {
|
if (!strcmp(cmp+1, lbl)) {
|
||||||
(*flag) = (*flag) & (~val);
|
(*flag) = (*flag) & (~val);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!strcmp(cmp, lbl)) {
|
if (!strcmp(cmp, lbl)) {
|
||||||
(*flag) = (*flag) | (val);
|
(*flag) = (*flag) | (val);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define set_cflag(lbl,val) setunset_flag(&(t.c_cflag), lbl, val, argv[i])
|
#define set_cflag(lbl,val) if (setunset_flag(&(t.c_cflag), lbl, val, argv[i])) { i++; continue; }
|
||||||
#define set_iflag(lbl,val) setunset_flag(&(t.c_iflag), lbl, val, argv[i])
|
#define set_iflag(lbl,val) if (setunset_flag(&(t.c_iflag), lbl, val, argv[i])) { i++; continue; }
|
||||||
#define set_oflag(lbl,val) setunset_flag(&(t.c_oflag), lbl, val, argv[i])
|
#define set_oflag(lbl,val) if (setunset_flag(&(t.c_oflag), lbl, val, argv[i])) { i++; continue; }
|
||||||
#define set_lflag(lbl,val) setunset_flag(&(t.c_lflag), lbl, val, argv[i])
|
#define set_lflag(lbl,val) if (setunset_flag(&(t.c_lflag), lbl, val, argv[i])) { i++; continue; }
|
||||||
|
|
||||||
static void set_toggle_(tcflag_t * flag, const char * lbl, int base, int val, const char * cmp) {
|
static int set_toggle_(tcflag_t * flag, const char * lbl, int base, int val, const char * cmp) {
|
||||||
if (!strcmp(cmp, lbl)) {
|
if (!strcmp(cmp, lbl)) {
|
||||||
(*flag) = (*flag) & ~(base);
|
(*flag) = (*flag) & ~(base);
|
||||||
(*flag) = (*flag) | (val);
|
(*flag) = (*flag) | (val);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define set_ctoggle(lbl,base,val) set_toggle_(&(t.c_cflag), lbl, base, val, argv[i])
|
#define set_ctoggle(lbl,base,val) if (set_toggle_(&(t.c_cflag), lbl, base, val, argv[i])) { i++; continue; }
|
||||||
#define set_otoggle(lbl,base,val) set_toggle_(&(t.c_oflag), lbl, base, val, argv[i])
|
#define set_otoggle(lbl,base,val) if (set_toggle_(&(t.c_oflag), lbl, base, val, argv[i])) { i++; continue; }
|
||||||
|
|
||||||
static int show_settings(int all) {
|
static int show_settings(int all) {
|
||||||
/* Size */
|
/* Size */
|
||||||
@ -215,6 +224,12 @@ static int show_settings(int all) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void show_size(void) {
|
||||||
|
struct winsize w;
|
||||||
|
ioctl(STDERR_FILENO, TIOCGWINSZ, &w);
|
||||||
|
fprintf(stdout, "%d %d\n", w.ws_col, w.ws_row);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char * argv[]) {
|
int main(int argc, char * argv[]) {
|
||||||
|
|
||||||
int i = 1;
|
int i = 1;
|
||||||
@ -251,6 +266,16 @@ int main(int argc, char * argv[]) {
|
|||||||
t.c_cc[VTIME] = 0;
|
t.c_cc[VTIME] = 0;
|
||||||
t.c_cc[VLNEXT] = 22; /* ^V */
|
t.c_cc[VLNEXT] = 22; /* ^V */
|
||||||
t.c_cc[VWERASE] = 23; /* ^W */
|
t.c_cc[VWERASE] = 23; /* ^W */
|
||||||
|
|
||||||
|
i++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strcmp(argv[i], "size")) {
|
||||||
|
show_size();
|
||||||
|
|
||||||
|
i++;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
set_char("eof", VEOF);
|
set_char("eof", VEOF);
|
||||||
@ -332,10 +357,10 @@ int main(int argc, char * argv[]) {
|
|||||||
set_lflag("noflsh", NOFLSH);
|
set_lflag("noflsh", NOFLSH);
|
||||||
set_lflag("tostop", TOSTOP);
|
set_lflag("tostop", TOSTOP);
|
||||||
|
|
||||||
i++;
|
fprintf(stderr, "%s: invalid argument '%s'\n", argv[0], argv[i]);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
tcsetattr(STDERR_FILENO, TCSAFLUSH, &t);
|
tcsetattr(STDERR_FILENO, TCSAFLUSH, &t);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user