xref: /original-bsd/usr.bin/tip/remote.c (revision 4b2c5e10)
1 #ifndef lint
2 static char sccsid[] = "@(#)remote.c	4.7 (Berkeley) 06/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 }
151