|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)v3451.c 4.4 (Berkeley) 6/25/83"; ! 3: #endif ! 4: ! 5: /* ! 6: * Routines for calling up on a Vadic 3451 Modem ! 7: */ ! 8: #include "tip.h" ! 9: ! 10: static jmp_buf Sjbuf; ! 11: ! 12: v3451_dialer(num, acu) ! 13: register char *num; ! 14: char *acu; ! 15: { ! 16: int ok, (*func)(); ! 17: int slow = number(value(BAUDRATE)) < 1200, rw = 2; ! 18: char phone[50]; ! 19: #ifdef ACULOG ! 20: char line[80]; ! 21: #endif ! 22: ! 23: /* ! 24: * Get in synch ! 25: */ ! 26: vawrite("I\r", 1 + slow); ! 27: vawrite("I\r", 1 + slow); ! 28: vawrite("I\r", 1 + slow); ! 29: vawrite("\005\r", 2 + slow); ! 30: if (!expect("READY")) { ! 31: printf("can't synchronize with vadic 3451\n"); ! 32: #ifdef ACULOG ! 33: logent(value(HOST), num, "vadic", "can't synch up"); ! 34: #endif ! 35: return (0); ! 36: } ! 37: ioctl(FD, TIOCHPCL, 0); ! 38: sleep(1); ! 39: vawrite("D\r", 2 + slow); ! 40: if (!expect("NUMBER?")) { ! 41: printf("Vadic will not accept dial command\n"); ! 42: #ifdef ACULOG ! 43: logent(value(HOST), num, "vadic", "will not accept dial"); ! 44: #endif ! 45: return (0); ! 46: } ! 47: strcpy(phone, num); ! 48: strcat(phone, "\r"); ! 49: vawrite(phone, 1 + slow); ! 50: if (!expect(phone)) { ! 51: printf("Vadic will not accept phone number\n"); ! 52: #ifdef ACULOG ! 53: logent(value(HOST), num, "vadic", "will not accept number"); ! 54: #endif ! 55: return (0); ! 56: } ! 57: func = signal(SIGINT,SIG_IGN); ! 58: /* ! 59: * You cannot interrupt the Vadic when its dialing; ! 60: * even dropping DTR does not work (definitely a ! 61: * brain damaged design). ! 62: */ ! 63: vawrite("\r", 1 + slow); ! 64: vawrite("\r", 1 + slow); ! 65: if (!expect("DIALING:")) { ! 66: printf("Vadic failed to dial\n"); ! 67: #ifdef ACULOG ! 68: logent(value(HOST), num, "vadic", "failed to dial"); ! 69: #endif ! 70: return (0); ! 71: } ! 72: if (boolean(value(VERBOSE))) ! 73: printf("\ndialing..."); ! 74: ok = expect("ON LINE"); ! 75: signal(SIGINT, func); ! 76: if (!ok) { ! 77: printf("call failed\n"); ! 78: #ifdef ACULOG ! 79: logent(value(HOST), num, "vadic", "call failed"); ! 80: #endif ! 81: return (0); ! 82: } ! 83: ioctl(FD, TIOCFLUSH, &rw); ! 84: return (1); ! 85: } ! 86: ! 87: v3451_disconnect() ! 88: { ! 89: ! 90: close(FD); ! 91: } ! 92: ! 93: v3451_abort() ! 94: { ! 95: ! 96: close(FD); ! 97: } ! 98: ! 99: static ! 100: vawrite(cp, delay) ! 101: register char *cp; ! 102: int delay; ! 103: { ! 104: ! 105: for (; *cp; sleep(delay), cp++) ! 106: write(FD, cp, 1); ! 107: } ! 108: ! 109: static ! 110: expect(cp) ! 111: register char *cp; ! 112: { ! 113: char buf[300]; ! 114: register char *rp = buf; ! 115: int alarmtr(), timeout = 30, online = 0; ! 116: ! 117: if (strcmp(cp, "\"\"") == 0) ! 118: return (1); ! 119: *rp = 0; ! 120: /* ! 121: * If we are waiting for the Vadic to complete ! 122: * dialing and get a connection, allow more time ! 123: * Unfortunately, the Vadic times out 24 seconds after ! 124: * the last digit is dialed ! 125: */ ! 126: online = strcmp(cp, "ON LINE") == 0; ! 127: if (online) ! 128: timeout = number(value(DIALTIMEOUT)); ! 129: signal(SIGALRM, alarmtr); ! 130: if (setjmp(Sjbuf)) ! 131: return (0); ! 132: alarm(timeout); ! 133: while (notin(cp, buf) && rp < buf + sizeof (buf) - 1) { ! 134: if (online && notin("FAILED CALL", buf) == 0) ! 135: return (0); ! 136: if (read(FD, rp, 1) < 0) { ! 137: alarm(0); ! 138: return (0); ! 139: } ! 140: if (*rp &= 0177) ! 141: rp++; ! 142: *rp = '\0'; ! 143: } ! 144: alarm(0); ! 145: return (1); ! 146: } ! 147: ! 148: static ! 149: alarmtr() ! 150: { ! 151: ! 152: longjmp(Sjbuf, 1); ! 153: } ! 154: ! 155: static ! 156: notin(sh, lg) ! 157: char *sh, *lg; ! 158: { ! 159: ! 160: for (; *lg; lg++) ! 161: if (prefix(sh, lg)) ! 162: return (0); ! 163: return (1); ! 164: } ! 165: ! 166: static ! 167: prefix(s1, s2) ! 168: register char *s1, *s2; ! 169: { ! 170: register char c; ! 171: ! 172: while ((c = *s1++) == *s2++) ! 173: if (c == '\0') ! 174: return (1); ! 175: return (c == '\0'); ! 176: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.