|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)va212.c 4.3 (Berkeley) 2/24/88"; ! 3: #endif ! 4: ! 5: #include "../condevs.h" ! 6: ! 7: va212opn(telno, flds, dev) ! 8: char *telno; ! 9: char *flds[]; ! 10: struct Devices *dev; ! 11: { ! 12: int dh = -1; ! 13: int i, ok, er = 0, delay; ! 14: extern errno; ! 15: char dcname[20]; ! 16: ! 17: sprintf(dcname, "/dev/%s", dev->D_line); ! 18: if (setjmp(Sjbuf)) { ! 19: DEBUG(1, "timeout va212 open\n", 0); ! 20: logent("va212 open", "TIMEOUT"); ! 21: if (dh >= 0) ! 22: close(dh); ! 23: delock(dev->D_line); ! 24: return CF_NODEV; ! 25: } ! 26: signal(SIGALRM, alarmtr); ! 27: getnextfd(); ! 28: alarm(10); ! 29: dh = open(dcname, 2); ! 30: alarm(0); ! 31: ! 32: /* modem is open */ ! 33: next_fd = -1; ! 34: if (dh < 0) { ! 35: DEBUG (4, errno == 4 ? "%s: no carrier\n" : "%s: can't open\n", ! 36: dcname); ! 37: delock(dev->D_line); ! 38: return errno == 4 ? CF_DIAL : CF_NODEV; ! 39: } ! 40: fixline(dh, dev->D_speed); ! 41: ! 42: /* translate - to K for Vadic */ ! 43: DEBUG(4, "calling %s -> ", telno); ! 44: delay = 0; ! 45: for (i = 0; i < strlen(telno); ++i) { ! 46: switch(telno[i]) { ! 47: case '=': /* await dial tone */ ! 48: case '-': /* delay */ ! 49: case '<': ! 50: telno[i] = 'K'; ! 51: delay += 5; ! 52: break; ! 53: } ! 54: } ! 55: DEBUG(4, "%s\n", telno); ! 56: for(i = 0; i < TRYCALLS; ++i) { /* make TRYCALLS tries */ ! 57: /* wake up Vadic */ ! 58: sendthem("\005\\d", dh); ! 59: DEBUG(4, "wanted * ", CNULL); ! 60: ok = expect("*", dh); ! 61: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 62: if (ok != 0) ! 63: continue; ! 64: ! 65: sendthem("D\\d", dh); /* "D" (enter number) command */ ! 66: DEBUG(4, "wanted NUMBER? ", CNULL); ! 67: ok = expect("NUMBER?", dh); ! 68: if (ok == 0) ! 69: ok = expect("\n", dh); ! 70: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 71: if (ok != 0) ! 72: continue; ! 73: ! 74: /* send telno, send \r */ ! 75: sendthem(telno, dh); ! 76: DEBUG(4, "wanted %s ", telno); ! 77: ok = expect(telno, dh); ! 78: if (ok == 0) ! 79: ok = expect("\n", dh); ! 80: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 81: if (ok != 0) ! 82: continue; ! 83: ! 84: sendthem("", dh); /* confirm number */ ! 85: DEBUG(4, "wanted %s ", "DIALING..."); ! 86: ok = expect("DIALING...", dh); ! 87: if (ok == 0) { ! 88: ok = expect("\n", dh); ! 89: DEBUG(4, "wanted ANSWER TONE", CNULL); ! 90: ok = expect("ANSWER TONE", dh); ! 91: if (ok == 0) ! 92: ok = expect("\n", dh); ! 93: } ! 94: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 95: if (ok == 0) ! 96: break; ! 97: } ! 98: ! 99: if (ok == 0) { ! 100: DEBUG(4, "wanted ON LINE\\r\\n ", CNULL); ! 101: ok = expect("ON LINE\r\n", dh); ! 102: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 103: } ! 104: ! 105: if (ok != 0) { ! 106: sendthem("I\\d", dh); /* back to idle */ ! 107: if (dh > 2) ! 108: close(dh); ! 109: DEBUG(4, "vadDial failed\n", CNULL); ! 110: delock(dev->D_line); ! 111: return CF_DIAL; ! 112: } ! 113: DEBUG(4, "va212 ok\n", 0); ! 114: return dh; ! 115: } ! 116: ! 117: va212cls(fd) ! 118: { ! 119: if (fd > 0) { ! 120: close(fd); ! 121: sleep(5); ! 122: delock(devSel); ! 123: } ! 124: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.