1*5130Ssam /* biz22.c 4.1 81/11/29 */ 2*5130Ssam #include "tip.h" 3*5130Ssam 4*5130Ssam #if BIZ1022 5*5130Ssam #define DISCONNECT "\20\04" /* disconnection string */ 6*5130Ssam 7*5130Ssam static int sigALRM(); 8*5130Ssam static int timeout = 0; 9*5130Ssam 10*5130Ssam /* 11*5130Ssam * Dial up on a BIZCOMP Model 1022 with either 12*5130Ssam * tone dialing (mod = "V") 13*5130Ssam * pulse dialing (mod = "W") 14*5130Ssam */ 15*5130Ssam static int 16*5130Ssam biz_dialer(num, mod) 17*5130Ssam char *num, *mod; 18*5130Ssam { 19*5130Ssam register int connected = 0; 20*5130Ssam char cbuf[40]; 21*5130Ssam 22*5130Ssam if (boolean(value(VERBOSE))) 23*5130Ssam printf("\nstarting call..."); 24*5130Ssam /* 25*5130Ssam * Disable auto-answer and configure for tone/pulse 26*5130Ssam * dialing 27*5130Ssam */ 28*5130Ssam if (cmd("\02K\r")) { 29*5130Ssam printf("can't initialize bizcomp..."); 30*5130Ssam return (0); 31*5130Ssam } 32*5130Ssam strcpy(cbuf, "\02.\r"); 33*5130Ssam cbuf[1] = *mod; 34*5130Ssam if (cmd(cbuf)) { 35*5130Ssam printf("can't set dialing mode..."); 36*5130Ssam return (0); 37*5130Ssam } 38*5130Ssam strcpy(cbuf, "\02D"); 39*5130Ssam strcat(cbuf, num); 40*5130Ssam strcat(cbuf, "\r"); 41*5130Ssam write(FD, cbuf, strlen(cbuf)); 42*5130Ssam if (!detect("7\r")) { 43*5130Ssam printf("can't get dial tone..."); 44*5130Ssam return (0); 45*5130Ssam } 46*5130Ssam if (boolean(value(VERBOSE))) 47*5130Ssam printf("ringing..."); 48*5130Ssam /* 49*5130Ssam * The reply from the BIZCOMP should be: 50*5130Ssam * 2 \r or 7 \r failure 51*5130Ssam * 1 \r success 52*5130Ssam */ 53*5130Ssam connected = detect("1\r"); 54*5130Ssam #ifdef ACULOG 55*5130Ssam if (timeout) { 56*5130Ssam char line[80]; 57*5130Ssam 58*5130Ssam sprintf(line, "%d second dial timeout", 59*5130Ssam number(value(DIALTIMEOUT))); 60*5130Ssam logent(value(HOST), num, "biz1022", line); 61*5130Ssam } 62*5130Ssam #endif 63*5130Ssam if (timeout) 64*5130Ssam biz22_disconnect(); /* insurance */ 65*5130Ssam return (connected); 66*5130Ssam } 67*5130Ssam 68*5130Ssam biz22w_dialer(num, acu) 69*5130Ssam char *num, *acu; 70*5130Ssam { 71*5130Ssam return (biz_dialer(num, "W")); 72*5130Ssam } 73*5130Ssam 74*5130Ssam biz22f_dialer(num, acu) 75*5130Ssam char *num, *acu; 76*5130Ssam { 77*5130Ssam return (biz_dialer(num, "V")); 78*5130Ssam } 79*5130Ssam 80*5130Ssam biz22_disconnect() 81*5130Ssam { 82*5130Ssam write(FD, DISCONNECT, 4); 83*5130Ssam sleep(2); 84*5130Ssam ioctl(FD, TIOCFLUSH); 85*5130Ssam } 86*5130Ssam 87*5130Ssam biz22_abort() 88*5130Ssam { 89*5130Ssam write(FD, "\02", 1); 90*5130Ssam timeout = 1; 91*5130Ssam } 92*5130Ssam 93*5130Ssam static int 94*5130Ssam sigALRM() 95*5130Ssam { 96*5130Ssam signal(SIGALRM, SIG_IGN); 97*5130Ssam printf("\07timeout waiting for reply\n"); 98*5130Ssam timeout = 1; 99*5130Ssam } 100*5130Ssam 101*5130Ssam static int 102*5130Ssam cmd(s) 103*5130Ssam register char *s; 104*5130Ssam { 105*5130Ssam char c; 106*5130Ssam 107*5130Ssam write(FD, s, strlen(s)); 108*5130Ssam timeout = 0; 109*5130Ssam signal(SIGALRM, biz22_abort); 110*5130Ssam alarm(number(value(DIALTIMEOUT))); 111*5130Ssam read(FD, &c, 1); 112*5130Ssam alarm(0); 113*5130Ssam signal(SIGALRM, SIG_DFL); 114*5130Ssam if (timeout) 115*5130Ssam return (1); 116*5130Ssam c &= 0177; 117*5130Ssam return (c != '\r'); 118*5130Ssam } 119*5130Ssam 120*5130Ssam static int 121*5130Ssam detect(s) 122*5130Ssam register char *s; 123*5130Ssam { 124*5130Ssam char c; 125*5130Ssam 126*5130Ssam signal(SIGALRM, biz22_abort); 127*5130Ssam timeout = 0; 128*5130Ssam while (*s) { 129*5130Ssam alarm(number(value(DIALTIMEOUT))); 130*5130Ssam read(FD, &c, 1); 131*5130Ssam alarm(0); 132*5130Ssam if (timeout) 133*5130Ssam return (0); 134*5130Ssam c &= 0177; 135*5130Ssam if (c != *s++) 136*5130Ssam return (0); 137*5130Ssam } 138*5130Ssam signal(SIGALRM, SIG_DFL); 139*5130Ssam return (1); 140*5130Ssam } 141