X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/39934deb5202149f98198c111a35c21cb4d0d0f8..055817455466c8eb60392f30bb7c689763962e17:/putty.h diff --git a/putty.h b/putty.h index d4deb62b..6f62afef 100644 --- a/putty.h +++ b/putty.h @@ -36,6 +36,11 @@ typedef struct terminal_tag Terminal; * * The LATTRs (line attributes) are an entirely disjoint space of * flags. + * + * The DATTRs (display attributes) are internal to terminal.c (but + * defined here because their values have to match the others + * here); they reuse the TATTR_* space but are always masked off + * before sending to the front end. * * ATTR_INVALID is an illegal colour combination. */ @@ -45,6 +50,12 @@ typedef struct terminal_tag Terminal; #define TATTR_RIGHTCURS 0x10000000UL /* cursor-on-RHS */ #define TATTR_COMBINING 0x80000000UL /* combining characters */ +#define DATTR_STARTRUN 0x80000000UL /* start of redraw run */ + +#define TDATTR_MASK 0xF0000000UL +#define TATTR_MASK (TDATTR_MASK) +#define DATTR_MASK (TDATTR_MASK) + #define LATTR_NORM 0x00000000UL #define LATTR_WIDE 0x00000001UL #define LATTR_TOP 0x00000002UL @@ -53,7 +64,7 @@ typedef struct terminal_tag Terminal; #define LATTR_WRAPPED 0x00000010UL #define LATTR_WRAPPED2 0x00000020UL -#define ATTR_INVALID 0x03FFU +#define ATTR_INVALID 0x03FFFFU /* Like Linux use the F000 page for direct to font. */ #define CSET_OEMCP 0x0000F000UL /* OEM Codepage DTF */ @@ -80,24 +91,40 @@ typedef struct terminal_tag Terminal; */ #define UCSWIDE 0xDFFF -#define ATTR_NARROW 0x8000U -#define ATTR_WIDE 0x4000U -#define ATTR_BOLD 0x0400U -#define ATTR_UNDER 0x0800U -#define ATTR_REVERSE 0x1000U -#define ATTR_BLINK 0x2000U -#define ATTR_FGMASK 0x001FU -#define ATTR_BGMASK 0x03E0U -#define ATTR_COLOURS 0x03FFU +#define ATTR_NARROW 0x800000U +#define ATTR_WIDE 0x400000U +#define ATTR_BOLD 0x040000U +#define ATTR_UNDER 0x080000U +#define ATTR_REVERSE 0x100000U +#define ATTR_BLINK 0x200000U +#define ATTR_FGMASK 0x0001FFU +#define ATTR_BGMASK 0x03FE00U +#define ATTR_COLOURS 0x03FFFFU #define ATTR_FGSHIFT 0 -#define ATTR_BGSHIFT 5 - -#define ATTR_DEFAULT 0x0128U /* bg 9, fg 8 */ -#define ATTR_DEFFG 0x0008U -#define ATTR_DEFBG 0x0120U +#define ATTR_BGSHIFT 9 -#define ATTR_CUR_AND (~(ATTR_BOLD|ATTR_REVERSE|ATTR_BLINK|ATTR_COLOURS)) -#define ATTR_CUR_XOR 0x016AU +/* + * The definitive list of colour numbers stored in terminal + * attribute words is kept here. It is: + * + * - 0-7 are ANSI colours (KRGYBMCW). + * - 8-15 are the bold versions of those colours. + * - 16-255 are the remains of the xterm 256-colour mode (a + * 216-colour cube with R at most significant and B at least, + * followed by a uniform series of grey shades running between + * black and white but not including either on grounds of + * redundancy). + * - 256 is default foreground + * - 257 is default bold foreground + * - 258 is default background + * - 259 is default bold background + * - 260 is cursor foreground + * - 261 is cursor background + */ + +#define ATTR_DEFFG (256 << ATTR_FGSHIFT) +#define ATTR_DEFBG (258 << ATTR_BGSHIFT) +#define ATTR_DEFAULT (ATTR_DEFFG | ATTR_DEFBG) struct sesslist { int nsessions; @@ -132,6 +159,8 @@ typedef enum { TS_AYT, TS_BRK, TS_SYNCH, TS_EC, TS_EL, TS_GA, TS_NOP, TS_ABORT, TS_AO, TS_IP, TS_SUSP, TS_EOR, TS_EOF, TS_LECHO, TS_RECHO, TS_PING, TS_EOL, + /* Special command for SSH. */ + TS_REKEY, /* POSIX-style signals. (not Telnet) */ TS_SIGABRT, TS_SIGALRM, TS_SIGFPE, TS_SIGHUP, TS_SIGILL, TS_SIGINT, TS_SIGKILL, TS_SIGPIPE, TS_SIGQUIT, TS_SIGSEGV, @@ -205,6 +234,17 @@ enum { enum { /* + * SSH-2 key exchange algorithms + */ + KEX_WARN, + KEX_DHGROUP1, + KEX_DHGROUP14, + KEX_DHGEX, + KEX_MAX +}; + +enum { + /* * SSH ciphers (both SSH1 and SSH2) */ CIPHER_WARN, /* pseudo 'cipher' */ @@ -274,6 +314,16 @@ enum { FUNKY_SCO }; +enum { + /* + * Network address types. Used for specifying choice of IPv4/v6 + * in config; also used in proxy.c to indicate whether a given + * host name has already been resolved or will be resolved at + * the proxy end. + */ + ADDRTYPE_UNSPEC, ADDRTYPE_IPV4, ADDRTYPE_IPV6, ADDRTYPE_NAME +}; + struct backend_tag { const char *(*init) (void *frontend_handle, void **backend_handle, Config *cfg, @@ -300,6 +350,7 @@ struct backend_tag { * buffer is clearing. */ void (*unthrottle) (void *handle, int); + int (*cfg_info) (void *handle); int default_port; }; @@ -334,6 +385,7 @@ struct config_tag { char host[512]; int port; int protocol; + int addressfamily; int close_on_exit; int warn_on_close; int ping_interval; /* in seconds */ @@ -359,6 +411,9 @@ struct config_tag { * but never for loading/saving */ int nopty; int compression; + int ssh_kexlist[KEX_MAX]; + int ssh_rekey_time; /* in minutes */ + char ssh_rekey_data[16]; int agentfwd; int change_username; /* allow username switching in SSH2 */ int ssh_cipherlist[CIPHER_MAX]; @@ -434,6 +489,7 @@ struct config_tag { Filename logfilename; int logtype; int logxfovr; + int logflush; int logomitpass; int logomitdata; int hide_mouseptr; @@ -445,6 +501,7 @@ struct config_tag { int bidi; /* Colour options */ int ansi_colour; + int xterm_256_colour; int system_colour; int try_palette; int bold_colour; @@ -483,7 +540,7 @@ struct config_tag { /* SSH bug compatibility modes */ int sshbug_ignore1, sshbug_plainpw1, sshbug_rsa1, sshbug_hmac2, sshbug_derivekey2, sshbug_rsapad2, - sshbug_dhgex2, sshbug_pksessid2; + sshbug_pksessid2; /* Options for pterm. Should split out into platform-dependent part. */ int stamp_utmp; int login_shell; @@ -637,7 +694,6 @@ FontSpec platform_default_fontspec(const char *name); Terminal *term_init(Config *, struct unicode_data *, void *); void term_free(Terminal *); void term_size(Terminal *, int, int, int); -void term_out(Terminal *); void term_paint(Terminal *, Context, int, int, int, int, int); void term_scroll(Terminal *, int, int); void term_pwron(Terminal *); @@ -663,6 +719,7 @@ void term_provide_resize_fn(Terminal *term, void (*resize_fn)(void *, int, int), void *resize_ctx); void term_provide_logctx(Terminal *term, void *logctx); +void term_set_focus(Terminal *term, int has_focus); /* * Exports from logging.c. @@ -740,10 +797,14 @@ void luni_send(void *, wchar_t * widebuf, int len, int interactive); */ void random_add_noise(void *noise, int length); -void random_init(void); int random_byte(void); void random_get_savedata(void **data, int *len); extern int random_active; +/* The random number subsystem is activated if at least one other entity + * within the program expresses an interest in it. So each SSH session + * calls random_ref on startup and random_unref on shutdown. */ +void random_ref(void); +void random_unref(void); /* * Exports from pinger.c. @@ -827,7 +888,7 @@ int wc_unescape(char *output, const char *wildcard); void logevent(void *frontend, const char *); void verify_ssh_host_key(void *frontend, char *host, int port, char *keytype, char *keystr, char *fingerprint); -void askcipher(void *frontend, char *ciphername, int cs); +void askalg(void *frontend, const char *algtype, const char *algname); int askappend(void *frontend, Filename filename); /* @@ -871,7 +932,7 @@ void cmdline_error(char *, ...); */ struct controlbox; void setup_config_box(struct controlbox *b, struct sesslist *sesslist, - int midsession, int protocol); + int midsession, int protocol, int protcfginfo); /* * Exports from minibidi.c.