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