Annotation of 43BSDTahoe/usr.bin/tip/aculib/v3451.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.