1: #ifndef lint
2: static char sccsid[] = "@(#)pen.c 4.2 (Berkeley) 10/10/85";
3: #endif
4:
5: /*
6: * Speaker's quick and dirty penril hack. STA 4/1/85.
7: */
8: #include "../condevs.h"
9: #ifdef PENRIL
10:
11: penopn(telno, flds, dev)
12: char *flds[], *telno;
13: struct Devices *dev;
14: {
15: int dh;
16: int i, ok = -1;
17: char dcname[20];
18:
19: sprintf(dcname, "/dev/%s", dev->D_line);
20: if (setjmp(Sjbuf)) {
21: DEBUG(1, "timeout penril open\n", "");
22: logent("penril open", "TIMEOUT");
23: if (dh >= 0)
24: close(dh);
25: delock(dev->D_line);
26: return CF_NODEV;
27: }
28: signal(SIGALRM, alarmtr);
29: getnextfd();
30: alarm(10);
31: dh = open(dcname, 2);
32: alarm(0);
33: next_fd = -1;
34: if (dh < 0) {
35: DEBUG(4,"%s\n", errno == 4 ? "no carrier" : "can't open modem");
36: delock(dev->D_line);
37: return errno == 4 ? CF_DIAL : CF_NODEV;
38: }
39:
40: /* modem is open */
41: fixline(dh, dev->D_speed);
42:
43: /* translate - to P and = to W for Penril */
44: DEBUG(4, "calling %s -> ", telno);
45: for (i = 0; i < strlen(telno); ++i) {
46: switch(telno[i]) {
47: case '-': /* delay */
48: telno[i] = 'P';
49: break;
50: case '=': /* await dial tone */
51: telno[i] = 'W';
52: break;
53: case '<':
54: telno[i] = 'P';
55: break;
56: }
57: }
58: DEBUG(4, "%s\n", telno);
59: sleep(1);
60: for(i = 0; i < 5; ++i) { /* make up to 5 tries */
61: slowrite(dh, "\r");/* awake, thou lowly Penril! */
62:
63: DEBUG(4, "wanted %s ", ">");
64: ok = expect(">", dh);
65: DEBUG(4, "got %s\n", ok ? "?" : "that");
66: if (ok != 0)
67: continue;
68: slowrite(dh, "K"); /* "K" (enter number) command */
69: DEBUG(4, "wanted %s ", "NO.: ");
70: ok = expect("NO.: ", dh);
71: DEBUG(4, "got %s\n", ok ? "?" : "that");
72: if (ok == 0)
73: break;
74: }
75:
76: if (ok == 0) {
77: slowrite(dh, telno); /* send telno, send \r */
78: slowrite(dh, "\r");
79: DEBUG(4, "wanted %s ", "OK");
80: ok = expect("OK", dh);
81: DEBUG(4, "got %s\n", ok ? "?" : "that");
82: }
83: if (ok != 0) {
84: if (dh > 2)
85: close(dh);
86: DEBUG(4, "penDial failed\n", "");
87: return CF_DIAL;
88: }
89: else
90: DEBUG(4, "penDial ok\n", "");
91: return dh;
92: }
93:
94: pencls(fd)
95: int fd;
96: {
97: if (fd > 0) {
98: close(fd);
99: sleep(5);
100: delock(devSel);
101: }
102: }
103: #endif PENRIL
Defined functions
Defined variables
sccsid
defined in line
2;
never used