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[] = "@(#)dn11.c 5.1 (Berkeley) 4/30/85";
9: #endif not lint
10:
11: /*
12: * Routines for dialing up on DN-11
13: */
14: #include "tip.h"
15:
16: int dn_abort(), alarmtr();
17: static jmp_buf jmpbuf;
18: static int child = -1, dn;
19:
20: dn_dialer(num, acu)
21: char *num, *acu;
22: {
23: extern errno;
24: char *p, *q, phone[40];
25: int lt, nw, connected = 1;
26: register int timelim;
27:
28: if (boolean(value(VERBOSE)))
29: printf("\nstarting call...");
30: if ((dn = open(acu, 1)) < 0) {
31: if (errno == EBUSY)
32: printf("line busy...");
33: else
34: printf("acu open error...");
35: return (0);
36: }
37: if (setjmp(jmpbuf)) {
38: kill(child, SIGKILL);
39: close(dn);
40: return (0);
41: }
42: signal(SIGALRM, alarmtr);
43: timelim = 5 * strlen(num);
44: alarm(timelim < 30 ? 30 : timelim);
45: if ((child = fork()) == 0) {
46: /*
47: * ignore this stuff for aborts
48: */
49: signal(SIGALRM, SIG_IGN);
50: signal(SIGINT, SIG_IGN);
51: signal(SIGQUIT, SIG_IGN);
52: sleep(2);
53: nw = write(dn, num, lt = strlen(num));
54: exit(nw != lt);
55: }
56: /*
57: * open line - will return on carrier
58: */
59: if ((FD = open(DV, 2)) < 0) {
60: if (errno == EIO)
61: printf("lost carrier...");
62: else
63: printf("dialup line open failed...");
64: alarm(0);
65: kill(child, SIGKILL);
66: close(dn);
67: return (0);
68: }
69: alarm(0);
70: ioctl(dn, TIOCHPCL, 0);
71: signal(SIGALRM, SIG_DFL);
72: while ((nw = wait(<)) != child && nw != -1)
73: ;
74: fflush(stdout);
75: close(dn);
76: if (lt != 0) {
77: close(FD);
78: return (0);
79: }
80: return (1);
81: }
82:
83: alarmtr()
84: {
85:
86: alarm(0);
87: longjmp(jmpbuf, 1);
88: }
89:
90: /*
91: * Insurance, for some reason we don't seem to be
92: * hanging up...
93: */
94: dn_disconnect()
95: {
96:
97: sleep(2);
98: if (FD > 0)
99: ioctl(FD, TIOCCDTR, 0);
100: close(FD);
101: }
102:
103: dn_abort()
104: {
105:
106: sleep(2);
107: if (child > 0)
108: kill(child, SIGKILL);
109: if (dn > 0)
110: close(dn);
111: if (FD > 0)
112: ioctl(FD, TIOCCDTR, 0);
113: close(FD);
114: }
Defined functions
Defined variables
child
defined in line
18; used 6 times
sccsid
defined in line
8;
never used