Re-arrange the sums in the size tip code so as to ensure that we're always do
[u/mdw/putty] / mac / mac.c
index 54ed35c..c86f6d9 100644 (file)
--- a/mac/mac.c
+++ b/mac/mac.c
@@ -1,4 +1,4 @@
-/* $Id: mac.c,v 1.9 2002/12/29 19:14:56 ben Exp $ */
+/* $Id: mac.c,v 1.16 2003/01/04 00:31:04 ben Exp $ */
 /*
  * Copyright (c) 1999 Ben Harris
  * All rights reserved.
@@ -40,6 +40,7 @@
 #include <Devices.h>
 #include <DiskInit.h>
 #include <Gestalt.h>
+#include <LowMem.h>
 #include <Resources.h>
 #include <Script.h>
 #include <TextCommon.h>
@@ -122,9 +123,8 @@ static void mac_startup(void) {
     
     /* Get base system version (only used if there's no better selector) */
     if (Gestalt(gestaltSystemVersion, &mac_gestalts.sysvers) != noErr ||
-       (mac_gestalts.sysvers & 0xffff) < 0x700)
+       (mac_gestalts.sysvers &= 0xffff) < 0x700)
        fatalbox("PuTTY requires System 7 or newer");
-    mac_gestalts.sysvers &= 0xffff;
     /* Find out if we've got Color Quickdraw */
     if (Gestalt(gestaltQuickdrawVersion, &mac_gestalts.qdvers) != noErr)
        mac_gestalts.qdvers = gestaltOriginalQD;
@@ -139,12 +139,19 @@ static void mac_startup(void) {
     if (&RegisterAppearanceClient == kUnresolvedCFragSymbolAddress)
        mac_gestalts.apprvers = 0;
 #endif
+#if TARGET_CPU_68K
+    mac_gestalts.cntlattr = 0;
+    mac_gestalts.windattr = 0;
+#else
     /* Mac OS 8.5 Control Manager (proportional scrollbars)? */
-    if (Gestalt(gestaltControlMgrAttr, &mac_gestalts.cntlattr) != noErr)
+    if (Gestalt(gestaltControlMgrAttr, &mac_gestalts.cntlattr) != noErr ||
+       &SetControlViewSize == kUnresolvedCFragSymbolAddress)
        mac_gestalts.cntlattr = 0;
     /* Mac OS 8.5 Window Manager? */
-    if (Gestalt(gestaltWindowMgrAttr, &mac_gestalts.windattr) != noErr)
+    if (Gestalt(gestaltWindowMgrAttr, &mac_gestalts.windattr) != noErr ||
+       &SetWindowContentColor == kUnresolvedCFragSymbolAddress)
        mac_gestalts.windattr = 0;
+#endif
     /* Text Encoding Conversion Manager? */
     if (
 #if TARGET_RT_MAC_CFM
@@ -156,6 +163,7 @@ static void mac_startup(void) {
        mac_gestalts.encvvers = 0;
     else {
        mac_gestalts.encvvers = (*ti)->tecVersion;
+       mac_gestalts.uncvattr = (*ti)->tecUnicodeConverterFeatures;
        DisposeHandle((Handle)ti);
     }
 
@@ -174,6 +182,17 @@ static void mac_startup(void) {
     windows.about = NULL;
     windows.licence = NULL;
 
+    {
+       short vol;
+       long dirid;
+
+       /* Set the default directory for loading and saving settings. */
+       /* XXX Should we create it? */
+       if (get_session_dir(FALSE, &vol, &dirid) == noErr) {
+           LMSetSFSaveDisk(-vol);
+           LMSetCurDirStore(dirid);
+       }
+    }
     init_ucs();
 }
 
@@ -261,13 +280,16 @@ static void mac_contentclick(WindowPtr window, EventRecord *event) {
        mac_clickterm(window, event);
        break;
       case wAbout:
-       if (DialogSelect(event, &(DialogPtr)window, &item))
+       if (DialogSelect(event, &window, &item))
            switch (item) {
              case wiAboutLicence:
                mac_openlicence();
                break;
            }
        break;
+      case wSettings:
+       mac_clickdlg(window, event);
+       break;
     }
 }
 
@@ -288,6 +310,9 @@ static void mac_activatewindow(WindowPtr window, EventRecord *event) {
       case wTerminal:
        mac_activateterm(window, active);
        break;
+      case wSettings:
+       mac_activatedlg(window, event);
+       break;
       case wAbout:
        mac_activateabout(window, event);
        break;
@@ -314,6 +339,7 @@ static void mac_updatewindow(WindowPtr window) {
        mac_updateterm(window);
        break;
       case wAbout:
+      case wSettings:
        BeginUpdate(window);
        UpdateDialog(window, window->visRgn);
        EndUpdate(window);
@@ -351,6 +377,7 @@ static void mac_updatelicence(WindowPtr window)
  */
 static int mac_windowtype(WindowPtr window) {
     int kind;
+    long refcon;
 
     if (window == NULL)
        return wNone;
@@ -359,7 +386,11 @@ static int mac_windowtype(WindowPtr window) {
        return wDA;
     if (GetWVariant(window) == zoomDocProc)
        return wTerminal;
-    return GetWRefCon(window);
+    refcon = GetWRefCon(window);
+    if (refcon < 1024)
+       return refcon;
+    else
+       return wSettings;
 }
 
 /*
@@ -413,6 +444,9 @@ static void mac_menucommand(long result) {
           case iNew:
             mac_newsession();
             goto done;
+         case iOpen:
+           mac_opensession();
+           goto done;
           case iClose:
             mac_closewindow(window);
             goto done;