xref: /netbsd-src/usr.bin/telnet/externs.h (revision ae9172d6cd9432a6a1a56760d86b32c57a66c39c)
1 /*
2  * Copyright (c) 1988, 1990, 1993
3  *	The Regents of the University of California.  All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. All advertising materials mentioning features or use of this software
14  *    must display the following acknowledgement:
15  *	This product includes software developed by the University of
16  *	California, Berkeley and its contributors.
17  * 4. Neither the name of the University nor the names of its contributors
18  *    may be used to endorse or promote products derived from this software
19  *    without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31  * SUCH DAMAGE.
32  *
33  *	from: @(#)externs.h	8.1 (Berkeley) 6/6/93
34  *	$Id: externs.h,v 1.3 1994/02/25 03:00:25 cgd Exp $
35  */
36 
37 #ifndef	BSD
38 # define BSD 43
39 #endif
40 
41 /*
42  * ucb stdio.h defines BSD as something wierd
43  */
44 #if defined(sun) && defined(__svr4__)
45 #define BSD 43
46 #endif
47 
48 #ifndef	USE_TERMIO
49 # if BSD > 43 || defined(SYSV_TERMIO)
50 #  define USE_TERMIO
51 # endif
52 #endif
53 
54 #include <stdio.h>
55 #include <setjmp.h>
56 #if defined(CRAY) && !defined(NO_BSD_SETJMP)
57 #include <bsdsetjmp.h>
58 #endif
59 #ifndef	FILIO_H
60 #include <sys/ioctl.h>
61 #else
62 #include <sys/filio.h>
63 #endif
64 #ifdef CRAY
65 # include <errno.h>
66 #endif /* CRAY */
67 #ifdef	USE_TERMIO
68 # ifndef	VINTR
69 #  ifdef SYSV_TERMIO
70 #   include <sys/termio.h>
71 #  else
72 #   include <sys/termios.h>
73 #   define termio termios
74 #  endif
75 # endif
76 #endif
77 #if defined(NO_CC_T) || !defined(USE_TERMIO)
78 # if !defined(USE_TERMIO)
79 typedef char cc_t;
80 # else
81 typedef unsigned char cc_t;
82 # endif
83 #endif
84 
85 #ifndef	NO_STRING_H
86 #include <string.h>
87 #endif
88 #include <strings.h>
89 
90 #ifndef	_POSIX_VDISABLE
91 # ifdef sun
92 #  include <sys/param.h>	/* pick up VDISABLE definition, mayby */
93 # endif
94 # ifdef VDISABLE
95 #  define _POSIX_VDISABLE VDISABLE
96 # else
97 #  define _POSIX_VDISABLE ((cc_t)'\377')
98 # endif
99 #endif
100 
101 #define	SUBBUFSIZE	256
102 
103 #ifndef CRAY
104 extern int errno;		/* outside this world */
105 #endif /* !CRAY */
106 
107 #if	!defined(P)
108 # ifdef	__STDC__
109 #  define	P(x)	x
110 # else
111 #  define	P(x)	()
112 # endif
113 #endif
114 
115 extern int
116     autologin,		/* Autologin enabled */
117     skiprc,		/* Don't process the ~/.telnetrc file */
118     eight,		/* use eight bit mode (binary in and/or out */
119     flushout,		/* flush output */
120     connected,		/* Are we connected to the other side? */
121     globalmode,		/* Mode tty should be in */
122     In3270,			/* Are we in 3270 mode? */
123     telnetport,		/* Are we connected to the telnet port? */
124     localflow,		/* Flow control handled locally */
125     restartany,		/* If flow control, restart output on any character */
126     localchars,		/* we recognize interrupt/quit */
127     donelclchars,		/* the user has set "localchars" */
128     showoptions,
129     net,		/* Network file descriptor */
130     tin,		/* Terminal input file descriptor */
131     tout,		/* Terminal output file descriptor */
132     crlf,		/* Should '\r' be mapped to <CR><LF> (or <CR><NUL>)? */
133     autoflush,		/* flush output when interrupting? */
134     autosynch,		/* send interrupt characters with SYNCH? */
135     SYNCHing,		/* Is the stream in telnet SYNCH mode? */
136     donebinarytoggle,	/* the user has put us in binary */
137     dontlecho,		/* do we suppress local echoing right now? */
138     crmod,
139     netdata,		/* Print out network data flow */
140     prettydump,		/* Print "netdata" output in user readable format */
141 #if	defined(unix)
142 #if	defined(TN3270)
143     cursesdata,		/* Print out curses data flow */
144     apitrace,		/* Trace API transactions */
145 #endif	/* defined(TN3270) */
146     termdata,		/* Print out terminal data flow */
147 #endif	/* defined(unix) */
148     debug;			/* Debug level */
149 
150 extern cc_t escape;	/* Escape to command mode */
151 extern cc_t rlogin;	/* Rlogin mode escape character */
152 #ifdef	KLUDGELINEMODE
153 extern cc_t echoc;	/* Toggle local echoing */
154 #endif
155 
156 extern char
157     *prompt;		/* Prompt for command. */
158 
159 extern char
160     doopt[],
161     dont[],
162     will[],
163     wont[],
164     options[],		/* All the little options */
165     *hostname;		/* Who are we connected to? */
166 
167 /*
168  * We keep track of each side of the option negotiation.
169  */
170 
171 #define	MY_STATE_WILL		0x01
172 #define	MY_WANT_STATE_WILL	0x02
173 #define	MY_STATE_DO		0x04
174 #define	MY_WANT_STATE_DO	0x08
175 
176 /*
177  * Macros to check the current state of things
178  */
179 
180 #define	my_state_is_do(opt)		(options[opt]&MY_STATE_DO)
181 #define	my_state_is_will(opt)		(options[opt]&MY_STATE_WILL)
182 #define my_want_state_is_do(opt)	(options[opt]&MY_WANT_STATE_DO)
183 #define my_want_state_is_will(opt)	(options[opt]&MY_WANT_STATE_WILL)
184 
185 #define	my_state_is_dont(opt)		(!my_state_is_do(opt))
186 #define	my_state_is_wont(opt)		(!my_state_is_will(opt))
187 #define my_want_state_is_dont(opt)	(!my_want_state_is_do(opt))
188 #define my_want_state_is_wont(opt)	(!my_want_state_is_will(opt))
189 
190 #define	set_my_state_do(opt)		{options[opt] |= MY_STATE_DO;}
191 #define	set_my_state_will(opt)		{options[opt] |= MY_STATE_WILL;}
192 #define	set_my_want_state_do(opt)	{options[opt] |= MY_WANT_STATE_DO;}
193 #define	set_my_want_state_will(opt)	{options[opt] |= MY_WANT_STATE_WILL;}
194 
195 #define	set_my_state_dont(opt)		{options[opt] &= ~MY_STATE_DO;}
196 #define	set_my_state_wont(opt)		{options[opt] &= ~MY_STATE_WILL;}
197 #define	set_my_want_state_dont(opt)	{options[opt] &= ~MY_WANT_STATE_DO;}
198 #define	set_my_want_state_wont(opt)	{options[opt] &= ~MY_WANT_STATE_WILL;}
199 
200 /*
201  * Make everything symetrical
202  */
203 
204 #define	HIS_STATE_WILL			MY_STATE_DO
205 #define	HIS_WANT_STATE_WILL		MY_WANT_STATE_DO
206 #define HIS_STATE_DO			MY_STATE_WILL
207 #define HIS_WANT_STATE_DO		MY_WANT_STATE_WILL
208 
209 #define	his_state_is_do			my_state_is_will
210 #define	his_state_is_will		my_state_is_do
211 #define his_want_state_is_do		my_want_state_is_will
212 #define his_want_state_is_will		my_want_state_is_do
213 
214 #define	his_state_is_dont		my_state_is_wont
215 #define	his_state_is_wont		my_state_is_dont
216 #define his_want_state_is_dont		my_want_state_is_wont
217 #define his_want_state_is_wont		my_want_state_is_dont
218 
219 #define	set_his_state_do		set_my_state_will
220 #define	set_his_state_will		set_my_state_do
221 #define	set_his_want_state_do		set_my_want_state_will
222 #define	set_his_want_state_will		set_my_want_state_do
223 
224 #define	set_his_state_dont		set_my_state_wont
225 #define	set_his_state_wont		set_my_state_dont
226 #define	set_his_want_state_dont		set_my_want_state_wont
227 #define	set_his_want_state_wont		set_my_want_state_dont
228 
229 
230 extern FILE
231     *NetTrace;		/* Where debugging output goes */
232 extern unsigned char
233     NetTraceFile[];	/* Name of file where debugging output goes */
234 extern void
235     SetNetTrace P((char *));	/* Function to change where debugging goes */
236 
237 extern jmp_buf
238     peerdied,
239     toplevel;		/* For error conditions. */
240 
241 extern void
242     command P((int, char *, int)),
243     Dump P((int, unsigned char *, int)),
244     init_3270 P((void)),
245     printoption P((char *, int, int)),
246     printsub P((int, unsigned char *, int)),
247     sendnaws P((void)),
248     setconnmode P((int)),
249     setcommandmode P((void)),
250     setneturg P((void)),
251     sys_telnet_init P((void)),
252     telnet P((char *)),
253     tel_enter_binary P((int)),
254     TerminalFlushOutput P((void)),
255     TerminalNewMode P((int)),
256     TerminalRestoreState P((void)),
257     TerminalSaveState P((void)),
258     tninit P((void)),
259     upcase P((char *)),
260     willoption P((int)),
261     wontoption P((int));
262 
263 extern void
264     send_do P((int, int)),
265     send_dont P((int, int)),
266     send_will P((int, int)),
267     send_wont P((int, int));
268 
269 extern void
270     lm_will P((unsigned char *, int)),
271     lm_wont P((unsigned char *, int)),
272     lm_do P((unsigned char *, int)),
273     lm_dont P((unsigned char *, int)),
274     lm_mode P((unsigned char *, int, int));
275 
276 extern void
277     slc_init P((void)),
278     slcstate P((void)),
279     slc_mode_export P((void)),
280     slc_mode_import P((int)),
281     slc_import P((int)),
282     slc_export P((void)),
283     slc P((unsigned char *, int)),
284     slc_check P((void)),
285     slc_start_reply P((void)),
286     slc_add_reply P((int, int, int)),
287     slc_end_reply P((void));
288 extern int
289     slc_update P((void));
290 
291 extern void
292     env_opt P((unsigned char *, int)),
293     env_opt_start P((void)),
294     env_opt_start_info P((void)),
295     env_opt_add P((unsigned char *)),
296     env_opt_end P((int));
297 
298 extern unsigned char
299     *env_default P((int, int)),
300     *env_getvalue P((unsigned char *));
301 
302 extern int
303     get_status P((void)),
304     dosynch P((void));
305 
306 extern cc_t
307     *tcval P((int));
308 
309 #ifndef	USE_TERMIO
310 
311 extern struct	tchars ntc;
312 extern struct	ltchars nltc;
313 extern struct	sgttyb nttyb;
314 
315 # define termEofChar		ntc.t_eofc
316 # define termEraseChar		nttyb.sg_erase
317 # define termFlushChar		nltc.t_flushc
318 # define termIntChar		ntc.t_intrc
319 # define termKillChar		nttyb.sg_kill
320 # define termLiteralNextChar	nltc.t_lnextc
321 # define termQuitChar		ntc.t_quitc
322 # define termSuspChar		nltc.t_suspc
323 # define termRprntChar		nltc.t_rprntc
324 # define termWerasChar		nltc.t_werasc
325 # define termStartChar		ntc.t_startc
326 # define termStopChar		ntc.t_stopc
327 # define termForw1Char		ntc.t_brkc
328 extern cc_t termForw2Char;
329 extern cc_t termAytChar;
330 
331 # define termEofCharp		(cc_t *)&ntc.t_eofc
332 # define termEraseCharp		(cc_t *)&nttyb.sg_erase
333 # define termFlushCharp		(cc_t *)&nltc.t_flushc
334 # define termIntCharp		(cc_t *)&ntc.t_intrc
335 # define termKillCharp		(cc_t *)&nttyb.sg_kill
336 # define termLiteralNextCharp	(cc_t *)&nltc.t_lnextc
337 # define termQuitCharp		(cc_t *)&ntc.t_quitc
338 # define termSuspCharp		(cc_t *)&nltc.t_suspc
339 # define termRprntCharp		(cc_t *)&nltc.t_rprntc
340 # define termWerasCharp		(cc_t *)&nltc.t_werasc
341 # define termStartCharp		(cc_t *)&ntc.t_startc
342 # define termStopCharp		(cc_t *)&ntc.t_stopc
343 # define termForw1Charp		(cc_t *)&ntc.t_brkc
344 # define termForw2Charp		(cc_t *)&termForw2Char
345 # define termAytCharp		(cc_t *)&termAytChar
346 
347 # else
348 
349 extern struct	termio new_tc;
350 
351 # define termEofChar		new_tc.c_cc[VEOF]
352 # define termEraseChar		new_tc.c_cc[VERASE]
353 # define termIntChar		new_tc.c_cc[VINTR]
354 # define termKillChar		new_tc.c_cc[VKILL]
355 # define termQuitChar		new_tc.c_cc[VQUIT]
356 
357 # ifndef	VSUSP
358 extern cc_t termSuspChar;
359 # else
360 #  define termSuspChar		new_tc.c_cc[VSUSP]
361 # endif
362 # if	defined(VFLUSHO) && !defined(VDISCARD)
363 #  define VDISCARD VFLUSHO
364 # endif
365 # ifndef	VDISCARD
366 extern cc_t termFlushChar;
367 # else
368 #  define termFlushChar		new_tc.c_cc[VDISCARD]
369 # endif
370 # ifndef VWERASE
371 extern cc_t termWerasChar;
372 # else
373 #  define termWerasChar		new_tc.c_cc[VWERASE]
374 # endif
375 # ifndef	VREPRINT
376 extern cc_t termRprntChar;
377 # else
378 #  define termRprntChar		new_tc.c_cc[VREPRINT]
379 # endif
380 # ifndef	VLNEXT
381 extern cc_t termLiteralNextChar;
382 # else
383 #  define termLiteralNextChar	new_tc.c_cc[VLNEXT]
384 # endif
385 # ifndef	VSTART
386 extern cc_t termStartChar;
387 # else
388 #  define termStartChar		new_tc.c_cc[VSTART]
389 # endif
390 # ifndef	VSTOP
391 extern cc_t termStopChar;
392 # else
393 #  define termStopChar		new_tc.c_cc[VSTOP]
394 # endif
395 # ifndef	VEOL
396 extern cc_t termForw1Char;
397 # else
398 #  define termForw1Char		new_tc.c_cc[VEOL]
399 # endif
400 # ifndef	VEOL2
401 extern cc_t termForw2Char;
402 # else
403 #  define termForw2Char		new_tc.c_cc[VEOL]
404 # endif
405 # ifndef	VSTATUS
406 extern cc_t termAytChar;
407 #else
408 #  define termAytChar		new_tc.c_cc[VSTATUS]
409 #endif
410 
411 # if !defined(CRAY) || defined(__STDC__)
412 #  define termEofCharp		&termEofChar
413 #  define termEraseCharp	&termEraseChar
414 #  define termIntCharp		&termIntChar
415 #  define termKillCharp		&termKillChar
416 #  define termQuitCharp		&termQuitChar
417 #  define termSuspCharp		&termSuspChar
418 #  define termFlushCharp	&termFlushChar
419 #  define termWerasCharp	&termWerasChar
420 #  define termRprntCharp	&termRprntChar
421 #  define termLiteralNextCharp	&termLiteralNextChar
422 #  define termStartCharp	&termStartChar
423 #  define termStopCharp		&termStopChar
424 #  define termForw1Charp	&termForw1Char
425 #  define termForw2Charp	&termForw2Char
426 #  define termAytCharp		&termAytChar
427 # else
428 	/* Work around a compiler bug */
429 #  define termEofCharp		0
430 #  define termEraseCharp	0
431 #  define termIntCharp		0
432 #  define termKillCharp		0
433 #  define termQuitCharp		0
434 #  define termSuspCharp		0
435 #  define termFlushCharp	0
436 #  define termWerasCharp	0
437 #  define termRprntCharp	0
438 #  define termLiteralNextCharp	0
439 #  define termStartCharp	0
440 #  define termStopCharp		0
441 #  define termForw1Charp	0
442 #  define termForw2Charp	0
443 #  define termAytCharp		0
444 # endif
445 #endif
446 
447 
448 /* Ring buffer structures which are shared */
449 
450 extern Ring
451     netoring,
452     netiring,
453     ttyoring,
454     ttyiring;
455 
456 /* Tn3270 section */
457 #if	defined(TN3270)
458 
459 extern int
460     HaveInput,		/* Whether an asynchronous I/O indication came in */
461     noasynchtty,	/* Don't do signals on I/O (SIGURG, SIGIO) */
462     noasynchnet,	/* Don't do signals on I/O (SIGURG, SIGIO) */
463     sigiocount,		/* Count of SIGIO receptions */
464     shell_active;	/* Subshell is active */
465 
466 extern char
467     *Ibackp,		/* Oldest byte of 3270 data */
468     Ibuf[],		/* 3270 buffer */
469     *Ifrontp,		/* Where next 3270 byte goes */
470     tline[],
471     *transcom;		/* Transparent command */
472 
473 extern int
474     settranscom P((int, char**));
475 
476 extern void
477     inputAvailable P((int));
478 #endif	/* defined(TN3270) */
479