xref: /csrg-svn/usr.bin/uucp/libacu/vent.c (revision 25158)
117786Sralph #ifndef lint
2*25158Sbloom static char sccsid[] = "@(#)vent.c	4.2 (Berkeley) 10/10/85";
317786Sralph #endif
417786Sralph 
517786Sralph #include "../condevs.h"
617786Sralph #ifdef	VENTEL
717786Sralph 
817786Sralph ventopn(telno, flds, dev)
917786Sralph char *flds[], *telno;
1017786Sralph struct Devices *dev;
1117786Sralph {
1217786Sralph 	int	dh;
1317786Sralph 	int	i, ok = -1;
1417786Sralph 	char dcname[20];
1517786Sralph 
1617786Sralph 	sprintf(dcname, "/dev/%s", dev->D_line);
1717786Sralph 	if (setjmp(Sjbuf)) {
1817786Sralph 		DEBUG(1, "timeout ventel open\n", "");
1917786Sralph 		logent("ventel open", "TIMEOUT");
2017786Sralph 		if (dh >= 0)
2117786Sralph 			close(dh);
2217786Sralph 		delock(dev->D_line);
2317786Sralph 		return CF_NODEV;
2417786Sralph 	}
2517786Sralph 	signal(SIGALRM, alarmtr);
2617786Sralph 	getnextfd();
2717786Sralph 	alarm(10);
2817786Sralph 	dh = open(dcname, 2);
2917786Sralph 	next_fd = -1;
30*25158Sbloom 	alarm(0);
3117786Sralph 	if (dh < 0) {
3217786Sralph 		DEBUG(4,"%s\n", errno == 4 ? "no carrier" : "can't open modem");
3317786Sralph 		delock(dev->D_line);
3417786Sralph 		return errno == 4 ? CF_DIAL : CF_NODEV;
3517786Sralph 	}
3617786Sralph 
3717786Sralph 	/* modem is open */
3817786Sralph 	fixline(dh, dev->D_speed);
3917786Sralph 
4017786Sralph 	/* translate - to % and = to & for VenTel */
4117786Sralph 	DEBUG(4, "calling %s -> ", telno);
4217786Sralph 	for (i = 0; i < strlen(telno); ++i) {
4317786Sralph 		switch(telno[i]) {
4417786Sralph 		case '-':	/* delay */
4517786Sralph 			telno[i] = '%';
4617786Sralph 			break;
4717786Sralph 		case '=':	/* await dial tone */
4817786Sralph 			telno[i] = '&';
4917786Sralph 			break;
5017786Sralph 		case '<':
5117786Sralph 			telno[i] = '%';
5217786Sralph 			break;
5317786Sralph 		}
5417786Sralph 	}
5517786Sralph 	DEBUG(4, "%s\n", telno);
5617786Sralph 	sleep(1);
5717786Sralph 	for(i = 0; i < 5; ++i) {	/* make up to 5 tries */
5817786Sralph 		slowrite(dh, "\r\r");/* awake, thou lowly VenTel! */
5917786Sralph 
6017786Sralph 		DEBUG(4, "wanted %s ", "$");
6117786Sralph 		ok = expect("$", dh);
6217786Sralph 		DEBUG(4, "got %s\n", ok ? "?" : "that");
6317786Sralph 		if (ok != 0)
6417786Sralph 			continue;
6517786Sralph 		slowrite(dh, "K");	/* "K" (enter number) command */
6617786Sralph 		DEBUG(4, "wanted %s ", "DIAL: ");
6717786Sralph 		ok = expect("DIAL: ", dh);
6817786Sralph 		DEBUG(4, "got %s\n", ok ? "?" : "that");
6917786Sralph 		if (ok == 0)
7017786Sralph 			break;
7117786Sralph 	}
7217786Sralph 
7317786Sralph 	if (ok == 0) {
7417786Sralph 		slowrite(dh, telno); /* send telno, send \r */
7517786Sralph 		slowrite(dh, "\r");
7617786Sralph 		DEBUG(4, "wanted %s ", "ONLINE");
7717786Sralph 		ok = expect("ONLINE!", dh);
7817786Sralph 		DEBUG(4, "got %s\n", ok ? "?" : "that");
7917786Sralph 	}
8017786Sralph 	if (ok != 0) {
8117786Sralph 		if (dh > 2)
8217786Sralph 			close(dh);
8317786Sralph 		DEBUG(4, "venDial failed\n", "");
8417786Sralph 		return CF_DIAL;
8517786Sralph 	}
8617786Sralph 	else
8717786Sralph 		DEBUG(4, "venDial ok\n", "");
8817786Sralph 	return dh;
8917786Sralph }
9017786Sralph 
9117786Sralph ventcls(fd)
9217786Sralph int fd;
9317786Sralph {
9417786Sralph 	if (fd > 0) {
9517786Sralph 		close(fd);
9617786Sralph 		sleep(5);
9717786Sralph 		delock(devSel);
9817786Sralph 	}
9917786Sralph }
10017786Sralph #endif VENTEL
101