117786Sralph #ifndef lint 2*46875Sbostic static char sccsid[] = "@(#)vent.c 4.4 (Berkeley) 03/02/91"; 317786Sralph #endif 417786Sralph 5*46875Sbostic #include "condevs.h" 617786Sralph 717786Sralph ventopn(telno, flds, dev) 817786Sralph char *flds[], *telno; 917786Sralph struct Devices *dev; 1017786Sralph { 1117786Sralph int dh; 1217786Sralph int i, ok = -1; 1317786Sralph char dcname[20]; 1417786Sralph 1517786Sralph sprintf(dcname, "/dev/%s", dev->D_line); 1617786Sralph if (setjmp(Sjbuf)) { 1717786Sralph DEBUG(1, "timeout ventel open\n", ""); 1817786Sralph logent("ventel open", "TIMEOUT"); 1917786Sralph if (dh >= 0) 2017786Sralph close(dh); 2117786Sralph delock(dev->D_line); 2217786Sralph return CF_NODEV; 2317786Sralph } 2417786Sralph signal(SIGALRM, alarmtr); 2517786Sralph getnextfd(); 2617786Sralph alarm(10); 2717786Sralph dh = open(dcname, 2); 2817786Sralph next_fd = -1; 2925158Sbloom alarm(0); 3017786Sralph if (dh < 0) { 3117786Sralph DEBUG(4,"%s\n", errno == 4 ? "no carrier" : "can't open modem"); 3217786Sralph delock(dev->D_line); 3317786Sralph return errno == 4 ? CF_DIAL : CF_NODEV; 3417786Sralph } 3517786Sralph 3617786Sralph /* modem is open */ 3717786Sralph fixline(dh, dev->D_speed); 3817786Sralph 3917786Sralph /* translate - to % and = to & for VenTel */ 4017786Sralph DEBUG(4, "calling %s -> ", telno); 4117786Sralph for (i = 0; i < strlen(telno); ++i) { 4217786Sralph switch(telno[i]) { 4317786Sralph case '-': /* delay */ 4417786Sralph telno[i] = '%'; 4517786Sralph break; 4617786Sralph case '=': /* await dial tone */ 4717786Sralph telno[i] = '&'; 4817786Sralph break; 4917786Sralph case '<': 5017786Sralph telno[i] = '%'; 5117786Sralph break; 5217786Sralph } 5317786Sralph } 5417786Sralph DEBUG(4, "%s\n", telno); 5517786Sralph sleep(1); 5617786Sralph for(i = 0; i < 5; ++i) { /* make up to 5 tries */ 5717786Sralph slowrite(dh, "\r\r");/* awake, thou lowly VenTel! */ 5817786Sralph 5917786Sralph DEBUG(4, "wanted %s ", "$"); 6017786Sralph ok = expect("$", dh); 6117786Sralph DEBUG(4, "got %s\n", ok ? "?" : "that"); 6217786Sralph if (ok != 0) 6317786Sralph continue; 6417786Sralph slowrite(dh, "K"); /* "K" (enter number) command */ 6517786Sralph DEBUG(4, "wanted %s ", "DIAL: "); 6617786Sralph ok = expect("DIAL: ", dh); 6717786Sralph DEBUG(4, "got %s\n", ok ? "?" : "that"); 6817786Sralph if (ok == 0) 6917786Sralph break; 7017786Sralph } 7117786Sralph 7217786Sralph if (ok == 0) { 7317786Sralph slowrite(dh, telno); /* send telno, send \r */ 7417786Sralph slowrite(dh, "\r"); 7517786Sralph DEBUG(4, "wanted %s ", "ONLINE"); 7617786Sralph ok = expect("ONLINE!", dh); 7717786Sralph DEBUG(4, "got %s\n", ok ? "?" : "that"); 7817786Sralph } 7917786Sralph if (ok != 0) { 8017786Sralph if (dh > 2) 8117786Sralph close(dh); 8217786Sralph DEBUG(4, "venDial failed\n", ""); 8317786Sralph return CF_DIAL; 8417786Sralph } 8517786Sralph else 8617786Sralph DEBUG(4, "venDial ok\n", ""); 8717786Sralph return dh; 8817786Sralph } 8917786Sralph 9017786Sralph ventcls(fd) 9117786Sralph int fd; 9217786Sralph { 9317786Sralph if (fd > 0) { 9417786Sralph close(fd); 9517786Sralph sleep(5); 9617786Sralph delock(devSel); 9717786Sralph } 9817786Sralph } 99