Minimal shell of PuTTYgen for Mac. No actual PuTTYgen-specific code there
[sgt/putty] / mac / mac.c
index 34a1d2b..78e2803 100644 (file)
--- a/mac/mac.c
+++ b/mac/mac.c
@@ -1,4 +1,4 @@
-/* $Id: mac.c,v 1.42 2003/02/01 23:42:30 ben Exp $ */
+/* $Id: mac.c,v 1.48 2003/02/12 23:53:15 ben Exp $ */
 /*
  * Copyright (c) 1999 Ben Harris
  * All rights reserved.
@@ -43,6 +43,7 @@
 #include <DiskInit.h>
 #include <Gestalt.h>
 #include <LowMem.h>
+#include <Navigation.h>
 #include <Resources.h>
 #include <Script.h>
 #include <TextCommon.h>
 #include "ssh.h"
 #include "mac.h"
 
-#if !TARGET_API_MAC_CARBON
-QDGlobals qd;
-#endif
-
 Session *sesslist;
 
 static int cold = 1;
@@ -175,6 +172,11 @@ static void mac_startup(void) {
        mac_gestalts.uncvattr = (*ti)->tecUnicodeConverterFeatures;
        DisposeHandle((Handle)ti);
     }
+    /* Navigation Services? */
+    if (NavServicesAvailable())
+       mac_gestalts.navsvers = NavLibraryVersion();
+    else
+       mac_gestalts.navsvers = 0;
 
     sk_init();
 
@@ -348,6 +350,9 @@ static void mac_contentclick(WindowPtr window, EventRecord *event) {
       case wSettings:
        mac_clickdlg(window, event);
        break;
+      case wEventLog:
+       mac_clickeventlog(window, event);
+       break;
     }
 }
 
@@ -356,6 +361,10 @@ static void mac_growwindow(WindowPtr window, EventRecord *event) {
     switch (mac_windowtype(window)) {
       case wTerminal:
        mac_growterm(window, event);
+       break;
+      case wEventLog:
+       mac_groweventlog(window, event);
+       break;
     }
 }
 
@@ -374,6 +383,9 @@ static void mac_activatewindow(WindowPtr window, EventRecord *event) {
       case wAbout:
        mac_activateabout(window, event);
        break;
+      case wEventLog:
+       mac_activateeventlog(window, event);
+       break;
     }
 }
 
@@ -418,6 +430,9 @@ static void mac_updatewindow(WindowPtr window)
       case wLicence:
        mac_updatelicence(window);
        break;
+      case wEventLog:
+       mac_updateeventlog(window);
+       break;
     }
 }
 
@@ -450,24 +465,15 @@ static void mac_updatelicence(WindowPtr window)
 
 /*
  * Work out what kind of window we're dealing with.
- * Concept shamelessly nicked from SurfWriter.
  */
-static int mac_windowtype(WindowPtr window) {
-    int kind;
-    long refcon;
-
-    if (window == NULL)
-       return wNone;
-    kind = GetWindowKind(window);
-    if (kind < 0)
+static int mac_windowtype(WindowPtr window)
+{
+
+#if !TARGET_API_MAC_CARBON
+    if (GetWindowKind(window) < 0)
        return wDA;
-    if (GetWVariant(window) == zoomDocProc)
-       return wTerminal;
-    refcon = GetWRefCon(window);
-    if (refcon < 1024)
-       return refcon;
-    else
-       return wSettings;
+#endif
+    return ((WinInfo *)GetWRefCon(window))->wtype;
 }
 
 /*
@@ -507,19 +513,19 @@ static void mac_menucommand(long result) {
     window = FrontWindow();
     /* Things which do the same whatever window we're in. */
     switch (menu) {
-#if !TARGET_API_MAC_CARBON
       case mApple:
         switch (item) {
           case iAbout:
            mac_openabout();
             goto done;
+#if !TARGET_API_MAC_CARBON
           default:
             GetMenuItemText(GetMenuHandle(mApple), item, da);
             OpenDeskAcc(da);
             goto done;
+#endif
         }
         break;
-#endif
       case mFile:
         switch (item) {
           case iNew:
@@ -562,12 +568,17 @@ static void mac_openabout(void) {
     VersRecHndl vers;
     Rect box;
     StringPtr longvers;
+    WinInfo *wi;
 
     if (windows.about)
        SelectWindow(windows.about);
     else {
        windows.about =
            GetDialogWindow(GetNewDialog(wAbout, NULL, (WindowPtr)-1));
+       wi = smalloc(sizeof(*wi));
+       wi->s = NULL;
+       wi->wtype = wAbout;
+       SetWRefCon(windows.about, (long)wi);
        vers = (VersRecHndl)Get1Resource('vers', 1);
        if (vers != NULL && *vers != NULL) {
            longvers = (*vers)->shortVersion + (*vers)->shortVersion[0] + 1;
@@ -581,11 +592,16 @@ static void mac_openabout(void) {
 }
 
 static void mac_openlicence(void) {
+    WinInfo *wi;
 
     if (windows.licence)
        SelectWindow(windows.licence);
     else {
        windows.licence = GetNewWindow(wLicence, NULL, (WindowPtr)-1);
+       wi = smalloc(sizeof(*wi));
+       wi->s = NULL;
+       wi->wtype = wLicence;
+       SetWRefCon(windows.licence, (long)wi);
        ShowWindow(windows.licence);
     }
 }
@@ -595,7 +611,7 @@ static void mac_closewindow(WindowPtr window) {
     switch (mac_windowtype(window)) {
 #if !TARGET_API_MAC_CARBON
       case wDA:
-       CloseDeskAcc(((WindowPeek)window)->windowKind);
+       CloseDeskAcc(GetWindowKind(window));
        break;
 #endif
       case wTerminal:
@@ -621,7 +637,6 @@ static void mac_zoomwindow(WindowPtr window, short part) {
  * Make the menus look right before the user gets to see them.
  */
 #if TARGET_API_MAC_CARBON
-/* XXX Is this good enough?  What about Carbon on OS 8.1? */
 #define EnableItem EnableMenuItem
 #define DisableItem DisableMenuItem
 #endif
@@ -660,6 +675,8 @@ static void mac_adjustmenus(void) {
        DisableItem(menu, iDuplicate);
        menu = GetMenuHandle(mEdit);
        DisableItem(menu, 0);
+       menu = GetMenuHandle(mWindow);
+       DisableItem(menu, 0); /* Until we get more than 1 item on it. */
        break;
     }
     DrawMenuBar();
@@ -744,32 +761,6 @@ void cleanup_exit(int status)
     exit(status);
 }
 
-void fatalbox(char *fmt, ...) {
-    va_list ap;
-    Str255 stuff;
-    
-    va_start(ap, fmt);
-    /* We'd like stuff to be a Pascal string */
-    stuff[0] = vsprintf((char *)(&stuff[1]), fmt, ap);
-    va_end(ap);
-    ParamText(stuff, NULL, NULL, NULL);
-    StopAlert(128, NULL);
-    cleanup_exit(1);
-}
-
-void modalfatalbox(char *fmt, ...) {
-    va_list ap;
-    Str255 stuff;
-    
-    va_start(ap, fmt);
-    /* We'd like stuff to be a Pascal string */
-    stuff[0] = vsprintf((char *)(&stuff[1]), fmt, ap);
-    va_end(ap);
-    ParamText(stuff, NULL, NULL, NULL);
-    StopAlert(128, NULL);
-    cleanup_exit(1);
-}
-
 /* This should only kill the current session, not the whole application. */
 void connection_fatal(void *fontend, char *fmt, ...) {
     va_list ap;
@@ -877,85 +868,6 @@ void platform_get_x11_auth(char *display, int *proto,
     /* SGT: I have no idea whether Mac X servers need anything here. */
 }
 
-Filename filename_from_str(const char *str)
-{
-    Filename ret;
-    Str255 tmp;
-
-    /* XXX This fails for filenames over 255 characters long. */
-    c2pstrcpy(tmp, str);
-    FSMakeFSSpec(0, 0, tmp, &ret.fss);
-    return ret;
-}
-
-/*
- * Convert a filename to a string for display purposes.
- * See pp 2-44--2-46 of IM:Files
- *
- * XXX static storage considered harmful
- */
-const char *filename_to_str(const Filename *fn)
-{
-    CInfoPBRec pb;
-    Str255 dirname;
-    OSErr err;
-    static char *path = NULL;
-    char *newpath;
-
-    if (path != NULL) sfree(path);
-    path = smalloc(fn->fss.name[0]);
-    p2cstrcpy(path, fn->fss.name);
-    pb.dirInfo.ioNamePtr = dirname;
-    pb.dirInfo.ioVRefNum = fn->fss.vRefNum;
-    pb.dirInfo.ioDrParID = fn->fss.parID;
-    pb.dirInfo.ioFDirIndex = -1;
-    do {
-       pb.dirInfo.ioDrDirID = pb.dirInfo.ioDrParID;
-       err = PBGetCatInfoSync(&pb);
-
-       /* XXX Assume not A/UX */
-       newpath = smalloc(strlen(path) + dirname[0] + 2);
-       p2cstrcpy(newpath, dirname);
-       strcat(newpath, ":");
-       strcat(newpath, path);
-       sfree(path);
-       path = newpath;
-    } while (pb.dirInfo.ioDrDirID != fsRtDirID);
-    return path;
-}
-
-int filename_equal(Filename f1, Filename f2)
-{
-
-    return f1.fss.vRefNum == f2.fss.vRefNum &&
-       f1.fss.parID == f2.fss.parID &&
-       f1.fss.name[0] == f2.fss.name[0] &&
-       memcmp(f1.fss.name + 1, f2.fss.name + 1, f1.fss.name[0]) == 0;
-}
-
-int filename_is_null(Filename fn)
-{
-
-    return fn.fss.vRefNum == 0 && fn.fss.parID == 0 && fn.fss.name[0] == 0;
-}
-
-FILE *f_open(Filename fn, char const *mode)
-{
-    short savevol;
-    long savedir;
-    char tmp[256];
-    FILE *ret;
-
-    HGetVol(NULL, &savevol, &savedir);
-    if (HSetVol(NULL, fn.fss.vRefNum, fn.fss.parID) == noErr) {
-       p2cstrcpy(tmp, fn.fss.name);
-       ret = fopen(tmp, mode);
-    } else
-       ret = NULL;
-    HSetVol(NULL, savevol, savedir);
-    return ret;
-}
-
 /*
  * Local Variables:
  * c-file-style: "simon"