Annotation of 43BSDTahoe/usr.bin/tip/acu.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[] = "@(#)acu.c      5.5 (Berkeley) 12/4/87";
        !             9: #endif not lint
        !            10: 
        !            11: #include "tip.h"
        !            12: 
        !            13: static acu_t *acu = NOACU;
        !            14: static int conflag;
        !            15: static int acuabort();
        !            16: static acu_t *acutype();
        !            17: static jmp_buf jmpbuf;
        !            18: /*
        !            19:  * Establish connection for tip
        !            20:  *
        !            21:  * If DU is true, we should dial an ACU whose type is AT.
        !            22:  * The phone numbers are in PN, and the call unit is in CU.
        !            23:  *
        !            24:  * If the PN is an '@', then we consult the PHONES file for
        !            25:  *   the phone numbers.  This file is /etc/phones, unless overriden
        !            26:  *   by an exported shell variable.
        !            27:  *
        !            28:  * The data base files must be in the format:
        !            29:  *     host-name[ \t]*phone-number
        !            30:  *   with the possibility of multiple phone numbers
        !            31:  *   for a single host acting as a rotary (in the order
        !            32:  *   found in the file).
        !            33:  */
        !            34: char *
        !            35: connect()
        !            36: {
        !            37:        register char *cp = PN;
        !            38:        char *phnum, string[256];
        !            39:        FILE *fd;
        !            40:        int tried = 0;
        !            41: 
        !            42:        if (!DU) {              /* regular connect message */
        !            43:                if (CM != NOSTR)
        !            44:                        pwrite(FD, CM, size(CM));
        !            45:                logent(value(HOST), "", DV, "call completed");
        !            46:                return (NOSTR);
        !            47:        }
        !            48:        /*
        !            49:         * @ =>'s use data base in PHONES environment variable
        !            50:         *        otherwise, use /etc/phones
        !            51:         */
        !            52:        signal(SIGINT, acuabort);
        !            53:        signal(SIGQUIT, acuabort);
        !            54:        if (setjmp(jmpbuf)) {
        !            55:                signal(SIGINT, SIG_IGN);
        !            56:                signal(SIGQUIT, SIG_IGN);
        !            57:                printf("\ncall aborted\n");
        !            58:                logent(value(HOST), "", "", "call aborted");
        !            59:                if (acu != NOACU) {
        !            60:                        boolean(value(VERBOSE)) = FALSE;
        !            61:                        if (conflag)
        !            62:                                disconnect(NOSTR);
        !            63:                        else
        !            64:                                (*acu->acu_abort)();
        !            65:                }
        !            66:                return ("interrupt");
        !            67:        }
        !            68:        if ((acu = acutype(AT)) == NOACU)
        !            69:                return ("unknown ACU type");
        !            70:        if (*cp != '@') {
        !            71:                while (*cp) {
        !            72:                        for (phnum = cp; *cp && *cp != ','; cp++)
        !            73:                                ;
        !            74:                        if (*cp)
        !            75:                                *cp++ = '\0';
        !            76:                        
        !            77:                        if (conflag = (*acu->acu_dialer)(phnum, CU)) {
        !            78:                                logent(value(HOST), phnum, acu->acu_name,
        !            79:                                        "call completed");
        !            80:                                return (NOSTR);
        !            81:                        } else
        !            82:                                logent(value(HOST), phnum, acu->acu_name,
        !            83:                                        "call failed");
        !            84:                        tried++;
        !            85:                }
        !            86:        } else {
        !            87:                if ((fd = fopen(PH, "r")) == NOFILE) {
        !            88:                        printf("%s: ", PH);
        !            89:                        return ("can't open phone number file");
        !            90:                }
        !            91:                while (fgets(string, sizeof(string), fd) != NOSTR) {
        !            92:                        for (cp = string; !any(*cp, " \t\n"); cp++)
        !            93:                                ;
        !            94:                        if (*cp == '\n') {
        !            95:                                fclose(fd);
        !            96:                                return ("unrecognizable host name");
        !            97:                        }
        !            98:                        *cp++ = '\0';
        !            99:                        if (strcmp(string, value(HOST)))
        !           100:                                continue;
        !           101:                        while (any(*cp, " \t"))
        !           102:                                cp++;
        !           103:                        if (*cp == '\n') {
        !           104:                                fclose(fd);
        !           105:                                return ("missing phone number");
        !           106:                        }
        !           107:                        for (phnum = cp; *cp && *cp != ',' && *cp != '\n'; cp++)
        !           108:                                ;
        !           109:                        if (*cp)
        !           110:                                *cp++ = '\0';
        !           111:                        
        !           112:                        if (conflag = (*acu->acu_dialer)(phnum, CU)) {
        !           113:                                fclose(fd);
        !           114:                                logent(value(HOST), phnum, acu->acu_name,
        !           115:                                        "call completed");
        !           116:                                return (NOSTR);
        !           117:                        } else
        !           118:                                logent(value(HOST), phnum, acu->acu_name,
        !           119:                                        "call failed");
        !           120:                        tried++;
        !           121:                }
        !           122:                fclose(fd);
        !           123:        }
        !           124:        if (!tried)
        !           125:                logent(value(HOST), "", acu->acu_name, "missing phone number");
        !           126:        else
        !           127:                (*acu->acu_abort)();
        !           128:        return (tried ? "call failed" : "missing phone number");
        !           129: }
        !           130: 
        !           131: disconnect(reason)
        !           132:        char *reason;
        !           133: {
        !           134:        if (!conflag) {
        !           135:                logent(value(HOST), "", DV, "call terminated");
        !           136:                return;
        !           137:        }
        !           138:        if (reason == NOSTR) {
        !           139:                logent(value(HOST), "", acu->acu_name, "call terminated");
        !           140:                if (boolean(value(VERBOSE)))
        !           141:                        printf("\r\ndisconnecting...");
        !           142:        } else 
        !           143:                logent(value(HOST), "", acu->acu_name, reason);
        !           144:        (*acu->acu_disconnect)();
        !           145: }
        !           146: 
        !           147: static int
        !           148: acuabort(s)
        !           149: {
        !           150:        signal(s, SIG_IGN);
        !           151:        longjmp(jmpbuf, 1);
        !           152: }
        !           153: 
        !           154: static acu_t *
        !           155: acutype(s)
        !           156:        register char *s;
        !           157: {
        !           158:        register acu_t *p;
        !           159:        extern acu_t acutable[];
        !           160: 
        !           161:        for (p = acutable; p->acu_name != '\0'; p++)
        !           162:                if (!strcmp(s, p->acu_name))
        !           163:                        return (p);
        !           164:        return (NOACU);
        !           165: }

unix.superglobalmegacorp.com

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