BSD 4_3_Tahoe release
[unix-history] / usr / src / usr.bin / uucp / aculib / vent.c
CommitLineData
ab497f3d 1#ifndef lint
ca67e7b4 2static char sccsid[] = "@(#)vent.c 4.3 (Berkeley) 2/24/88";
ab497f3d
RC
3#endif
4
5#include "../condevs.h"
ab497f3d
RC
6
7ventopn(telno, flds, dev)
8char *flds[], *telno;
9struct 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;
c0c09c91 29 alarm(0);
ab497f3d
RC
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
90ventcls(fd)
91int fd;
92{
93 if (fd > 0) {
94 close(fd);
95 sleep(5);
96 delock(devSel);
97 }
98}