|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)biz22.c 4.4 (Berkeley) 6/25/83";
3: #endif
4:
5: #include "tip.h"
6:
7: #define DISCONNECT_CMD "\20\04" /* disconnection string */
8:
9: static int sigALRM();
10: static int timeout = 0;
11: static jmp_buf timeoutbuf;
12:
13: /*
14: * Dial up on a BIZCOMP Model 1022 with either
15: * tone dialing (mod = "V")
16: * pulse dialing (mod = "W")
17: */
18: static int
19: biz_dialer(num, mod)
20: char *num, *mod;
21: {
22: register int connected = 0;
23: char cbuf[40];
24:
25: if (boolean(value(VERBOSE)))
26: printf("\nstarting call...");
27: /*
28: * Disable auto-answer and configure for tone/pulse
29: * dialing
30: */
31: if (cmd("\02K\r")) {
32: printf("can't initialize bizcomp...");
33: return (0);
34: }
35: strcpy(cbuf, "\02.\r");
36: cbuf[1] = *mod;
37: if (cmd(cbuf)) {
38: printf("can't set dialing mode...");
39: return (0);
40: }
41: strcpy(cbuf, "\02D");
42: strcat(cbuf, num);
43: strcat(cbuf, "\r");
44: write(FD, cbuf, strlen(cbuf));
45: if (!detect("7\r")) {
46: printf("can't get dial tone...");
47: return (0);
48: }
49: if (boolean(value(VERBOSE)))
50: printf("ringing...");
51: /*
52: * The reply from the BIZCOMP should be:
53: * 2 \r or 7 \r failure
54: * 1 \r success
55: */
56: connected = detect("1\r");
57: #ifdef ACULOG
58: if (timeout) {
59: char line[80];
60:
61: sprintf(line, "%d second dial timeout",
62: number(value(DIALTIMEOUT)));
63: logent(value(HOST), num, "biz1022", line);
64: }
65: #endif
66: if (timeout)
67: biz22_disconnect(); /* insurance */
68: return (connected);
69: }
70:
71: biz22w_dialer(num, acu)
72: char *num, *acu;
73: {
74:
75: return (biz_dialer(num, "W"));
76: }
77:
78: biz22f_dialer(num, acu)
79: char *num, *acu;
80: {
81:
82: return (biz_dialer(num, "V"));
83: }
84:
85: biz22_disconnect()
86: {
87: int rw = 2;
88:
89: write(FD, DISCONNECT_CMD, 4);
90: sleep(2);
91: ioctl(FD, TIOCFLUSH, &rw);
92: }
93:
94: biz22_abort()
95: {
96:
97: write(FD, "\02", 1);
98: }
99:
100: static int
101: sigALRM()
102: {
103:
104: timeout = 1;
105: longjmp(timeoutbuf, 1);
106: }
107:
108: static int
109: cmd(s)
110: register char *s;
111: {
112: char c;
113: int (*f)();
114:
115: write(FD, s, strlen(s));
116: f = signal(SIGALRM, sigALRM);
117: if (setjmp(timeoutbuf)) {
118: biz22_abort();
119: signal(SIGALRM, f);
120: return (1);
121: }
122: alarm(number(value(DIALTIMEOUT)));
123: read(FD, &c, 1);
124: alarm(0);
125: signal(SIGALRM, f);
126: c &= 0177;
127: return (c != '\r');
128: }
129:
130: static int
131: detect(s)
132: register char *s;
133: {
134: char c;
135: int (*f)();
136:
137: f = signal(SIGALRM, sigALRM);
138: timeout = 0;
139: while (*s) {
140: if (setjmp(timeoutbuf)) {
141: biz22_abort();
142: break;
143: }
144: alarm(number(value(DIALTIMEOUT)));
145: read(FD, &c, 1);
146: alarm(0);
147: c &= 0177;
148: if (c != *s++)
149: return (0);
150: }
151: signal(SIGALRM, f);
152: return (timeout == 0);
153: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.