|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)att2224.c 1.1 (Berkeley) 2/12/86"; ! 3: #endif ! 4: ! 5: #include "../condevs.h" ! 6: ! 7: #ifdef ATT2224 ! 8: attopn(telno, flds, dev) ! 9: char *telno, *flds[]; ! 10: struct Devices *dev; ! 11: { ! 12: char dcname[20], phone[MAXPH+10], c = 0; ! 13: int dnf, failret = 0, timelim; ! 14: ! 15: sprintf(dcname, "/dev/%s", dev->D_line); ! 16: ! 17: if (setjmp(Sjbuf)) { ! 18: delock(dev->D_line); ! 19: logent("DEVICE", "NO"); ! 20: DEBUG(4, "Open timed out %s", dcname); ! 21: alarm (0); ! 22: return CF_NODEV; ! 23: } ! 24: ! 25: signal(SIGALRM, alarmtr); ! 26: getnextfd(); ! 27: alarm(10); ! 28: ! 29: if ((dnf = open(dcname, 2)) <= 0) { ! 30: delock(dev->D_line); ! 31: logent("DEVICE", "NO"); ! 32: DEBUG(4, "Can't open %s", dcname); ! 33: alarm (0); ! 34: return CF_NODEV; ! 35: } ! 36: ! 37: alarm(0); ! 38: next_fd = -1; ! 39: fixline(dnf, dev->D_speed); ! 40: DEBUG(4, "modem port - %s\n", dcname); ! 41: ! 42: if (setjmp(Sjbuf)) { ! 43: delock(dev->D_line); ! 44: logent("ACU WRITE", "FAILED"); ! 45: return CF_DIAL; ! 46: } ! 47: signal(SIGALRM, alarmtr); ! 48: alarm(10); ! 49: do { ! 50: slowrite(dnf, "\r"); /* wake up modem */ ! 51: } while (expect(":~3", dnf)); ! 52: alarm(0); ! 53: ! 54: sprintf (phone, "atzt%s\r", telno); ! 55: slowrite (dnf, phone); /* type telno string to modem */ ! 56: ! 57: if ((expect(phone, dnf)) != SUCCESS) { ! 58: delock(dev->D_line); ! 59: logent("ACU READ", "FAILED"); ! 60: return CF_DIAL; ! 61: } ! 62: ! 63: if (setjmp(Sjbuf)) { ! 64: delock(dev->D_line); ! 65: logent("NO ANSWER", "FAILED"); ! 66: alarm (0); ! 67: return CF_DIAL; ! 68: } ! 69: timelim = strlen(telno) * 4; ! 70: signal(SIGALRM, alarmtr); ! 71: alarm(timelim > 30 ? timelim : 30); ! 72: ! 73: readchar: ! 74: if ((read(dnf, &c, 1)) != 1) { ! 75: delock(dev->D_line); ! 76: logent("ACU READ", "FAILED"); ! 77: return CF_DIAL; ! 78: } ! 79: ! 80: switch (c) { ! 81: case 'D': /* no dial tone */ ! 82: logent("NO DIAL TONE", "FAILED"); ! 83: failret++; ! 84: break; ! 85: case 'B': /* line busy */ ! 86: logent("LINE BUSY", "FAILED"); ! 87: failret++; ! 88: break; ! 89: case 'N': /* no answer */ ! 90: logent("NO ANSWER", "FAILED"); ! 91: failret++; ! 92: break; ! 93: case 'H': /* handshake failed */ ! 94: logent("MODEM HANDSHAKE", "FAILED"); ! 95: failret++; ! 96: break; ! 97: case '3': /* 2400 baud */ ! 98: DEBUG(4, "Baudrate set to 2400 baud", CNULL); ! 99: fixline(dnf, 2400); ! 100: break; ! 101: case '2': /* 1200 baud */ ! 102: DEBUG(4, "Baudrate set to 1200 baud", CNULL); ! 103: fixline(dnf, 1200); ! 104: break; ! 105: case '1': /* 300 baud */ ! 106: DEBUG(4, "Baudrate set to 300 baud", CNULL); ! 107: fixline(dnf, 300); ! 108: break; ! 109: default: /* Not one of the above, so must be garbage */ ! 110: goto readchar; ! 111: } ! 112: if (failret) { ! 113: alarm (0); ! 114: delock(dev->D_line); ! 115: return CF_DIAL; ! 116: } ! 117: alarm (0); ! 118: return dnf; ! 119: } ! 120: ! 121: attcls(fd) ! 122: int fd; ! 123: { ! 124: char dcname[20]; ! 125: #ifdef USG ! 126: struct termio hup, sav; ! 127: #else !USG ! 128: struct sgttyb hup, sav; ! 129: #endif !USG ! 130: ! 131: if (fd > 0) { ! 132: sprintf(dcname, "/dev/%s", devSel); ! 133: DEBUG(4, "Hanging up fd = %d\n", fd); ! 134: /* ! 135: * code to drop DTR -- change to 0 baud then back to default. ! 136: */ ! 137: gtty(fd, &hup); ! 138: gtty(fd, &sav); ! 139: #ifdef USG ! 140: hup.c_cflag = B0; ! 141: #else !USG ! 142: hup.sg_ispeed = B0; ! 143: hup.sg_ospeed = B0; ! 144: #endif !USG ! 145: stty(fd, &hup); ! 146: sleep(2); ! 147: stty(fd, &sav); ! 148: /* ! 149: * now raise DTR -- close the device ! 150: */ ! 151: sleep(2); ! 152: close(fd); ! 153: delock(devSel); ! 154: } ! 155: } ! 156: #endif ATT2224
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.