Annotation of 43BSDTahoe/usr.bin/tip/acu.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[] = "@(#)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.