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