Extensive changes that _should_ fix the socket buffering problems,
[u/mdw/putty] / settings.c
index 27ab59f..6f7ea9c 100644 (file)
@@ -86,6 +86,7 @@ void save_settings(char *section, int do_host, Config * cfg)
     write_setting_s(sesskey, "PublicKeyFile", cfg->keyfile);
     write_setting_s(sesskey, "RemoteCommand", cfg->remote_cmd);
     write_setting_i(sesskey, "RFCEnviron", cfg->rfc_environ);
+    write_setting_i(sesskey, "PassiveTelnet", cfg->passive_telnet);
     write_setting_i(sesskey, "BackspaceIsDelete", cfg->bksp_is_delete);
     write_setting_i(sesskey, "RXVTHomeEnd", cfg->rxvt_homeend);
     write_setting_i(sesskey, "LinuxFunctionKeys", cfg->funky_type);
@@ -99,6 +100,7 @@ void save_settings(char *section, int do_host, Config * cfg)
     write_setting_i(sesskey, "AltOnly", cfg->alt_only);
     write_setting_i(sesskey, "ComposeKey", cfg->compose_key);
     write_setting_i(sesskey, "CtrlAltKeys", cfg->ctrlaltkeys);
+    write_setting_i(sesskey, "TelnetKey", cfg->telnet_keyboard);
     write_setting_i(sesskey, "LocalEcho", cfg->localecho);
     write_setting_i(sesskey, "LocalEdit", cfg->localedit);
     write_setting_s(sesskey, "Answerback", cfg->answerback);
@@ -108,6 +110,7 @@ void save_settings(char *section, int do_host, Config * cfg)
     write_setting_i(sesskey, "CurType", cfg->cursor_type);
     write_setting_i(sesskey, "BlinkCur", cfg->blink_cur);
     write_setting_i(sesskey, "Beep", cfg->beep);
+    write_setting_i(sesskey, "BeepInd", cfg->beep_ind);
     write_setting_s(sesskey, "BellWaveFile", cfg->bell_wavefile);
     write_setting_i(sesskey, "BellOverload", cfg->bellovl);
     write_setting_i(sesskey, "BellOverloadN", cfg->bellovl_n);
@@ -148,10 +151,7 @@ void save_settings(char *section, int do_host, Config * cfg)
        }
        write_setting_s(sesskey, buf, buf2);
     }
-    write_setting_i(sesskey, "KoiWinXlat", cfg->xlat_enablekoiwin);
-    write_setting_i(sesskey, "88592Xlat", cfg->xlat_88592w1250);
-    write_setting_i(sesskey, "88592-CP852", cfg->xlat_88592cp852);
-    write_setting_i(sesskey, "CapsLockCyr", cfg->xlat_capslockcyr);
+    write_setting_s(sesskey, "LineCodePage", cfg->line_codepage);
     write_setting_i(sesskey, "ScrollBar", cfg->scrollbar);
     write_setting_i(sesskey, "ScrollOnKey", cfg->scroll_on_key);
     write_setting_i(sesskey, "ScrollOnDisp", cfg->scroll_on_disp);
@@ -160,6 +160,26 @@ void save_settings(char *section, int do_host, Config * cfg)
     write_setting_i(sesskey, "BlinkText", cfg->blinktext);
     write_setting_i(sesskey, "X11Forward", cfg->x11_forward);
     write_setting_s(sesskey, "X11Display", cfg->x11_display);
+    write_setting_i(sesskey, "LocalPortAcceptAll", cfg->lport_acceptall);
+    {
+       char buf[2 * sizeof(cfg->portfwd)], *p, *q;
+       p = buf;
+       q = cfg->portfwd;
+       while (*q) {
+           while (*q) {
+               int c = *q++;
+               if (c == '=' || c == ',' || c == '\\')
+                   *p++ = '\\';
+               if (c == '\t')
+                   c = '=';
+               *p++ = c;
+           }
+           *p++ = ',';
+           q++;
+       }
+       *p = '\0';
+       write_setting_s(sesskey, "PortForwardings", buf);
+    }
 
     close_settings_w(sesskey);
 }
@@ -248,6 +268,7 @@ void load_settings(char *section, int do_host, Config * cfg)
     gpps(sesskey, "RemoteCommand", "", cfg->remote_cmd,
         sizeof(cfg->remote_cmd));
     gppi(sesskey, "RFCEnviron", 0, &cfg->rfc_environ);
+    gppi(sesskey, "PassiveTelnet", 0, &cfg->passive_telnet);
     gppi(sesskey, "BackspaceIsDelete", 1, &cfg->bksp_is_delete);
     gppi(sesskey, "RXVTHomeEnd", 0, &cfg->rxvt_homeend);
     gppi(sesskey, "LinuxFunctionKeys", 0, &cfg->funky_type);
@@ -261,6 +282,7 @@ void load_settings(char *section, int do_host, Config * cfg)
     gppi(sesskey, "AltOnly", 0, &cfg->alt_only);
     gppi(sesskey, "ComposeKey", 0, &cfg->compose_key);
     gppi(sesskey, "CtrlAltKeys", 1, &cfg->ctrlaltkeys);
+    gppi(sesskey, "TelnetKey", 0, &cfg->telnet_keyboard);
     gppi(sesskey, "LocalEcho", LD_BACKEND, &cfg->localecho);
     gppi(sesskey, "LocalEdit", LD_BACKEND, &cfg->localedit);
     gpps(sesskey, "Answerback", "PuTTY", cfg->answerback,
@@ -270,7 +292,9 @@ void load_settings(char *section, int do_host, Config * cfg)
     gppi(sesskey, "SunkenEdge", 0, &cfg->sunken_edge);
     gppi(sesskey, "CurType", 0, &cfg->cursor_type);
     gppi(sesskey, "BlinkCur", 0, &cfg->blink_cur);
-    gppi(sesskey, "Beep", 1, &cfg->beep);
+    /* pedantic compiler tells me I can't use &cfg->beep as an int * :-) */
+    gppi(sesskey, "Beep", 1, &i); cfg->beep = i;
+    gppi(sesskey, "BeepInd", 0, &i); cfg->beep_ind = i;
     gpps(sesskey, "BellWaveFile", "", cfg->bell_wavefile,
         sizeof(cfg->bell_wavefile));
     gppi(sesskey, "BellOverload", 1, &cfg->bellovl);
@@ -349,10 +373,8 @@ void load_settings(char *section, int do_host, Config * cfg)
            cfg->wordness[j] = atoi(q);
        }
     }
-    gppi(sesskey, "KoiWinXlat", 0, &cfg->xlat_enablekoiwin);
-    gppi(sesskey, "88592Xlat", 0, &cfg->xlat_88592w1250);
-    gppi(sesskey, "88592-CP852", 0, &cfg->xlat_88592cp852);
-    gppi(sesskey, "CapsLockCyr", 0, &cfg->xlat_capslockcyr);
+    gpps(sesskey, "LineCodePage", "ISO-8859-1:1987", cfg->line_codepage,
+        sizeof(cfg->line_codepage));
     gppi(sesskey, "ScrollBar", 1, &cfg->scrollbar);
     gppi(sesskey, "ScrollOnKey", 0, &cfg->scroll_on_key);
     gppi(sesskey, "ScrollOnDisp", 1, &cfg->scroll_on_disp);
@@ -363,6 +385,28 @@ void load_settings(char *section, int do_host, Config * cfg)
     gpps(sesskey, "X11Display", "localhost:0", cfg->x11_display,
         sizeof(cfg->x11_display));
 
+    gppi(sesskey, "LocalPortAcceptAll", 0, &cfg->lport_acceptall);
+    {
+       char buf[2 * sizeof(cfg->portfwd)], *p, *q;
+       gpps(sesskey, "PortForwardings", "", buf, sizeof(buf));
+       p = buf;
+       q = cfg->portfwd;
+       while (*p) {
+           while (*p && *p != ',') {
+               int c = *p++;
+               if (c == '=')
+                   c = '\t';
+               if (c == '\\')
+                   c = *p++;
+               *q++ = c;
+           }
+           if (*p == ',')
+               p++;
+           *q++ = '\0';
+       }
+       *q = '\0';
+    }
+
     close_settings_r(sesskey);
 }