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