Files
Arquivotheca.SunOS-4.1.4/usr.etc/dbconfig.c
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

100 lines
2.8 KiB
C

#ifndef lint
static char sccsid[] = "@(#)dbconfig.c 1.1 94/10/31 Copyr 1988 Sun Micro";
#endif
/*
* dbconfig- "Configures" the dialbox. This program is responsible for
* opening the designated serial port, setting its baud rate and other options
* accordingly, removing all stream modules already pushed upon it (such as
* ttcompat and ldterm) and pushing the dialbox to vuid stream ("db") on the
* stream. Then it holds the the stream open to maintain the stream
* configuration
*/
#include <stdio.h>
#include <sgtty.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <stropts.h>
#include <sys/conf.h>
#define DEVDIR "/dev/"
#define MAXFNAME 64
main(argc, argv)
int argc;
char **argv;
{
static char devname[MAXFNAME+1] = "/dev/dialbox";
static char streamname[] = "db";
static char exstreamname[FMNAMESZ+1];
int fd_tty;
struct sgttyb sgttyb;
int modem_bits;
extern char *sys_errlist[];
extern int errno;
if (argc < 2) {
syntax_err();
} else {
if (*argv[1] != '/') {
(void)strcpy(devname, DEVDIR);
(void)strncat(devname, argv[1], MAXFNAME - sizeof(DEVDIR));
} else {
(void)strncpy(devname, argv[1], MAXFNAME);
}
/* Daemonize ourself */
switch (fork()) {
case 0:
break;
case -1:
perror("Fork failed");
break;
default:
exit(0); /* OK */
}
(void)printf("dbconfig: configuring \"%s\"\n", devname);
if ((fd_tty = open(devname, O_RDWR)) < 0) {
(void)fprintf(stderr,"dbconfig: Open failed for \"%s\" (%s)\n",
devname, sys_errlist[errno]);
exit(2);
}
(void)ioctl(fd_tty, TIOCGETP, &sgttyb); /* get flags */
sgttyb.sg_flags |= RAW | ANYP; /* Raw, no parity */
sgttyb.sg_flags &= ~(ECHO | CRMOD); /* No echo or CR-LF translations */
sgttyb.sg_ispeed = sgttyb.sg_ospeed = B9600; /* 9600 baud */
(void)ioctl( fd_tty, TIOCSETP, &sgttyb); /* set flags */
/* The following modem control bits are set to provide power */
/* (at least for the signals). DTR is set high, and RTS is Low */
(void)ioctl(fd_tty, TIOCMGET, &modem_bits); /* Get Modem bits */
modem_bits |= TIOCM_DTR; /* Set DTR High */
modem_bits &= ~TIOCM_RTS; /* and RTS Low */
(void)ioctl(fd_tty, TIOCMSET, &modem_bits); /* Set Modem Bits */
while (ioctl(fd_tty, I_LOOK, exstreamname) != -1) {
(void)printf("dbconfig: popping %s\n", exstreamname);
if (ioctl(fd_tty, I_POP, 0) == -1) {
perror("I_POP ioctl failed.\n");
exit(3);
}
}
if (ioctl(fd_tty, I_PUSH, streamname) < 0) {
perror("I_PUSH ioctl failed");
exit(4);
}
(void)printf("dbconfig: %s configured.\n", devname);
pause(); /* now hold it open forever to maintain stream */
}
exit(5); /* NOTREACHED unless interrupted */
}
syntax_err()
{
(void)fprintf(stderr, "Usage: dbconfig serial_device\n");
exit(1);
}