Interdata_v6/usr/source/wgong/attach.c
/*
* attach/detach ttyid [...]
*
* Turn terminals on and off by changing ttys file and signalling init
*/
char tfile[] "/etc/ttys";
char tbuf[512];
int len;
main(argc, argv)
char **argv;
{
register char *p;
register set, fd, tty;
char *find();
if (argc <= 1)
error("Usage: %s tty-id ...\n", *argv);
if ((fd = open(tfile, 2)) < 0)
error("Can't open %s\n", tfile);
if ((len = read(fd, tbuf, sizeof tbuf)) == sizeof tbuf)
error("?? %s too big ??", tfile);
if (len <= 0)
error("Can't read %s", tfile);
/* Determine which name command was called by */
for (p = *argv; *p; p++)
;
while (p >= *argv && *p != '/')
p--;
set = p[1]=='d'? '0' : '1';
while (--argc) {
if ((*++argv)[1] != '\0')
error("Use single-character tty-ids");
tty = (*argv)[0];
if ((p = find(tty)) == 0)
error("tty%c not found", tty);
*p = set;
}
seek(fd, 0, 0);
if (write(fd, tbuf, len) != len)
error("Can't write %s", tfile);
if (kill(1, 1) < 0)
error("Can't signal init process");
}
/*
* Find entry for given tty
*/
char *
find(tty)
{
register char *p;
for (p = tbuf; p < &tbuf[len]; ) {
if (p[1] == tty)
return(p);
while (*p++ != '\n')
;
}
return(0);
}
error(s, x)
{
printf(s, x);
putchar('\n');
exit(1);
}