xref: /csrg-svn/usr.bin/tip/aculib/biz22.c (revision 13135)
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