|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)vent.c 4.3 (Berkeley) 2/24/88"; ! 3: #endif ! 4: ! 5: #include "../condevs.h" ! 6: ! 7: ventopn(telno, flds, dev) ! 8: char *flds[], *telno; ! 9: struct Devices *dev; ! 10: { ! 11: int dh; ! 12: int i, ok = -1; ! 13: char dcname[20]; ! 14: ! 15: sprintf(dcname, "/dev/%s", dev->D_line); ! 16: if (setjmp(Sjbuf)) { ! 17: DEBUG(1, "timeout ventel open\n", ""); ! 18: logent("ventel open", "TIMEOUT"); ! 19: if (dh >= 0) ! 20: close(dh); ! 21: delock(dev->D_line); ! 22: return CF_NODEV; ! 23: } ! 24: signal(SIGALRM, alarmtr); ! 25: getnextfd(); ! 26: alarm(10); ! 27: dh = open(dcname, 2); ! 28: next_fd = -1; ! 29: alarm(0); ! 30: if (dh < 0) { ! 31: DEBUG(4,"%s\n", errno == 4 ? "no carrier" : "can't open modem"); ! 32: delock(dev->D_line); ! 33: return errno == 4 ? CF_DIAL : CF_NODEV; ! 34: } ! 35: ! 36: /* modem is open */ ! 37: fixline(dh, dev->D_speed); ! 38: ! 39: /* translate - to % and = to & for VenTel */ ! 40: DEBUG(4, "calling %s -> ", telno); ! 41: for (i = 0; i < strlen(telno); ++i) { ! 42: switch(telno[i]) { ! 43: case '-': /* delay */ ! 44: telno[i] = '%'; ! 45: break; ! 46: case '=': /* await dial tone */ ! 47: telno[i] = '&'; ! 48: break; ! 49: case '<': ! 50: telno[i] = '%'; ! 51: break; ! 52: } ! 53: } ! 54: DEBUG(4, "%s\n", telno); ! 55: sleep(1); ! 56: for(i = 0; i < 5; ++i) { /* make up to 5 tries */ ! 57: slowrite(dh, "\r\r");/* awake, thou lowly VenTel! */ ! 58: ! 59: DEBUG(4, "wanted %s ", "$"); ! 60: ok = expect("$", dh); ! 61: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 62: if (ok != 0) ! 63: continue; ! 64: slowrite(dh, "K"); /* "K" (enter number) command */ ! 65: DEBUG(4, "wanted %s ", "DIAL: "); ! 66: ok = expect("DIAL: ", dh); ! 67: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 68: if (ok == 0) ! 69: break; ! 70: } ! 71: ! 72: if (ok == 0) { ! 73: slowrite(dh, telno); /* send telno, send \r */ ! 74: slowrite(dh, "\r"); ! 75: DEBUG(4, "wanted %s ", "ONLINE"); ! 76: ok = expect("ONLINE!", dh); ! 77: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 78: } ! 79: if (ok != 0) { ! 80: if (dh > 2) ! 81: close(dh); ! 82: DEBUG(4, "venDial failed\n", ""); ! 83: return CF_DIAL; ! 84: } ! 85: else ! 86: DEBUG(4, "venDial ok\n", ""); ! 87: return dh; ! 88: } ! 89: ! 90: ventcls(fd) ! 91: int fd; ! 92: { ! 93: if (fd > 0) { ! 94: close(fd); ! 95: sleep(5); ! 96: delock(devSel); ! 97: } ! 98: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.