📄 putty.h
字号:
#ifndef PUTTY_PUTTY_H#define PUTTY_PUTTY_H#include <stddef.h> /* for wchar_t *//* * Global variables. Most modules declare these `extern', but * window.c will do `#define PUTTY_DO_GLOBALS' before including this * module, and so will get them properly defined. */#ifndef GLOBAL#ifdef PUTTY_DO_GLOBALS#define GLOBAL#else#define GLOBAL extern#endif#endif/* Static variables used in all environments. Symbian OS does not allow any * static writable data in DLLs, so we can't just use normal static variables. * The ideal solution would be just to eliminate static data altogethers, since * this would improve re-entrancy, but currently some of the interfaces in * PuTTY (random number generator, fatalbox(), old_keyfile_warning(), ...) just * don't support this, and I want to avoid changing the interfaces as much as * possible. To access a static variable, use * statics()->variable * instead of * variable * The statics() function/macro will be defined in the platform-specific * headers. * -- Petteri*/typedef struct statics_tag{ void *frontend; /* frontend for fatalbox() and friends. */ void *random_pool; /* random number generation pool */ int random_active; /* has random pool been initialized? */ /* Old GLOBALs, see below */ int flags; int default_protocol; int default_port; int (*ssh_get_line) (const char *prompt, char *str, int maxlen, int is_pw); int ssh_getline_pw_only; void *platform; /* platform-specific bits */} Statics;#ifndef DONE_TYPEDEFS#define DONE_TYPEDEFStypedef struct config_tag Config;typedef struct backend_tag Backend;typedef struct terminal_tag Terminal;#endif#include "puttyps.h"#include "network.h"#include "misc.h"/* Three attribute types: * The ATTRs (normal attributes) are stored with the characters in * the main display arrays * * The TATTRs (temporary attributes) are generated on the fly, they * can overlap with characters but not with normal attributes. * * The LATTRs (line attributes) are an entirely disjoint space of * flags. * * ATTR_INVALID is an illegal colour combination. */#define TATTR_ACTCURS 0x40000000UL /* active cursor (block) */#define TATTR_PASCURS 0x20000000UL /* passive cursor (box) */#define TATTR_RIGHTCURS 0x10000000UL /* cursor-on-RHS */#define TATTR_COMBINING 0x80000000UL /* combining characters */#define LATTR_NORM 0x00000000UL#define LATTR_WIDE 0x00000001UL#define LATTR_TOP 0x00000002UL#define LATTR_BOT 0x00000003UL#define LATTR_MODE 0x00000003UL#define LATTR_WRAPPED 0x00000010UL#define LATTR_WRAPPED2 0x00000020UL#define ATTR_INVALID 0x03FFU/* Like Linux use the F000 page for direct to font. */#define CSET_OEMCP 0x0000F000UL /* OEM Codepage DTF */#define CSET_ACP 0x0000F100UL /* Ansi Codepage DTF *//* These are internal use overlapping with the UTF-16 surrogates */#define CSET_ASCII 0x0000D800UL /* normal ASCII charset ESC ( B */#define CSET_LINEDRW 0x0000D900UL /* line drawing charset ESC ( 0 */#define CSET_SCOACS 0x0000DA00UL /* SCO Alternate charset */#define CSET_GBCHR 0x0000DB00UL /* UK variant charset ESC ( A */#define CSET_MASK 0xFFFFFF00UL /* Character set mask */#define DIRECT_CHAR(c) ((c&0xFFFFFC00)==0xD800)#define DIRECT_FONT(c) ((c&0xFFFFFE00)==0xF000)#define UCSERR (CSET_LINEDRW|'a') /* UCS Format error character. *//* * UCSWIDE is a special value used in the terminal data to signify * the character cell containing the right-hand half of a CJK wide * character. We use 0xDFFF because it's part of the surrogate * range and hence won't be used for anything else (it's impossible * to input it via UTF-8 because our UTF-8 decoder correctly * rejects surrogates). */#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_FGSHIFT 0#define ATTR_BGSHIFT 5#define ATTR_DEFAULT 0x0128U /* bg 9, fg 8 */#define ATTR_DEFFG 0x0008U#define ATTR_DEFBG 0x0120U#define ATTR_CUR_AND (~(ATTR_BOLD|ATTR_REVERSE|ATTR_BLINK|ATTR_COLOURS))#define ATTR_CUR_XOR 0x016AUstruct sesslist { int nsessions; char **sessions; char *buffer; /* so memory can be freed later */};struct unicode_data { char **uni_tbl; int dbcs_screenfont; int font_codepage; int line_codepage; wchar_t unitab_scoacs[256]; wchar_t unitab_line[256]; wchar_t unitab_font[256]; wchar_t unitab_xterm[256]; wchar_t unitab_oemcp[256]; unsigned char unitab_ctrl[256];};#define LGXF_OVR 1 /* existing logfile overwrite */#define LGXF_APN 0 /* existing logfile append */#define LGXF_ASK -1 /* existing logfile ask */#define LGTYP_NONE 0 /* logmode: no logging */#define LGTYP_ASCII 1 /* logmode: pure ascii */#define LGTYP_DEBUG 2 /* logmode: all chars of traffic */#define LGTYP_PACKETS 3 /* logmode: SSH data packets */typedef enum { /* Actual special commands. Originally Telnet, but some codes have * been re-used for similar specials in other protocols. */ 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, /* 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, TS_SIGTERM, TS_SIGUSR1, TS_SIGUSR2, /* Pseudo-specials used for constructing the specials menu. */ TS_SEP, /* Separator */ TS_SUBMENU, /* Start a new submenu with specified name */ TS_EXITMENU /* Exit current submenu or end of specials */} Telnet_Special;struct telnet_special { const char *name; int code;};typedef enum { MBT_NOTHING, MBT_LEFT, MBT_MIDDLE, MBT_RIGHT, /* `raw' button designations */ MBT_SELECT, MBT_EXTEND, MBT_PASTE, /* `cooked' button designations */ MBT_WHEEL_UP, MBT_WHEEL_DOWN /* mouse wheel */} Mouse_Button;typedef enum { MA_NOTHING, MA_CLICK, MA_2CLK, MA_3CLK, MA_DRAG, MA_RELEASE} Mouse_Action;/* Keyboard modifiers -- keys the user is actually holding down */#define PKM_SHIFT 0x01#define PKM_CONTROL 0x02#define PKM_META 0x04#define PKM_ALT 0x08/* Keyboard flags that aren't really modifiers */#define PKF_CAPSLOCK 0x10#define PKF_NUMLOCK 0x20#define PKF_REPEAT 0x40/* Stand-alone keysyms for function keys */typedef enum { PK_NULL, /* No symbol for this key */ /* Main keypad keys */ PK_ESCAPE, PK_TAB, PK_BACKSPACE, PK_RETURN, PK_COMPOSE, /* Editing keys */ PK_HOME, PK_INSERT, PK_DELETE, PK_END, PK_PAGEUP, PK_PAGEDOWN, /* Cursor keys */ PK_UP, PK_DOWN, PK_RIGHT, PK_LEFT, PK_REST, /* Numeric keypad */ /* Real one looks like: */ PK_PF1, PK_PF2, PK_PF3, PK_PF4, /* PF1 PF2 PF3 PF4 */ PK_KPCOMMA, PK_KPMINUS, PK_KPDECIMAL, /* 7 8 9 - */ PK_KP0, PK_KP1, PK_KP2, PK_KP3, PK_KP4, /* 4 5 6 , */ PK_KP5, PK_KP6, PK_KP7, PK_KP8, PK_KP9, /* 1 2 3 en- */ PK_KPBIGPLUS, PK_KPENTER, /* 0 . ter */ /* Top row */ PK_F1, PK_F2, PK_F3, PK_F4, PK_F5, PK_F6, PK_F7, PK_F8, PK_F9, PK_F10, PK_F11, PK_F12, PK_F13, PK_F14, PK_F15, PK_F16, PK_F17, PK_F18, PK_F19, PK_F20, PK_PAUSE} Key_Sym;#define PK_ISEDITING(k) ((k) >= PK_HOME && (k) <= PK_PAGEDOWN)#define PK_ISCURSOR(k) ((k) >= PK_UP && (k) <= PK_REST)#define PK_ISKEYPAD(k) ((k) >= PK_PF1 && (k) <= PK_KPENTER)#define PK_ISFKEY(k) ((k) >= PK_F1 && (k) <= PK_F20)enum { VT_XWINDOWS, VT_OEMANSI, VT_OEMONLY, VT_POORMAN, VT_UNICODE};enum { /* * SSH ciphers (both SSH1 and SSH2) */ CIPHER_WARN, /* pseudo 'cipher' */ CIPHER_3DES, CIPHER_BLOWFISH, CIPHER_AES, /* (SSH 2 only) */ CIPHER_DES, CIPHER_MAX /* no. ciphers (inc warn) */};enum { /* * Several different bits of the PuTTY configuration seem to be * three-way settings whose values are `always yes', `always * no', and `decide by some more complex automated means'. This * is true of line discipline options (local echo and line * editing), proxy DNS, Close On Exit, and SSH server bug * workarounds. Accordingly I supply a single enum here to deal * with them all. */ FORCE_ON, FORCE_OFF, AUTO};enum { /* * Proxy types. */ PROXY_NONE, PROXY_SOCKS4, PROXY_SOCKS5, PROXY_HTTP, PROXY_TELNET, PROXY_CMD};enum { /* * Line discipline options which the backend might try to control. */ LD_EDIT, /* local line editing */ LD_ECHO /* local echo */};enum { /* Protocol back ends. (cfg.protocol) */ PROT_RAW, PROT_TELNET, PROT_RLOGIN, PROT_SSH};enum { /* Bell settings (cfg.beep) */ BELL_DISABLED, BELL_DEFAULT, BELL_VISUAL, BELL_WAVEFILE, BELL_PCSPEAKER};enum { /* Taskbar flashing indication on bell (cfg.beep_ind) */ B_IND_DISABLED, B_IND_FLASH, B_IND_STEADY};enum { /* Resize actions (cfg.resize_action) */ RESIZE_TERM, RESIZE_DISABLED, RESIZE_FONT, RESIZE_EITHER};enum { /* Function key types (cfg.funky_type) */ FUNKY_TILDE, FUNKY_LINUX, FUNKY_XTERM, FUNKY_VT400, FUNKY_VT100P, FUNKY_SCO};struct backend_tag { const char *(*init) (void *frontend_handle, void **backend_handle, Config *cfg, char *host, int port, char **realhost, int nodelay, int keepalive); void (*free) (void *handle); /* back->reconfig() passes in a replacement configuration. */ void (*reconfig) (void *handle, Config *cfg); /* back->send() returns the current amount of buffered data. */ int (*send) (void *handle, char *buf, int len); /* back->sendbuffer() does the same thing but without attempting a send */ int (*sendbuffer) (void *handle); void (*size) (void *handle, int width, int height); void (*special) (void *handle, Telnet_Special code); const struct telnet_special *(*get_specials) (void *handle); Socket(*socket) (void *handle); int (*exitcode) (void *handle); int (*sendok) (void *handle); int (*ldisc) (void *handle, int); void (*provide_ldisc) (void *handle, void *ldisc); void (*provide_logctx) (void *handle, void *logctx); /* * back->unthrottle() tells the back end that the front end * buffer is clearing. */ void (*unthrottle) (void *handle, int); int default_port;};extern const struct backend_list { int protocol; const char *name; const Backend *backend;} backends[];/* * Suggested default protocol provided by the backend link module. * The application is free to ignore this. */extern const int be_default_protocol;/* * Name of this particular application, for use in the config box * and other pieces of text. */extern const char *const appname;/* * IMPORTANT POLICY POINT: everything in this structure which wants * to be treated like an integer must be an actual, honest-to- * goodness `int'. No enum-typed variables. This is because parts * of the code will want to pass around `int *' pointers to them * and we can't run the risk of porting to some system on which the * enum comes out as a different size from int. */struct config_tag { /* Basic options */ char host[512]; int port; int protocol; int close_on_exit; int warn_on_close; int ping_interval; /* in seconds */ int tcp_nodelay; int tcp_keepalives; /* Proxy options */ char proxy_exclude_list[512]; int proxy_dns; int even_proxy_localhost; int proxy_type; char proxy_host[512]; int proxy_port; char proxy_username[128]; char proxy_password[128]; char proxy_telnet_command[512]; /* SSH options */ char remote_cmd[512]; char remote_cmd2[512]; /* fallback if the first fails * (used internally for scp) */ char *remote_cmd_ptr; /* might point to a larger command * but never for loading/saving */ char *remote_cmd_ptr2; /* might point to a larger command * but never for loading/saving */ int nopty; int compression; int agentfwd; int change_username; /* allow username switching in SSH2 */ int ssh_cipherlist[CIPHER_MAX]; Filename keyfile; int sshprot; /* use v1 or v2 when both available */ int ssh2_des_cbc; /* "des-cbc" nonstandard SSH2 cipher */ int try_tis_auth; int try_ki_auth; int ssh_subsys; /* run a subsystem rather than a command */ int ssh_subsys2; /* fallback to go with remote_cmd2 */ int ssh_no_shell; /* avoid running a shell */ /* Telnet options */ char termtype[32]; char termspeed[32]; char environmt[1024]; /* VAR\tvalue\0VAR\tvalue\0\0 */ char username[100]; char localusername[100]; int rfc_environ; int passive_telnet; /* Keyboard options */ int bksp_is_delete; int rxvt_homeend; int funky_type; int no_applic_c; /* totally disable app cursor keys */ int no_applic_k; /* totally disable app keypad */ int no_mouse_rep; /* totally disable mouse reporting */ int no_remote_resize; /* disable remote resizing */ int no_alt_screen; /* disable alternate screen */ int no_remote_wintitle; /* disable remote retitling */ int no_dbackspace; /* disable destructive backspace */ int no_remote_charset; /* disable remote charset config */ int no_remote_qtitle; /* disable remote win title query */ int app_cursor; int app_keypad; int nethack_keypad; int telnet_keyboard; int telnet_newline; int alt_f4; /* is it special? */ int alt_space; /* is it special? */ int alt_only; /* is it special? */ int localecho; int localedit; int alwaysontop; int fullscreenonaltenter; int scroll_on_key; int scroll_on_disp; int erase_to_scrollback; int compose_key; int ctrlaltkeys; char wintitle[256]; /* initial window title */ /* Terminal options */ int savelines; int dec_om; int wrap_mode; int lfhascr; int cursor_type; /* 0=block 1=underline 2=vertical */ int blink_cur; int beep; int beep_ind; int bellovl; /* bell overload protection active? */ int bellovl_n; /* number of bells to cause overload */ int bellovl_t; /* time interval for overload (seconds) */ int bellovl_s; /* period of silence to re-enable bell (s) */ Filename bell_wavefile; int scrollbar; int scrollbar_in_fullscreen; int resize_action; int bce; int blinktext; int win_name_always; int width, height; FontSpec font; Filename logfilename; int logtype;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -