sshsha.c and sshmd5.c compile fine on PowerPC now.
[u/mdw/putty] / mac / macterm.c
index 3de1d58..220fa2c 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: macterm.c,v 1.31 2003/01/02 00:33:40 ben Exp $ */
+/* $Id: macterm.c,v 1.35 2003/01/05 11:31:51 ben Exp $ */
 /*
  * Copyright (c) 1999 Simon Tatham
  * Copyright (c) 1999, 2002 Ben Harris
@@ -143,6 +143,7 @@ void mac_opensession(void) {
     StandardFileReply sfr;
     static const OSType sftypes[] = { 'Sess', 0, 0, 0 };
     void *sesshandle;
+    int i;
 
     s = smalloc(sizeof(*s));
     memset(s, 0, sizeof(*s));
@@ -154,7 +155,20 @@ void mac_opensession(void) {
     if (sesshandle == NULL) goto fail;
     load_open_settings(sesshandle, TRUE, &s->cfg);
     close_settings_r(sesshandle);
-    s->back = &loop_backend;
+
+    /*
+     * Select protocol. This is farmed out into a table in a
+     * separate file to enable an ssh-free variant.
+     */
+    s->back = NULL;
+    for (i = 0; backends[i].backend != NULL; i++)
+       if (backends[i].protocol == s->cfg.protocol) {
+           s->back = backends[i].backend;
+           break;
+       }
+    if (s->back == NULL) {
+       fatalbox("Unsupported protocol number found");
+    }
     mac_startsession(s);
     return;
 
@@ -167,6 +181,7 @@ void mac_startsession(Session *s)
 {
     UInt32 starttime;
     char msg[128];
+    char *errmsg;
 
     /* XXX: Own storage management? */
     if (HAVE_COLOR_QD())
@@ -177,10 +192,21 @@ void mac_startsession(Session *s)
     s->scrollbar = GetNewControl(cVScroll, s->window);
     s->term = term_init(&s->cfg, s);
 
+    mac_initfont(s);
+    mac_initpalette(s);
+    if (HAVE_COLOR_QD()) {
+       /* Set to FALSE to not get palette updates in the background. */
+       SetPalette(s->window, s->palette, TRUE); 
+       ActivatePalette(s->window);
+    }
+
     s->logctx = log_init(s);
     term_provide_logctx(s->term, s->logctx);
 
-    s->back->init(s->term, &s->backhandle, "localhost", 23, &s->realhost, 0);
+    errmsg = s->back->init(s->term, &s->backhandle, s->cfg.host, s->cfg.port,
+                 &s->realhost, s->cfg.tcp_nodelay);
+    if (errmsg != NULL)
+       inbuf_putstr(s, errmsg);
     s->back->provide_logctx(s->backhandle, s->logctx);
 
     term_provide_resize_fn(s->term, s->back->size, s->backhandle);
@@ -191,13 +217,6 @@ void mac_startsession(Session *s)
     s->ldisc = ldisc_create(&s->cfg, s->term, s->back, s->backhandle, s);
     ldisc_send(s->ldisc, NULL, 0, 0);/* cause ldisc to notice changes */
 
-    mac_initfont(s);
-    mac_initpalette(s);
-    if (HAVE_COLOR_QD()) {
-       /* Set to FALSE to not get palette updates in the background. */
-       SetPalette(s->window, s->palette, TRUE); 
-       ActivatePalette(s->window);
-    }
     ShowWindow(s->window);
     starttime = TickCount();
     display_resource(s, 'pTST', 128);
@@ -336,7 +355,7 @@ static void mac_adjustwinbg(Session *s) {
 
     if (!HAVE_COLOR_QD())
        return;
-#if TARGET_RT_CFM /* XXX doesn't link (at least for 68k) */
+#if !TARGET_CPU_68K
     if (mac_gestalts.windattr & gestaltWindowMgrPresent)
        SetWindowContentColor(s->window,
                              &(*s->palette)->pmInfo[DEFAULT_BG].ciRGB);
@@ -792,7 +811,7 @@ void request_paste(void *frontend)
 static struct {
     Rect msgrect;
     Point msgorigin;
-    Point startmouse;
+    Point zeromouse;
     Session *s;
     char oldmsg[20];
 } growterm_state;
@@ -810,7 +829,9 @@ void mac_growterm(WindowPtr window, EventRecord *event) {
 
     draghooksave = LMGetDragHook();
     growterm_state.oldmsg[0] = '\0';
-    growterm_state.startmouse = event->where;
+    growterm_state.zeromouse = event->where;
+    growterm_state.zeromouse.h -= s->term->cols * s->font_width;
+    growterm_state.zeromouse.v -= s->term->rows * s->font_height;
     growterm_state.s = s;
     GetPort(&portsave);
     SetPort(s->window);
@@ -851,11 +872,9 @@ static pascal void mac_growtermdraghook(void)
     int newrows, newcols;
     
     GetMouse(&mouse);
-    newrows = (mouse.v - growterm_state.startmouse.v) / s->font_height +
-       s->term->rows;
+    newrows = (mouse.v - growterm_state.zeromouse.v) / s->font_height;
     if (newrows < 1) newrows = 1;
-    newcols = (mouse.h - growterm_state.startmouse.h) / s->font_width +
-       s->term->cols;
+    newcols = (mouse.h - growterm_state.zeromouse.h) / s->font_width;
     if (newcols < 1) newcols = 1;
     sprintf(buf, "%dx%d", newcols, newrows);
     if (strcmp(buf, growterm_state.oldmsg) == 0)
@@ -1180,8 +1199,7 @@ void set_sbar(void *frontend, int total, int start, int page) {
     (*s->scrollbar)->contrlMin = 0;
     (*s->scrollbar)->contrlMax = total - page;
     SetControlValue(s->scrollbar, start);
-#if TARGET_RT_CFM
-    /* XXX: This doesn't link for me. */
+#if !TARGET_CPU_68K
     if (mac_gestalts.cntlattr & gestaltControlMgrPresent)
        SetControlViewSize(s->scrollbar, page);
 #endif
@@ -1491,7 +1509,7 @@ void do_scroll(void *frontend, int topline, int botline, int lines) {
 
 void logevent(void *frontend, char *str) {
 
-    /* XXX Do something */
+    fprintf(stderr, "%s\n", str);
 }
 
 /* Dummy routine, only required in plink. */