1*7348b5c5SDavid van Moolenbroek /* $NetBSD: externs.h,v 1.37 2012/01/10 23:39:11 joerg Exp $ */ 2*7348b5c5SDavid van Moolenbroek 3*7348b5c5SDavid van Moolenbroek /* 4*7348b5c5SDavid van Moolenbroek * Copyright (c) 1988, 1990, 1993 5*7348b5c5SDavid van Moolenbroek * The Regents of the University of California. All rights reserved. 6*7348b5c5SDavid van Moolenbroek * 7*7348b5c5SDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without 8*7348b5c5SDavid van Moolenbroek * modification, are permitted provided that the following conditions 9*7348b5c5SDavid van Moolenbroek * are met: 10*7348b5c5SDavid van Moolenbroek * 1. Redistributions of source code must retain the above copyright 11*7348b5c5SDavid van Moolenbroek * notice, this list of conditions and the following disclaimer. 12*7348b5c5SDavid van Moolenbroek * 2. Redistributions in binary form must reproduce the above copyright 13*7348b5c5SDavid van Moolenbroek * notice, this list of conditions and the following disclaimer in the 14*7348b5c5SDavid van Moolenbroek * documentation and/or other materials provided with the distribution. 15*7348b5c5SDavid van Moolenbroek * 3. Neither the name of the University nor the names of its contributors 16*7348b5c5SDavid van Moolenbroek * may be used to endorse or promote products derived from this software 17*7348b5c5SDavid van Moolenbroek * without specific prior written permission. 18*7348b5c5SDavid van Moolenbroek * 19*7348b5c5SDavid van Moolenbroek * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20*7348b5c5SDavid van Moolenbroek * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21*7348b5c5SDavid van Moolenbroek * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22*7348b5c5SDavid van Moolenbroek * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23*7348b5c5SDavid van Moolenbroek * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24*7348b5c5SDavid van Moolenbroek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25*7348b5c5SDavid van Moolenbroek * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26*7348b5c5SDavid van Moolenbroek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27*7348b5c5SDavid van Moolenbroek * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28*7348b5c5SDavid van Moolenbroek * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29*7348b5c5SDavid van Moolenbroek * SUCH DAMAGE. 30*7348b5c5SDavid van Moolenbroek * 31*7348b5c5SDavid van Moolenbroek * from: @(#)externs.h 8.3 (Berkeley) 5/30/95 32*7348b5c5SDavid van Moolenbroek */ 33*7348b5c5SDavid van Moolenbroek 34*7348b5c5SDavid van Moolenbroek #include <stdio.h> 35*7348b5c5SDavid van Moolenbroek #include <stdlib.h> 36*7348b5c5SDavid van Moolenbroek #include <setjmp.h> 37*7348b5c5SDavid van Moolenbroek #include <sys/ioctl.h> 38*7348b5c5SDavid van Moolenbroek #include <errno.h> 39*7348b5c5SDavid van Moolenbroek #include <sys/termios.h> 40*7348b5c5SDavid van Moolenbroek 41*7348b5c5SDavid van Moolenbroek #include <string.h> 42*7348b5c5SDavid van Moolenbroek 43*7348b5c5SDavid van Moolenbroek #if defined(IPSEC) 44*7348b5c5SDavid van Moolenbroek #include <netipsec/ipsec.h> 45*7348b5c5SDavid van Moolenbroek #if defined(IPSEC_POLICY_IPSEC) 46*7348b5c5SDavid van Moolenbroek extern char *ipsec_policy_in; 47*7348b5c5SDavid van Moolenbroek extern char *ipsec_policy_out; 48*7348b5c5SDavid van Moolenbroek #endif 49*7348b5c5SDavid van Moolenbroek #endif 50*7348b5c5SDavid van Moolenbroek 51*7348b5c5SDavid van Moolenbroek #ifndef _POSIX_VDISABLE 52*7348b5c5SDavid van Moolenbroek # ifdef sun 53*7348b5c5SDavid van Moolenbroek # include <sys/param.h> /* pick up VDISABLE definition, mayby */ 54*7348b5c5SDavid van Moolenbroek # endif 55*7348b5c5SDavid van Moolenbroek # ifdef VDISABLE 56*7348b5c5SDavid van Moolenbroek # define _POSIX_VDISABLE VDISABLE 57*7348b5c5SDavid van Moolenbroek # else 58*7348b5c5SDavid van Moolenbroek # define _POSIX_VDISABLE ((cc_t)'\377') 59*7348b5c5SDavid van Moolenbroek # endif 60*7348b5c5SDavid van Moolenbroek #endif 61*7348b5c5SDavid van Moolenbroek 62*7348b5c5SDavid van Moolenbroek #define SUBBUFSIZE 256 63*7348b5c5SDavid van Moolenbroek 64*7348b5c5SDavid van Moolenbroek #include <sys/cdefs.h> 65*7348b5c5SDavid van Moolenbroek 66*7348b5c5SDavid van Moolenbroek extern int 67*7348b5c5SDavid van Moolenbroek autologin, /* Autologin enabled */ 68*7348b5c5SDavid van Moolenbroek skiprc, /* Don't process the ~/.telnetrc file */ 69*7348b5c5SDavid van Moolenbroek eight, /* use eight bit mode (binary in and/or out */ 70*7348b5c5SDavid van Moolenbroek family, /* address family of peer */ 71*7348b5c5SDavid van Moolenbroek flushout, /* flush output */ 72*7348b5c5SDavid van Moolenbroek connected, /* Are we connected to the other side? */ 73*7348b5c5SDavid van Moolenbroek globalmode, /* Mode tty should be in */ 74*7348b5c5SDavid van Moolenbroek In3270, /* Are we in 3270 mode? */ 75*7348b5c5SDavid van Moolenbroek telnetport, /* Are we connected to the telnet port? */ 76*7348b5c5SDavid van Moolenbroek localflow, /* Flow control handled locally */ 77*7348b5c5SDavid van Moolenbroek restartany, /* If flow control, restart output on any character */ 78*7348b5c5SDavid van Moolenbroek localchars, /* we recognize interrupt/quit */ 79*7348b5c5SDavid van Moolenbroek donelclchars, /* the user has set "localchars" */ 80*7348b5c5SDavid van Moolenbroek showoptions, 81*7348b5c5SDavid van Moolenbroek net, /* Network file descriptor */ 82*7348b5c5SDavid van Moolenbroek tin, /* Terminal input file descriptor */ 83*7348b5c5SDavid van Moolenbroek tout, /* Terminal output file descriptor */ 84*7348b5c5SDavid van Moolenbroek crlf, /* Should '\r' be mapped to <CR><LF> (or <CR><NUL>)? */ 85*7348b5c5SDavid van Moolenbroek autoflush, /* flush output when interrupting? */ 86*7348b5c5SDavid van Moolenbroek autosynch, /* send interrupt characters with SYNCH? */ 87*7348b5c5SDavid van Moolenbroek SYNCHing, /* Is the stream in telnet SYNCH mode? */ 88*7348b5c5SDavid van Moolenbroek donebinarytoggle, /* the user has put us in binary */ 89*7348b5c5SDavid van Moolenbroek dontlecho, /* do we suppress local echoing right now? */ 90*7348b5c5SDavid van Moolenbroek crmod, 91*7348b5c5SDavid van Moolenbroek netdata, /* Print out network data flow */ 92*7348b5c5SDavid van Moolenbroek prettydump, /* Print "netdata" output in user readable format */ 93*7348b5c5SDavid van Moolenbroek #ifdef TN3270 94*7348b5c5SDavid van Moolenbroek cursesdata, /* Print out curses data flow */ 95*7348b5c5SDavid van Moolenbroek apitrace, /* Trace API transactions */ 96*7348b5c5SDavid van Moolenbroek #endif /* defined(TN3270) */ 97*7348b5c5SDavid van Moolenbroek termdata, /* Print out terminal data flow */ 98*7348b5c5SDavid van Moolenbroek telnet_debug, /* Debug level */ 99*7348b5c5SDavid van Moolenbroek doaddrlookup, /* do a reverse address lookup? */ 100*7348b5c5SDavid van Moolenbroek clienteof; /* Client received EOF */ 101*7348b5c5SDavid van Moolenbroek 102*7348b5c5SDavid van Moolenbroek extern cc_t escape; /* Escape to command mode */ 103*7348b5c5SDavid van Moolenbroek extern cc_t rlogin; /* Rlogin mode escape character */ 104*7348b5c5SDavid van Moolenbroek #ifdef KLUDGELINEMODE 105*7348b5c5SDavid van Moolenbroek extern cc_t echoc; /* Toggle local echoing */ 106*7348b5c5SDavid van Moolenbroek #endif 107*7348b5c5SDavid van Moolenbroek 108*7348b5c5SDavid van Moolenbroek extern char 109*7348b5c5SDavid van Moolenbroek *prompt; /* Prompt for command. */ 110*7348b5c5SDavid van Moolenbroek 111*7348b5c5SDavid van Moolenbroek extern char 112*7348b5c5SDavid van Moolenbroek doopt[], 113*7348b5c5SDavid van Moolenbroek dont[], 114*7348b5c5SDavid van Moolenbroek will[], 115*7348b5c5SDavid van Moolenbroek wont[], 116*7348b5c5SDavid van Moolenbroek options[], /* All the little options */ 117*7348b5c5SDavid van Moolenbroek *hostname; /* Who are we connected to? */ 118*7348b5c5SDavid van Moolenbroek 119*7348b5c5SDavid van Moolenbroek #ifdef ENCRYPTION 120*7348b5c5SDavid van Moolenbroek extern void (*encrypt_output)(unsigned char *, int); 121*7348b5c5SDavid van Moolenbroek extern int (*decrypt_input)(int); 122*7348b5c5SDavid van Moolenbroek #endif /* ENCRYPTION */ 123*7348b5c5SDavid van Moolenbroek 124*7348b5c5SDavid van Moolenbroek /* 125*7348b5c5SDavid van Moolenbroek * We keep track of each side of the option negotiation. 126*7348b5c5SDavid van Moolenbroek */ 127*7348b5c5SDavid van Moolenbroek 128*7348b5c5SDavid van Moolenbroek #define MY_STATE_WILL 0x01 129*7348b5c5SDavid van Moolenbroek #define MY_WANT_STATE_WILL 0x02 130*7348b5c5SDavid van Moolenbroek #define MY_STATE_DO 0x04 131*7348b5c5SDavid van Moolenbroek #define MY_WANT_STATE_DO 0x08 132*7348b5c5SDavid van Moolenbroek 133*7348b5c5SDavid van Moolenbroek /* 134*7348b5c5SDavid van Moolenbroek * Macros to check the current state of things 135*7348b5c5SDavid van Moolenbroek */ 136*7348b5c5SDavid van Moolenbroek 137*7348b5c5SDavid van Moolenbroek #define my_state_is_do(opt) (options[opt]&MY_STATE_DO) 138*7348b5c5SDavid van Moolenbroek #define my_state_is_will(opt) (options[opt]&MY_STATE_WILL) 139*7348b5c5SDavid van Moolenbroek #define my_want_state_is_do(opt) (options[opt]&MY_WANT_STATE_DO) 140*7348b5c5SDavid van Moolenbroek #define my_want_state_is_will(opt) (options[opt]&MY_WANT_STATE_WILL) 141*7348b5c5SDavid van Moolenbroek 142*7348b5c5SDavid van Moolenbroek #define my_state_is_dont(opt) (!my_state_is_do(opt)) 143*7348b5c5SDavid van Moolenbroek #define my_state_is_wont(opt) (!my_state_is_will(opt)) 144*7348b5c5SDavid van Moolenbroek #define my_want_state_is_dont(opt) (!my_want_state_is_do(opt)) 145*7348b5c5SDavid van Moolenbroek #define my_want_state_is_wont(opt) (!my_want_state_is_will(opt)) 146*7348b5c5SDavid van Moolenbroek 147*7348b5c5SDavid van Moolenbroek #define set_my_state_do(opt) {options[opt] |= MY_STATE_DO;} 148*7348b5c5SDavid van Moolenbroek #define set_my_state_will(opt) {options[opt] |= MY_STATE_WILL;} 149*7348b5c5SDavid van Moolenbroek #define set_my_want_state_do(opt) {options[opt] |= MY_WANT_STATE_DO;} 150*7348b5c5SDavid van Moolenbroek #define set_my_want_state_will(opt) {options[opt] |= MY_WANT_STATE_WILL;} 151*7348b5c5SDavid van Moolenbroek 152*7348b5c5SDavid van Moolenbroek #define set_my_state_dont(opt) {options[opt] &= ~MY_STATE_DO;} 153*7348b5c5SDavid van Moolenbroek #define set_my_state_wont(opt) {options[opt] &= ~MY_STATE_WILL;} 154*7348b5c5SDavid van Moolenbroek #define set_my_want_state_dont(opt) {options[opt] &= ~MY_WANT_STATE_DO;} 155*7348b5c5SDavid van Moolenbroek #define set_my_want_state_wont(opt) {options[opt] &= ~MY_WANT_STATE_WILL;} 156*7348b5c5SDavid van Moolenbroek 157*7348b5c5SDavid van Moolenbroek /* 158*7348b5c5SDavid van Moolenbroek * Make everything symmetrical 159*7348b5c5SDavid van Moolenbroek */ 160*7348b5c5SDavid van Moolenbroek 161*7348b5c5SDavid van Moolenbroek #define HIS_STATE_WILL MY_STATE_DO 162*7348b5c5SDavid van Moolenbroek #define HIS_WANT_STATE_WILL MY_WANT_STATE_DO 163*7348b5c5SDavid van Moolenbroek #define HIS_STATE_DO MY_STATE_WILL 164*7348b5c5SDavid van Moolenbroek #define HIS_WANT_STATE_DO MY_WANT_STATE_WILL 165*7348b5c5SDavid van Moolenbroek 166*7348b5c5SDavid van Moolenbroek #define his_state_is_do my_state_is_will 167*7348b5c5SDavid van Moolenbroek #define his_state_is_will my_state_is_do 168*7348b5c5SDavid van Moolenbroek #define his_want_state_is_do my_want_state_is_will 169*7348b5c5SDavid van Moolenbroek #define his_want_state_is_will my_want_state_is_do 170*7348b5c5SDavid van Moolenbroek 171*7348b5c5SDavid van Moolenbroek #define his_state_is_dont my_state_is_wont 172*7348b5c5SDavid van Moolenbroek #define his_state_is_wont my_state_is_dont 173*7348b5c5SDavid van Moolenbroek #define his_want_state_is_dont my_want_state_is_wont 174*7348b5c5SDavid van Moolenbroek #define his_want_state_is_wont my_want_state_is_dont 175*7348b5c5SDavid van Moolenbroek 176*7348b5c5SDavid van Moolenbroek #define set_his_state_do set_my_state_will 177*7348b5c5SDavid van Moolenbroek #define set_his_state_will set_my_state_do 178*7348b5c5SDavid van Moolenbroek #define set_his_want_state_do set_my_want_state_will 179*7348b5c5SDavid van Moolenbroek #define set_his_want_state_will set_my_want_state_do 180*7348b5c5SDavid van Moolenbroek 181*7348b5c5SDavid van Moolenbroek #define set_his_state_dont set_my_state_wont 182*7348b5c5SDavid van Moolenbroek #define set_his_state_wont set_my_state_dont 183*7348b5c5SDavid van Moolenbroek #define set_his_want_state_dont set_my_want_state_wont 184*7348b5c5SDavid van Moolenbroek #define set_his_want_state_wont set_my_want_state_dont 185*7348b5c5SDavid van Moolenbroek 186*7348b5c5SDavid van Moolenbroek 187*7348b5c5SDavid van Moolenbroek extern FILE 188*7348b5c5SDavid van Moolenbroek *NetTrace; /* Where debugging output goes */ 189*7348b5c5SDavid van Moolenbroek extern char 190*7348b5c5SDavid van Moolenbroek NetTraceFile[]; /* Name of file where debugging output goes */ 191*7348b5c5SDavid van Moolenbroek 192*7348b5c5SDavid van Moolenbroek extern jmp_buf 193*7348b5c5SDavid van Moolenbroek toplevel; /* For error conditions. */ 194*7348b5c5SDavid van Moolenbroek 195*7348b5c5SDavid van Moolenbroek 196*7348b5c5SDavid van Moolenbroek /* authenc.c */ 197*7348b5c5SDavid van Moolenbroek int telnet_net_write(unsigned char *, int); 198*7348b5c5SDavid van Moolenbroek void net_encrypt(void); 199*7348b5c5SDavid van Moolenbroek int telnet_spin(void); 200*7348b5c5SDavid van Moolenbroek char *telnet_getenv(char *); 201*7348b5c5SDavid van Moolenbroek char *telnet_gets(char *, char *, int, int); 202*7348b5c5SDavid van Moolenbroek 203*7348b5c5SDavid van Moolenbroek /* commands.c */ 204*7348b5c5SDavid van Moolenbroek int send_tncmd(void (*)(int, int), const char *, char *); 205*7348b5c5SDavid van Moolenbroek void _setlist_init(void); 206*7348b5c5SDavid van Moolenbroek void set_escape_char(char *); 207*7348b5c5SDavid van Moolenbroek int set_mode(int); 208*7348b5c5SDavid van Moolenbroek int clear_mode(int); 209*7348b5c5SDavid van Moolenbroek int modehelp(int); 210*7348b5c5SDavid van Moolenbroek int suspend(int, char *[]); 211*7348b5c5SDavid van Moolenbroek int shell(int, char *[]); 212*7348b5c5SDavid van Moolenbroek int quit(int, char *[]); 213*7348b5c5SDavid van Moolenbroek int logout(int, char *[]); 214*7348b5c5SDavid van Moolenbroek int env_cmd(int, char *[]); 215*7348b5c5SDavid van Moolenbroek struct env_lst *env_find(const unsigned char *); 216*7348b5c5SDavid van Moolenbroek void env_init(void); 217*7348b5c5SDavid van Moolenbroek struct env_lst *env_define(const unsigned char *, unsigned char *); 218*7348b5c5SDavid van Moolenbroek struct env_lst *env_undefine(const unsigned char *, unsigned char *); 219*7348b5c5SDavid van Moolenbroek struct env_lst *env_export(const unsigned char *, unsigned char *); 220*7348b5c5SDavid van Moolenbroek struct env_lst *env_unexport(const unsigned char *, unsigned char *); 221*7348b5c5SDavid van Moolenbroek struct env_lst *env_send(const unsigned char *, unsigned char *); 222*7348b5c5SDavid van Moolenbroek struct env_lst *env_list(const unsigned char *, unsigned char *); 223*7348b5c5SDavid van Moolenbroek unsigned char *env_default(int, int ); 224*7348b5c5SDavid van Moolenbroek unsigned char *env_getvalue(const unsigned char *); 225*7348b5c5SDavid van Moolenbroek void env_varval(const unsigned char *); 226*7348b5c5SDavid van Moolenbroek int auth_cmd(int, char *[]); 227*7348b5c5SDavid van Moolenbroek int ayt_status(void); 228*7348b5c5SDavid van Moolenbroek int encrypt_cmd(int, char *[]); 229*7348b5c5SDavid van Moolenbroek int tn(int, char *[]); 230*7348b5c5SDavid van Moolenbroek void command(int, const char *, int); 231*7348b5c5SDavid van Moolenbroek void cmdrc(const char *, const char *); 232*7348b5c5SDavid van Moolenbroek struct addrinfo; 233*7348b5c5SDavid van Moolenbroek int sourceroute(struct addrinfo *, char *, char **, int *, int*); 234*7348b5c5SDavid van Moolenbroek 235*7348b5c5SDavid van Moolenbroek /* main.c */ 236*7348b5c5SDavid van Moolenbroek void tninit(void); 237*7348b5c5SDavid van Moolenbroek void usage(void) __dead; 238*7348b5c5SDavid van Moolenbroek 239*7348b5c5SDavid van Moolenbroek /* network.c */ 240*7348b5c5SDavid van Moolenbroek void init_network(void); 241*7348b5c5SDavid van Moolenbroek int stilloob(void); 242*7348b5c5SDavid van Moolenbroek void setneturg(void); 243*7348b5c5SDavid van Moolenbroek int netflush(void); 244*7348b5c5SDavid van Moolenbroek 245*7348b5c5SDavid van Moolenbroek /* sys_bsd.c */ 246*7348b5c5SDavid van Moolenbroek void init_sys(void); 247*7348b5c5SDavid van Moolenbroek int TerminalWrite(char *, int); 248*7348b5c5SDavid van Moolenbroek int TerminalRead(unsigned char *, int); 249*7348b5c5SDavid van Moolenbroek int TerminalAutoFlush(void); 250*7348b5c5SDavid van Moolenbroek int TerminalSpecialChars(int); 251*7348b5c5SDavid van Moolenbroek void TerminalFlushOutput(void); 252*7348b5c5SDavid van Moolenbroek void TerminalSaveState(void); 253*7348b5c5SDavid van Moolenbroek cc_t *tcval(int); 254*7348b5c5SDavid van Moolenbroek void TerminalDefaultChars(void); 255*7348b5c5SDavid van Moolenbroek void TerminalRestoreState(void); 256*7348b5c5SDavid van Moolenbroek void TerminalNewMode(int); 257*7348b5c5SDavid van Moolenbroek void TerminalSpeeds(long *, long *); 258*7348b5c5SDavid van Moolenbroek int TerminalWindowSize(long *, long *); 259*7348b5c5SDavid van Moolenbroek int NetClose(int); 260*7348b5c5SDavid van Moolenbroek void NetNonblockingIO(int, int); 261*7348b5c5SDavid van Moolenbroek void NetSigIO(int, int); 262*7348b5c5SDavid van Moolenbroek void NetSetPgrp(int); 263*7348b5c5SDavid van Moolenbroek void sys_telnet_init(void); 264*7348b5c5SDavid van Moolenbroek int process_rings(int , int , int , int , int , int); 265*7348b5c5SDavid van Moolenbroek 266*7348b5c5SDavid van Moolenbroek /* telnet.c */ 267*7348b5c5SDavid van Moolenbroek void init_telnet(void); 268*7348b5c5SDavid van Moolenbroek void send_do(int, int ); 269*7348b5c5SDavid van Moolenbroek void send_dont(int, int ); 270*7348b5c5SDavid van Moolenbroek void send_will(int, int ); 271*7348b5c5SDavid van Moolenbroek void send_wont(int, int ); 272*7348b5c5SDavid van Moolenbroek void willoption(int); 273*7348b5c5SDavid van Moolenbroek void wontoption(int); 274*7348b5c5SDavid van Moolenbroek char **mklist(char *, char *); 275*7348b5c5SDavid van Moolenbroek int is_unique(char *, char **, char **); 276*7348b5c5SDavid van Moolenbroek int setup_term(char *, int, int *); 277*7348b5c5SDavid van Moolenbroek char *gettermname(void); 278*7348b5c5SDavid van Moolenbroek void lm_will(unsigned char *, int); 279*7348b5c5SDavid van Moolenbroek void lm_wont(unsigned char *, int); 280*7348b5c5SDavid van Moolenbroek void lm_do(unsigned char *, int); 281*7348b5c5SDavid van Moolenbroek void lm_dont(unsigned char *, int); 282*7348b5c5SDavid van Moolenbroek void lm_mode(unsigned char *, int, int ); 283*7348b5c5SDavid van Moolenbroek void slc_init(void); 284*7348b5c5SDavid van Moolenbroek void slcstate(void); 285*7348b5c5SDavid van Moolenbroek void slc_mode_export(int); 286*7348b5c5SDavid van Moolenbroek void slc_mode_import(int); 287*7348b5c5SDavid van Moolenbroek void slc_import(int); 288*7348b5c5SDavid van Moolenbroek void slc_export(void); 289*7348b5c5SDavid van Moolenbroek void slc(unsigned char *, int); 290*7348b5c5SDavid van Moolenbroek void slc_check(void); 291*7348b5c5SDavid van Moolenbroek void slc_start_reply(void); 292*7348b5c5SDavid van Moolenbroek void slc_add_reply(unsigned int, unsigned int, cc_t); 293*7348b5c5SDavid van Moolenbroek void slc_end_reply(void); 294*7348b5c5SDavid van Moolenbroek int slc_update(void); 295*7348b5c5SDavid van Moolenbroek void env_opt(unsigned char *, int); 296*7348b5c5SDavid van Moolenbroek void env_opt_start(void); 297*7348b5c5SDavid van Moolenbroek void env_opt_start_info(void); 298*7348b5c5SDavid van Moolenbroek void env_opt_add(unsigned char *); 299*7348b5c5SDavid van Moolenbroek int opt_welldefined(const char *); 300*7348b5c5SDavid van Moolenbroek void env_opt_end(int); 301*7348b5c5SDavid van Moolenbroek int telrcv(void); 302*7348b5c5SDavid van Moolenbroek int rlogin_susp(void); 303*7348b5c5SDavid van Moolenbroek int Scheduler(int); 304*7348b5c5SDavid van Moolenbroek void telnet(const char *); 305*7348b5c5SDavid van Moolenbroek void xmitAO(void); 306*7348b5c5SDavid van Moolenbroek void xmitEL(void); 307*7348b5c5SDavid van Moolenbroek void xmitEC(void); 308*7348b5c5SDavid van Moolenbroek int dosynch(char *); 309*7348b5c5SDavid van Moolenbroek int get_status(char *); 310*7348b5c5SDavid van Moolenbroek void intp(void); 311*7348b5c5SDavid van Moolenbroek void sendbrk(void); 312*7348b5c5SDavid van Moolenbroek void sendabort(void); 313*7348b5c5SDavid van Moolenbroek void sendsusp(void); 314*7348b5c5SDavid van Moolenbroek void sendeof(void); 315*7348b5c5SDavid van Moolenbroek void sendayt(void); 316*7348b5c5SDavid van Moolenbroek void sendnaws(void); 317*7348b5c5SDavid van Moolenbroek void tel_enter_binary(int); 318*7348b5c5SDavid van Moolenbroek void tel_leave_binary(int); 319*7348b5c5SDavid van Moolenbroek 320*7348b5c5SDavid van Moolenbroek /* terminal.c */ 321*7348b5c5SDavid van Moolenbroek void init_terminal(void); 322*7348b5c5SDavid van Moolenbroek int ttyflush(int); 323*7348b5c5SDavid van Moolenbroek int getconnmode(void); 324*7348b5c5SDavid van Moolenbroek void setconnmode(int); 325*7348b5c5SDavid van Moolenbroek void setcommandmode(void); 326*7348b5c5SDavid van Moolenbroek 327*7348b5c5SDavid van Moolenbroek /* utilities.c */ 328*7348b5c5SDavid van Moolenbroek void upcase(char *); 329*7348b5c5SDavid van Moolenbroek int SetSockOpt(int, int, int, int); 330*7348b5c5SDavid van Moolenbroek void SetNetTrace(char *); 331*7348b5c5SDavid van Moolenbroek void Dump(int, unsigned char *, int); 332*7348b5c5SDavid van Moolenbroek void printoption(const char *, int, int ); 333*7348b5c5SDavid van Moolenbroek void optionstatus(void); 334*7348b5c5SDavid van Moolenbroek void printsub(int, unsigned char *, int); 335*7348b5c5SDavid van Moolenbroek void EmptyTerminal(void); 336*7348b5c5SDavid van Moolenbroek void SetForExit(void); 337*7348b5c5SDavid van Moolenbroek void Exit(int) __attribute__((__noreturn__)); 338*7348b5c5SDavid van Moolenbroek void ExitString(const char *, int) __attribute__((__noreturn__)); 339*7348b5c5SDavid van Moolenbroek 340*7348b5c5SDavid van Moolenbroek 341*7348b5c5SDavid van Moolenbroek extern struct termios new_tc; 342*7348b5c5SDavid van Moolenbroek 343*7348b5c5SDavid van Moolenbroek # define termEofChar new_tc.c_cc[VEOF] 344*7348b5c5SDavid van Moolenbroek # define termEraseChar new_tc.c_cc[VERASE] 345*7348b5c5SDavid van Moolenbroek # define termIntChar new_tc.c_cc[VINTR] 346*7348b5c5SDavid van Moolenbroek # define termKillChar new_tc.c_cc[VKILL] 347*7348b5c5SDavid van Moolenbroek # define termQuitChar new_tc.c_cc[VQUIT] 348*7348b5c5SDavid van Moolenbroek 349*7348b5c5SDavid van Moolenbroek # define termSuspChar new_tc.c_cc[VSUSP] 350*7348b5c5SDavid van Moolenbroek # define termFlushChar new_tc.c_cc[VDISCARD] 351*7348b5c5SDavid van Moolenbroek # define termWerasChar new_tc.c_cc[VWERASE] 352*7348b5c5SDavid van Moolenbroek # define termRprntChar new_tc.c_cc[VREPRINT] 353*7348b5c5SDavid van Moolenbroek # define termLiteralNextChar new_tc.c_cc[VLNEXT] 354*7348b5c5SDavid van Moolenbroek # define termStartChar new_tc.c_cc[VSTART] 355*7348b5c5SDavid van Moolenbroek # define termStopChar new_tc.c_cc[VSTOP] 356*7348b5c5SDavid van Moolenbroek # define termForw1Char new_tc.c_cc[VEOL] 357*7348b5c5SDavid van Moolenbroek # define termForw2Char new_tc.c_cc[VEOL] 358*7348b5c5SDavid van Moolenbroek # define termAytChar new_tc.c_cc[VSTATUS] 359*7348b5c5SDavid van Moolenbroek 360*7348b5c5SDavid van Moolenbroek # define termEofCharp &termEofChar 361*7348b5c5SDavid van Moolenbroek # define termEraseCharp &termEraseChar 362*7348b5c5SDavid van Moolenbroek # define termIntCharp &termIntChar 363*7348b5c5SDavid van Moolenbroek # define termKillCharp &termKillChar 364*7348b5c5SDavid van Moolenbroek # define termQuitCharp &termQuitChar 365*7348b5c5SDavid van Moolenbroek # define termSuspCharp &termSuspChar 366*7348b5c5SDavid van Moolenbroek # define termFlushCharp &termFlushChar 367*7348b5c5SDavid van Moolenbroek # define termWerasCharp &termWerasChar 368*7348b5c5SDavid van Moolenbroek # define termRprntCharp &termRprntChar 369*7348b5c5SDavid van Moolenbroek # define termLiteralNextCharp &termLiteralNextChar 370*7348b5c5SDavid van Moolenbroek # define termStartCharp &termStartChar 371*7348b5c5SDavid van Moolenbroek # define termStopCharp &termStopChar 372*7348b5c5SDavid van Moolenbroek # define termForw1Charp &termForw1Char 373*7348b5c5SDavid van Moolenbroek # define termForw2Charp &termForw2Char 374*7348b5c5SDavid van Moolenbroek # define termAytCharp &termAytChar 375*7348b5c5SDavid van Moolenbroek 376*7348b5c5SDavid van Moolenbroek 377*7348b5c5SDavid van Moolenbroek /* Tn3270 section */ 378*7348b5c5SDavid van Moolenbroek #if defined(TN3270) 379*7348b5c5SDavid van Moolenbroek 380*7348b5c5SDavid van Moolenbroek extern int 381*7348b5c5SDavid van Moolenbroek HaveInput, /* Whether an asynchronous I/O indication came in */ 382*7348b5c5SDavid van Moolenbroek noasynchtty, /* Don't do signals on I/O (SIGURG, SIGIO) */ 383*7348b5c5SDavid van Moolenbroek noasynchnet, /* Don't do signals on I/O (SIGURG, SIGIO) */ 384*7348b5c5SDavid van Moolenbroek sigiocount, /* Count of SIGIO receptions */ 385*7348b5c5SDavid van Moolenbroek shell_active; /* Subshell is active */ 386*7348b5c5SDavid van Moolenbroek 387*7348b5c5SDavid van Moolenbroek extern char 388*7348b5c5SDavid van Moolenbroek *Ibackp, /* Oldest byte of 3270 data */ 389*7348b5c5SDavid van Moolenbroek Ibuf[], /* 3270 buffer */ 390*7348b5c5SDavid van Moolenbroek *Ifrontp, /* Where next 3270 byte goes */ 391*7348b5c5SDavid van Moolenbroek tline[200], 392*7348b5c5SDavid van Moolenbroek *transcom; /* Transparent command */ 393*7348b5c5SDavid van Moolenbroek 394*7348b5c5SDavid van Moolenbroek /* tn3270.c */ 395*7348b5c5SDavid van Moolenbroek void init_3270(void); 396*7348b5c5SDavid van Moolenbroek int DataToNetwork(char *, int, int); 397*7348b5c5SDavid van Moolenbroek void inputAvailable(int); 398*7348b5c5SDavid van Moolenbroek void outputPurge(void); 399*7348b5c5SDavid van Moolenbroek int DataToTerminal(char *, int); 400*7348b5c5SDavid van Moolenbroek int Push3270(void); 401*7348b5c5SDavid van Moolenbroek void Finish3270(void); 402*7348b5c5SDavid van Moolenbroek void StringToTerminal(char *); 403*7348b5c5SDavid van Moolenbroek int _putchar(int); 404*7348b5c5SDavid van Moolenbroek void SetIn3270(void); 405*7348b5c5SDavid van Moolenbroek int tn3270_ttype(void); 406*7348b5c5SDavid van Moolenbroek int settranscom(int, char *[]); 407*7348b5c5SDavid van Moolenbroek int shell_continue(void); 408*7348b5c5SDavid van Moolenbroek int DataFromTerminal(char *, int); 409*7348b5c5SDavid van Moolenbroek int DataFromNetwork(char *, int, int); 410*7348b5c5SDavid van Moolenbroek void ConnectScreen(void); 411*7348b5c5SDavid van Moolenbroek int DoTerminalOutput(void); 412*7348b5c5SDavid van Moolenbroek 413*7348b5c5SDavid van Moolenbroek #endif /* defined(TN3270) */ 414