First stab at the ability to compile puttytel.exe, an SSH-free
[u/mdw/putty] / windlg.c
index 0a8f800..84dfa65 100644 (file)
--- a/windlg.c
+++ b/windlg.c
@@ -116,9 +116,13 @@ static void save_settings (char *section, int do_host) {
     if (do_host) {
        wpps (sesskey, "HostName", cfg.host);
        wppi (sesskey, "PortNumber", cfg.port);
-       wpps (sesskey, "Protocol",
-             cfg.protocol == PROT_SSH ? "ssh" : 
-                 cfg.protocol == PROT_TELNET ? "telnet" : "raw" );
+        p = "raw";
+        for (i = 0; backends[i].backend != NULL; i++)
+            if (backends[i].protocol == cfg.protocol) {
+                p = backends[i].name;
+                break;
+            }
+        wpps (sesskey, "Protocol", p);
     }
     wppi (sesskey, "CloseOnExit", !!cfg.close_on_exit);
     wppi (sesskey, "WarnOnClose", !!cfg.warn_on_close);
@@ -192,6 +196,7 @@ static void save_settings (char *section, int do_host) {
        wpps (sesskey, buf, buf2);
     }
     wppi (sesskey, "KoiWinXlat", cfg.xlat_enablekoiwin);
+    wppi (sesskey, "88592Xlat", cfg.xlat_88592w1250);
     wppi (sesskey, "CapsLockCyr", cfg.xlat_capslockcyr);
 
     RegCloseKey(sesskey);
@@ -234,15 +239,14 @@ static void load_settings (char *section, int do_host) {
 
     gpps (sesskey, "HostName", "", cfg.host, sizeof(cfg.host));
     gppi (sesskey, "PortNumber", default_port, &cfg.port);
+
     gpps (sesskey, "Protocol", "default", prot, 10);
-    if (!strcmp(prot, "ssh"))
-       cfg.protocol = PROT_SSH;
-    else if (!strcmp(prot, "telnet"))
-       cfg.protocol = PROT_TELNET;
-    else if (!strcmp(prot, "raw"))
-       cfg.protocol = PROT_RAW;
-    else
-       cfg.protocol = default_protocol;
+    cfg.protocol = default_protocol;
+    for (i = 0; backends[i].backend != NULL; i++)
+        if (!strcmp(prot, backends[i].name)) {
+            cfg.protocol = backends[i].protocol;
+            break;
+        }
 
     gppi (sesskey, "CloseOnExit", 1, &cfg.close_on_exit);
     gppi (sesskey, "WarnOnClose", 1, &cfg.warn_on_close);
@@ -303,7 +307,7 @@ static void load_settings (char *section, int do_host) {
     gppi (sesskey, "FontIsBold", 0, &cfg.fontisbold);
     gppi (sesskey, "FontCharSet", ANSI_CHARSET, &cfg.fontcharset);
     gppi (sesskey, "FontHeight", 10, &cfg.fontheight);
-    gppi (sesskey, "FontVTMode", VT_POORMAN, &cfg.vtmode);
+    gppi (sesskey, "FontVTMode", VT_POORMAN, (int *)&cfg.vtmode);
     gppi (sesskey, "TryPalette", 0, &cfg.try_palette);
     gppi (sesskey, "BoldAsColour", 1, &cfg.bold_colour);
     for (i=0; i<22; i++) {
@@ -315,10 +319,14 @@ static void load_settings (char *section, int do_host) {
            "85,255,255", "187,187,187", "255,255,255"
        };
        char buf[20], buf2[30];
+       int c0, c1, c2;
        sprintf(buf, "Colour%d", i);
        gpps (sesskey, buf, defaults[i], buf2, sizeof(buf2));
-       sscanf(buf2, "%d,%d,%d", &cfg.colours[i][0],
-              &cfg.colours[i][1], &cfg.colours[i][2]);
+       if(sscanf(buf2, "%d,%d,%d", &c0, &c1, &c2) == 3) {
+           cfg.colours[i][0] = c0;
+           cfg.colours[i][1] = c1;
+           cfg.colours[i][2] = c2;
+       }
     }
     gppi (sesskey, "MouseIsXterm", 0, &cfg.mouse_is_xterm);
     for (i=0; i<256; i+=32) {
@@ -345,6 +353,7 @@ static void load_settings (char *section, int do_host) {
        }
     }
     gppi (sesskey, "KoiWinXlat", 0, &cfg.xlat_enablekoiwin);
+    gppi (sesskey, "88592Xlat", 0, &cfg.xlat_88592w1250);
     gppi (sesskey, "CapsLockCyr", 0, &cfg.xlat_capslockcyr);
 
     RegCloseKey(sesskey);
@@ -1120,7 +1129,7 @@ static int CALLBACK ColourProc (HWND hwnd, UINT msg,
                    i = (i < 3 ? i*2 : i == 3 ? 5 : i*2-2);
                cc.lStructSize = sizeof(cc);
                cc.hwndOwner = hwnd;
-               cc.hInstance = hinst;
+               cc.hInstance = (HWND)hinst;
                cc.lpCustColors = custom;
                cc.rgbResult = RGB (cfg.colours[i][0], cfg.colours[i][1],
                                    cfg.colours[i][2]);
@@ -1151,16 +1160,20 @@ static int CALLBACK LanguageProc (HWND hwnd, UINT msg,
                                  WPARAM wParam, LPARAM lParam) {
     switch (msg) {
       case WM_INITDIALOG:
-       CheckDlgButton (hwnd, IDC6_ENABLEKOIWINXLAT, cfg.xlat_enablekoiwin);
+       CheckRadioButton (hwnd, IDC6_NOXLAT, IDC6_88592WIN1250,
+                         cfg.xlat_88592w1250 ? IDC6_88592WIN1250 :
+                         cfg.xlat_enablekoiwin ? IDC6_KOI8WIN1251 :
+                         IDC6_NOXLAT);
        CheckDlgButton (hwnd, IDC6_CAPSLOCKCYR, cfg.xlat_capslockcyr);
       case WM_COMMAND:
        switch (LOWORD(wParam)) {
-         case IDC6_ENABLEKOIWINXLAT:
-           if (HIWORD(wParam) == BN_CLICKED ||
-               HIWORD(wParam) == BN_DOUBLECLICKED) {
-               cfg.xlat_enablekoiwin =
-                   IsDlgButtonChecked (hwnd, IDC6_ENABLEKOIWINXLAT);
-           }
+         case IDC6_NOXLAT:
+         case IDC6_KOI8WIN1251:
+         case IDC6_88592WIN1250:
+           cfg.xlat_enablekoiwin =
+               IsDlgButtonChecked (hwnd, IDC6_KOI8WIN1251);
+           cfg.xlat_88592w1250 =
+               IsDlgButtonChecked (hwnd, IDC6_88592WIN1250);
            break;
          case IDC6_CAPSLOCKCYR:
            if (HIWORD(wParam) == BN_CLICKED ||
@@ -1423,19 +1436,12 @@ void showabout (HWND hwnd) {
     }
 }
 
-void verify_ssh_host_key(char *host, struct RSAKey *key) {
-    char *keystr, *otherstr, *mungedhost;
+void verify_ssh_host_key(char *host, char *keystr) {
+    char *otherstr, *mungedhost;
     int len;
     HKEY rkey;
 
-    /*
-     * Format the key into a string.
-     */
-    len = rsastr_len(key);
-    keystr = malloc(len);
-    if (!keystr)
-       fatalbox("Out of memory");
-    rsastr_fmt(keystr, key);
+    len = 1 + strlen(keystr);
 
     /*
      * Now read a saved key in from the registry and see what it