Revamp SSH authentication code so that user interaction is more
[u/mdw/putty] / macosx / osxwin.m
index f0ebee4..ba3a08e 100644 (file)
      * Do so.
      */
     sfree(alert_ctx);
-    if (term)
-       term_free(term);
-    if (logctx)
-       log_free(logctx);
     if (back)
        back->free(backhandle);
     if (ldisc)
        ldisc_free(ldisc);
+    /* ldisc must be freed before term, since ldisc_free expects term
+     * still to be around. */
+    if (logctx)
+       log_free(logctx);
+    if (term)
+       term_free(term);
     [super dealloc];
 }
 
@@ -891,6 +893,13 @@ int from_backend(void *frontend, int is_stderr, const char *data, int len)
     return [win fromBackend:data len:len isStderr:is_stderr];
 }
 
+int get_userpass_input(prompts_t *p, unsigned char *in, int inlen)
+{
+    SessionWindow *win = (SessionWindow *)p->frontend;
+    Terminal *term = [win term];
+    return term_get_userpass_input(term, p, in, inlen);
+}
+
 void frontend_keypress(void *handle)
 {
     /* FIXME */
@@ -911,6 +920,13 @@ void ldisc_update(void *frontend, int echo, int edit)
      */
 }
 
+char *get_ttymode(void *frontend, const char *mode)
+{
+    SessionWindow *win = (SessionWindow *)ctx;
+    Terminal *term = [win term];
+    return term_get_ttymode(term, mode);
+}
+
 void update_specials_menu(void *frontend)
 {
     //SessionWindow *win = (SessionWindow *)frontend;
@@ -977,10 +993,11 @@ void palette_reset(void *frontend)
     for (i = 0; i < NEXTCOLOURS; i++) {
        if (i < 216) {
            int r = i / 36, g = (i / 6) % 6, b = i % 6;
-           [win setColour:i+16 r:r/5.0 g:g/5.0 b:b/5.0];
+           r = r ? r*40+55 : 0; g = g ? b*40+55 : 0; b = b ? b*40+55 : 0;
+           [win setColour:i+16 r:r/255.0 g:g/255.0 b:b/255.0];
        } else {
            int shade = i - 216;
-           float fshade = (shade + 1) / (float)(NEXTCOLOURS - 216 + 1);
+           float fshade = (shade * 10 + 8) / 255.0;
            [win setColour:i+16 r:fshade g:fshade b:fshade];
        }
     }