X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/5dbc118e6d2e83481e97aee93c6fdb6a7224c9be..2dc6356a02ebe2e5c0428cefc18e64882d85b4a6:/mac/mac.c?ds=sidebyside diff --git a/mac/mac.c b/mac/mac.c index 9e53c630..89cbc1d7 100644 --- a/mac/mac.c +++ b/mac/mac.c @@ -1,4 +1,4 @@ -/* $Id: mac.c,v 1.3 2002/11/23 18:22:47 ben Exp $ */ +/* $Id: mac.c,v 1.12 2002/12/31 01:40:14 ben Exp $ */ /* * Copyright (c) 1999 Ben Harris * All rights reserved. @@ -40,8 +40,12 @@ #include #include #include +#include #include +#include +#include #include +#include #include #include @@ -69,10 +73,12 @@ static void mac_growwindow(WindowPtr, EventRecord *); static void mac_activatewindow(WindowPtr, EventRecord *); static void mac_activateabout(WindowPtr, EventRecord *); static void mac_updatewindow(WindowPtr); +static void mac_updatelicence(WindowPtr); static void mac_keypress(EventRecord *); static int mac_windowtype(WindowPtr); static void mac_menucommand(long); static void mac_openabout(void); +static void mac_openlicence(void); static void mac_adjustcursor(RgnHandle); static void mac_adjustmenus(void); static void mac_closewindow(WindowPtr); @@ -97,6 +103,7 @@ int main (int argc, char **argv) { static void mac_startup(void) { Handle menuBar; + TECInfoHandle ti; /* Init Memory Manager */ MaxApplZone(); @@ -114,6 +121,11 @@ static void mac_startup(void) { InitDialogs(nil); 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) + 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; @@ -134,6 +146,19 @@ static void mac_startup(void) { /* Mac OS 8.5 Window Manager? */ if (Gestalt(gestaltWindowMgrAttr, &mac_gestalts.windattr) != noErr) mac_gestalts.windattr = 0; + /* Text Encoding Conversion Manager? */ + if ( +#if TARGET_RT_MAC_CFM + &TECGetInfo == kUnresolvedCFragSymbolAddress || +#else + InitializeUnicodeConverter(NULL) != noErr || +#endif + TECGetInfo(&ti) != noErr) + mac_gestalts.encvvers = 0; + else { + mac_gestalts.encvvers = (*ti)->tecVersion; + DisposeHandle((Handle)ti); + } /* We've been tested with the Appearance Manager */ if (mac_gestalts.apprvers != 0) @@ -150,6 +175,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(); } @@ -240,10 +276,13 @@ static void mac_contentclick(WindowPtr window, EventRecord *event) { if (DialogSelect(event, &(DialogPtr)window, &item)) switch (item) { case wiAboutLicence: - /* XXX: Do something */ + mac_openlicence(); break; } break; + case wSettings: + mac_clickdlg(window, event); + break; } } @@ -264,6 +303,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; @@ -290,14 +332,36 @@ static void mac_updatewindow(WindowPtr window) { mac_updateterm(window); break; case wAbout: + case wSettings: BeginUpdate(window); UpdateDialog(window, window->visRgn); EndUpdate(window); break; case wLicence: - /* Do something */ - break; + mac_updatelicence(window); + break; + } +} + +static void mac_updatelicence(WindowPtr window) +{ + Handle h; + int len; + long fondsize; + + SetPort(window); + BeginUpdate(window); + fondsize = GetScriptVariable(smRoman, smScriptSmallFondSize); + TextFont(HiWord(fondsize)); + TextSize(LoWord(fondsize)); + h = Get1Resource('TEXT', wLicence); + len = GetResourceSizeOnDisk(h); + if (h != NULL) { + HLock(h); + TETextBox(*h, len, &window->portRect, teFlushDefault); + HUnlock(h); } + EndUpdate(window); } /* @@ -306,6 +370,7 @@ static void mac_updatewindow(WindowPtr window) { */ static int mac_windowtype(WindowPtr window) { int kind; + long refcon; if (window == NULL) return wNone; @@ -314,7 +379,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; } /* @@ -368,6 +437,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; @@ -410,6 +482,16 @@ static void mac_openabout(void) { } } +static void mac_openlicence(void) { + + if (windows.licence) + SelectWindow(windows.licence); + else { + windows.licence = GetNewWindow(wLicence, NULL, (WindowPtr)-1); + ShowWindow(windows.licence); + } +} + static void mac_closewindow(WindowPtr window) { switch (mac_windowtype(window)) { @@ -423,6 +505,10 @@ static void mac_closewindow(WindowPtr window) { windows.about = NULL; CloseWindow(window); break; + case wLicence: + windows.licence = NULL; + CloseWindow(window); + break; default: CloseWindow(window); break; @@ -500,6 +586,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); }