* Copyright (c) 1988, 1990, 1993
* The Regents of the University of California. All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* @(#)externs.h 8.1 (Berkeley) 6/6/93
* ucb stdio.h defines BSD as something wierd
#if defined(sun) && defined(__svr4__)
#if (BSD > 43 || defined(SYSV_TERMIO)) && !defined(USE_TERMIO)
#if defined(CRAY) && !defined(NO_BSD_SETJMP)
# include <sys/termios.h>
#if defined(NO_CC_T) || !defined(USE_TERMIO)
# if !defined(USE_TERMIO)
typedef unsigned char cc_t
;
# include <sys/param.h> /* pick up VDISABLE definition, mayby */
# define _POSIX_VDISABLE VDISABLE
# define _POSIX_VDISABLE ((cc_t)'\377')
extern int errno
; /* outside this world */
autologin
, /* Autologin enabled */
skiprc
, /* Don't process the ~/.telnetrc file */
eight
, /* use eight bit mode (binary in and/or out */
flushout
, /* flush output */
connected
, /* Are we connected to the other side? */
globalmode
, /* Mode tty should be in */
In3270
, /* Are we in 3270 mode? */
telnetport
, /* Are we connected to the telnet port? */
localflow
, /* Flow control handled locally */
restartany
, /* If flow control, restart output on any character */
localchars
, /* we recognize interrupt/quit */
donelclchars
, /* the user has set "localchars" */
net
, /* Network file descriptor */
tin
, /* Terminal input file descriptor */
tout
, /* Terminal output file descriptor */
crlf
, /* Should '\r' be mapped to <CR><LF> (or <CR><NUL>)? */
autoflush
, /* flush output when interrupting? */
autosynch
, /* send interrupt characters with SYNCH? */
SYNCHing
, /* Is the stream in telnet SYNCH mode? */
donebinarytoggle
, /* the user has put us in binary */
dontlecho
, /* do we suppress local echoing right now? */
netdata
, /* Print out network data flow */
prettydump
, /* Print "netdata" output in user readable format */
cursesdata
, /* Print out curses data flow */
apitrace
, /* Trace API transactions */
#endif /* defined(TN3270) */
termdata
, /* Print out terminal data flow */
#endif /* defined(unix) */
extern cc_t escape
; /* Escape to command mode */
extern cc_t rlogin
; /* Rlogin mode escape character */
extern cc_t echoc
; /* Toggle local echoing */
*prompt
; /* Prompt for command. */
options
[], /* All the little options */
*hostname
; /* Who are we connected to? */
extern void (*encrypt_output
) P((unsigned char *, int));
extern int (*decrypt_input
) P((int));
* We keep track of each side of the option negotiation.
#define MY_STATE_WILL 0x01
#define MY_WANT_STATE_WILL 0x02
#define MY_WANT_STATE_DO 0x08
* Macros to check the current state of things
#define my_state_is_do(opt) (options[opt]&MY_STATE_DO)
#define my_state_is_will(opt) (options[opt]&MY_STATE_WILL)
#define my_want_state_is_do(opt) (options[opt]&MY_WANT_STATE_DO)
#define my_want_state_is_will(opt) (options[opt]&MY_WANT_STATE_WILL)
#define my_state_is_dont(opt) (!my_state_is_do(opt))
#define my_state_is_wont(opt) (!my_state_is_will(opt))
#define my_want_state_is_dont(opt) (!my_want_state_is_do(opt))
#define my_want_state_is_wont(opt) (!my_want_state_is_will(opt))
#define set_my_state_do(opt) {options[opt] |= MY_STATE_DO;}
#define set_my_state_will(opt) {options[opt] |= MY_STATE_WILL;}
#define set_my_want_state_do(opt) {options[opt] |= MY_WANT_STATE_DO;}
#define set_my_want_state_will(opt) {options[opt] |= MY_WANT_STATE_WILL;}
#define set_my_state_dont(opt) {options[opt] &= ~MY_STATE_DO;}
#define set_my_state_wont(opt) {options[opt] &= ~MY_STATE_WILL;}
#define set_my_want_state_dont(opt) {options[opt] &= ~MY_WANT_STATE_DO;}
#define set_my_want_state_wont(opt) {options[opt] &= ~MY_WANT_STATE_WILL;}
* Make everything symetrical
#define HIS_STATE_WILL MY_STATE_DO
#define HIS_WANT_STATE_WILL MY_WANT_STATE_DO
#define HIS_STATE_DO MY_STATE_WILL
#define HIS_WANT_STATE_DO MY_WANT_STATE_WILL
#define his_state_is_do my_state_is_will
#define his_state_is_will my_state_is_do
#define his_want_state_is_do my_want_state_is_will
#define his_want_state_is_will my_want_state_is_do
#define his_state_is_dont my_state_is_wont
#define his_state_is_wont my_state_is_dont
#define his_want_state_is_dont my_want_state_is_wont
#define his_want_state_is_wont my_want_state_is_dont
#define set_his_state_do set_my_state_will
#define set_his_state_will set_my_state_do
#define set_his_want_state_do set_my_want_state_will
#define set_his_want_state_will set_my_want_state_do
#define set_his_state_dont set_my_state_wont
#define set_his_state_wont set_my_state_dont
#define set_his_want_state_dont set_my_want_state_wont
#define set_his_want_state_wont set_my_want_state_dont
*NetTrace
; /* Where debugging output goes */
NetTraceFile
[]; /* Name of file where debugging output goes */
SetNetTrace
P((char *)); /* Function to change where debugging goes */
toplevel
; /* For error conditions. */
command
P((int, char *, int)),
Dump
P((int, unsigned char *, int)),
printoption
P((char *, int, int)),
printsub
P((int, unsigned char *, int)),
setcommandmode
P((void)),
sys_telnet_init
P((void)),
tel_enter_binary
P((int)),
TerminalFlushOutput
P((void)),
TerminalNewMode
P((int)),
TerminalRestoreState
P((void)),
TerminalSaveState
P((void)),
lm_will
P((unsigned char *, int)),
lm_wont
P((unsigned char *, int)),
lm_do
P((unsigned char *, int)),
lm_dont
P((unsigned char *, int)),
lm_mode
P((unsigned char *, int, int));
slc_mode_export
P((void)),
slc_mode_import
P((int)),
slc
P((unsigned char *, int)),
slc_start_reply
P((void)),
slc_add_reply
P((int, int, int)),
env_opt
P((unsigned char *, int)),
env_opt_start_info
P((void)),
env_opt_add
P((unsigned char *)),
*env_default
P((int, int)),
*env_getvalue
P((unsigned char *));
extern struct tchars ntc
;
extern struct ltchars nltc
;
extern struct sgttyb nttyb
;
# define termEofChar ntc.t_eofc
# define termEraseChar nttyb.sg_erase
# define termFlushChar nltc.t_flushc
# define termIntChar ntc.t_intrc
# define termKillChar nttyb.sg_kill
# define termLiteralNextChar nltc.t_lnextc
# define termQuitChar ntc.t_quitc
# define termSuspChar nltc.t_suspc
# define termRprntChar nltc.t_rprntc
# define termWerasChar nltc.t_werasc
# define termStartChar ntc.t_startc
# define termStopChar ntc.t_stopc
# define termForw1Char ntc.t_brkc
extern cc_t termForw2Char
;
# define termEofCharp (cc_t *)&ntc.t_eofc
# define termEraseCharp (cc_t *)&nttyb.sg_erase
# define termFlushCharp (cc_t *)&nltc.t_flushc
# define termIntCharp (cc_t *)&ntc.t_intrc
# define termKillCharp (cc_t *)&nttyb.sg_kill
# define termLiteralNextCharp (cc_t *)&nltc.t_lnextc
# define termQuitCharp (cc_t *)&ntc.t_quitc
# define termSuspCharp (cc_t *)&nltc.t_suspc
# define termRprntCharp (cc_t *)&nltc.t_rprntc
# define termWerasCharp (cc_t *)&nltc.t_werasc
# define termStartCharp (cc_t *)&ntc.t_startc
# define termStopCharp (cc_t *)&ntc.t_stopc
# define termForw1Charp (cc_t *)&ntc.t_brkc
# define termForw2Charp (cc_t *)&termForw2Char
# define termAytCharp (cc_t *)&termAytChar
extern struct termio new_tc
;
# define termEofChar new_tc.c_cc[VEOF]
# define termEraseChar new_tc.c_cc[VERASE]
# define termIntChar new_tc.c_cc[VINTR]
# define termKillChar new_tc.c_cc[VKILL]
# define termQuitChar new_tc.c_cc[VQUIT]
extern cc_t termSuspChar
;
# define termSuspChar new_tc.c_cc[VSUSP]
# if defined(VFLUSHO) && !defined(VDISCARD)
# define VDISCARD VFLUSHO
extern cc_t termFlushChar
;
# define termFlushChar new_tc.c_cc[VDISCARD]
extern cc_t termWerasChar
;
# define termWerasChar new_tc.c_cc[VWERASE]
extern cc_t termRprntChar
;
# define termRprntChar new_tc.c_cc[VREPRINT]
extern cc_t termLiteralNextChar
;
# define termLiteralNextChar new_tc.c_cc[VLNEXT]
extern cc_t termStartChar
;
# define termStartChar new_tc.c_cc[VSTART]
extern cc_t termStopChar
;
# define termStopChar new_tc.c_cc[VSTOP]
extern cc_t termForw1Char
;
# define termForw1Char new_tc.c_cc[VEOL]
extern cc_t termForw2Char
;
# define termForw2Char new_tc.c_cc[VEOL]
# define termAytChar new_tc.c_cc[VSTATUS]
# if !defined(CRAY) || defined(__STDC__)
# define termEofCharp &termEofChar
# define termEraseCharp &termEraseChar
# define termIntCharp &termIntChar
# define termKillCharp &termKillChar
# define termQuitCharp &termQuitChar
# define termSuspCharp &termSuspChar
# define termFlushCharp &termFlushChar
# define termWerasCharp &termWerasChar
# define termRprntCharp &termRprntChar
# define termLiteralNextCharp &termLiteralNextChar
# define termStartCharp &termStartChar
# define termStopCharp &termStopChar
# define termForw1Charp &termForw1Char
# define termForw2Charp &termForw2Char
# define termAytCharp &termAytChar
/* Work around a compiler bug */
# define termEraseCharp 0
# define termFlushCharp 0
# define termWerasCharp 0
# define termRprntCharp 0
# define termLiteralNextCharp 0
# define termStartCharp 0
# define termForw1Charp 0
# define termForw2Charp 0
/* Ring buffer structures which are shared */
HaveInput
, /* Whether an asynchronous I/O indication came in */
noasynchtty
, /* Don't do signals on I/O (SIGURG, SIGIO) */
noasynchnet
, /* Don't do signals on I/O (SIGURG, SIGIO) */
sigiocount
, /* Count of SIGIO receptions */
shell_active
; /* Subshell is active */
*Ibackp
, /* Oldest byte of 3270 data */
Ibuf
[], /* 3270 buffer */
*Ifrontp
, /* Where next 3270 byte goes */
*transcom
; /* Transparent command */
settranscom
P((int, char**));
#endif /* defined(TN3270) */