xref: /csrg-svn/usr.bin/uucp/libacu/pen.c (revision 25155)
118564Sralph #ifndef lint
2*25155Sbloom static char sccsid[] = "@(#)pen.c	4.2 (Berkeley) 10/10/85";
318564Sralph #endif
418564Sralph 
518564Sralph /*
618564Sralph  *	Speaker's quick and dirty penril hack.  STA 4/1/85.
718564Sralph  */
818564Sralph #include "../condevs.h"
918564Sralph #ifdef	PENRIL
1018564Sralph 
1118564Sralph penopn(telno, flds, dev)
1218564Sralph char *flds[], *telno;
1318564Sralph struct Devices *dev;
1418564Sralph {
1518564Sralph 	int	dh;
1618564Sralph 	int	i, ok = -1;
1718564Sralph 	char dcname[20];
1818564Sralph 
1918564Sralph 	sprintf(dcname, "/dev/%s", dev->D_line);
2018564Sralph 	if (setjmp(Sjbuf)) {
2118564Sralph 		DEBUG(1, "timeout penril open\n", "");
2218564Sralph 		logent("penril open", "TIMEOUT");
2318564Sralph 		if (dh >= 0)
2418564Sralph 			close(dh);
2518564Sralph 		delock(dev->D_line);
2618564Sralph 		return CF_NODEV;
2718564Sralph 	}
2818564Sralph 	signal(SIGALRM, alarmtr);
2918564Sralph 	getnextfd();
3018564Sralph 	alarm(10);
3118564Sralph 	dh = open(dcname, 2);
32*25155Sbloom 	alarm(0);
3318564Sralph 	next_fd = -1;
3418564Sralph 	if (dh < 0) {
3518564Sralph 		DEBUG(4,"%s\n", errno == 4 ? "no carrier" : "can't open modem");
3618564Sralph 		delock(dev->D_line);
3718564Sralph 		return errno == 4 ? CF_DIAL : CF_NODEV;
3818564Sralph 	}
3918564Sralph 
4018564Sralph 	/* modem is open */
4118564Sralph 	fixline(dh, dev->D_speed);
4218564Sralph 
4318564Sralph 	/* translate - to P and = to W for Penril */
4418564Sralph 	DEBUG(4, "calling %s -> ", telno);
4518564Sralph 	for (i = 0; i < strlen(telno); ++i) {
4618564Sralph 		switch(telno[i]) {
4718564Sralph 		case '-':	/* delay */
4818564Sralph 			telno[i] = 'P';
4918564Sralph 			break;
5018564Sralph 		case '=':	/* await dial tone */
5118564Sralph 			telno[i] = 'W';
5218564Sralph 			break;
5318564Sralph 		case '<':
5418564Sralph 			telno[i] = 'P';
5518564Sralph 			break;
5618564Sralph 		}
5718564Sralph 	}
5818564Sralph 	DEBUG(4, "%s\n", telno);
5918564Sralph 	sleep(1);
6018564Sralph 	for(i = 0; i < 5; ++i) {	/* make up to 5 tries */
6118564Sralph 		slowrite(dh, "\r");/* awake, thou lowly Penril! */
6218564Sralph 
6318564Sralph 		DEBUG(4, "wanted %s ", ">");
6418564Sralph 		ok = expect(">", dh);
6518564Sralph 		DEBUG(4, "got %s\n", ok ? "?" : "that");
6618564Sralph 		if (ok != 0)
6718564Sralph 			continue;
6818564Sralph 		slowrite(dh, "K");	/* "K" (enter number) command */
6918564Sralph 		DEBUG(4, "wanted %s ", "NO.: ");
7018564Sralph 		ok = expect("NO.: ", dh);
7118564Sralph 		DEBUG(4, "got %s\n", ok ? "?" : "that");
7218564Sralph 		if (ok == 0)
7318564Sralph 			break;
7418564Sralph 	}
7518564Sralph 
7618564Sralph 	if (ok == 0) {
7718564Sralph 		slowrite(dh, telno); /* send telno, send \r */
7818564Sralph 		slowrite(dh, "\r");
7918564Sralph 		DEBUG(4, "wanted %s ", "OK");
8018564Sralph 		ok = expect("OK", dh);
8118564Sralph 		DEBUG(4, "got %s\n", ok ? "?" : "that");
8218564Sralph 	}
8318564Sralph 	if (ok != 0) {
8418564Sralph 		if (dh > 2)
8518564Sralph 			close(dh);
8618564Sralph 		DEBUG(4, "penDial failed\n", "");
8718564Sralph 		return CF_DIAL;
8818564Sralph 	}
8918564Sralph 	else
9018564Sralph 		DEBUG(4, "penDial ok\n", "");
9118564Sralph 	return dh;
9218564Sralph }
9318564Sralph 
9418564Sralph pencls(fd)
9518564Sralph int fd;
9618564Sralph {
9718564Sralph 	if (fd > 0) {
9818564Sralph 		close(fd);
9918564Sralph 		sleep(5);
10018564Sralph 		delock(devSel);
10118564Sralph 	}
10218564Sralph }
10318564Sralph #endif PENRIL
104