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