xref: /csrg-svn/usr.bin/tip/aculib/df.c (revision 22416)
1 /*
2  * Copyright (c) 1983 Regents of the University of California.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  */
6 
7 #ifndef lint
8 static char sccsid[] = "@(#)df.c	5.1 (Berkeley) 06/06/85";
9 #endif not lint
10 
11 /*
12  * Dial the DF02-AC or DF03-AC
13  */
14 
15 #include "tip.h"
16 
17 static jmp_buf Sjbuf;
18 static timeout();
19 
20 df02_dialer(num, acu)
21 	char *num, *acu;
22 {
23 
24 	return (df_dialer(num, acu, 0));
25 }
26 
27 df03_dialer(num, acu)
28 	char *num, *acu;
29 {
30 
31 	return (df_dialer(num, acu, 1));
32 }
33 
34 df_dialer(num, acu, df03)
35 	char *num, *acu;
36 	int df03;
37 {
38 	register int f = FD;
39 	struct sgttyb buf;
40 	int speed = 0, rw = 2;
41 	char c = '\0';
42 
43 	ioctl(f, TIOCHPCL, 0);		/* make sure it hangs up when done */
44 	if (setjmp(Sjbuf)) {
45 		printf("connection timed out\r\n");
46 		df_disconnect();
47 		return (0);
48 	}
49 	if (boolean(value(VERBOSE)))
50 		printf("\ndialing...");
51 	fflush(stdout);
52 #ifdef TIOCMSET
53 	if (df03) {
54 		int st = TIOCM_ST;	/* secondary Transmit flag */
55 
56 		ioctl(f, TIOCGETP, &buf);
57 		if (buf.sg_ospeed != B1200) {	/* must dial at 1200 baud */
58 			speed = buf.sg_ospeed;
59 			buf.sg_ospeed = buf.sg_ispeed = B1200;
60 			ioctl(f, TIOCSETP, &buf);
61 			ioctl(f, TIOCMBIC, &st); /* clear ST for 300 baud */
62 		} else
63 			ioctl(f, TIOCMBIS, &st); /* set ST for 1200 baud */
64 	}
65 #endif
66 	signal(SIGALRM, timeout);
67 	alarm(5 * strlen(num) + 10);
68 	ioctl(f, TIOCFLUSH, &rw);
69 	write(f, "\001", 1);
70 	sleep(1);
71 	write(f, "\002", 1);
72 	write(f, num, strlen(num));
73 	read(f, &c, 1);
74 #ifdef TIOCMSET
75 	if (df03 && speed) {
76 		buf.sg_ispeed = buf.sg_ospeed = speed;
77 		ioctl(f, TIOCSETP, &buf);
78 	}
79 #endif
80 	return (c == 'A');
81 }
82 
83 df_disconnect()
84 {
85 	int rw = 2;
86 
87 	write(FD, "\001", 1);
88 	sleep(1);
89 	ioctl(FD, TIOCFLUSH, &rw);
90 }
91 
92 
93 df_abort()
94 {
95 
96 	df_disconnect();
97 }
98 
99 
100 static
101 timeout()
102 {
103 
104 	longjmp(Sjbuf, 1);
105 }
106