1*13135Sralph /* biz22.c 4.2 83/06/15 */ 25130Ssam #include "tip.h" 35130Ssam 45130Ssam #if BIZ1022 55130Ssam #define DISCONNECT "\20\04" /* disconnection string */ 65130Ssam 7*13135Sralph static char *sccsid = "@(#)biz22.c 4.2 06/15/83"; 85130Ssam static int sigALRM(); 95130Ssam static int timeout = 0; 105130Ssam 115130Ssam /* 125130Ssam * Dial up on a BIZCOMP Model 1022 with either 135130Ssam * tone dialing (mod = "V") 145130Ssam * pulse dialing (mod = "W") 155130Ssam */ 165130Ssam static int 175130Ssam biz_dialer(num, mod) 185130Ssam char *num, *mod; 195130Ssam { 205130Ssam register int connected = 0; 215130Ssam char cbuf[40]; 225130Ssam 235130Ssam if (boolean(value(VERBOSE))) 245130Ssam printf("\nstarting call..."); 255130Ssam /* 265130Ssam * Disable auto-answer and configure for tone/pulse 275130Ssam * dialing 285130Ssam */ 295130Ssam if (cmd("\02K\r")) { 305130Ssam printf("can't initialize bizcomp..."); 315130Ssam return (0); 325130Ssam } 335130Ssam strcpy(cbuf, "\02.\r"); 345130Ssam cbuf[1] = *mod; 355130Ssam if (cmd(cbuf)) { 365130Ssam printf("can't set dialing mode..."); 375130Ssam return (0); 385130Ssam } 395130Ssam strcpy(cbuf, "\02D"); 405130Ssam strcat(cbuf, num); 415130Ssam strcat(cbuf, "\r"); 425130Ssam write(FD, cbuf, strlen(cbuf)); 435130Ssam if (!detect("7\r")) { 445130Ssam printf("can't get dial tone..."); 455130Ssam return (0); 465130Ssam } 475130Ssam if (boolean(value(VERBOSE))) 485130Ssam printf("ringing..."); 495130Ssam /* 505130Ssam * The reply from the BIZCOMP should be: 515130Ssam * 2 \r or 7 \r failure 525130Ssam * 1 \r success 535130Ssam */ 545130Ssam connected = detect("1\r"); 555130Ssam #ifdef ACULOG 565130Ssam if (timeout) { 575130Ssam char line[80]; 585130Ssam 595130Ssam sprintf(line, "%d second dial timeout", 605130Ssam number(value(DIALTIMEOUT))); 615130Ssam logent(value(HOST), num, "biz1022", line); 625130Ssam } 635130Ssam #endif 645130Ssam if (timeout) 655130Ssam biz22_disconnect(); /* insurance */ 665130Ssam return (connected); 675130Ssam } 685130Ssam 695130Ssam biz22w_dialer(num, acu) 705130Ssam char *num, *acu; 715130Ssam { 725130Ssam return (biz_dialer(num, "W")); 735130Ssam } 745130Ssam 755130Ssam biz22f_dialer(num, acu) 765130Ssam char *num, *acu; 775130Ssam { 785130Ssam return (biz_dialer(num, "V")); 795130Ssam } 805130Ssam 815130Ssam biz22_disconnect() 825130Ssam { 835130Ssam write(FD, DISCONNECT, 4); 845130Ssam sleep(2); 855130Ssam ioctl(FD, TIOCFLUSH); 865130Ssam } 875130Ssam 885130Ssam biz22_abort() 895130Ssam { 905130Ssam write(FD, "\02", 1); 915130Ssam timeout = 1; 925130Ssam } 935130Ssam 945130Ssam static int 955130Ssam sigALRM() 965130Ssam { 975130Ssam signal(SIGALRM, SIG_IGN); 985130Ssam printf("\07timeout waiting for reply\n"); 995130Ssam timeout = 1; 1005130Ssam } 1015130Ssam 1025130Ssam static int 1035130Ssam cmd(s) 1045130Ssam register char *s; 1055130Ssam { 1065130Ssam char c; 1075130Ssam 1085130Ssam write(FD, s, strlen(s)); 1095130Ssam timeout = 0; 1105130Ssam signal(SIGALRM, biz22_abort); 1115130Ssam alarm(number(value(DIALTIMEOUT))); 1125130Ssam read(FD, &c, 1); 1135130Ssam alarm(0); 1145130Ssam signal(SIGALRM, SIG_DFL); 1155130Ssam if (timeout) 1165130Ssam return (1); 1175130Ssam c &= 0177; 1185130Ssam return (c != '\r'); 1195130Ssam } 1205130Ssam 1215130Ssam static int 1225130Ssam detect(s) 1235130Ssam register char *s; 1245130Ssam { 1255130Ssam char c; 1265130Ssam 1275130Ssam signal(SIGALRM, biz22_abort); 1285130Ssam timeout = 0; 1295130Ssam while (*s) { 1305130Ssam alarm(number(value(DIALTIMEOUT))); 1315130Ssam read(FD, &c, 1); 1325130Ssam alarm(0); 1335130Ssam if (timeout) 1345130Ssam return (0); 1355130Ssam c &= 0177; 1365130Ssam if (c != *s++) 1375130Ssam return (0); 1385130Ssam } 1395130Ssam signal(SIGALRM, SIG_DFL); 1405130Ssam return (1); 1415130Ssam } 142*13135Sralph #endif 143