X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/04b0fa02653b8036135a60dddcb35fdc2cd33bbd..37ca32ed18b3e104c1056713f5112b90c6547e89:/mac/mac.c diff --git a/mac/mac.c b/mac/mac.c index ffc3fe05..3a0f065d 100644 --- a/mac/mac.c +++ b/mac/mac.c @@ -1,4 +1,4 @@ -/* $Id: mac.c,v 1.26 2003/01/12 14:45:33 ben Exp $ */ +/* $Id: mac.c,v 1.37 2003/01/25 15:15:40 ben Exp $ */ /* * Copyright (c) 1999 Ben Harris * All rights reserved. @@ -29,6 +29,8 @@ */ #include +#include +#include #include #include #include @@ -65,6 +67,7 @@ QDGlobals qd; Session *sesslist; static int cold = 1; +static int borednow = FALSE; struct mac_gestalts mac_gestalts; static void mac_startup(void); @@ -86,7 +89,6 @@ static void mac_adjustcursor(RgnHandle); static void mac_adjustmenus(void); static void mac_closewindow(WindowPtr); static void mac_zoomwindow(WindowPtr, short); -static void mac_shutdown(void); #pragma noreturn (cleanup_exit) struct mac_windows { @@ -169,21 +171,8 @@ static void mac_startup(void) { mac_gestalts.uncvattr = (*ti)->tecUnicodeConverterFeatures; DisposeHandle((Handle)ti); } - /* OpenTransport? */ - if (Gestalt(gestaltOpenTpt, &mac_gestalts.otptattr) != noErr || - (mac_gestalts.otptattr & gestaltOpenTptTCPPresentMask) == 0 || - ot_init() != noErr) - mac_gestalts.otptattr = 0; - if (mac_gestalts.otptattr == 0) { - /* MacTCP? */ - if (Gestalt(FOUR_CHAR_CODE('mtcp'), &mac_gestalts.mtcpvers) != noErr) - mac_gestalts.mtcpvers = 0; - if (mac_gestalts.mtcpvers > 0) { - if (mactcp_init() != noErr) - mac_gestalts.mtcpvers = 0; - } - } else - mac_gestalts.mtcpvers = 0; + + sk_init(); /* We've been tested with the Appearance Manager */ if (mac_gestalts.apprvers != 0) @@ -200,18 +189,19 @@ static void mac_startup(void) { windows.about = NULL; windows.licence = NULL; - default_protocol = DEFAULT_PROTOCOL; - default_port = DEFAULT_PORT; + default_protocol = be_default_protocol; + /* Find the appropriate default port. */ + { + int i; + default_port = 0; /* illegal */ + for (i = 0; backends[i].backend != NULL; i++) + if (backends[i].protocol == default_protocol) { + default_port = backends[i].backend->default_port; + break; + } + } flags = FLAG_INTERACTIVE; - /* - * Really grotty hack to ensure that anything that looks at the - * global "cfg" variable gets something vaguely sensible. - * Obviously, nothing should actually be using it, but that will - * take a while to arrange. - */ - do_defaults(NULL, &cfg); - { short vol; long dirid; @@ -223,7 +213,16 @@ static void mac_startup(void) { LMSetCurDirStore(dirid); } } - init_ucs(); + + /* Install Apple Event handlers. */ + AEInstallEventHandler(kCoreEventClass, kAEOpenApplication, + NewAEEventHandlerUPP(&mac_aevt_oapp), 0, FALSE); + AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments, + NewAEEventHandlerUPP(&mac_aevt_odoc), 0, FALSE); + AEInstallEventHandler(kCoreEventClass, kAEPrintDocuments, + NewAEEventHandlerUPP(&mac_aevt_pdoc), 0, FALSE); + AEInstallEventHandler(kCoreEventClass, kAEQuitApplication, + NewAEEventHandlerUPP(&mac_aevt_quit), 0, FALSE); } static void mac_eventloop(void) { @@ -238,10 +237,9 @@ static void mac_eventloop(void) { mac_adjustcursor(cursrgn); if (gotevent) mac_event(&event); - if (mac_gestalts.mtcpvers != 0) - mactcp_poll(); - if (mac_gestalts.otptattr != 0) - ot_poll(); + if (borednow) + cleanup_exit(0); + sk_poll(); mac_pollterm(); } DisposeRgn(cursrgn); @@ -304,6 +302,9 @@ static void mac_event(EventRecord *event) { DIBadMount(pt, event->message); } break; + case kHighLevelEvent: + AEProcessAppleEvent(event); /* errors? */ + break; } } @@ -485,6 +486,15 @@ static void mac_menucommand(long result) { case iClose: mac_closewindow(window); goto done; + case iSave: + mac_savesession(); + goto done; + case iSaveAs: + mac_savesessionas(); + goto done; + case iDuplicate: + mac_dupsession(); + goto done; case iQuit: cleanup_exit(0); goto done; @@ -541,18 +551,15 @@ static void mac_closewindow(WindowPtr window) { CloseDeskAcc(((WindowPeek)window)->windowKind); break; case wTerminal: - /* FIXME: end session and stuff */ + mac_closeterm(window); break; case wAbout: windows.about = NULL; - CloseWindow(window); + DisposeDialog(window); break; case wLicence: windows.licence = NULL; - CloseWindow(window); - break; - default: - CloseWindow(window); + DisposeWindow(window); break; } } @@ -584,10 +591,20 @@ static void mac_adjustmenus(void) { EnableItem(menu, iQuit); switch (mac_windowtype(window)) { + case wSettings: + DisableItem(menu, iSave); /* XXX enable if modified */ + EnableItem(menu, iSaveAs); + EnableItem(menu, iDuplicate); + menu = GetMenuHandle(mEdit); + DisableItem(menu, 0); + break; case wTerminal: mac_adjusttermmenus(window); break; default: + DisableItem(menu, iSave); + DisableItem(menu, iSaveAs); + DisableItem(menu, iDuplicate); menu = GetMenuHandle(mEdit); DisableItem(menu, 0); break; @@ -626,6 +643,20 @@ static void mac_adjustcursor(RgnHandle cursrgn) { } } +pascal OSErr mac_aevt_quit(const AppleEvent *req, AppleEvent *reply, + long refcon) +{ + DescType type; + Size size; + + if (AEGetAttributePtr(req, keyMissedKeywordAttr, typeWildCard, + &type, NULL, 0, &size) == noErr) + return errAEParamMissed; + + borednow = 1; + return noErr; +} + void cleanup_exit(int status) { @@ -710,7 +741,7 @@ void old_keyfile_warning(void) } -char *platform_default_s(char *name) +char *platform_default_s(char const *name) { long smfs; Str255 pname; @@ -732,7 +763,7 @@ char *platform_default_s(char *name) return NULL; } -int platform_default_i(char *name, int def) +int platform_default_i(char const *name, int def) { long smfs;