diff options
author | ache <ache@FreeBSD.org> | 2000-04-30 18:06:04 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 2000-04-30 18:06:04 +0000 |
commit | c057d3263abfd9ae651c2bdc9bb6e002bbc3e7c2 (patch) | |
tree | 2bb70331f488f2b2ea97f203d8e035b4e07ad776 /sbin/comcontrol | |
parent | 718d9c4df2cd3cbd6ba4bc22ebeaa64950ea7ab9 (diff) | |
download | FreeBSD-src-c057d3263abfd9ae651c2bdc9bb6e002bbc3e7c2.zip FreeBSD-src-c057d3263abfd9ae651c2bdc9bb6e002bbc3e7c2.tar.gz |
Allow "-" for working with STDIN
Allow printing of each option separately when keyword specified without a
number
Diffstat (limited to 'sbin/comcontrol')
-rw-r--r-- | sbin/comcontrol/comcontrol.8 | 19 | ||||
-rw-r--r-- | sbin/comcontrol/comcontrol.c | 47 |
2 files changed, 50 insertions, 16 deletions
diff --git a/sbin/comcontrol/comcontrol.8 b/sbin/comcontrol/comcontrol.8 index 4b12b6e..84ef5b5 100644 --- a/sbin/comcontrol/comcontrol.8 +++ b/sbin/comcontrol/comcontrol.8 @@ -4,22 +4,26 @@ .Os FreeBSD .Sh NAME .Nm comcontrol -.Nd control an sio device. +.Nd control an special tty device. .Sh SYNOPSIS .Nm comcontrol -.Ar sio_special_device -.Op options +.Ar special_device | - +.Op dtrwait Op number +.Op drainwait Op number .Sh DESCRIPTION .Nm Comcontrol is used to examine and modify some of the special characteristics -of the specified sio device. -If no arguments other than the device are specified, +of the specified tty device. +If no arguments other than the device (or "-" for stdin) +are specified, it prints the settings of all controllable characteristics. This usage requires only read access on the device. Only the superuser can change the settings. .Pp The following options are available: .Bl -tag -width indent +.It Cm dtrwait +Print current DTR wait time. .It Cm dtrwait Ar number Set the time to wait after dropping DTR to the given number. @@ -27,11 +31,14 @@ The units are hundredths of a second. The default is 300 hundredths, i.e., 3 seconds. This option needed mainly to set proper recover time after modem reset. +.It Cm drainwait +Print current output drain timeout. .It Cm drainwait Ar number Set the time to wait for output drain to the given number. The units are seconds. -The default is 0, i.e. wait forever. +The default is 5 minutes, 0 means +waiting forever. This option needed mainly to specify upper limit of minutes to prevent modem hanging. .El diff --git a/sbin/comcontrol/comcontrol.c b/sbin/comcontrol/comcontrol.c index 671551e..7de2225 100644 --- a/sbin/comcontrol/comcontrol.c +++ b/sbin/comcontrol/comcontrol.c @@ -44,7 +44,7 @@ static void usage() { fprintf(stderr, - "usage: comcontrol <filename> [dtrwait <n>] [drainwait <n>]\n"); + "usage: comcontrol <filename|-> [dtrwait [<n>]] [drainwait [<n>]]\n"); exit(1); } @@ -54,14 +54,20 @@ main(int argc, char *argv[]) int fd; int res = 0; int dtrwait = -1, drainwait = -1; + int temp; + int output = 0; if (argc < 2) usage(); - fd = open(argv[1], O_RDONLY|O_NONBLOCK, 0); - if (fd < 0) { - warn("couldn't open file %s", argv[1]); - return 1; + if (strcmp(argv[1], "-") == 0) + fd = STDIN_FILENO; + else { + fd = open(argv[1], O_RDONLY|O_NONBLOCK, 0); + if (fd < 0) { + warn("couldn't open file %s", argv[1]); + return 1; + } } if (argc == 2) { @@ -73,21 +79,40 @@ main(int argc, char *argv[]) res = 1; warn("TIOCGDRAINWAIT"); } - printf("dtrwait %d drainwait %d\n", dtrwait, drainwait); + printf("dtrwait %d drainwait %d ", dtrwait, drainwait); + output = 1; } else { while (argv[2] != NULL) { if (!strcmp(argv[2],"dtrwait")) { + if (argv[3] == NULL || !isdigit(argv[3][0])) { + if (ioctl(fd, TIOCMGDTRWAIT, &temp) < 0) { + res = 1; + temp = -1; + warn("TIOCMGDTRWAIT"); + } + printf("dtrwait %d ", temp); + output = 1; + argv++; + continue; + } if (dtrwait >= 0) usage(); - if (argv[3] == NULL || !isdigit(argv[3][0])) - usage(); dtrwait = atoi(argv[3]); argv += 2; } else if (!strcmp(argv[2],"drainwait")) { + if (argv[3] == NULL || !isdigit(argv[3][0])) { + if (ioctl(fd, TIOCGDRAINWAIT, &temp) < 0) { + res = 1; + temp = -1; + warn("TIOCGDRAINWAIT"); + } + printf("drainwait %d ", temp); + argv++; + output = 1; + continue; + } if (drainwait >= 0) usage(); - if (argv[3] == NULL || !isdigit(argv[3][0])) - usage(); drainwait = atoi(argv[3]); argv += 2; } else @@ -108,5 +133,7 @@ main(int argc, char *argv[]) } close(fd); + if (output) + printf("\n"); return res; } |