xref: /csrg-svn/usr.bin/uucp/libacu/vent.c (revision 17786)
1*17786Sralph #ifndef lint
2*17786Sralph static char sccsid[] = "@(#)vent.c	4.1 (Berkeley) 01/22/85";
3*17786Sralph #endif
4*17786Sralph 
5*17786Sralph #include "../condevs.h"
6*17786Sralph #ifdef	VENTEL
7*17786Sralph 
8*17786Sralph ventopn(telno, flds, dev)
9*17786Sralph char *flds[], *telno;
10*17786Sralph struct Devices *dev;
11*17786Sralph {
12*17786Sralph 	int	dh;
13*17786Sralph 	int	i, ok = -1;
14*17786Sralph 	char dcname[20];
15*17786Sralph 
16*17786Sralph 	sprintf(dcname, "/dev/%s", dev->D_line);
17*17786Sralph 	if (setjmp(Sjbuf)) {
18*17786Sralph 		DEBUG(1, "timeout ventel open\n", "");
19*17786Sralph 		logent("ventel open", "TIMEOUT");
20*17786Sralph 		if (dh >= 0)
21*17786Sralph 			close(dh);
22*17786Sralph 		delock(dev->D_line);
23*17786Sralph 		return CF_NODEV;
24*17786Sralph 	}
25*17786Sralph 	signal(SIGALRM, alarmtr);
26*17786Sralph 	getnextfd();
27*17786Sralph 	alarm(10);
28*17786Sralph 	dh = open(dcname, 2);
29*17786Sralph 	next_fd = -1;
30*17786Sralph 	if (dh < 0) {
31*17786Sralph 		DEBUG(4,"%s\n", errno == 4 ? "no carrier" : "can't open modem");
32*17786Sralph 		delock(dev->D_line);
33*17786Sralph 		return errno == 4 ? CF_DIAL : CF_NODEV;
34*17786Sralph 	}
35*17786Sralph 
36*17786Sralph 	/* modem is open */
37*17786Sralph 	fixline(dh, dev->D_speed);
38*17786Sralph 
39*17786Sralph 	/* translate - to % and = to & for VenTel */
40*17786Sralph 	DEBUG(4, "calling %s -> ", telno);
41*17786Sralph 	for (i = 0; i < strlen(telno); ++i) {
42*17786Sralph 		switch(telno[i]) {
43*17786Sralph 		case '-':	/* delay */
44*17786Sralph 			telno[i] = '%';
45*17786Sralph 			break;
46*17786Sralph 		case '=':	/* await dial tone */
47*17786Sralph 			telno[i] = '&';
48*17786Sralph 			break;
49*17786Sralph 		case '<':
50*17786Sralph 			telno[i] = '%';
51*17786Sralph 			break;
52*17786Sralph 		}
53*17786Sralph 	}
54*17786Sralph 	DEBUG(4, "%s\n", telno);
55*17786Sralph 	sleep(1);
56*17786Sralph 	for(i = 0; i < 5; ++i) {	/* make up to 5 tries */
57*17786Sralph 		slowrite(dh, "\r\r");/* awake, thou lowly VenTel! */
58*17786Sralph 
59*17786Sralph 		DEBUG(4, "wanted %s ", "$");
60*17786Sralph 		ok = expect("$", dh);
61*17786Sralph 		DEBUG(4, "got %s\n", ok ? "?" : "that");
62*17786Sralph 		if (ok != 0)
63*17786Sralph 			continue;
64*17786Sralph 		slowrite(dh, "K");	/* "K" (enter number) command */
65*17786Sralph 		DEBUG(4, "wanted %s ", "DIAL: ");
66*17786Sralph 		ok = expect("DIAL: ", dh);
67*17786Sralph 		DEBUG(4, "got %s\n", ok ? "?" : "that");
68*17786Sralph 		if (ok == 0)
69*17786Sralph 			break;
70*17786Sralph 	}
71*17786Sralph 
72*17786Sralph 	if (ok == 0) {
73*17786Sralph 		slowrite(dh, telno); /* send telno, send \r */
74*17786Sralph 		slowrite(dh, "\r");
75*17786Sralph 		DEBUG(4, "wanted %s ", "ONLINE");
76*17786Sralph 		ok = expect("ONLINE!", dh);
77*17786Sralph 		DEBUG(4, "got %s\n", ok ? "?" : "that");
78*17786Sralph 	}
79*17786Sralph 	if (ok != 0) {
80*17786Sralph 		if (dh > 2)
81*17786Sralph 			close(dh);
82*17786Sralph 		DEBUG(4, "venDial failed\n", "");
83*17786Sralph 		return CF_DIAL;
84*17786Sralph 	}
85*17786Sralph 	else
86*17786Sralph 		DEBUG(4, "venDial ok\n", "");
87*17786Sralph 	return dh;
88*17786Sralph }
89*17786Sralph 
90*17786Sralph ventcls(fd)
91*17786Sralph int fd;
92*17786Sralph {
93*17786Sralph 	if (fd > 0) {
94*17786Sralph 		close(fd);
95*17786Sralph 		sleep(5);
96*17786Sralph 		delock(devSel);
97*17786Sralph 	}
98*17786Sralph }
99*17786Sralph #endif VENTEL
100