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