Annotation of 43BSD/usr.bin/tip/aculib/biz22.c, revision 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[] = "@(#)biz22.c    5.1 (Berkeley) 6/6/85";
        !             9: #endif not lint
        !            10: 
        !            11: #include "tip.h"
        !            12: 
        !            13: #define DISCONNECT_CMD "\20\04"        /* disconnection string */
        !            14: 
        !            15: static int sigALRM();
        !            16: static int timeout = 0;
        !            17: static jmp_buf timeoutbuf;
        !            18: 
        !            19: /*
        !            20:  * Dial up on a BIZCOMP Model 1022 with either
        !            21:  *     tone dialing (mod = "V")
        !            22:  *     pulse dialing (mod = "W")
        !            23:  */
        !            24: static int
        !            25: biz_dialer(num, mod)
        !            26:        char *num, *mod;
        !            27: {
        !            28:        register int connected = 0;
        !            29:        char cbuf[40];
        !            30: 
        !            31:        if (boolean(value(VERBOSE)))
        !            32:                printf("\nstarting call...");
        !            33:        /*
        !            34:         * Disable auto-answer and configure for tone/pulse
        !            35:         *  dialing
        !            36:         */
        !            37:        if (cmd("\02K\r")) {
        !            38:                printf("can't initialize bizcomp...");
        !            39:                return (0);
        !            40:        }
        !            41:        strcpy(cbuf, "\02.\r");
        !            42:        cbuf[1] = *mod;
        !            43:        if (cmd(cbuf)) {
        !            44:                printf("can't set dialing mode...");
        !            45:                return (0);
        !            46:        }
        !            47:        strcpy(cbuf, "\02D");
        !            48:        strcat(cbuf, num);
        !            49:        strcat(cbuf, "\r");
        !            50:        write(FD, cbuf, strlen(cbuf));
        !            51:        if (!detect("7\r")) {
        !            52:                printf("can't get dial tone...");
        !            53:                return (0);
        !            54:        }
        !            55:        if (boolean(value(VERBOSE)))
        !            56:                printf("ringing...");
        !            57:        /*
        !            58:         * The reply from the BIZCOMP should be:
        !            59:         *      2 \r or 7 \r    failure
        !            60:         *      1 \r            success
        !            61:         */
        !            62:        connected = detect("1\r");
        !            63: #ifdef ACULOG
        !            64:        if (timeout) {
        !            65:                char line[80];
        !            66: 
        !            67:                sprintf(line, "%d second dial timeout",
        !            68:                        number(value(DIALTIMEOUT)));
        !            69:                logent(value(HOST), num, "biz1022", line);
        !            70:        }
        !            71: #endif
        !            72:        if (timeout)
        !            73:                biz22_disconnect();     /* insurance */
        !            74:        return (connected);
        !            75: }
        !            76: 
        !            77: biz22w_dialer(num, acu)
        !            78:        char *num, *acu;
        !            79: {
        !            80: 
        !            81:        return (biz_dialer(num, "W"));
        !            82: }
        !            83: 
        !            84: biz22f_dialer(num, acu)
        !            85:        char *num, *acu;
        !            86: {
        !            87: 
        !            88:        return (biz_dialer(num, "V"));
        !            89: }
        !            90: 
        !            91: biz22_disconnect()
        !            92: {
        !            93:        int rw = 2;
        !            94: 
        !            95:        write(FD, DISCONNECT_CMD, 4);
        !            96:        sleep(2);
        !            97:        ioctl(FD, TIOCFLUSH, &rw);
        !            98: }
        !            99: 
        !           100: biz22_abort()
        !           101: {
        !           102: 
        !           103:        write(FD, "\02", 1);
        !           104: }
        !           105: 
        !           106: static int
        !           107: sigALRM()
        !           108: {
        !           109: 
        !           110:        timeout = 1;
        !           111:        longjmp(timeoutbuf, 1);
        !           112: }
        !           113: 
        !           114: static int
        !           115: cmd(s)
        !           116:        register char *s;
        !           117: {
        !           118:        char c;
        !           119:        int (*f)();
        !           120: 
        !           121:        write(FD, s, strlen(s));
        !           122:        f = signal(SIGALRM, sigALRM);
        !           123:        if (setjmp(timeoutbuf)) {
        !           124:                biz22_abort();
        !           125:                signal(SIGALRM, f);
        !           126:                return (1);
        !           127:        }
        !           128:        alarm(number(value(DIALTIMEOUT)));
        !           129:        read(FD, &c, 1);
        !           130:        alarm(0);
        !           131:        signal(SIGALRM, f);
        !           132:        c &= 0177;
        !           133:        return (c != '\r');
        !           134: }
        !           135: 
        !           136: static int
        !           137: detect(s)
        !           138:        register char *s;
        !           139: {
        !           140:        char c;
        !           141:        int (*f)();
        !           142: 
        !           143:        f = signal(SIGALRM, sigALRM);
        !           144:        timeout = 0;
        !           145:        while (*s) {
        !           146:                if (setjmp(timeoutbuf)) {
        !           147:                        biz22_abort();
        !           148:                        break;
        !           149:                }
        !           150:                alarm(number(value(DIALTIMEOUT)));
        !           151:                read(FD, &c, 1);
        !           152:                alarm(0);
        !           153:                c &= 0177;
        !           154:                if (c != *s++)
        !           155:                        return (0);
        !           156:        }
        !           157:        signal(SIGALRM, f);
        !           158:        return (timeout == 0);
        !           159: }

unix.superglobalmegacorp.com

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