|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)va212.c 4.2 (Berkeley) 6/23/85";
3: #endif
4:
5: #include "../condevs.h"
6:
7: #ifdef VA212
8: va212opn(telno, flds, dev)
9: char *telno;
10: char *flds[];
11: struct Devices *dev;
12: {
13: int dh = -1;
14: int i, ok, er = 0, delay;
15: extern errno;
16: char dcname[20];
17:
18: sprintf(dcname, "/dev/%s", dev->D_line);
19: if (setjmp(Sjbuf)) {
20: DEBUG(1, "timeout va212 open\n", 0);
21: logent("va212 open", "TIMEOUT");
22: if (dh >= 0)
23: close(dh);
24: delock(dev->D_line);
25: return CF_NODEV;
26: }
27: signal(SIGALRM, alarmtr);
28: getnextfd();
29: alarm(10);
30: dh = open(dcname, 2);
31: alarm(0);
32:
33: /* modem is open */
34: next_fd = -1;
35: if (dh < 0) {
36: DEBUG (4, errno == 4 ? "%s: no carrier\n" : "%s: can't open\n",
37: dcname);
38: delock(dev->D_line);
39: return errno == 4 ? CF_DIAL : CF_NODEV;
40: }
41: fixline(dh, dev->D_speed);
42:
43: /* translate - to K for Vadic */
44: DEBUG(4, "calling %s -> ", telno);
45: delay = 0;
46: for (i = 0; i < strlen(telno); ++i) {
47: switch(telno[i]) {
48: case '=': /* await dial tone */
49: case '-': /* delay */
50: case '<':
51: telno[i] = 'K';
52: delay += 5;
53: break;
54: }
55: }
56: DEBUG(4, "%s\n", telno);
57: for(i = 0; i < TRYCALLS; ++i) { /* make TRYCALLS tries */
58: /* wake up Vadic */
59: sendthem("\005\\d", dh);
60: DEBUG(4, "wanted * ", CNULL);
61: ok = expect("*", dh);
62: DEBUG(4, "got %s\n", ok ? "?" : "that");
63: if (ok != 0)
64: continue;
65:
66: sendthem("D\\d", dh); /* "D" (enter number) command */
67: DEBUG(4, "wanted NUMBER? ", CNULL);
68: ok = expect("NUMBER?", dh);
69: if (ok == 0)
70: ok = expect("\n", dh);
71: DEBUG(4, "got %s\n", ok ? "?" : "that");
72: if (ok != 0)
73: continue;
74:
75: /* send telno, send \r */
76: sendthem(telno, dh);
77: DEBUG(4, "wanted %s ", telno);
78: ok = expect(telno, dh);
79: if (ok == 0)
80: ok = expect("\n", dh);
81: DEBUG(4, "got %s\n", ok ? "?" : "that");
82: if (ok != 0)
83: continue;
84:
85: sendthem("", dh); /* confirm number */
86: DEBUG(4, "wanted %s ", "DIALING...");
87: ok = expect("DIALING...", dh);
88: if (ok == 0) {
89: ok = expect("\n", dh);
90: DEBUG(4, "wanted ANSWER TONE", CNULL);
91: ok = expect("ANSWER TONE", dh);
92: if (ok == 0)
93: ok = expect("\n", dh);
94: }
95: DEBUG(4, "got %s\n", ok ? "?" : "that");
96: if (ok == 0)
97: break;
98: }
99:
100: if (ok == 0) {
101: DEBUG(4, "wanted ON LINE\\r\\n ", CNULL);
102: ok = expect("ON LINE\r\n", dh);
103: DEBUG(4, "got %s\n", ok ? "?" : "that");
104: }
105:
106: if (ok != 0) {
107: sendthem("I\\d", dh); /* back to idle */
108: if (dh > 2)
109: close(dh);
110: DEBUG(4, "vadDial failed\n", CNULL);
111: delock(dev->D_line);
112: return CF_DIAL;
113: }
114: DEBUG(4, "va212 ok\n", 0);
115: return dh;
116: }
117:
118: va212cls(fd)
119: {
120: if (fd > 0) {
121: close(fd);
122: sleep(5);
123: delock(devSel);
124: }
125: }
126: #endif VA212
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.