<MacTypes.h> says we should use NULL rather than nil in C, so do that.
[u/mdw/putty] / mac / mac.c
index 779792f..b3df483 100644 (file)
--- a/mac/mac.c
+++ b/mac/mac.c
@@ -1,4 +1,4 @@
-/* $Id: mac.c,v 1.7 2002/12/13 00:02:48 ben Exp $ */
+/* $Id: mac.c,v 1.17 2003/01/04 12:45:11 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>
@@ -117,14 +118,13 @@ static void mac_startup(void) {
     /* Init TextEdit */
     TEInit();
     /* Init Dialog Manager */
-    InitDialogs(nil);
+    InitDialogs(NULL);
     cold = 0;
     
     /* 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;
@@ -456,11 +490,6 @@ static void mac_openabout(void) {
 }
 
 static void mac_openlicence(void) {
-    DialogItemType itemtype;
-    Handle item;
-    VersRecHndl vers;
-    Rect box;
-    StringPtr longvers;
 
     if (windows.licence)
        SelectWindow(windows.licence);
@@ -564,8 +593,10 @@ static void mac_adjustcursor(RgnHandle cursrgn) {
 
 static void mac_shutdown(void) {
 
+#if !TARGET_RT_MAC_CFM
     if (mac_gestalts.encvvers != 0)
        TerminateUnicodeConverter();
+#endif
     exit(0);
 }
 
@@ -578,7 +609,7 @@ void fatalbox(char *fmt, ...) {
     stuff[0] = vsprintf((char *)(&stuff[1]), fmt, ap);
     va_end(ap);
     ParamText(stuff, NULL, NULL, NULL);
-    StopAlert(128, nil);
+    StopAlert(128, NULL);
     exit(1);
 }
 
@@ -591,7 +622,7 @@ void modalfatalbox(char *fmt, ...) {
     stuff[0] = vsprintf((char *)(&stuff[1]), fmt, ap);
     va_end(ap);
     ParamText(stuff, NULL, NULL, NULL);
-    StopAlert(128, nil);
+    StopAlert(128, NULL);
     exit(1);
 }