aboutsummaryrefslogtreecommitdiff
path: root/sbin/comcontrol
diff options
context:
space:
mode:
authorAndrey A. Chernov <ache@FreeBSD.org>2000-04-30 18:06:04 +0000
committerAndrey A. Chernov <ache@FreeBSD.org>2000-04-30 18:06:04 +0000
commit85a23112fdf24643c7df2afc9a0f4b19e95c9515 (patch)
tree7dfcf8dada97807db44d12412eaaf95ef54cf7f7 /sbin/comcontrol
parent43175e5e19255612f2b3a1ba868bada979443bd5 (diff)
downloadsrc-85a23112fdf24643c7df2afc9a0f4b19e95c9515.tar.gz
src-85a23112fdf24643c7df2afc9a0f4b19e95c9515.zip
Allow "-" for working with STDIN
Allow printing of each option separately when keyword specified without a number
Notes
Notes: svn path=/head/; revision=59791
Diffstat (limited to 'sbin/comcontrol')
-rw-r--r--sbin/comcontrol/comcontrol.819
-rw-r--r--sbin/comcontrol/comcontrol.c47
2 files changed, 50 insertions, 16 deletions
diff --git a/sbin/comcontrol/comcontrol.8 b/sbin/comcontrol/comcontrol.8
index 4b12b6e0be0c..84ef5b5817c3 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 671551e07d60..7de222513b28 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;
}