Annotation of 43BSD/usr.bin/tip/remote.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[] = "@(#)remote.c   5.3 (Berkeley) 4/30/86";
                      9: #endif not lint
                     10: 
                     11: # include "tip.h"
                     12: 
                     13: /*
                     14:  * Attributes to be gleened from remote host description
                     15:  *   data base.
                     16:  */
                     17: static char **caps[] = {
                     18:        &AT, &DV, &CM, &CU, &EL, &IE, &OE, &PN, &PR, &DI,
                     19:        &ES, &EX, &FO, &RC, &RE, &PA
                     20: };
                     21: 
                     22: static char *capstrings[] = {
                     23:        "at", "dv", "cm", "cu", "el", "ie", "oe", "pn", "pr",
                     24:        "di", "es", "ex", "fo", "rc", "re", "pa", 0
                     25: };
                     26: 
                     27: char *rgetstr();
                     28: 
                     29: static
                     30: getremcap(host)
                     31:        register char *host;
                     32: {
                     33:        int stat;
                     34:        char tbuf[BUFSIZ];
                     35:        static char buf[BUFSIZ/2];
                     36:        char *bp = buf;
                     37:        register char **p, ***q;
                     38: 
                     39:        if ((stat = rgetent(tbuf, host)) <= 0) {
                     40:                if (DV ||
                     41:                    host[0] == '/' && access(DV = host, R_OK | W_OK) == 0) {
                     42:                        CU = DV;
                     43:                        HO = host;
                     44:                        HW = 1;
                     45:                        DU = 0;
                     46:                        if (!BR)
                     47:                                BR = DEFBR;
                     48:                        FS = DEFFS;
                     49:                        return;
                     50:                }
                     51:                fprintf(stderr, stat == 0 ?
                     52:                        "tip: unknown host %s\n" :
                     53:                        "tip: can't open host description file\n", host);
                     54:                exit(3);
                     55:        }
                     56: 
                     57:        for (p = capstrings, q = caps; *p != NULL; p++, q++)
                     58:                if (**q == NULL)
                     59:                        **q = rgetstr(*p, &bp);
                     60:        if (!BR && (BR = rgetnum("br")) < 0)
                     61:                BR = DEFBR;
                     62:        if ((FS = rgetnum("fs")) < 0)
                     63:                FS = DEFFS;
                     64:        if (DU < 0)
                     65:                DU = 0;
                     66:        else
                     67:                DU = rgetflag("du");
                     68:        if (DV == NOSTR) {
                     69:                fprintf(stderr, "%s: missing device spec\n", host);
                     70:                exit(3);
                     71:        }
                     72:        if (DU && CU == NOSTR)
                     73:                CU = DV;
                     74:        if (DU && PN == NOSTR) {
                     75:                fprintf(stderr, "%s: missing phone number\n", host);
                     76:                exit(3);
                     77:        }
                     78: 
                     79:        HD = rgetflag("hd");
                     80: 
                     81:        /*
                     82:         * This effectively eliminates the "hw" attribute
                     83:         *   from the description file
                     84:         */
                     85:        if (!HW)
                     86:                HW = (CU == NOSTR) || (DU && equal(DV, CU));
                     87:        HO = host;
                     88:        /*
                     89:         * see if uppercase mode should be turned on initially
                     90:         */
                     91:        if (rgetflag("ra"))
                     92:                boolean(value(RAISE)) = 1;
                     93:        if (rgetflag("ec"))
                     94:                boolean(value(ECHOCHECK)) = 1;
                     95:        if (rgetflag("be"))
                     96:                boolean(value(BEAUTIFY)) = 1;
                     97:        if (rgetflag("nb"))
                     98:                boolean(value(BEAUTIFY)) = 0;
                     99:        if (rgetflag("sc"))
                    100:                boolean(value(SCRIPT)) = 1;
                    101:        if (rgetflag("tb"))
                    102:                boolean(value(TABEXPAND)) = 1;
                    103:        if (rgetflag("vb"))
                    104:                boolean(value(VERBOSE)) = 1;
                    105:        if (rgetflag("nv"))
                    106:                boolean(value(VERBOSE)) = 0;
                    107:        if (rgetflag("ta"))
                    108:                boolean(value(TAND)) = 1;
                    109:        if (rgetflag("nt"))
                    110:                boolean(value(TAND)) = 0;
                    111:        if (rgetflag("rw"))
                    112:                boolean(value(RAWFTP)) = 1;
                    113:        if (rgetflag("hd"))
                    114:                boolean(value(HALFDUPLEX)) = 1;
                    115:        if (RE == NOSTR)
                    116:                RE = (char *)"tip.record";
                    117:        if (EX == NOSTR)
                    118:                EX = (char *)"\t\n\b\f";
                    119:        if (ES != NOSTR)
                    120:                vstring("es", ES);
                    121:        if (FO != NOSTR)
                    122:                vstring("fo", FO);
                    123:        if (PR != NOSTR)
                    124:                vstring("pr", PR);
                    125:        if (RC != NOSTR)
                    126:                vstring("rc", RC);
                    127:        if ((DL = rgetnum("dl")) < 0)
                    128:                DL = 0;
                    129:        if ((CL = rgetnum("cl")) < 0)
                    130:                CL = 0;
                    131:        if ((ET = rgetnum("et")) < 0)
                    132:                ET = 10;
                    133: }
                    134: 
                    135: char *
                    136: getremote(host)
                    137:        char *host;
                    138: {
                    139:        register char *cp;
                    140:        static char *next;
                    141:        static int lookedup = 0;
                    142: 
                    143:        if (!lookedup) {
                    144:                if (host == NOSTR && (host = getenv("HOST")) == NOSTR) {
                    145:                        fprintf(stderr, "tip: no host specified\n");
                    146:                        exit(3);
                    147:                }
                    148:                getremcap(host);
                    149:                next = DV;
                    150:                lookedup++;
                    151:        }
                    152:        /*
                    153:         * We return a new device each time we're called (to allow
                    154:         *   a rotary action to be simulated)
                    155:         */
                    156:        if (next == NOSTR)
                    157:                return (NOSTR);
                    158:        if ((cp = index(next, ',')) == NULL) {
                    159:                DV = next;
                    160:                next = NOSTR;
                    161:        } else {
                    162:                *cp++ = '\0';
                    163:                DV = next;
                    164:                next = cp;
                    165:        }
                    166:        return (DV);
                    167: }

unix.superglobalmegacorp.com

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