|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)vent.c 4.3 (Berkeley) 2/24/88";
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.