122416Sdist /* 235492Sbostic * Copyright (c) 1983 The Regents of the University of California. 335492Sbostic * All rights reserved. 435492Sbostic * 5*42770Sbostic * %sccs.include.redist.c% 622416Sdist */ 722416Sdist 813278Ssam #ifndef lint 9*42770Sbostic static char sccsid[] = "@(#)df.c 5.3 (Berkeley) 06/01/90"; 1035492Sbostic #endif /* not lint */ 1113278Ssam 123690Sroot /* 134480Ssam * Dial the DF02-AC or DF03-AC 143690Sroot */ 153690Sroot 163690Sroot #include "tip.h" 173690Sroot 1813278Ssam static jmp_buf Sjbuf; 193690Sroot static timeout(); 203690Sroot 214480Ssam df02_dialer(num, acu) 224962Ssam char *num, *acu; 233690Sroot { 2413278Ssam 255134Ssam return (df_dialer(num, acu, 0)); 264480Ssam } 274480Ssam 284480Ssam df03_dialer(num, acu) 294962Ssam char *num, *acu; 304480Ssam { 3113278Ssam 325134Ssam return (df_dialer(num, acu, 1)); 334480Ssam } 344480Ssam 354480Ssam df_dialer(num, acu, df03) 364962Ssam char *num, *acu; 374962Ssam int df03; 384480Ssam { 393690Sroot register int f = FD; 404480Ssam struct sgttyb buf; 4113278Ssam int speed = 0, rw = 2; 4213278Ssam char c = '\0'; 433690Sroot 443690Sroot ioctl(f, TIOCHPCL, 0); /* make sure it hangs up when done */ 453690Sroot if (setjmp(Sjbuf)) { 463690Sroot printf("connection timed out\r\n"); 473690Sroot df_disconnect(); 485134Ssam return (0); 493690Sroot } 503690Sroot if (boolean(value(VERBOSE))) 513690Sroot printf("\ndialing..."); 523690Sroot fflush(stdout); 534480Ssam #ifdef TIOCMSET 544480Ssam if (df03) { 5513278Ssam int st = TIOCM_ST; /* secondary Transmit flag */ 5613278Ssam 574480Ssam ioctl(f, TIOCGETP, &buf); 584480Ssam if (buf.sg_ospeed != B1200) { /* must dial at 1200 baud */ 594480Ssam speed = buf.sg_ospeed; 604480Ssam buf.sg_ospeed = buf.sg_ispeed = B1200; 614480Ssam ioctl(f, TIOCSETP, &buf); 624480Ssam ioctl(f, TIOCMBIC, &st); /* clear ST for 300 baud */ 634480Ssam } else 644480Ssam ioctl(f, TIOCMBIS, &st); /* set ST for 1200 baud */ 654480Ssam } 664480Ssam #endif 673690Sroot signal(SIGALRM, timeout); 683690Sroot alarm(5 * strlen(num) + 10); 6913278Ssam ioctl(f, TIOCFLUSH, &rw); 703690Sroot write(f, "\001", 1); 714480Ssam sleep(1); 723690Sroot write(f, "\002", 1); 733690Sroot write(f, num, strlen(num)); 7413278Ssam read(f, &c, 1); 754480Ssam #ifdef TIOCMSET 764480Ssam if (df03 && speed) { 774480Ssam buf.sg_ispeed = buf.sg_ospeed = speed; 784480Ssam ioctl(f, TIOCSETP, &buf); 794480Ssam } 804480Ssam #endif 815134Ssam return (c == 'A'); 823690Sroot } 833690Sroot 843690Sroot df_disconnect() 853690Sroot { 8613278Ssam int rw = 2; 8713278Ssam 883690Sroot write(FD, "\001", 1); 893690Sroot sleep(1); 9013278Ssam ioctl(FD, TIOCFLUSH, &rw); 913690Sroot } 923690Sroot 933690Sroot 943690Sroot df_abort() 953690Sroot { 9613278Ssam 9713278Ssam df_disconnect(); 983690Sroot } 993690Sroot 1003690Sroot 1013690Sroot static 1023690Sroot timeout() 1033690Sroot { 10413278Ssam 1053690Sroot longjmp(Sjbuf, 1); 1063690Sroot } 107