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