Replace sleep calls for 'wake up'.
[unix-history] / usr / src / usr.bin / tip / aculib / biz22.c
... / ...
CommitLineData
1#ifndef lint
2static char sccsid[] = "@(#)biz22.c 4.4 (Berkeley) %G%";
3#endif
4
5#include "tip.h"
6
7#define DISCONNECT_CMD "\20\04" /* disconnection string */
8
9static int sigALRM();
10static int timeout = 0;
11static 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 */
18static int
19biz_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
71biz22w_dialer(num, acu)
72 char *num, *acu;
73{
74
75 return (biz_dialer(num, "W"));
76}
77
78biz22f_dialer(num, acu)
79 char *num, *acu;
80{
81
82 return (biz_dialer(num, "V"));
83}
84
85biz22_disconnect()
86{
87 int rw = 2;
88
89 write(FD, DISCONNECT_CMD, 4);
90 sleep(2);
91 ioctl(FD, TIOCFLUSH, &rw);
92}
93
94biz22_abort()
95{
96
97 write(FD, "\02", 1);
98}
99
100static int
101sigALRM()
102{
103
104 timeout = 1;
105 longjmp(timeoutbuf, 1);
106}
107
108static int
109cmd(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
130static int
131detect(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}