|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)df12.c 4.2 (Berkeley) 2/24/88"; ! 3: #endif ! 4: ! 5: #include "../condevs.h" ! 6: ! 7: /* ! 8: * df12popn(telno, flds, dev) connect to df12 modem (pulse call) ! 9: * df12topn(telno, flds, dev) connect to df12 modem (tone call) ! 10: * char *flds[], *dev[]; ! 11: * ! 12: * return codes: ! 13: * >0 - file number - ok ! 14: * CF_DIAL,CF_NODEV - failed ! 15: */ ! 16: ! 17: df12popn (telno, flds, dev) ! 18: char *telno, ! 19: *flds[]; ! 20: struct Devices *dev; ! 21: { ! 22: return df12opn (telno, flds, dev, 0); ! 23: } ! 24: ! 25: df12topn (telno, flds, dev) ! 26: char *telno, ! 27: *flds[]; ! 28: struct Devices *dev; ! 29: { ! 30: return df12opn (telno, flds, dev, 1); ! 31: } ! 32: ! 33: /* ARGSUSED */ ! 34: df12opn (telno, flds, dev, toneflag) ! 35: char *telno; ! 36: char *flds[]; ! 37: struct Devices *dev; ! 38: int toneflag; ! 39: { ! 40: int phindex, dh = -1; ! 41: extern errno; ! 42: char dcname[20], newphone[64]; ! 43: ! 44: sprintf (dcname, "/dev/%s", dev -> D_line); ! 45: DEBUG (4, "dc - %s\n", dcname); ! 46: if (setjmp (Sjbuf)) ! 47: { ! 48: logent (dcname, "TIMEOUT"); ! 49: if (dh >= 0) ! 50: close (dh); ! 51: return CF_DIAL; ! 52: } ! 53: signal (SIGALRM, alarmtr); ! 54: getnextfd (); ! 55: alarm (10); ! 56: dh = open (dcname, 2);/* read/write */ ! 57: alarm (0); ! 58: ! 59: /* modem is open */ ! 60: ! 61: /* First, adjust our phone number string. These modems don't ! 62: * like any characters but digits and "=" signs (for delay) ! 63: */ ! 64: for (phindex = 0; *telno; telno++) ! 65: { ! 66: if (*telno == '=' || (*telno >= '0' && *telno <= '9')) ! 67: newphone[phindex++] = *telno; ! 68: if (phindex == 64) ! 69: { ! 70: logent (dcname, "Phone number too long"); ! 71: close (dh); ! 72: return CF_DIAL; ! 73: } ! 74: } ! 75: newphone[phindex] = '\0'; ! 76: next_fd = -1; ! 77: if (dh >= 0) ! 78: { ! 79: fixline (dh, dev -> D_speed); ! 80: if (dochat (dev, flds, dh)) ! 81: { ! 82: logent (dcname, "CHAT FAILED"); ! 83: close (dh); ! 84: return CF_DIAL; ! 85: } ! 86: slowrite (dh, "\02"); ! 87: if (expect ("Ready\r\n", dh) != 0) ! 88: { ! 89: DEBUG (4, "Didn't get 'Ready' response.\n", NULL); ! 90: logent (dcname, "Modem not responding"); ! 91: close (dh); ! 92: return CF_DIAL; ! 93: } ! 94: DEBUG (4, "Got 'Ready' response\n", NULL); ! 95: DEBUG (7, "Writing control select flag %c\n", toneflag ? 'T' : 'P'); ! 96: slowrite (dh, toneflag ? "T" : "P"); ! 97: DEBUG (4, "Writing telephone number %s\n", newphone); ! 98: slowrite (dh, newphone); ! 99: DEBUG (7, "Telephone number written\n", NULL); ! 100: slowrite (dh, "#"); ! 101: DEBUG (7, "Writing # sign\n", NULL); ! 102: ! 103: if (expect ("Attached\r\n", dh) != 0) ! 104: { ! 105: logent (dcname, "No carrier"); ! 106: strcpy (devSel, dev -> D_line); ! 107: df12cls (dh); ! 108: return CF_DIAL; ! 109: } ! 110: ! 111: } ! 112: if (dh < 0) ! 113: { ! 114: logent (dcname, "CAN'T OPEN"); ! 115: return CF_NODEV; ! 116: } ! 117: else ! 118: { ! 119: DEBUG (4, "df12 ok\n", CNULL); ! 120: return dh; ! 121: } ! 122: } ! 123: ! 124: df12cls (fd) ! 125: int fd; ! 126: { ! 127: char dcname[20]; ! 128: struct sgttyb hup, ! 129: sav; ! 130: ! 131: if (fd > 0) ! 132: { ! 133: sprintf (dcname, "/dev/%s", devSel); ! 134: DEBUG (4, "Hanging up fd = %d\n", fd); ! 135: /* ! 136: * code to drop DTR -- change to 0 baud then back to default. ! 137: */ ! 138: gtty (fd, &hup); ! 139: gtty (fd, &sav); ! 140: hup.sg_ispeed = B0; ! 141: hup.sg_ospeed = B0; ! 142: stty (fd, &hup); ! 143: sleep (2); ! 144: stty (fd, &sav); ! 145: /* ! 146: * now raise DTR -- close the device & open it again. ! 147: */ ! 148: sleep (2); ! 149: close (fd); ! 150: sleep (2); ! 151: delock (devSel); ! 152: } ! 153: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.