*/
#define UCSWIDE 0xDFFF
-#define ATTR_NARROW 0x20000000UL
-#define ATTR_WIDE 0x10000000UL
-#define ATTR_BOLD 0x01000000UL
-#define ATTR_UNDER 0x02000000UL
-#define ATTR_REVERSE 0x04000000UL
-#define ATTR_BLINK 0x08000000UL
-#define ATTR_FGMASK 0x000F0000UL
-#define ATTR_BGMASK 0x00F00000UL
-#define ATTR_COLOURS 0x00FF0000UL
+#define ATTR_NARROW 0x80000000UL
+#define ATTR_WIDE 0x40000000UL
+#define ATTR_BOLD 0x04000000UL
+#define ATTR_UNDER 0x08000000UL
+#define ATTR_REVERSE 0x10000000UL
+#define ATTR_BLINK 0x20000000UL
+#define ATTR_FGMASK 0x001F0000UL
+#define ATTR_BGMASK 0x03E00000UL
+#define ATTR_COLOURS 0x03FF0000UL
#define ATTR_FGSHIFT 16
-#define ATTR_BGSHIFT 20
+#define ATTR_BGSHIFT 21
-#define ATTR_DEFAULT 0x00980000UL
+#define ATTR_DEFAULT 0x01280000UL
#define ATTR_DEFFG 0x00080000UL
-#define ATTR_DEFBG 0x00900000UL
+#define ATTR_DEFBG 0x01200000UL
#define ERASE_CHAR (ATTR_DEFAULT | ATTR_ASCII | ' ')
#define ATTR_MASK 0xFFFFFF00UL
#define CHAR_MASK 0x000000FFUL
#define ATTR_CUR_AND (~(ATTR_BOLD|ATTR_REVERSE|ATTR_BLINK|ATTR_COLOURS))
-#define ATTR_CUR_XOR 0x00BA0000UL
+#define ATTR_CUR_XOR 0x016A0000UL
struct sesslist {
int nsessions;
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
-} VT_Mode;
+};
enum {
/*
enum {
/*
- * Line discipline option states: off, on, up to the backend.
+ * 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.
*/
- LD_YES, LD_NO, LD_BACKEND
+ FORCE_ON, FORCE_OFF, AUTO
+};
+
+enum {
+ /*
+ * Proxy types.
+ */
+ PROXY_NONE, PROXY_HTTP, PROXY_SOCKS, PROXY_TELNET
};
enum {
};
enum {
- /*
- * Close On Exit behaviours. (cfg.close_on_exit)
- */
- COE_NEVER, /* Never close the window */
- COE_NORMAL, /* Close window on "normal" (non-error) exits only */
- COE_ALWAYS /* Always close the window */
+ /* 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
+};
+
+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 {
*/
extern const int be_default_protocol;
+/*
+ * 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;
- enum { PROT_RAW, PROT_TELNET, PROT_RLOGIN, PROT_SSH } protocol;
+ int protocol;
int close_on_exit;
int warn_on_close;
int ping_interval; /* in seconds */
int tcp_nodelay;
/* Proxy options */
char proxy_exclude_list[512];
- enum { PROXYDNS_NO, PROXYDNS_AUTO, PROXYDNS_YES } proxy_dns;
+ int proxy_dns;
int even_proxy_localhost;
- enum { PROXY_NONE, PROXY_HTTP, PROXY_SOCKS, PROXY_TELNET } proxy_type;
+ int proxy_type;
char proxy_host[512];
int proxy_port;
char proxy_username[32];
int lfhascr;
int cursor_type; /* 0=block 1=underline 2=vertical */
int blink_cur;
- enum {
- BELL_DISABLED, BELL_DEFAULT, BELL_VISUAL, BELL_WAVEFILE
- } beep;
- enum {
- B_IND_DISABLED, B_IND_FLASH, B_IND_STEADY
- } beep_ind;
+ 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) */
char bell_wavefile[FILENAME_MAX];
int scrollbar;
int scrollbar_in_fullscreen;
- enum { RESIZE_TERM, RESIZE_DISABLED, RESIZE_FONT, RESIZE_EITHER } resize_action;
+ int resize_action;
int bce;
int blinktext;
int win_name_always;
int mouse_override;
short wordness[256];
/* translations */
- VT_Mode vtmode;
+ int vtmode;
char line_codepage[128];
int xlat_capslockcyr;
/* X11 forwarding */
int rport_acceptall; /* same for remote forwarded ports (SSH2 only) */
char portfwd[1024]; /* [LR]localport\thost:port\000[LR]localport\thost:port\000\000 */
/* SSH bug compatibility modes */
- enum {
- BUG_AUTO, BUG_OFF, BUG_ON
- } sshbug_ignore1, sshbug_plainpw1, sshbug_rsa1,
+ int sshbug_ignore1, sshbug_plainpw1, sshbug_rsa1,
sshbug_hmac2, sshbug_derivekey2, sshbug_rsapad2,
sshbug_dhgex2;
/* Options for pterm. Should split out into platform-dependent part. */
void get_clip(void *frontend, wchar_t **, int *);
void optimised_move(void *frontend, int, int, int);
void set_raw_mouse_mode(void *frontend, int);
-Mouse_Button translate_button(void *frontend, Mouse_Button b);
void connection_fatal(void *frontend, char *, ...);
void fatalbox(char *, ...);
void modalfatalbox(char *, ...);
void term_scroll(Terminal *, int, int);
void term_pwron(Terminal *);
void term_clrsb(Terminal *);
-void term_mouse(Terminal *, Mouse_Button, Mouse_Action, int,int,int,int,int);
+void term_mouse(Terminal *, Mouse_Button, Mouse_Button, Mouse_Action,
+ int,int,int,int,int);
+void term_key(Terminal *, Key_Sym, wchar_t *, size_t, unsigned int,
+ unsigned int);
void term_deselect(Terminal *);
void term_update(Terminal *);
void term_invalidate(Terminal *);
*/
extern int console_batch_mode;
int console_get_line(const char *prompt, char *str, int maxlen, int is_pw);
+void console_provide_logctx(void *logctx);
/*
* Exports from printing.c.