still more fixes from rick@seismo
[unix-history] / usr / src / usr.bin / uucp / libacu / vad.c
CommitLineData
1429dd8a 1#ifndef lint
1070b5bc 2static char sccsid[] = "@(#)vad.c 4.2 (Berkeley) %G%";
1429dd8a
RC
3#endif
4
5#include "../condevs.h"
6#ifdef VADIC
7
8/*
9 * vadopn: establish dial-out connection through a Racal-Vadic 3450.
10 * Returns descriptor open to tty for reading and writing.
11 * Negative values (-1...-7) denote errors in connmsg.
12 * Be sure to disconnect tty when done, via HUPCL or stty 0.
13 */
14
15vadopn(telno, flds, dev)
16char *telno;
17char *flds[];
18struct Devices *dev;
19{
20 int dh = -1;
21 int i, ok, er = 0, delay;
22 extern errno;
23 char dcname[20];
24
25 sprintf(dcname, "/dev/%s", dev->D_line);
26 if (setjmp(Sjbuf)) {
27 DEBUG(1, "timeout vadic open\n", "");
28 logent("vadic open", "TIMEOUT");
29 if (dh >= 0)
30 close(dh);
31 delock(dev->D_line);
32 return CF_NODEV;
33 }
34 signal(SIGALRM, alarmtr);
35 getnextfd();
36 alarm(10);
37 dh = open(dcname, 2);
38 alarm(0);
39
40 /* modem is open */
41 next_fd = -1;
42 if (dh < 0) {
43 delock(dev->D_line);
44 return CF_NODEV;
45 }
46 fixline(dh, dev->D_speed);
47
48 DEBUG(4, "calling %s -> ", telno);
49 if (dochat(dev, flds, dh)) {
50 logent(dcname, "CHAT FAILED");
51 close(dh);
52 return CF_DIAL;
53 }
54 delay = 0;
55 for (i = 0; i < strlen(telno); ++i) {
56 switch(telno[i]) {
57 case '=': /* await dial tone */
58 case '-':
59 case ',':
60 case '<':
61 case 'K':
62 telno[i] = 'K';
63 delay += 5;
64 break;
65 }
66 }
67 DEBUG(4, "%s\n", telno);
68 for(i = 0; i < 5; ++i) { /* make 5 tries */
69 /* wake up Vadic */
1070b5bc
JB
70 write(dh, "\005", 1);
71 sleep(1);
72 write(dh, "\r", 1);
1429dd8a 73 DEBUG(4, "wanted * ", CNULL);
1070b5bc 74 ok = expect("*~5", dh);
1429dd8a
RC
75 DEBUG(4, "got %s\n", ok ? "?" : "that");
76 if (ok != 0)
77 continue;
78
79 write(dh, "D\r", 2); /* "D" (enter number) command */
80 DEBUG(4, "wanted NUMBER?\\r\\n ", CNULL);
1070b5bc 81 ok = expect("NUMBER?\r\n~5", dh);
1429dd8a
RC
82 DEBUG(4, "got %s\n", ok ? "?" : "that");
83 if (ok != 0)
84 continue;
85
86 /* send telno, send \r */
87 write(dh, telno, strlen(telno));
88 sleep(1);
89 write(dh, "\r", 1);
90 DEBUG(4, "wanted %s ", telno);
91 ok = expect(telno, dh);
92 if (ok == 0)
93 ok = expect("\r\n", dh);
94 DEBUG(4, "got %s\n", ok ? "?" : "that");
95 if (ok != 0)
96 continue;
97
98 write(dh, "\r", 1); /* confirm number */
99 DEBUG(4, "wanted DIALING: ", CNULL);
100 ok = expect("DIALING: ", dh);
101 DEBUG(4, "got %s\n", ok ? "?" : "that");
102 if (ok == 0)
103 break;
104 }
105
106 if (ok == 0) {
107 sleep(10 + delay); /* give vadic some time */
108 DEBUG(4, "wanted ON LINE\\r\\n ", CNULL);
109 ok = expect("ON LINE\r\n", dh);
110 DEBUG(4, "got %s\n", ok ? "?" : "that");
111 }
112
113 if (ok != 0) {
114 if (dh > 2)
115 close(dh);
116 DEBUG(4, "vadDial failed\n", CNULL);
117 delock(dev->D_line);
118 return CF_DIAL;
119 }
120 DEBUG(4, "vadic ok\n", CNULL);
121 return dh;
122}
123
1070b5bc
JB
124vadcls(fd)
125{
1429dd8a
RC
126 if (fd > 0) {
127 close(fd);
128 sleep(5);
129 delock(devSel);
130 }
131}
132#endif VADIC