`ssh-default': change the /DSSH_DEFAULT flag to a /DTELNET_DEFAULT one
[u/mdw/putty] / putty.h
diff --git a/putty.h b/putty.h
index af9c13e..28320de 100644 (file)
--- a/putty.h
+++ b/putty.h
@@ -51,6 +51,7 @@ typedef struct terminal_tag Terminal;
 #define LATTR_BOT    0x03000000UL
 #define LATTR_MODE   0x03000000UL
 #define LATTR_WRAPPED 0x10000000UL
+#define LATTR_WRAPPED2 0x20000000UL
 
 #define ATTR_INVALID 0x00FF0000UL
 
@@ -69,7 +70,15 @@ typedef struct terminal_tag Terminal;
 #define DIRECT_FONT(c) ((c&0xFE00)==0xF000)
 
 #define UCSERR      (ATTR_LINEDRW|'a') /* UCS Format error character. */
-#define UCSWIDE             0x303F
+/*
+ * 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  0x20000000UL
 #define ATTR_WIDE    0x10000000UL
@@ -99,15 +108,18 @@ struct sesslist {
     char *buffer;                     /* so memory can be freed later */
 };
 
-GLOBAL int dbcs_screenfont;
-GLOBAL int font_codepage;
-GLOBAL int line_codepage;
-GLOBAL wchar_t unitab_scoacs[256];
-GLOBAL wchar_t unitab_line[256];
-GLOBAL wchar_t unitab_font[256];
-GLOBAL wchar_t unitab_xterm[256];
-GLOBAL wchar_t unitab_oemcp[256];
-GLOBAL unsigned char unitab_ctrl[256];
+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 */
@@ -175,8 +187,10 @@ enum {
 };
 
 struct backend_tag {
-    char *(*init) (void *frontend_handle, void **backend_handle,
+    char *(*init) (void *frontend_handle, void **backend_handle, Config *cfg,
                   char *host, int port, char **realhost, int nodelay);
+    /* 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 */
@@ -214,6 +228,8 @@ struct config_tag {
     int tcp_nodelay;
     /* Proxy options */
     char proxy_exclude_list[512];
+    enum { PROXYDNS_NO, PROXYDNS_AUTO, PROXYDNS_YES } proxy_dns;
+    int even_proxy_localhost;
     enum { PROXY_NONE, PROXY_HTTP, PROXY_SOCKS, PROXY_TELNET } proxy_type;
     char proxy_host[512];
     int proxy_port;
@@ -303,7 +319,7 @@ struct config_tag {
     int blinktext;
     int win_name_always;
     int width, height;
-    char font[64];
+    char font[256];
     int fontisbold;
     int fontheight;
     int fontcharset;
@@ -333,6 +349,7 @@ struct config_tag {
     /* X11 forwarding */
     int x11_forward;
     char x11_display[128];
+    int x11_auth;
     /* port forwarding */
     int lport_acceptall; /* accept conns from hosts other than localhost */
     int rport_acceptall; /* same for remote forwarded ports (SSH2 only) */
@@ -347,14 +364,17 @@ struct config_tag {
     int stamp_utmp;
     int login_shell;
     int scrollbar_on_left;
-    char boldfont[64];
+    char boldfont[256];
+    char widefont[256];
+    char wideboldfont[256];
     int shadowboldoffset;
 };
 
 /*
- * You can compile with -DSSH_DEFAULT to have ssh by default.
+ * You can compile with -DTELNET_DEFAULT to have telnet by default
+ * (otherwise SSH is the default).
  */
-#ifndef SSH_DEFAULT
+#ifdef TELNET_DEFAULT
 #define DEFAULT_PROTOCOL PROT_TELNET
 #define DEFAULT_PORT 23
 #else
@@ -393,9 +413,6 @@ GLOBAL int flags;
 GLOBAL int default_protocol;
 GLOBAL int default_port;
 
-/* This variable, OTOH, needs to be made non-global ASAP. FIXME. */
-GLOBAL Config cfg;
-
 struct RSAKey;                        /* be a little careful of scope */
 
 /*
@@ -405,6 +422,9 @@ void request_resize(void *frontend, int, int);
 void do_text(Context, int, int, char *, int, unsigned long, int);
 void do_cursor(Context, int, int, char *, int, unsigned long, int);
 int char_width(Context ctx, int uc);
+#ifdef OPTIMISE_SCROLL
+void do_scroll(void *, int, int, int);
+#endif
 void set_title(void *frontend, char *);
 void set_icon(void *frontend, char *);
 void set_sbar(void *frontend, int, int, int);
@@ -421,6 +441,10 @@ Mouse_Button translate_button(void *frontend, Mouse_Button b);
 void connection_fatal(void *frontend, char *, ...);
 void fatalbox(char *, ...);
 void modalfatalbox(char *, ...);
+#ifdef macintosh
+#pragma noreturn(fatalbox)
+#pragma noreturn(modalfatalbox)
+#endif
 void beep(void *frontend, int);
 void begin_session(void *frontend);
 void sys_cursor(void *frontend, int x, int y);
@@ -456,15 +480,28 @@ void random_destroy_seed(void);
  */
 void save_settings(char *section, int do_host, Config * cfg);
 void load_settings(char *section, int do_host, Config * cfg);
+void load_open_settings(void *sesskey, int do_host, Config *cfg);
 void get_sesslist(struct sesslist *, int allocate);
 void do_defaults(char *, Config *);
 void registry_cleanup(void);
 
 /*
+ * Functions used by settings.c to provide platform-specific
+ * default settings.
+ * 
+ * (The integer one is expected to return `def' if it has no clear
+ * opinion of its own. This is because there's no integer value
+ * which I can reliably set aside to indicate `nil'. The string
+ * function is perfectly all right returning NULL, of course.)
+ */
+char *platform_default_s(const char *name);
+int platform_default_i(const char *name, int def);
+
+/*
  * Exports from terminal.c.
  */
 
-Terminal *term_init(void *frontend);
+Terminal *term_init(Config *, struct unicode_data *, void *);
 void term_size(Terminal *, int, int, int);
 void term_out(Terminal *);
 void term_paint(Terminal *, Context, int, int, int, int, int);
@@ -482,7 +519,7 @@ void term_paste(Terminal *);
 void term_nopaste(Terminal *);
 int term_ldisc(Terminal *, int option);
 void term_copyall(Terminal *);
-void term_reconfig(Terminal *);
+void term_reconfig(Terminal *, Config *);
 void term_seen_key_event(Terminal *); 
 int from_backend(void *, int is_stderr, char *data, int len);
 void term_provide_resize_fn(Terminal *term,
@@ -493,7 +530,8 @@ void term_provide_logctx(Terminal *term, void *logctx);
 /*
  * Exports from logging.c.
  */
-void *log_init(void *frontend);
+void *log_init(void *frontend, Config *cfg);
+void log_reconfig(void *logctx, Config *cfg);
 void logfopen(void *logctx);
 void logfclose(void *logctx);
 void logtraffic(void *logctx, unsigned char c, int logmode);
@@ -541,7 +579,7 @@ extern Backend ssh_backend;
 /*
  * Exports from ldisc.c.
  */
-void *ldisc_create(Terminal *, Backend *, void *, void *);
+void *ldisc_create(Config *, Terminal *, Backend *, void *, void *);
 void ldisc_send(void *handle, char *buf, int len, int interactive);
 
 /*
@@ -577,12 +615,13 @@ extern char ver[];
 #ifndef CP_UTF8
 #define CP_UTF8 65001
 #endif
-void init_ucs(void);
+/* void init_ucs(void); -- this is now in platform-specific headers */
 int is_dbcs_leadbyte(int codepage, char byte);
 int mb_to_wc(int codepage, int flags, char *mbstr, int mblen,
             wchar_t *wcstr, int wclen);
 int wc_to_mb(int codepage, int flags, wchar_t *wcstr, int wclen,
-            char *mbstr, int mblen, char *defchr, int *defused);
+            char *mbstr, int mblen, char *defchr, int *defused,
+            struct unicode_data *ucsdata);
 wchar_t xlat_uskbd2cyrllic(int ch);
 int check_compose(int first, int second);
 int decode_codepage(char *cp_name);
@@ -591,6 +630,12 @@ char *cp_name(int codepage);
 void get_unitab(int codepage, wchar_t * unitab, int ftype);
 
 /*
+ * Exports from wcwidth.c
+ */
+int wcwidth(wchar_t ucs);
+int wcswidth(const wchar_t *pwcs, size_t n);
+
+/*
  * Exports from mscrypto.c
  */
 #ifdef MSCRYPTOAPI
@@ -644,12 +689,23 @@ void printer_finish_job(printer_job *);
  * defined differently in various places and required _by_
  * cmdline.c).
  */
-int cmdline_process_param(char *, char *, int);
-void cmdline_run_saved(void);
+int cmdline_process_param(char *, char *, int, Config *);
+void cmdline_run_saved(Config *);
 extern char *cmdline_password;
 #define TOOLTYPE_FILETRANSFER 1
 extern int cmdline_tooltype;
 
 void cmdline_error(char *, ...);
 
+/*
+ * X11 auth mechanisms we know about.
+ */
+enum {
+    X11_NO_AUTH,
+    X11_MIT,                           /* MIT-MAGIC-COOKIE-1 */
+    X11_XDM,                          /* XDM-AUTHORIZATION-1 */
+    X11_NAUTHS
+};
+extern const char *const x11_authnames[];  /* declared in x11fwd.c */
+
 #endif