1 /* 2 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 /* 6 * Copyright (c) 1983 Regents of the University of California. 7 * All rights reserved. The Berkeley software License Agreement 8 * specifies the terms and conditions for redistribution. 9 */ 10 11 #ifndef _TIP_H 12 #define _TIP_H 13 14 #pragma ident "%Z%%M% %I% %E% SMI" 15 16 /* 17 * tip - terminal interface program 18 */ 19 20 #include <sys/types.h> 21 #ifdef USG 22 #include <fcntl.h> /* for O_RDWR, etc. */ 23 #include <unistd.h> /* for R_OK, etc. */ 24 #else 25 #include <sys/file.h> 26 #endif 27 28 #include <sys/termios.h> 29 #include <sys/filio.h> /* XXX - for FIONREAD only */ 30 #include <signal.h> 31 #include <stdio.h> 32 #include <pwd.h> 33 #include <ctype.h> 34 #include <setjmp.h> 35 #include <errno.h> 36 #include <string.h> 37 #include <time.h> 38 #include <sys/isa_defs.h> /* for ENDIAN defines */ 39 #include <stdlib.h> 40 #include <sys/wait.h> 41 42 #define _CTRL(c) (c&037) 43 44 #ifdef USG 45 #define signal(_sig_, _hdlr_) sigset((_sig_), (_hdlr_)) 46 #endif 47 typedef void (*sig_handler_t)(int); /* works on BSD and SV */ 48 49 /* 50 * Remote host attributes 51 */ 52 char *DV; /* UNIX device(s) to open */ 53 char *EL; /* chars marking an EOL */ 54 char *CM; /* initial connection message */ 55 char *IE; /* EOT to expect on input */ 56 char *OE; /* EOT to send to complete FT */ 57 char *CU; /* call unit if making a phone call */ 58 char *AT; /* acu type */ 59 char *PN; /* phone number(s) */ 60 char *DI; /* disconnect string */ 61 char *PA; /* parity to be generated */ 62 63 char *PH; /* phone number file */ 64 char *RM; /* remote file name */ 65 char *HO; /* host name */ 66 67 int BR; /* line speed for conversation */ 68 int FS; /* frame size for transfers */ 69 70 signed char DU; /* this host is dialed up */ 71 char HW; /* this device is hardwired, see hunt.c */ 72 char *ES; /* escape character */ 73 char *EX; /* exceptions */ 74 char *FO; /* force (literal next) char */ 75 char *RC; /* raise character */ 76 char *RE; /* script record file */ 77 char *PR; /* remote prompt */ 78 int DL; /* line delay for file transfers to remote */ 79 int CL; /* char delay for file transfers to remote */ 80 int ET; /* echocheck timeout */ 81 int DB; /* dialback - ignore hangup */ 82 83 /* 84 * String value table 85 */ 86 typedef 87 struct { 88 char *v_name; /* whose name is it */ 89 char v_type; /* for interpreting set's */ 90 char v_access; /* protection of touchy ones */ 91 char *v_abrev; /* possible abreviation */ 92 char *v_value; /* casted to a union later */ 93 } 94 value_t; 95 96 #define STRING 01 /* string valued */ 97 #define BOOL 02 /* true-false value */ 98 #define NUMBER 04 /* numeric value */ 99 #define CHAR 010 /* character value */ 100 101 #define WRITE 01 /* write access to variable */ 102 #define READ 02 /* read access */ 103 104 #define CHANGED 01 /* low bit is used to show modification */ 105 #define PUBLIC 1 /* public access rights */ 106 #define PRIVATE 03 /* private to definer */ 107 #define ROOT 05 /* root defined */ 108 109 #define TRUE 1 110 #define FALSE 0 111 112 #define ENVIRON 020 /* initialize out of the environment */ 113 #define IREMOTE 040 /* initialize out of remote structure */ 114 #define INIT 0100 /* static data space used for initialization */ 115 #define TMASK 017 116 117 /* 118 * Definition of ACU line description 119 */ 120 typedef 121 struct { 122 char *acu_name; 123 int (*acu_dialer)(char *, char *); 124 void (*acu_disconnect)(void); 125 void (*acu_abort)(void); 126 } 127 acu_t; 128 129 #define equal(a, b) (strcmp(a, b) == 0) /* A nice function to compare */ 130 131 /* 132 * variable manipulation stuff -- 133 * if we defined the value entry in value_t, then we couldn't 134 * initialize it in vars.c, so we cast it as needed to keep lint 135 * happy. 136 */ 137 typedef 138 union { 139 int zz_number; 140 int *zz_address; 141 #if defined(_LITTLE_ENDIAN) 142 short zz_boolean; 143 char zz_character; 144 #endif 145 #if defined(_BIG_ENDIAN) 146 int zz_boolean; 147 int zz_character; 148 #endif 149 } 150 zzhack; 151 152 #define value(v) vtable[v].v_value 153 154 #define boolean(v) ((((zzhack *)(&(v))))->zz_boolean) 155 #define number(v) ((((zzhack *)(&(v))))->zz_number) 156 #define character(v) ((((zzhack *)(&(v))))->zz_character) 157 #define address(v) ((((zzhack *)(&(v))))->zz_address) 158 159 /* 160 * Escape command table definitions -- 161 * lookup in this table is performed when ``escapec'' is recognized 162 * at the begining of a line (as defined by the eolmarks variable). 163 */ 164 165 typedef 166 struct { 167 char e_char; /* char to match on */ 168 char e_flags; /* experimental, priviledged */ 169 char *e_help; /* help string */ 170 void (*e_func)(int); /* command */ 171 } 172 esctable_t; 173 174 #define NORM 00 /* normal protection, execute anyone */ 175 #define EXP 01 /* experimental, mark it with a `*' on help */ 176 #define PRIV 02 /* priviledged, root execute only */ 177 178 extern int vflag; /* verbose during reading of .tiprc file */ 179 extern value_t vtable[]; /* variable table */ 180 extern int noparity; 181 182 183 #ifndef ACULOG 184 #define logent(a, b, c, d) 185 #define loginit() 186 #else 187 extern void logent(char *, char *, char *, char *); 188 extern void loginit(void); 189 #endif 190 191 /* 192 * Definition of indices into variable table so 193 * value(DEFINE) turns into a static address. 194 */ 195 196 #define BEAUTIFY 0 197 #define BAUDRATE 1 198 #define DIALTIMEOUT 2 199 #define EOFREAD 3 200 #define EOFWRITE 4 201 #define EOL 5 202 #define ESCAPE 6 203 #define EXCEPTIONS 7 204 #define FORCE 8 205 #define FRAMESIZE 9 206 #define HOST 10 207 #define LOG 11 208 #define PHONES 12 209 #define PROMPT 13 210 #define RAISE 14 211 #define RAISECHAR 15 212 #define RECORD 16 213 #define REMOTE 17 214 #define SCRIPT 18 215 #define TABEXPAND 19 216 #define VERBOSE 20 217 #define SHELL 21 218 #define HOME 22 219 #define ECHOCHECK 23 220 #define DISCONNECT 24 221 #define TAND 25 222 #define LDELAY 26 223 #define CDELAY 27 224 #define ETIMEOUT 28 225 #define RAWFTP 29 226 #define HALFDUPLEX 30 227 #define LECHO 31 228 #define PARITY 32 229 #define HARDWAREFLOW 33 230 231 #define NOVAL ((value_t *)NULL) 232 #define NOACU ((acu_t *)NULL) 233 #define NOSTR ((char *)NULL) 234 #define NOFILE ((FILE *)NULL) 235 #define NOPWD ((struct passwd *)0) 236 237 struct termios arg; /* current mode of local terminal */ 238 struct termios defarg; /* initial mode of local terminal */ 239 240 FILE *fscript; /* FILE for scripting */ 241 FILE *phfd; /* FILE for PHONES file */ 242 243 int fildes[2]; /* file transfer synchronization channel */ 244 int repdes[2]; /* read process sychronization channel */ 245 int FD; /* open file descriptor to remote host */ 246 int AC; /* open file descriptor to dialer (v831 only) */ 247 int vflag; /* print .tiprc initialization sequence */ 248 int sfd; /* for ~< operation */ 249 int pid; /* pid of tipout */ 250 int uid, euid; /* real and effective user id's */ 251 int gid, egid; /* real and effective group id's */ 252 int stoprompt; /* for interrupting a prompt session */ 253 int timedout; /* ~> transfer timedout */ 254 int cumode; /* simulating the "cu" program */ 255 256 char fname[80]; /* file name buffer for ~< */ 257 char copyname[80]; /* file name buffer for ~> */ 258 char ccc; /* synchronization character */ 259 char ch; /* for tipout */ 260 char *uucplock; /* name of lock file for uucp's */ 261 extern int trusted_device; 262 263 264 extern char *connect(void); 265 extern char *ctrl(char); 266 extern char *getremote(char *); 267 extern char *expand(char []); 268 extern char *vinterp(char *, char); 269 extern void cumain(int, char *[]); 270 extern void delock(char *); 271 extern void disconnect(char *); 272 extern void myperm(void); 273 extern void parwrite(int, unsigned char *, int); 274 extern void raw(void); 275 extern void setparity(char *); 276 extern void setscript(void); 277 extern void tandem(char *); 278 extern void tip_abort(char *); 279 extern void ttysetup(int); 280 extern void unraw(void); 281 extern void userperm(void); 282 extern void vinit(void); 283 extern void vlex(char *); 284 extern int any(char, char *); 285 extern int hunt(char *); 286 extern int prompt(char *, char *, size_t); 287 extern int rgetent(char *, char *, int); 288 extern int rgetflag(char *); 289 extern int rgetnum(char *); 290 extern int speed(int); 291 extern int tip_mlock(char *); 292 extern int vstring(char *, char *); 293 294 #endif /* _TIP_H */ 295