xref: /titanic_51/usr/src/cmd/tip/tip.h (revision 6a72db4a7fa12c3e0d1c1cf91a07390739fa0fbf)
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