X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/fc34fbaf1d5e2c6ae187d0ece84e03a6c444c63c..06c24bc0efd10e5d329d871be9112fb6ae0309e0:/mac/mac.c diff --git a/mac/mac.c b/mac/mac.c index 34a1d2b7..78e2803c 100644 --- 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 #include #include +#include #include #include #include @@ -62,10 +63,6 @@ #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"