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