|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)sy.c 4.1 (Berkeley) 1/22/85"; ! 3: #endif ! 4: ! 5: #include "../condevs.h" ! 6: ! 7: #ifdef SYTEK ! 8: ! 9: /* ! 10: * sykopn: establish connection through a sytek port. ! 11: * Returns descriptor open to tty for reading and writing. ! 12: * Negative values (-1...-7) denote errors in connmsg. ! 13: * Will try to change baud rate of local port to match ! 14: * that of the remote side. ! 15: */ ! 16: char sykspeed[50]; /* speed to reset to on close */ ! 17: ! 18: sykopn(flds) ! 19: register char *flds[]; ! 20: { ! 21: extern errno; ! 22: char *rindex(), *fdig(), dcname[20]; ! 23: int dh, ok = 0, speed; ! 24: register FILE *dfp; ! 25: struct Devices dev; ! 26: char speedbuf[50]; ! 27: ! 28: dfp = fopen(DEVFILE, "r"); ! 29: ASSERT(dfp != NULL, "Can't open", DEVFILE, 0); ! 30: ! 31: signal(SIGALRM, alarmtr); ! 32: dh = -1; ! 33: while(rddev(dfp, &dev) != FAIL) { ! 34: /* we'll set our own speed; F_CLASS is how cynthia configures it every night ! 35: if (strcmp(flds[F_CLASS], dev.D_class) != SAME) ! 36: continue; ! 37: */ ! 38: if (snccmp(flds[F_LINE], dev.D_type) != SAME) ! 39: continue; ! 40: if (mlock(dev.D_line) == FAIL) ! 41: continue; ! 42: ! 43: sprintf(dcname, "/dev/%s", dev.D_line); ! 44: getnextfd(); ! 45: alarm(10); ! 46: if (setjmp(Sjbuf)) { ! 47: delock(dev.D_line); ! 48: logent(dev.D_line,"sytek open TIMEOUT"); ! 49: dh = -1; ! 50: break; ! 51: } ! 52: dh = open(dcname, 2); ! 53: alarm(0); ! 54: next_fd = -1; ! 55: if (dh > 0) { ! 56: break; ! 57: } ! 58: devSel[0] = '\0'; ! 59: delock(dev.D_line); ! 60: } ! 61: fclose(dfp); ! 62: if (dh < 0) ! 63: return(CF_NODEV); ! 64: ! 65: speed = atoi(fdig(dev.D_class)); ! 66: fixline(dh, speed); ! 67: sleep(1); ! 68: ! 69: /* negotiate with sytek */ ! 70: genbrk(dh, 3); ! 71: ! 72: DEBUG(4, "wanted %s ", "#"); ! 73: ok = expect("#", dh); ! 74: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 75: if(ok != 0){ ! 76: if(atoi(fdig(dev.D_class)) == 9600){ ! 77: fixline(dh, 2400); ! 78: speed = 2400; ! 79: } else { ! 80: fixline(dh, 9600); ! 81: speed = 9600; ! 82: } ! 83: sleep(1); ! 84: genbrk(dh, 3); ! 85: ok = expect("#", dh); ! 86: if(ok){ ! 87: close(dh); ! 88: DEBUG(4, "sytek BREAK failed\n", ""); ! 89: delock(dev.D_line); ! 90: return(CF_DIAL); ! 91: } ! 92: } ! 93: write(dh, "done \r", 6); ! 94: ok = expect("#", dh); ! 95: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 96: if(speed != atoi(fdig(flds[F_CLASS]))){ ! 97: DEBUG(4, "changing speed\n", ""); ! 98: sprintf(speedbuf, "baud %s\r", fdig(flds[F_CLASS])); ! 99: write(dh, speedbuf, strlen(speedbuf)); ! 100: sleep(1); ! 101: speed = atoi(fdig(flds[F_CLASS])); ! 102: fixline(dh, speed); ! 103: genbrk(dh, 3); ! 104: ok = expect("#", dh); ! 105: DEBUG(4, "speed set %s\n", ok ? "failed" : flds[F_CLASS]); ! 106: } ! 107: strcpy(sykspeed, dev.D_class); ! 108: write(dh, "command break\r", 14); ! 109: ok = expect("#", dh); ! 110: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 111: if (ok == 0) { ! 112: write(dh, "call ", 5); ! 113: write(dh, flds[F_PHONE], strlen(flds[F_PHONE])); ! 114: write(dh, "\r", 1); ! 115: DEBUG(4, "sytek dial %s\n", flds[F_PHONE]); ! 116: DEBUG(4, "wanted %s ", "COMPLETED TO "); ! 117: ok = expect("COMPLETED TO ", dh); ! 118: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 119: } ! 120: ! 121: if (ok != 0) { ! 122: close(dh); ! 123: DEBUG(4, "sytek failed\n", ""); ! 124: delock(dev.D_line); ! 125: return(CF_DIAL); ! 126: } else ! 127: DEBUG(4, "sytek ok\n", ""); ! 128: ! 129: CU_end = sykcls; ! 130: strcpy(devSel, dev.D_line); /* for later unlock */ ! 131: return(dh); ! 132: ! 133: } ! 134: ! 135: sykcls(fd) ! 136: register int fd; ! 137: { ! 138: register int ok, speed; ! 139: ! 140: ! 141: if (fd > 0) { ! 142: genbrk(fd, 3); ! 143: ok = expect("#", fd); ! 144: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 145: if(ok != 0){ ! 146: genbrk(fd, 3); ! 147: ok = expect("#", fd); ! 148: } ! 149: if(ok == 0){ ! 150: write(fd, "done 1\r", 7); ! 151: ok = expect("#", fd); ! 152: DEBUG(4, "got %s\n", ok ? "?" : "that"); ! 153: DEBUG(4, "reset baud to %s\n", sykspeed); ! 154: write(fd, "baud ", 5); ! 155: write(fd, sykspeed, strlen(sykspeed)); ! 156: write(fd, "\r", 1); ! 157: sleep(1); ! 158: } ! 159: close(fd); ! 160: delock(devSel); ! 161: } ! 162: } ! 163: #endif SYTEK
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.