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