-/* $Id: mac.c,v 1.3 2002/11/23 18:22:47 ben Exp $ */
+/* $Id: mac.c,v 1.7 2002/12/13 00:02:48 ben Exp $ */
/*
* Copyright (c) 1999 Ben Harris
* All rights reserved.
#include <DiskInit.h>
#include <Gestalt.h>
#include <Resources.h>
+#include <Script.h>
+#include <TextCommon.h>
#include <ToolUtils.h>
+#include <UnicodeConverter.h>
#include <assert.h>
#include <limits.h>
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);
static void mac_startup(void) {
Handle menuBar;
+ TECInfoHandle ti;
/* Init Memory Manager */
MaxApplZone();
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;
/* 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)
if (DialogSelect(event, &(DialogPtr)window, &item))
switch (item) {
case wiAboutLicence:
- /* XXX: Do something */
+ mac_openlicence();
break;
}
break;
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);
+}
+
/*
* Work out what kind of window we're dealing with.
* Concept shamelessly nicked from SurfWriter.
}
}
+static void mac_openlicence(void) {
+ DialogItemType itemtype;
+ Handle item;
+ VersRecHndl vers;
+ Rect box;
+ StringPtr longvers;
+
+ 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)) {
windows.about = NULL;
CloseWindow(window);
break;
+ case wLicence:
+ windows.licence = NULL;
+ CloseWindow(window);
+ break;
default:
CloseWindow(window);
break;
static void mac_shutdown(void) {
+ if (mac_gestalts.encvvers != 0)
+ TerminateUnicodeConverter();
exit(0);
}